CN109783431B - 微处理器间i/o端口通信方法 - Google Patents
微处理器间i/o端口通信方法 Download PDFInfo
- Publication number
- CN109783431B CN109783431B CN201910136683.6A CN201910136683A CN109783431B CN 109783431 B CN109783431 B CN 109783431B CN 201910136683 A CN201910136683 A CN 201910136683A CN 109783431 B CN109783431 B CN 109783431B
- Authority
- CN
- China
- Prior art keywords
- data
- receiving
- sending
- mcu
- bit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Communication Control (AREA)
Abstract
本发明提供一种微处理器间I/O端口通信方法,包括:发端MCU和收端MCU均使用定时器连续中断;发端MCU定时器和收端MCU定时器设置相同速率的定时中断;发端MCU的数据发送过程包括:将数据送到发送区,等待发送;检测发送区是否有数据,如有,则由发端MCU定时器的定时中断过程控制数据发送;每n个定时中断的时间相应只发送一位数据至发端MCU的I/O端口;n≥3;收端MCU的数据接收过程包括:由收端MCU定时器的定时中断过程控制数据接收:每次定时中断检测收端MCU的I/O端口,当检测到起始位,收端MCU定时器的定时中断过程控制接收I/O端口上的每一位数据;连续接收各数据位,并合成数据,然后送到接收区。本发明可节省MCU通信资源。
Description
技术领域
本发明涉及微处理器与微处理器之间的通信方法,尤其是一种微处理器间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间设有一根通信线时,可实现半双工通信。
最后所应说明的是,以上具体实施方式仅用以说明本发明的技术方案而非限制,尽管参照实例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (3)
1.一种微处理器间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,一次定时中断接收部分完成。
2.如权利要求1所述的微处理器间I/O端口通信方法,其特征在于,
步骤R9中,以每n个定时中断的时间中接收计数器的中间值对应的时刻进行数据接收。
3.如权利要求1所述的微处理器间I/O端口通信方法,其特征在于,
定时器连续定时中断的速率是数据波特率的3倍或以上。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910136683.6A CN109783431B (zh) | 2019-02-25 | 2019-02-25 | 微处理器间i/o端口通信方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910136683.6A CN109783431B (zh) | 2019-02-25 | 2019-02-25 | 微处理器间i/o端口通信方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109783431A CN109783431A (zh) | 2019-05-21 |
CN109783431B true CN109783431B (zh) | 2023-02-07 |
Family
ID=66486385
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910136683.6A Active CN109783431B (zh) | 2019-02-25 | 2019-02-25 | 微处理器间i/o端口通信方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109783431B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4608630A (en) * | 1980-09-23 | 1986-08-26 | Robert Bosch Gmbh | Method and apparatus for transmitting data words asynchronously from one microprocessor to another in form of timing intervals |
CN101471787A (zh) * | 2007-12-25 | 2009-07-01 | 希姆通信息技术(上海)有限公司 | 基于无线通信模块的软件模拟uart的方法 |
CN101556567A (zh) * | 2009-05-18 | 2009-10-14 | 中国华录·松下电子信息有限公司 | 微处理器之间的串行通信方法 |
CN102546843A (zh) * | 2012-01-17 | 2012-07-04 | 厦门雅迅网络股份有限公司 | 一种通过软件模拟实现多个uart通信接口的方法 |
-
2019
- 2019-02-25 CN CN201910136683.6A patent/CN109783431B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4608630A (en) * | 1980-09-23 | 1986-08-26 | Robert Bosch Gmbh | Method and apparatus for transmitting data words asynchronously from one microprocessor to another in form of timing intervals |
CN101471787A (zh) * | 2007-12-25 | 2009-07-01 | 希姆通信息技术(上海)有限公司 | 基于无线通信模块的软件模拟uart的方法 |
CN101556567A (zh) * | 2009-05-18 | 2009-10-14 | 中国华录·松下电子信息有限公司 | 微处理器之间的串行通信方法 |
CN102546843A (zh) * | 2012-01-17 | 2012-07-04 | 厦门雅迅网络股份有限公司 | 一种通过软件模拟实现多个uart通信接口的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109783431A (zh) | 2019-05-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101404556B (zh) | 一线总线的通讯方法 | |
CN104714920A (zh) | 一种自适应波特率的信号接收方法 | |
EP1070410B1 (en) | Automatic speed detection for asynchronous serial communications | |
JPS6043941A (ja) | 多重アクセスデ−タ通信システム | |
TWI408931B (zh) | 資料通訊裝置、及通訊控制方法、以及程式産品 | |
CN103986610A (zh) | 通讯接口匹配方法、装置及控制器 | |
CN102970300B (zh) | 一种异步通信方法 | |
CN104852825A (zh) | 总线通讯测试方法及系统 | |
CN104317762A (zh) | 一种fpga自适应控制rs485芯片收发方向的方法 | |
CN108259134A (zh) | 一种基于afp协议的数据传输方法 | |
CN106130856A (zh) | 一种自适应波特率rs485通讯协议 | |
CN109783431B (zh) | 微处理器间i/o端口通信方法 | |
JPS62161236A (ja) | 直列デ−タ通信方式 | |
JPH11243590A (ja) | 無線通信システム | |
CN113792003A (zh) | 单总线通信单元、系统及方法 | |
CN106656702B (zh) | 智能冗余串行总线的时序控制方法 | |
CN110099028A (zh) | 一种串口数据传输的方法及装置 | |
CN110535621A (zh) | 一种串口通讯波特率校正装置及其校正方法 | |
CN113794538A (zh) | 一种高效率的双机通讯反馈方法 | |
CN114760222A (zh) | 一种用于100base-T1 PHY芯片的链路断开检测方法及其装置 | |
CN110505607B (zh) | 基于蓝牙安全设备的通信方法、蓝牙芯片及蓝牙安全设备 | |
CN106788947A (zh) | 基于433MHz的全双工无线通信模块 | |
US7334040B2 (en) | Method of transmission between two processors of a radio communication unit | |
CN107346294B (zh) | 基于spi协议的数据流控系统及方法 | |
CN101345682B (zh) | 智能电器串行总线的智能电器的工作方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |