本发明涉及微处理器与微处理器之间的通信方法,尤其是一种微处理器间i/o端口通信方法。
背景技术:
单片机与单片机之间的通信,一般使用片上的通信资源,比如片上的串行口uart,i2c等,但是,经常这些通信资源被其他设备使用,而片上的通用i/o端口经常会有多余。
技术实现要素:
本发明的目的在于克服现有技术中存在的不足,提供一种微处理器间i/o端口通信方法,能够实现微处理器之间基于i/o端口的通信。本发明采用的技术方案是:
一种微处理器间i/o端口通信方法,包括:
发端mcu和收端mcu均使用定时器连续中断,数据发送和接收过程都在定时器中断过程中完成;发端mcu定时器和收端mcu定时器设置相同速率的定时中断;
发端mcu的数据发送过程包括:
1)将数据送到发送区,等待发送;
2)检测发送区是否有数据,如有,则由发端mcu定时器的定时中断过程控制数据发送;每n个定时中断的时间相应只发送一位数据至发端mcu的i/o端口,先发送起始位,然后依次发送载荷数据的每一位,最后发送停止位;n≥3;
收端mcu的数据接收过程包括:
1)由收端mcu定时器的定时中断过程控制数据接收:每次定时中断检测收端mcu的i/o端口,当检测到起始位,收端mcu定时器的定时中断过程控制接收i/o端口上的每一位数据;
2)连续接收各数据位,并合成数据,然后送到接收区。
更优地,收端mcu在第一次检测到起始位后,下一次定时中断再检测并确认起始位后,才开始接收后续的数据。
进一步地,发端mcu定时器的定时中断过程控制数据发送,具体包括:
步骤s1,发端mcu的每一次定时中断,发送计数器累加1;
步骤s2,判断数据发送是否结束,若是则进行步骤s3,若否则进行步骤s6;
步骤s3,检查发送区是否有数据,若有则进行步骤s4,若否则进行步骤s7;
步骤s4,发送计数器置0,重新计数;
步骤s5,发送起始位,转步骤s7;
步骤s6,按发送计数器的计数发送数据下一位;每n个定时中断的时间相应发送一位数据;
步骤s7,一次定时中断完成。
进一步地,收端mcu定时器的定时中断过程控制数据接收,具体包括:
步骤r1,收端mcu的每一次定时中断,接收计数器累加1;
步骤r2,判断一帧数据是否接收结束,若是则进行步骤r3,若否则进行步骤r6;
步骤r3,判断是否检测到起始位,若是则进行步骤r4,若否则进行步骤r11;
步骤r4,接收计数器置0,重新计数;
步骤r5,准备接收数据;转步骤r11;
步骤r6,判断接收计数器计数是否为1,若是则进行步骤r7,若否则进行步骤r9;
步骤r7,判断是否检测到起始位,若是则进行步骤r11,若否则进行步骤r8;
步骤r8,认定无数据,数据接收结束,转步骤r11;
步骤r9,按接收计数器的计数接收数据下一位;每n个定时中断的时间相应接收一位数据;
步骤r10,将接收到的每位数据发送到接收区;
步骤r11,一次定时中断完成。
更进一步地,步骤r9中,以每n个定时中断的时间中接收计数器的中间值对应的时刻进行数据接收。
本发明的优点在于:
1)使用mcu上的通用i/o端口通信,节省了通信资源。
2)对于多组i/o端口通信可以使用同一个定时器。
3)可实现全双工,半双工等通信方式以及可以自定义方式通信。
附图说明
图1为本发明的微处理器间i/o端口通信示意图。
图2为本发明的软件流程示意图。
图3为本发明的定时器中断流程中数据发送示意图。
图4为本发明的定时器中断流程中数据接收示意图。
图5为本发明的定时中断控制数据发送与接收示意图。
具体实施方式
下面结合具体附图和实施例对本发明作进一步说明。
如图1所示,本发明提出的微处理器间i/o端口通信方法,可以使用一根通信线实现半双工通信,也可以使用两根通信线实现全双工通信等;
发端mcu和收端mcu均使用定时器连续中断,以产生一个稳定的波特率;数据发送和接收过程都在定时器中断过程中完成;为了保证通信发送和接收的正确,发端mcu定时器和收端mcu定时器设置相同速率的定时中断;
为了保证通信接收的正确,定时器连续定时中断的速率是数据波特率的3倍或以上;以3倍为例,发端mcu每3次定时中断只发送一位数据,收端mcu每3次定时中断只接收一位数据;所述数据包括起始位、载荷数据、停止位;
发端mcu的软件控制数据发送过程:
1)将数据送到发送区,等待发送;发送区是发端mcu中内存的一个区域;
2)检测发送区是否有数据,如有,则由发端mcu定时器的定时中断过程控制数据发送;每n个定时中断的时间相应只发送一位数据至发端mcu的i/o端口,先发送起始位,然后依次发送载荷数据的每一位,最后发送停止位;n≥3,以保证通信接收正确;
以8比特载荷数据为例,加上起始位、停止位,所要发送的一帧数据共有10比特;以上起始位、载荷数据的每一位、停止位按顺序出现在发端mcu与收端mcu的i/o端口之间通信线上;
收端mcu的软件控制数据接收过程:
1)由收端mcu定时器的定时中断过程控制数据接收:每次定时中断检测收端mcu的i/o端口;当检测到起始位,收端mcu定时器的定时中断过程控制接收i/o端口上的每一位数据;
当n≥3时,可以在第一次检测到起始位后,下一次定时中断再检测并确认起始位后,才开始接收后续的数据;起始位可以约定是低电平0;
例如n=3时,发端mcu发送的一帧数据,在前3个定时中断对应的那段时间中,始终将起始位放在发端i/o端口,通信线上也连续在3个定时中断的时间中出现起始位;收端mcu第一次检测到起始位后,下一次定时中断再去检测并确认起始位,才正式开始接收后续的各位数据;
2)连续接收各数据位,并合成数据,然后送到接收区。
以下详细说明发端mcu定时器的定时中断过程控制数据发送,以及收端mcu定时器的定时中断过程控制数据接收;
如图3所示,发端mcu定时器的定时中断过程控制数据发送,具体包括:
步骤s1,发端mcu的每一次定时中断,发送计数器累加1;
发送一帧数据需要连续多次定时中断才能完成;
步骤s2,判断数据发送是否结束,若是则进行步骤s3,若否则进行步骤s6;
此步骤主要判断一帧数据是否已经发送完,若发完了,则进行新的一帧数据发送;
步骤s3,检查发送区是否有数据,若有则进行步骤s4,若否则进行步骤s7;
步骤s4,发送计数器置0,重新计数;
步骤s5,发送起始位,转步骤s7;
步骤s6,按发送计数器的计数发送数据下一位;每n个定时中断的时间相应发送一位数据;
以每3个定时中断的时间相应发送一位数据为例,发送计时器分别为3、6、9、12、15、18、21、24、27依次发送8位载荷数据及停止位;具体如图5所示;
步骤s7,一次定时中断完成。
经过连续的多次定时中断,数据全部发送;
如图4所示,收端mcu定时器的定时中断过程控制数据接收,具体包括:
步骤r1,收端mcu的每一次定时中断,接收计数器累加1;
步骤r2,判断一帧数据是否接收结束,若是则进行步骤r3,若否则进行步骤r6;
步骤r3,判断是否检测到起始位,若是则进行步骤r4,若否则进行步骤r11;
步骤r4,接收计数器置0,重新计数;
步骤r5,准备接收数据;转步骤r11;
步骤r6,判断接收计数器计数是否为1,若是则进行步骤r7,若否则进行步骤r9;
步骤r7,判断是否检测到起始位,若是则进行步骤r11,若否则进行步骤r8;
步骤r8,认定无数据,数据接收结束,转步骤r11;
步骤r9,按接收计数器的计数接收数据下一位;每n个定时中断的时间相应接收一位数据;
优选地,以每n个定时中断的时间中接收计数器的中间值对应的时刻进行数据接收,以保证接收数据的正确性;
以3个定时中断的时间发送、接收一位数据为例:接收计数器分别为4、7、10、13、16、19、22、25、28接收8位载荷数据及停止位;例如,接收计数器为4时,对于收端mcu,接收bit1位的载荷数据;
步骤r10,将接收到的每位数据发送到接收区;
步骤r11,一次定时中断完成。
经过连续的多次定时中断,数据接收完成;
上述通信方法,当两个mcu间设有两根通信线时,可实现全双工通信,当两个mcu间设有一根通信线时,可实现半双工通信。
最后所应说明的是,以上具体实施方式仅用以说明本发明的技术方案而非限制,尽管参照实例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。