本发明涉及收发通信,尤其涉及用于单片机的多通道modbus rtu异步收发通信方法。
背景技术:
1、现有的modbus rtu异步通信大多采用“中断”收发,为满足modbus rtu协议要求,需要同时配置定时器对1.5字符间隙和3.5字符间隙进行检测,而且每个字符都需要刷新定时器,增加了单片机mpu的负荷,增加了多层中断嵌套的风险(单片机的中断嵌套能力有限,可以说很低,应用中应尽量避免)。
2、此外,这种方式对单个通道的modbus rtu环境来说,对系统的影响不大,但是对于多通道modbus rtu环境来说,对系统影响较大,经常会发生中断冲突,非常容易导致数据丢失,进而导致收发数据失败。
3、另外,在单片机串口发送数据的过程中,在发送寄存器标志位为空后向发送寄存器写入下一个字节数据时,经常会造成接收方出错,这种现象对不同的通信对象表现不一,有的可以正常通信,有的则完全不能正常通信,而有的则会偶尔出现通信异常,也就是说,现有的单片机串口通信方式存在通信质量不稳定的问题。
技术实现思路
1、本申请实施例提供一种用于单片机的多通道modbus rtu异步收发通信方法,所有modbus rtu通道的异步通信既不使用“等待”方式收发信息,也不使用“中断”方式收发信息,并取消各自的1.5字符定时器中断和3.5字符定时器中断,从而减少了多路modbus rtu频繁中断引起的相互干扰和紊乱,避免了多层中断嵌套,并可以同时完成各通道modbusrtu的1.5字符间隙和3.5字符间隙的监控和数据帧监控,波特率在达到115200bps时仍可正常运行,无数据丢失,通信流畅。
2、本申请实施例提供一种用于单片机的多通道modbus rtu异步收发通信方法,包括发送数据方法和接收数据方法,其中所述发送数据方法包括以下步骤:
3、配置串口为发送态;
4、s1,定时器中断,清定时器中断标志位,然后检测发送完成标志是否置位;
5、s11,若是,则将3.5字符间隙计数器加1,并比较3.5字符间隙计数器是否大于等于3.5字符间隙值,若是,则完成本帧发送,依次退出帧发送模式、清除发送缓存、配置串口为接收态,然后执行中断程序退出定时器中断,若否,则执行中断程序退出定时器中断;
6、s12,若否,则进一步检测字符间隙检测标志位是否置位;
7、s121,若是,则将发送字符间隙计数器加1,然后进一步比较发送字符间隙计数器是否大于等于发送字符间隙值;
8、s1211,若是,则先向发送寄存器写后续字节,并将长度计数器加1,发送字符间隙计数器清零,字符间隙检测标志位清零,然后进一步判断长度计数器是否大于等于帧长度,若大于等于帧长度则将发送完成标志位置位、3.5字符间隙计数器清零、发送字符间隙计数器清零,若小于帧长度则执行中断程序退出定时器中断;
9、s1212,若发送字符间隙计数器小于发送字符间隙值,则执行中断程序退出定时器中断;
10、s122,若否,则检测串口发送寄存器空标志位是否置位,若否则执行中断程序退出定时器中断,若是,则检测长度计数器是否等于0;
11、s1221,若长度计数器等于0,则向发送寄存器写第一字节,同时长度计数器加1,发送字符间隙计数器清零,字符间隙检测标志位置位,然后执行中断程序退出定时器中断;
12、s1222,若长度计数器不等于0,则直接将发送字符间隙计数器清零、字符间隙检测标志位置位,然后执行中断程序退出定时器中断;
13、所述接收数据方法包括以下步骤:
14、配置串口为接收态;
15、s2,定时器中断,清定时器中断标志位,将字符间隙计数器加1,然后判断字符间隙计数器是否大于等于1.5字符间隙值;
16、s21,若否,则进一步检测接收标志位是否置位,若是,则说明接收到有效数据,读取接收寄存器数据,并将接收长度计数器加1,字符间隙计数器清零,然后执行中断程序退出定时器中断,若否,则执行中断程序退出定时器中断;
17、s22,若是,则进一步判断字符间隙计数器是否大于等于3.5字符间隙值,若是,则说明完成本帧接收,依次将接收完成标志位置位、将接收数据有效标志位置位、退出本帧接收,然后执行中断程序退出定时器中断;若否,则在1.5字符间隙和3.5字符间隙之间继续判断接收标志位是否置位,若在1.5字符间隙至3.5字符间隙之间均未检测到接收标志位置位,则执行中断程序退出定时器中断。
18、在一种可能的实现方式中,在步骤s22中,若在1.5字符间隙至3.5字符间隙之间检测到接收标志位置位,则说明接收异常,接收到无效数据,读取接收寄存器数据,并丢弃,然后将接收完成标志位置位,清除接收数据有效标志,退出本帧接收,然后执行中断程序退出定时器中断。
19、在一种可能的实现方式中,在步骤s22中,在完成本帧接收后,先转存接收缓存数组至后备数组,然后再将接收完成标志位置位。
20、在一种可能的实现方式中,所述定时器为us级定时器。
21、在一种可能的实现方式中,所述定时器为40us-50us定时器。
22、在一种可能的实现方式中,所述异步收发通信方法被用于3-8通道modbus rtu异步收发通信。
23、有益效果:与现有技术相比,本申请提供的用于单片机的多通道modbus rtu异步收发通信方法,在单片机中,比如在32位单片机中,只使用一个“主定时器中断”,定时器的每次中断都可以检测各通道的发送寄存标志位是否为空和接收寄存器标志位是否置位(非等待式),并进行相应处理,可以同时完成各通道1.5字符间隙、3.5字符间隙的监控和数据帧监控,在多通道modbus rtu异步通信中,波特率在达到115200bps时仍可以正常运行,无数据丢失,通信流畅;
24、所有modbus rtu通信均不使用“发送中断和接收中断”,也不另外使用定时器来检测1.5字符间隙和3.5字符间隙,系统流程简洁直观,运行可靠,发送数据流波形可靠,可以将复杂的处理工作留在“中断”以外。
25、本发明的这些和其它目的、特点和优势,通过下述的详细说明,得以充分体现。
1.用于单片机的多通道modbus rtu异步收发通信方法,其特征在于,包括发送数据方法和接收数据方法,其中所述发送数据方法包括以下步骤:
2.如权利要求1所述的异步收发通信方法,其特征在于,在步骤s22中,若在1.5字符间隙至3.5字符间隙之间检测到接收标志位置位,则说明接收异常,接收到无效数据,读取接收寄存器数据,并丢弃,然后将接收完成标志位置位,清除接收数据有效标志,退出本帧接收,然后执行中断程序退出定时器中断。
3.如权利要求1所述的异步收发通信方法,其特征在于,在步骤s22中,在完成本帧接收后,先转存接收缓存数组至后备数组,然后再将接收完成标志位置位。
4.如权利要求1所述的异步收发通信方法,其特征在于,所述定时器为us级定时器。
5.如权利要求4所述的异步收发通信方法,其特征在于,所述定时器为40us-50us定时器。
6.如权利要求1所述的异步收发通信方法,其特征在于,所述异步收发通信方法被用于3-8通道modbus rtu异步收发通信。