提高单片机通讯容错率的系统及其方法技术方案

技术编号:14680993 阅读:155 留言:0更新日期:2017-02-22 14:10
本发明专利技术涉及单片机。本发明专利技术提供一种提高单片机通讯容错率的系统,单片机之间建立UART串口通讯,单片机各自内部设置有间隔定时器,用于产生定时中断并计数,产生一个定时中断,计数变量值增加1,计数变量小于等于预设值T1;当系统检测到串口接收中断信号产生时,判断计数变量值是否大于T2,T2<T1;当计数变量值大于T2,接收缓存数组的下标i置0后,将UART0串口接收寄存器中接收到的数据,存入到数组下标为i的接收缓存数组元素中;计数变量值不大于T2,如果i>=n,将接收缓存数组的下标i置0,再将UART0串口接收寄存器中接收到的数据,存入到数组下标为i的接收缓存数组元素中;i++后将计数变量值清零后,重复检测串口接收终端信号的产生。适用于单片机通讯。

【技术实现步骤摘要】

本专利技术涉及单片机,特别涉及单片机之间的通讯。
技术介绍
现有的常规单片机通讯接收数据方式如,两单片机之间通过UART串口进行通讯,单片机A向单片机B发送一串数据(n个字节),单片机B接收来自单片机A的数据。单片机B接收完一个字节数据后产生一个中断信号,并在中断函数中将接收到的该字节数据保存到接收缓存数组RxBuffer[n]当中,这样单片机B接收完一个字节数据保存一个,接收到的第一个字节数据保存在下标为0的数组元素RxBuffer[0]中,接收到的第二个字节数据保存在下标为1的数组元素RxBuffer[1]中,…,接收到的第n个字节数据保存在下标为n-1的数组元素RxBuffer[n-1]中,直到接收n个字节数据后,当接收到第n+1个字节数据时,将其保存到下标为0的数组元素RxBuffer[0]中,即将接收到的字节数据循环的保存在接收缓存数组RxBuffer[n]当中。在实际应用当中,由于单片机A和单片机B开始通电时间不一致或其它原因,造成单片机A发送数据的时间比单片机B接收的时间早,即单片机A已经在发送数据,但单片机B还没开始接收。这样,当单片机B开始接收时,就会出现以下三种情况:①单片机B从单片机A发送的第一个字节的第一位开始接收;②单片机B从单片机A发送的第X(2到n的数)个字节的第一位开始接收;③单片机B从单片机A发送的第Y(1到n的数)个字节的非第一位开始接收。前三种情况,情况①单片机B接收并保存到接收缓存数组RxBuffer[n]中的数据和单片机A发送的数据一致,通讯正常;情况②和③单片机B接收并保存到接收缓存数组RxBuffer[n]中的数据和单片机A发送的数据不一致,通讯错误,造成整个系统不能正常工作。通过采用本专利技术中的通讯方法,将有效消除情况②和③带来的错误影响,保证整个系统正常工作。
技术实现思路
本专利技术所要解决的技术问题,就是提供一种提高单片机通讯容错率的系统及其方法以实现解决由于各单片机之间通电时间不一致或其它原因,造成单片机通讯接收数据错误的问题。本专利技术解决所述技术问题,采用的技术方案是,提高单片机通讯容错率的系统,包括待通讯的单片机,待通讯的单片机之间建立UART串口通讯,其特征在于,所述待通讯的单片机各自内部设置有间隔定时器;所述间隔定时器,用于产生定时中断并计数,当产生一个定时中断,则计数变量g_cnt1ms值增加1,当计数变量g_cnt1ms到达预设值T1时,即使再产生定时中断,计数变量g_cnt1ms值也不用再增加;当系统检测到串口接收中断信号产生时,判断计数变量g_cnt1ms值是否大于T2,其中,T2<T1;当计数变量g_cnt1ms值大于T2时,系统将接收缓存数组RxBuffer[i]的下标i置0后,将UART0串口接收寄存器中接收到的数据RxData,存入到数组下标为i的接收缓存数组元素RxBuffer[i]中,即RxBuffer[i]=RxData;如果计数变量g_cnt1ms值不大于T2,则判断接收缓存数组的下标i是否大于或等于接收缓存数组元素个数n,如果i>=n,则将接收缓存数组的下标i置0,再将UART0串口接收寄存器中接收到的数据RxData,存入到数组下标为i的接收缓存数组元素RxBuffer[i]中,即RxBuffer[i]=RxData;再将接收缓存数组下标i值增加1,即i++,并将计数变量g_cnt1ms值清零后,重复检测串口接收终端信号的产生。具体的,所述待通讯的单片机至少为两个。进一步的,所述待通讯的单片机之间建立UART串口通讯包括:待通讯的单片机一的UART0串口管脚TXD0与待通讯的单片机二的UART0串口管脚RXD0相连接,待通讯的单片机一的UART0串口管脚RXD0与待通讯的单片机二的UART0串口管脚TXD0相连接。提高单片机通讯容错率的方法,包括以下步骤:步骤1,单片机上电后系统对接收缓存数组RxBuffer[i]、数组下标i、计数变量g_cnt1ms、UART0串口和间隔定时器进行初始化,并启动UART0串口和间隔定时器,其中i≦n,n为缓存数组元素个数;步骤2,系统监测是否有中断信号产生,是则进入步骤3;否则,重复步骤2;步骤3,系统检测中断信号,若中断信号为串口接收中断信号,则进入步骤4;若中断信号为间隔定时中断信号,系统检测计数变量g_cnt1ms值是否小于预设值T1,如果计数变量g_cnt1ms值小于T1,则计数变量g_cnt1ms值增加1,即g_cnt1ms++,重复步骤3;如果计数变量g_cnt1ms值大于或等于T1,则重复步骤2;步骤4,系统判断计数变量g_cnt1ms值是否大于T2,是则系统将接收缓存数组的下标i置0,进入步骤5;否则系统判断接收缓存数组RxBuffer[i]的下标i是否大于或等于数组元素个数n,如果i>=n,则将接收缓存数组的下标i置0,再进入步骤5;步骤5,系统将UART0串口接收寄存器中接收到的数据RxData,存入到数组下标为i的接收缓存数组元素RxBuffer[i]中,即RxBuffer[i]=RxData;然后,将接收缓存数组下标i值增加1,即i++,并将计数变量g_cnt1ms值清零后重复步骤2。本专利技术的有益效果是:单片机之间通讯采用间隔定时器中断计数和UART串口通讯相结合的通讯方式进行通讯,处于接收方的单片机无论是在待接收的通讯数据串(第一串数据)的起始数据、中间数据还是末尾数据,及待接收的通讯数据串(第一串数据)的任意时刻开始接收,都能够保证在接收到以后通讯数据串(第二及以后数据串),使接收并保存到接收缓存数组中的数据和待接收的通讯数据串(第二及以后数据串)保持一致。从而提高了单片机通讯容错率,提高了单片机通讯的可靠性。附图说明图1为本专利技术实施例中单片机A与单片机B通讯连接电路原理图。图2为本专利技术实施例中常规单片机通讯接收数据流程图。图3为本专利技术实施例中本专利技术单片机通讯接收数据流程图。图4为本专利技术实施例中通讯数据波形图。以下结合实施例的具体实施方式,对本专利技术的上述内容再作进一步的详细说明。但不应将此理解为本专利技术上述主题的范围仅限于以下的实例。在不脱离本专利技术上述技术思想情况下,根据本领域普通技术知识和惯用手段做出的各种替换或变更,均应包括在本专利技术的范围内。具体实施方式下面结合附图及实施例详细描述本专利技术的技术方案:本专利技术针对现有技术中由于各单片机之间通电时间不一致或其它原因,造成单片机通讯接收数据错误的问题,提供一种提高单片机通讯容错率的系统,包括待通讯的单片机,待通讯的单片机之间建立UART串口通讯,所述待通讯的单片机各自内部设置有间隔定时器;所述间隔定时器,用于产生定时中断并计数,当产生一个定时中断,则计数变量g_cnt1ms值增加1,当计数变量g_cnt1ms到达预设值T1时,即使再产生定时中断,计数变量g_cnt1ms值也不用再增加;当系统检测到串口接收中断信号产生时,判断计数变量g_cnt1ms值是否大于T2,其中,T2<T1;当计数变量g_cnt1ms值大于T2时,系统将接收缓存数组RxBuffer[i]的下标i置0后,将UART0串口接收寄存器中接收到的数据RxData,存入到数组下标为i的接收缓存数组元素RxBuffer[本文档来自技高网
...
提高单片机通讯容错率的系统及其方法

【技术保护点】
提高单片机通讯容错率的系统,包括待通讯的单片机,待通讯的单片机之间建立UART串口通讯,其特征在于,所述待通讯的单片机各自内部设置有间隔定时器;所述间隔定时器,用于产生定时中断并计数,当产生一个定时中断,则计数变量g_cnt1ms值增加1,当计数变量g_cnt1ms到达预设值T1时,即使再产生定时中断,计数变量g_cnt1ms值也不用再增加;当系统检测到串口接收中断信号产生时,判断计数变量g_cnt1ms值是否大于T2,其中,T2<T1;当计数变量g_cnt1ms值大于T2时,系统将接收缓存数组RxBuffer[i]的下标i置0后,将UART0串口接收寄存器中接收到的数据RxData,存入到数组下标为i的接收缓存数组元素RxBuffer[i]中,即RxBuffer[i]=RxData;如果计数变量g_cnt1ms值不大于T2,则判断接收缓存数组的下标i是否大于或等于接收缓存数组元素个数n,如果i>=n,则将接收缓存数组的下标i置0,再将UART0串口接收寄存器中接收到的数据RxData,存入到数组下标为i的接收缓存数组元素RxBuffer[i]中,即RxBuffer[i]=RxData;再将接收缓存数组下标i值增加1,即i++,并将计数变量g_cnt1ms值清零后,重复检测串口接收终端信号的产生。...

【技术特征摘要】
1.提高单片机通讯容错率的系统,包括待通讯的单片机,待通讯的单片机之间建立UART串口通讯,其特征在于,所述待通讯的单片机各自内部设置有间隔定时器;所述间隔定时器,用于产生定时中断并计数,当产生一个定时中断,则计数变量g_cnt1ms值增加1,当计数变量g_cnt1ms到达预设值T1时,即使再产生定时中断,计数变量g_cnt1ms值也不用再增加;当系统检测到串口接收中断信号产生时,判断计数变量g_cnt1ms值是否大于T2,其中,T2<T1;当计数变量g_cnt1ms值大于T2时,系统将接收缓存数组RxBuffer[i]的下标i置0后,将UART0串口接收寄存器中接收到的数据RxData,存入到数组下标为i的接收缓存数组元素RxBuffer[i]中,即RxBuffer[i]=RxData;如果计数变量g_cnt1ms值不大于T2,则判断接收缓存数组的下标i是否大于或等于接收缓存数组元素个数n,如果i>=n,则将接收缓存数组的下标i置0,再将UART0串口接收寄存器中接收到的数据RxData,存入到数组下标为i的接收缓存数组元素RxBuffer[i]中,即RxBuffer[i]=RxData;再将接收缓存数组下标i值增加1,即i++,并将计数变量g_cnt1ms值清零后,重复检测串口接收终端信号的产生。2.根据权利要求1所述的提高单片机通讯容错率的系统,其特征在于,所述待通讯的单片机至少为两个。3.根据权利要求2所述的提高单片机通讯容错率的系统,其特征在于,所述待通讯的单片机之间建立UART串口通讯包括:待通讯的单片机一的UART0串...

【专利技术属性】
技术研发人员:严刚涂小平刘运中侯宝成赵勇于凤翔夏伟
申请(专利权)人:四川长虹电器股份有限公司
类型:发明
国别省市:四川;51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1