2020-01-13 18:37发布
czzhouyun 发表于 2015-12-23 12:03 间隔20ms那是超时处理,这个显然是modbus协议,只要在读取字长字节时改变整个命令的长度就可以了,光处理超 ...
mailyyg@163.com 发表于 2015-12-23 13:57 设置定时器,串口接收中断重置定时器,定时器溢出中断设置标志位,判断标志位,处理 ...
最多设置5个标签!
对,我根据需要接受命令的长度,控制串口的接收计数器和延时处理,这样既能保证数据的准确性又可以方式死机
差不多吧
{
uchar xdata comm_dat[65]; //串口接收
uchar dat,i;
if(RI)
{
RI=0;
dat=SBUF;
switch (step)
{
case 1:
{
Count=0;
if(dat=='/')step=2;
else step=1;
}
break;
case 2:
{
comm_dat[Count]=dat;
if(comm_dat[Count]==0x0d)step=3;
else step=2; Count++;
if(Count>64){Count=0;step=2;}
}
break;
case 3:
{
for(i=0;i<Count;i++)chs[i]=comm_dat[i];
for(i=0;i<64;i++)comm_dat[i]=0;
read_flag=1; step=0; dat=0;
}
break;
default:{}break;
}
}
if(TI)
{TI = 0;busy = 0;}
}
一周热门 更多>