📄 send.c
字号:
#include <AT898252.H>
#define TRUE 1
#define FALSE 0
#define uchar unsigned char
#define uint unsigned int
extern uchar ADH_1;
extern uchar ADL_1;
extern uchar ADH_2;
extern uchar ADL_2;
extern uchar k_stat;
extern uchar mod_buff_tail;
extern uchar mod_buff[16];
sbit LED =P1^6;
extern void mod_data(uchar *p,uchar n);
extern void mod_comd(uchar *str);
/*向上位机发送数据,建立载波并进行正确握手后,开始向上位机发送两个通道数据,
开关量数据及累计和1个字节,共6个字节,发送完成自动拆线挂机*/
void tx(void)
{
uchar i,k,n,ljh=0;
uchar a[1],a2[3];
uchar buf[6]; /*通信缓冲区6个字节*/
unsigned long int x;
WMCON|=WDTRST_; /*喂狗*/
while(mod_buff[0]!=0x32);
mod_buff_tail=0;
LED=0;
/*用于非上位机拨号情况下的通信监控,3S左右没有收到载波则会复位。
回送码: 10(31H30H)代表2400波特
11 (31H31H) 4800
12 (31H32H) 9600
*/
x=500000; /*大约3S左右*/
while((mod_buff[0]!=0x31)&(x!=0))
{
WMCON|=WDTRST_; /*喂狗*/
mod_buff_tail=0;
x--;
}
for(i=0;i<3;i++)
{
for(k=0;k<250;k++)
for(n=0;n<40;n++);
WMCON|=WDTRST_; /*喂狗*/
}
if(mod_buff[1]==0x30&&mod_buff[2]==0x0d)
LED=1; /*建立通信链路,关指示灯*/
WMCON|=WDTRST_; /*喂狗*/
mod_buff_tail=0;
while(!(mod_buff[0]==0xaa)) mod_buff_tail=0;
a[0]=0xaa;
mod_data(a,1);
for(i=0;i<2;i++)
{
WMCON|=WDTRST_; /*喂狗*/
for(k=0;k<150;k++)
for(n=0;n<40;n++);
}
buf[0]=ADH_1;
buf[1]=ADL_1;
buf[2]=ADH_2;
buf[3]=ADL_2;
buf[4]=k_stat;
for(i=0;i<5;i++)
{
ljh=ljh+buf[i];
}
buf[5]=ljh;
mod_data(buf,6);
for(i=0;i<10;i++)
{
WMCON|=WDTRST_; /*喂狗*/
for(k=0;k<250;k++)
for(n=0;n<40;n++);
}
a2[0]='+';
a2[1]='+';
a2[2]='+';
mod_data(a2,3);
for(i=0;i<10;i++)
{
WMCON|=WDTRST_; /*喂狗*/
for(k=0;k<250;k++)
for(n=0;n<40;n++);
}
mod_comd("ATH0");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -