Browse Source

添加了w600 station流程

master
zhangsan 4 years ago
parent
commit
200b189621
  1. 92
      keilp/cc_as_stc02_ps5ws.uvprojx
  2. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xc
  3. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xf
  4. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xm
  5. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xr
  6. BIN
      si4/ps5ws.si4project/soft_ps5ws.siproj
  7. 2
      source/app/app_config.h
  8. 77
      source/app/main.c
  9. 3
      source/app/main.h
  10. 273
      source/app/task_w600.c
  11. 99
      source/app/task_w600.h
  12. 4
      source/bsp/bsp_config.h
  13. 1
      source/bsp/bsp_config_const.h
  14. 15
      source/bsp/w600.c
  15. 17
      source/bsp/w600.h
  16. 146
      source/clib/clib.c
  17. 5
      source/clib/clib.h
  18. 31
      source/msp/UART2.C
  19. 47
      source/tpc/0d0a.c
  20. 33
      source/tpc/0d0a.h
  21. 37
      source/tpc/at0d0a.c
  22. 23
      source/tpc/at0d0a.h

92
keilp/cc_as_stc02_ps5ws.uvprojx

@ -10,6 +10,7 @@
<TargetName>STC8F2K16S2</TargetName>
<ToolsetNumber>0x0</ToolsetNumber>
<ToolsetName>MCS-51</ToolsetName>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>AT80C31X2</Device>
@ -176,12 +177,14 @@
<Mx51P>0</Mx51P>
<hadXRAM2>0</hadXRAM2>
<uocXram2>0</uocXram2>
<hadXRAM3>0</hadXRAM3>
<ModC2>0</ModC2>
<ModH2>0</ModH2>
<Mdu_R515>0</Mdu_R515>
<Mdu_F120>0</Mdu_F120>
<Psoc>0</Psoc>
<hadIROM2>0</hadIROM2>
<hadIROM3>0</hadIROM3>
<ModSmx2>0</ModSmx2>
<cBanks>0</cBanks>
<xBanks>0</xBanks>
@ -251,6 +254,16 @@
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</IROM512>
<XRA513>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA513>
<IROM513>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</IROM513>
</OnChipMemories>
</Target51Misc>
<C51>
@ -327,16 +340,6 @@
<FileType>1</FileType>
<FilePath>..\source\app\main.c</FilePath>
</File>
<File>
<FileName>task_adc.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\task_adc.c</FilePath>
</File>
<File>
<FileName>task_debug.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\task_debug.c</FilePath>
</File>
<File>
<FileName>task_register.c</FileName>
<FileType>1</FileType>
@ -353,19 +356,34 @@
<FilePath>..\source\app\app_config.c</FilePath>
</File>
<File>
<FileName>task_encrypt.c</FileName>
<FileName>task_w600.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\task_encrypt.c</FilePath>
<FilePath>..\source\app\task_w600.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>cpu</GroupName>
<GroupName>bsp</GroupName>
<Files>
<File>
<FileName>STARTUP.A51</FileName>
<FileType>2</FileType>
<FilePath>..\source\cpu\STARTUP.A51</FilePath>
<FileName>bsp_config.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\bsp_config.c</FilePath>
</File>
<File>
<FileName>chipid.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\chipid.c</FilePath>
</File>
<File>
<FileName>rs485.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\rs485.c</FilePath>
</File>
<File>
<FileName>w600.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\w600.c</FilePath>
</File>
</Files>
</Group>
@ -377,11 +395,6 @@
<FileType>1</FileType>
<FilePath>..\source\msp\time.c</FilePath>
</File>
<File>
<FileName>UART0.C</FileName>
<FileType>1</FileType>
<FilePath>..\source\msp\UART0.C</FilePath>
</File>
<File>
<FileName>eeprom.c</FileName>
<FileType>1</FileType>
@ -393,34 +406,24 @@
<FilePath>..\source\msp\uart_x.c</FilePath>
</File>
<File>
<FileName>UART2.C</FileName>
<FileName>uart0.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\msp\UART2.C</FilePath>
<FilePath>..\source\msp\uart0.c</FilePath>
</File>
<File>
<FileName>uart2.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\msp\uart2.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>bsp</GroupName>
<GroupName>cpu</GroupName>
<Files>
<File>
<FileName>bsp_config.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\bsp_config.c</FilePath>
</File>
<File>
<FileName>chipid.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\chipid.c</FilePath>
</File>
<File>
<FileName>cs1232.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\cs1232.c</FilePath>
</File>
<File>
<FileName>rs485.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\rs485.c</FilePath>
<FileName>STARTUP.A51</FileName>
<FileType>2</FileType>
<FilePath>..\source\cpu\STARTUP.A51</FilePath>
</File>
</Files>
</Group>
@ -452,6 +455,11 @@
<FileType>1</FileType>
<FilePath>..\source\tpc\ccmodbus.c</FilePath>
</File>
<File>
<FileName>at0d0a.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\tpc\at0d0a.c</FilePath>
</File>
</Files>
</Group>
<Group>

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xc

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xf

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xm

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xr

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.siproj

Binary file not shown.

2
source/app/app_config.h

@ -70,6 +70,8 @@ extern GlobalRegister R;
//STEP 2 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Global Variables CONFIG
typedef struct global_param
{
//调试模式
U8 debug;
//station模式状态
U8 st_status; //0:none 1:wifi_ok 2:tcp_connect_ok
//station模式sid

77
source/app/main.c

@ -60,18 +60,6 @@ stc5ac32s
cam
************************************************/
//===============================================
//寄存器头文件
@ -82,28 +70,35 @@ stc5ac32s
void L0_main_init(void)
{
Lc_delay_ms(200);
//板卡初始化
L0_board_config();
L0_uart0_buf_init();//串口初始化
L0_uart2_buf_init();//串口初始化
//L0_uart3_buf_init();//串口初始化
EA = 1;
//串口0初始化
L0_uart0_buf_init();
//串口2初始化
L0_uart2_buf_init();
//串口3初始化
//L0_uart3_buf_init();
//Lc_delay_ms(100);
L1_tick_init();
//开启全局中断
EA = 1;
//系统时钟初始化
L0_timer0_Init();
//G初始化
L3_param_init();
//R初始化
L3_reg_init();
//485初始化
L2_485_init();
L0_ADS1213_INIT();
// L3_task_adc_init(0);
// L3_task_adc_init(1);
// L3_task_adc_init(2);
// L3_task_adc_init(3);
L3_task_debug_init();
L3_task_show_init();
//寄存器监听任务初始化
L3_task_reglisten_init();
L0_uart0_sendArray("v2.7",4);
//w600任务初始化
L3_task_gm35_flow_init(W600_ST);
}
//===============================================
@ -113,42 +108,24 @@ void main(void)
{
//初始化
L0_main_init();
//验证加密信息
//L3_encrypt_handler();
//主循环
//L0_timer1_restart();
//打印版本信息
L0_uart0_sendArray("v1.0",4);
while(1)
{
if(1 == s_nos_tick.t1s_heatbeart)
{
s_nos_tick.t1s_heatbeart = 0;
//LED0 ^= 1;
}
//L1_ADS1213_main();
//单路采集滤波
//L3_task_adc_handler(0);
//L3_task_adc_handler(1);
//L3_task_adc_handler(2);
//L3_task_adc_handler(3);
//显示
//L3_task_adc_filter_show(&ts_adc_blur_show);
L2_task_gm35_flow_handle(&s_task_gm35_flow);
//寄存器值监控
//L3_task_reglisten_handle(&s_task_reglisten);
//输出,响应485协议
L3_task_modbus_handler(&s_uart0_rec);
L3_task_modbus_handler2(&s_uart2_rec);
//调试输出
//L3_task_debug(&_s_task_debug);
//L3_task_modbus_handler(&s_uart0_rec);
//L3_task_modbus_handler2(&s_uart2_rec);
}
}
//end main

3
source/app/main.h

@ -53,8 +53,7 @@
#include "../app/task_debug.h"
#include "../app/task_register.h"
#include "../app/task_encrypt.h"
#include "../app/task_w600.h"
//////////////////////////////////////////////////////////////////

273
source/app/task_w600.c

@ -0,0 +1,273 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_test.c.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "task_w600.h"
#include "app_config.h"
#include "../msp/uart0.h"
#include "../msp/uart2.h"
#include "../tpc/at0d0a.h"
struct _s_task_gm35_gprs_ s_task_gm35_flow;
#define LEN_GPRS_TCP_PKG 18
U8 ins_cipsend[30] = "AT+CIPSEND=000\r\n";
U8 * _cipsend_hex(U8 len)
{
U8 pos = Lc_strlen("AT+CIPSEND=");
ins_cipsend[pos++] = len % 1000 / 100 + '0';
ins_cipsend[pos++] = len % 100 / 10 + '0';
ins_cipsend[pos++] = len % 10 / 1 + '0';
return ins_cipsend;
}
void L3_gm35_send_str(U8 *str)
{
L0_uart2_sendstr(str);
if(G.debug)
{
L0_uart0_sendstr(str);
}
}
//将数据放入gm35待发送缓冲区
void L3_gm35_send_data(U8 *buf , U8 len)
{
L3_gm35_send_str(_cipsend_hex(len));
L0_uart2_sendArray(buf,len);
if(G.debug)
{
L0_uart0_sendArray(buf,len);
}
}
void L3_gm35_rcv_data(U8* buf,U8 num)
{
if(G.debug)
{
L0_uart0_sendstr("ATRCV=");
L0_uart0_uchex(num);
L0_uart0_sendArray(buf,num);
}
}
void L3_uart2_exp_protocol(TS_Handle_0d0a *p)
{
if (1 == p->ok )
{
U8 *pPara = p->buf + 1;
s_task_gm35_flow.gprs_last_recv_stmp = s_nos_tick.t_1s;
if(Lc_strStartsWith(pPara,"OK"))
{
s_task_gm35_flow.ins_ok = 1;
}
p->ok = 0;
}
}
//------------------------------------------------------ gm35 tasks --------------------------------
void L3_task_gm35_flow_init(U8 mode)
{
L1_task_init(&s_task_gm35_flow.task);
L3_task_s_go(s_task_gm35_flow,D_task_init);
s_task_gm35_flow.mode = mode;
#if 0
g_at_send_status.send_lock = 0;
g_at_send_status.module_ok = 0;
g_at_send_status.sim_ok = 0;
g_at_send_status.net_ok = 0;
g_at_send_status.gprs_ok = 0;
g_at_send_status.conn_ok = 0;
g_at_send_status.ins_stmp = 0; //每次发送指令时设置
g_at_send_status.heart_stmp = 0; //连接成功时设置
g_at_send_status.data_stmp = 0;
g_at_send_status.sign_flag = 0;
g_at_send_status.ack_flag = 0;
g_at_send_status.gprs_last_recv_stmp = 0; //接收到指令时设置
g_at_send_status.tcp_last_recv_stmp = 0; //连接成功和接收到数据时设置
g_at_send_status.tcp_close_stmp = 0; //重新上电和检测到断开时设置
g_at_send_status.gm35_reboot_times = 0; //连接成功时清0
#endif
}
//------------------------ GM35 Flow Handle -----------------------------------
#define TTSS_TASK_GM35_FLOW_ATEQV 0x01
#define TTSS_TASK_GM35_FLOW_ATEQV_WAIT 0x02
#define TTSS_TASK_GM35_FLOW_ST 0x03
#define TTSS_TASK_GM35_FLOW_ST_WAIT 0x04
#define TTSS_TASK_GM35_FLOW_ST_WIFI 0x05
#define TTSS_TASK_GM35_FLOW_ST_WIFI_WAIT 0x06
#define TTSS_TASK_GM35_FLOW_ST_CIPMUX0 0x07
#define TTSS_TASK_GM35_FLOW_ST_CIPMUX0_WAIT 0x08
#define TTSS_TASK_GM35_FLOW_ST_TCP 0x09
#define TTSS_TASK_GM35_FLOW_ST_TCP_WAIT 0x0A
#define TTSS_TASK_GM35_FLOW_ST_CIPMODE1 0x0B
#define TTSS_TASK_GM35_FLOW_ST_CIPMODE1_WAIT 0x0C
#define TTSS_TASK_GM35_FLOW_ST_CIPSEND 0x0D
#define TTSS_TASK_GM35_FLOW_ST_CIPSEND_WAIT 0x0E
#define TTSS_TASK_GM35_FLOW_ST_DATA 0x0F
#define TTSS_TASK_GM35_FLOW_AP 0x20
#define TTSS_TASK_GM35_FLOW_AP_WAIT 0x21
#define INS_TIMEOUT 2
#define GM35_SEND_DATA_INTERVAL 300
#define GM35_SEND_HEART_INTERVAL 60
#define GM35_SEND_CIPSTATUS_INTERVAL 5
void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s)
{
TTSS_Task_init()
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV,D_Tdelay_10s);//上电等待10s
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ATEQV)
L3_gm35_send_str(AT_INS_ATE0);
s->ins_ok = 0;
s->ins_stmp = s_nos_tick.t_1s;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV_WAIT,D_Tdelay_300ms);
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ATEQV_WAIT)
if(1 == s->ins_ok)
{
if(s->mode == W600_ST)
{
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST,0);
}
else if(s->mode == W600_AP)
{
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP,0);
}
}
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
{
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV,0);
}
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST)
L3_gm35_send_str(AT_INS_ST);
s->ins_ok = 0;
s->ins_stmp = s_nos_tick.t_1s;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WAIT,D_Tdelay_300ms);
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_WAIT)
if(1 == s->ins_ok)
{
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WIFI,0);
}
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
{
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST,0);
}
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_WIFI)
L3_gm35_send_str(AT_INS_ST_WIFI);
s->ins_ok = 0;
s->ins_stmp = s_nos_tick.t_1s;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WIFI_WAIT,D_Tdelay_300ms);
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_WIFI_WAIT)
if(1 == s->ins_ok)
{
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0,0);
}
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
{
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WIFI,0);
}
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMUX0)
L3_gm35_send_str(AT_INS_ST_CIPMUX0);
s->ins_ok = 0;
s->ins_stmp = s_nos_tick.t_1s;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0_WAIT,D_Tdelay_300ms);
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMUX0_WAIT)
if(1 == s->ins_ok)
{
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP,0);
}
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
{
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0,0);
}
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_TCP)
L3_gm35_send_str(AT_INS_ST_TCP);
s->ins_ok = 0;
s->ins_stmp = s_nos_tick.t_1s;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP_WAIT,D_Tdelay_300ms);
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_TCP_WAIT)
if(1 == s->ins_ok)
{
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1,0);
}
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
{
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP,0);
}
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMODE1)
L3_gm35_send_str(AT_INS_ST_CIPMODE1);
s->ins_ok = 0;
s->ins_stmp = s_nos_tick.t_1s;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1_WAIT,D_Tdelay_300ms);
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMODE1_WAIT)
if(1 == s->ins_ok)
{
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPSEND,0);
}
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
{
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1,0);
}
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPSEND)
L3_gm35_send_str(AT_INS_ST_CIPSEND);
s->ins_ok = 0;
s->ins_stmp = s_nos_tick.t_1s;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_DATA,D_Tdelay_300ms);
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_DATA)
L0_uart0_uc('A');
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_DATA,D_Tdelay_5s);
TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP)
L0_uart0_uc('C');
L0_uart2_sendstr("abcdefg");
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WAIT,D_Tdelay_10s);
TTSS_Task_end();
}

99
source/app/task_w600.h

@ -0,0 +1,99 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_gc6133.c.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _app_task_w600_H
#define _app_task_w600_H
#include "../bsp/bsp_config.h"
#include "../bsp/w600.h"
#include "../ctask/task.h"
////<<<<<<<<<<<<<<<<<<< GM35模块 AT操作指令 <<<<<<<<<<<<<<<<<<<<<<<<
#define AT_INS_ATE0 "ATE0\r\n" //模块查询+关闭回显
#define AT_INS_ST "AT+CWMODE=1\r\n" //进入station模式
#define AT_INS_ST_WIFI "AT+CWJAP_DEF=\"ccsens\",\"ccsens123\"\r\n" //网络查询指令
#define AT_INS_ST_CIPMUX0 "AT+CIPMUX=0\r\n" //GPRS操作指令
#define AT_INS_ST_TCP "AT+CIPSTART=\"TCP\",\"192.168.0.79\",4001\r\n" //连接服务器
#define AT_INS_ST_CIPMODE1 "AT+CIPMODE=1\r\n" //发送数据
#define AT_INS_ST_CIPSEND "AT+CIPSEND\r\n" //主动关闭连接
#define AT_INS_ST_CIPMODE0 "AT+CIPMODE=0\r\n" //查询连接状态
////<<<<<<<<<<<<<<<<<<<_s_task_test_<<<<<<<<<<<<<<<<<<<<<<<<
enum _s_w600_mode
{
W600_ST,W600_AP
};
struct _s_task_gm35_gprs_
{
TS_task task;
vU8 ins_ok;
vU8 mode;
vU8 send_lock;
vU8 module_ok;
vU8 sim_ok;
vU8 net_ok;
vU8 gprs_ok;
vU8 conn_ok;
vU8 status_query_ok;
vU32 ins_stmp; //指令时间戳
vU32 gprs_last_recv_stmp; //上次接收指令时间戳
vU32 tcp_last_recv_stmp; //上次接收数据时间戳
vU32 tcp_conn_stmp; //断开连接时间戳
vU32 tcp_close_stmp; //断开连接时间戳
vU32 heart_stmp; //连接成功后,等待发送时间
vU32 data_stmp;//数据发送时间记录
vU8 sign_flag; //发送登录数据标志
vU8 ack_flag;//下行数据ack
vU8 gm35_reboot_times; //gm35重启次数
};
#define STATUS_GM35_INIT 0
#define STATUS_GM35_MODULE_OK 1
#define STATUS_GM35_SIM_OK 2
#define STATUS_GM35_NET_OK 3
#define STATUS_GM35_GPRS_OK 4
#define STATUS_GM35_TCP_OK 5
#define BUF_SIZE 5
#define BUF_MAX 32 //注意缓冲区的长度
extern struct _s_task_gm35_gprs_ s_task_gm35_flow;
extern void L3_task_gm35_flow_init(U8 mode);
extern void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s);
#endif

4
source/bsp/bsp_config.h

@ -51,7 +51,7 @@
//STEP 1 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>TYPE_UASER_BOARD SELECT
#define TYPE_UASER_BOARD TYPE_BOARD_WEIGH_0B
#define TYPE_UASER_BOARD TYPE_BOARD_TOUCH_PEN_0B
//STEP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<YPE_UASER_BOARD SELECT End
@ -59,7 +59,7 @@
//STEP 2 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>TYPE_UASER_BOARD CONFIG
#if(TYPE_UASER_BOARD == TYPE_BOARD_WEIGH_0B)
#if(TYPE_UASER_BOARD == TYPE_BOARD_TOUCH_PEN_0B)
#include <intrins.h>
#include "../cpu/stc_stc8hxx.h"
#include "../cpu/stc_macro.h"

1
source/bsp/bsp_config_const.h

@ -65,6 +65,7 @@
#define TYPE_BOARD_ADDA_MAIN_V02 0xa8 //ADDA
#define TYPE_BOARD_433_0A 0xa9 //433
#define TYPE_BOARD_WEIGH_0B 0xaa //称重
#define TYPE_BOARD_TOUCH_PEN_0B 0xab //点读笔
//<<<<<<<<<<<<<<<<<<<<<<<<<<<.BORAD TYPE end
//>>>>>>>>>>>>>>>>>>>>>>MCU TYPE

15
source/bsp/w600.c

@ -1,5 +1,16 @@
#include "w600.h"
void L1_w600_init(U8 mode)
void L2_w600_init()
{
s->mode = mode;
L2_w600_enable();
}
void L2_w600_enable()
{
//W600_ENABLE();
}
void L2_w600_disable()
{
//W600_DISABLE();
}

17
source/bsp/w600.h

@ -1,2 +1,15 @@
#ifndef __W600_H__
#define __W600_H__
#ifndef BSP_GM35_H
#define BSP_GM35_H
#include "bsp_config.h"
#define W600_VBAT_EN P67
#define W600_DISABLE() W600_VBAT_EN = 0
#define W600_ENABLE() W600_VBAT_EN = 1
extern void L2_w600_init();
extern void L2_w600_enable();
extern void L2_w600_disable();
#endif

146
source/clib/clib.c

@ -14,145 +14,27 @@
#include "clib.h"
#include "../msp/uart0.h"
#include "../msp/time.h"
U8* Lc_strcpy(U8* dst,const char* str)
{
U8 *p = dst;
while(*dst++ = *str++);
return p;
}
#if 0
vU16 us2fun2[5]
={
1, //0
10,// 1
100,// 2
1000,// 3
10000// 4
};
vU32 ul2fun2[10]
={
1, //0
10,// 1
100,// 2
1000,// 3
10000,// 4
100000,
1000000,
10000000,
100000000,
1000000000,//9
};
\n Enter退Backspace\b
\r 使退
\b 退
\n 0x0A
\f
\t
\v
\r 0x0d
//如果追求内存紧张加上const INT32U ul2fun2[10]
void Lc_float2str(float f,U8 *str,U8 point_num);
U8 Lc_strStartsWith(U8 *s1,U8 *s2)
{
S32 i = 0; U32 u32i = 0;
U8 n = 0;U8 m = 0;U8 d = 0;
switch(point_num)
while(*s1 && *s2)
{
case 0:
break;
case 1:
f *= 10.;
break;
case 2:
f *= 100.;
break;
case 3:
f *= 1000.;
break;
default:
break;
};
i = (S32)f;
// Lc_float2str(1.23,&d,2)
// Lc_float2str(0.23,&d,2)
// Lc_float2str(23.4,&d,1)
// Lc_float2str(-12345.236,&d,2)
// 1,1.2 12.3 240 0.12
if(i < 0)
{
str[n] = '-';
n ++;
i *= -1;
}
u32i = (U32)i;
m = 4;
if(u32i >= ul2fun2[m]) u32i = ul2fun2[m] - 1;
for(m = 0;m > 4;m ++)
{// 43210
d = (u32i /ul2fun2[m])%10;
if (d > 0)
str[n] = d;
n ++;
}
if (n == point_num)
if(*s1++ != *s2++)
{
str[n] ='.';
n ++;
return 0;
}
str[n] = i%10
}
void L0_Delay_ms(unsigned int time)
{
unsigned int j;
for(;time > 0;time --)
{
j = D_l0_delay_ms;
while(j--)
;
}
return (*s2 == 0);
}
//22m 50ms --delay ms 100 j=150
void L1_delay_test(void)
{
while(9)
{
L0_Delay_ms(100);
P2 = !P2;
}
}void Lc_delay_us(unsigned int n)
U8* Lc_strcpy(U8* dst,const char* str)
{
// unsigned char j;
for(;n > 0;n --)
{
//j = 2;
// while(j--)
// ;
}65 300
U8 *p = dst;
while(*dst++ = *str++);
return p;
}
#endif
void Lc_delay_us(vU16 i)
{
@ -174,8 +56,6 @@ void Lc_delay_nop(U8 i)
}
// D_1ms_delay_para
///22m 300
/// 22M 100ns 5个100ns 20ns
@ -196,14 +76,12 @@ void Lc_delay_ms(vU16 i)
}
}
void Lc_buf_copy_uc(U8 *d,const U8 *s,U16 num)
void Lc_buf_copy_uc(U8 *dst,U8 *src,U8 len)
{
U16 i;
for(i = 0; i < num; i ++)
while(len--)
{
*(d+i) = *(s+i);
*dst++ = *src++;
}
}
vU8 Lc_U8_media3(vU8 a,vU8 b,vU8 c)

5
source/clib/clib.h

@ -88,8 +88,6 @@ extern void Lc_print_buf(char *dat4,...);
extern void L3_us_big(U16 *d);
extern void L3_ui_big(vU32 *d);
extern void Lc_buf_copy_uc(U8 *d,const U8 *s,U16 num);
///void L2_line_algo_media(U8 *buf,vU16 len);
extern vU8 Lc_U8_media3(vU8 a,vU8 b,vU8 c);
extern vS32 Lc_S32_media3(vS32 a,vS32 b,vS32 c);
@ -112,7 +110,8 @@ extern int Lc_strlen(char *str);
extern U32 Lc_vU32_avg(U32 *d, U8 n);
extern U32 Lc_vS32_media(U32 *d, U8 n);
extern int Lc_memset(U8 *buf,U8 c,U16 len);
extern void Lc_buf_copy_uc(U8 *dst,U8 *src,U8 len);
extern U8 Lc_strStartsWith(U8 *s1,U8 *s2);
#endif /* end __UART_H */

31
source/msp/UART2.C

@ -57,44 +57,30 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
#include "uart2.h"
#include "../app/app_config.h"
#include "../msp/time.h"
#include "../tpc/at0d0a.h"
//#define _USE_485
static volatile Ts_uart_send_buf idata ts_uart_send_shop;
TP_Handler_X s_uart2_rec;
TS_PH4_modbus s_uart2_ack;
struct _s_PC1_0D0A_ s_uart2_at;
void L0_uart2_init(void)
{
//#if(MainFre_11M == D_sys_MainFre) //115200bps@11.0592MHz
// S2CON = 0x50; //8位数据,可变波特率
// AUXR |= 0x04; //定时器2时钟为Fosc,即1T
// T2L = 0xE8; //设定定时初值
// T2H = 0xFF; //设定定时初值
// AUXR |= 0x10; //启动定时器2
//
//#elif (MainFre_22M == D_sys_MainFre) //115200bps@22.1184MHz
// S2CON = 0x50; //8位数据,可变波特率
// AUXR |= 0x04; //定时器2时钟为Fosc,即1T
// T2L = 0xE0; //设定定时初值
// T2H = 0xFE; //设定定时初值
// AUXR |= 0x10; //启动定时器2
//#endif
// S2CON = 0x50; //8位数据,可变波特率
// AUXR |= 0x04; //定时器时钟1T模式
// T2L = 0xE0; //设置定时初始值
// T2H = 0xFE; //设置定时初始值
// AUXR |= 0x10; //定时器2开始计时
S2CON = 0x50; //8位数据,可变波特率
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0xFC; //设置定时初始值
T2H = 0xFF; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
}
void L0_uart2_buf_init(void)
{
s_uart2_at.head = 0;
s_uart2_at.ok = 0;
s_uart2_at.num = 0;
ts_uart[uNum2].p = &ts_uart_send_shop;
ts_uart[uNum2].p->now = 0;
ts_uart[uNum2].p->ok = D_ready;
@ -130,9 +116,10 @@ void INTERRUPT_uart2(void) D_SERVE_uart2// using 2
{
//LED0 ^= 1;
L0_uart2_IntRIClear(); //清除接收中断标志
ts_uart[uNum2].t->reg = L0_uartN_get(uNum2);
//ts_uart[uNum2].t->reg = L0_uartN_get(uNum2);
//ts_uart[uNum2].tp_handler(ts_uart[uNum2].t);
L1_s2b_PH4(ts_uart[uNum2].t);
s_uart2_at.reg = L0_uartN_get(uNum2);
L1_s2b_0d0a(&s_uart2_at);
L0_timer3_restart();
}
if(L0_uart2_IntTI()) //如果是U0发送中断

47
source/tpc/0d0a.c

@ -1,47 +0,0 @@
#include "0d0a.h"
#include "../clib/clib.h"
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//L1_uart_2strbuf(&s_uart0_rec);s_uart0_rec.ok = 2
/// 接收以od oa为结束的标准的assci码的协议 类似 send xx (回车换行)测试时注意以回车换行
/// 为结束标志,也就是发送的数据后面 必须有回车换行 :0x0d 0x0a
//对于连续的多条协议,比如:abcdefg\r\n12345\r\n,如果前一条处理不及时,可能会被后一条覆盖
void L1_s2b_0d0a(struct _tp_handler_x *p) //reentrant
{
if(p->head == 0)
{
p->head = 1;
p->num = 0;
}
if(p->num >= D_tp_handle_x_len)
{
p->num = 0;
}
p->cashe[1] = p->cashe[0];
p->cashe[0] = p->reg;//
p->buf[++p->num] = p->cashe[0];
//p->buf[++p->num] = p->cashe[0];
if ((p->num > 2) && (p->cashe[0] == 0x0a) && (p->cashe[1] == 0x0d))// 0d0a
{
if(1 != p->ok)
{
p->buf[0] = p->num - 2; //去掉0d0a
if(p->sp2 != NULL) //备份缓冲区不为null
{
//byte_copy_uc(p->buf + 1,p->__buf,p->num-2); //经过调试,此处不要调用外部函数,入栈出栈会增加出错风险
for(p->i=0;p->i<p->buf[0]+1;p->i++)
{
p->sp2[p->i] = p->buf[p->i];
}
}
p->ok = 1;//收到 命令结束,必须有个地方清0,否则无法再次接受报文
}
p->head = 0;
}
}

33
source/tpc/0d0a.h

@ -1,33 +0,0 @@
#ifndef TPC_0D0A_H
#define TPC_0D0A_H
#include "tpc_x.h"
///-----------------------------------------------------------------------------------------
//#define D_s_SSTR_0D0A_len 64 //str类的协议需要长度大一些,容易bug的地方,限制为接收64bytes的数据
#if 0
#define FLAG_NONE 0
#define FLAG_DISCARD 1
#define FLAG_CCID 2
#define FLAG_CIP 3
typedef struct _s_PC1_0D0A_
{//8byte
vU8 reg;
// vU8 sub_num; //接收到的数目注意数据长度的范围
vU8 head; //接收标志头标志
vU8 cashe[4];
//vU8 filter1;
//vU8 filter2;
vU8 num; //接收到的数据的计数, 随着数据接收而变化注意数据长度的范围
vU8 ok; //接收协议ok标志
vU8 max; //接收到的数目的最大值
vU8 __buf[D_s_SSTR_0D0A_len+1];//buffer
vU8 buf[D_s_SSTR_0D0A_len+1];//array的第一位是 长度 //协议缓冲
// U8 pro[16]; ///解析协议用
}TS_Handle_0d0a;
#endif
extern void L1_s2b_0d0a(struct _tp_handler_x *p); //reentrant;
#endif

37
source/tpc/at0d0a.c

@ -0,0 +1,37 @@
#include "at0d0a.h"
#include "../clib/clib.h"
void L1_s2b_0d0a(struct _s_PC1_0D0A_ *p)// reentrant
{
if(p->head == 0)
{
p->head = 1;
p->num = 0;
}
if(p->num >= D_s_SSTR_0D0A_len)//128
{
p->num = 0;
}
p->cashe[1] = p->cashe[0];
p->cashe[0] = p->reg;//
p->__buf[p->num++] = p->reg;
if ((p->cashe[0] == 0x0a) && (p->cashe[1] == 0x0d))// 0d0a
{
if((p->num > 2) && (p->__buf[p->num-3] != ':')) //排除掉 +CIPSTATUS(a9):
{
if(1 != p->ok)
{
p->buf[0] = p->num - 2; //去掉0d0a
Lc_buf_copy_uc(p->buf + 1,p->__buf,p->num-2);
p->ok = 1;//收到 命令结束,必须有个地方清0,否则无法再次接受报文
}
}
p->head = 0;
}
}

23
source/tpc/at0d0a.h

@ -0,0 +1,23 @@
#ifndef TPC_AT0D0A_H
#define TPC_AT0D0A_H
#include "tpc_x.h"
///-----------------------------------------------------------------------------------------
#define D_s_SSTR_0D0A_len 128 //str类的协议需要长度大一些,容易bug的地方,限制为接收64bytes的数据
typedef struct _s_PC1_0D0A_
{//8byte
vU8 reg;
vU8 head; //接收标志头标志
vU8 cashe[4];
vU8 num; //接收到的数据的计数, 随着数据接收而变化注意数据长度的范围
vU8 ok; //接收协议ok标志
vU8 max; //接收到的数目的最大值
vU8 __buf[D_s_SSTR_0D0A_len+1];//buffer
vU8 buf[D_s_SSTR_0D0A_len+1];//array的第一位是 长度 //协议缓冲
vU8 setflag; //读取串口过程中设置标志
}TS_Handle_0d0a;
extern void L1_s2b_0d0a(struct _s_PC1_0D0A_ *p);// reentrant;
#endif
Loading…
Cancel
Save