高级会员

- 积分
- 545
- 金钱
- 545
- 注册时间
- 2018-6-6
- 在线时间
- 96 小时
|

楼主 |
发表于 2018-9-23 21:55:40
|
显示全部楼层
void TIM3_IRQHandler(void)
{
if((TIM3_SR&1)==1)
{
TIM3_SR=0;
if(modbus.timrun!=0) //定时器开始计时
{
modbus.timout++; //每一毫秒加一次(达到4毫秒就认为一帧数据已收到)
if(modbus.timout>=5)//间隔时间达到了时间
{
modbus.timrun=0;//关闭定时器--停止定时
modbus.reflag=1;//收到一帧数据
/* 为什么这里的modbus.reflag一直置不了1*/
}
}
}
}
/*每收到一个字节触发一次中断*/
void USART2_IRQHandler(void)
{
if((UART2_SR&1<<5)!=0)
{
flag=UART2_DR;
if(modbus.reflag==1)//有数据包正在处理
{
return;
}
modbus.rcbuf[modbus.recount++]=flag;
modbus.timout=0;//每收到一个字节,数据断续时间就要清0
if(modbus.recount==1)//收到主机发来的一帧数据的第一字节
{
modbus.timrun=1;//启动定时
}
}
} |
|