CN109062850B - 一种单片机的数据发送和接收方法 - Google Patents
一种单片机的数据发送和接收方法 Download PDFInfo
- Publication number
- CN109062850B CN109062850B CN201810900996.XA CN201810900996A CN109062850B CN 109062850 B CN109062850 B CN 109062850B CN 201810900996 A CN201810900996 A CN 201810900996A CN 109062850 B CN109062850 B CN 109062850B
- Authority
- CN
- China
- Prior art keywords
- data
- level
- duration
- time length
- preset
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4221—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1012—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
- G06F11/102—Error in check bits
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Small-Scale Networks (AREA)
- Information Transfer Systems (AREA)
Abstract
本发明公开了一种单片机的数据发送和接收方法,涉及单片机通信技术。数据发送方法包括:发送端将数据组中每个数据位的值转换并依次输出为第一预设时长的第一电平加上相应时长的第二电平;数据组发送完成后发送复位信号,解除对总线的占用。数据接收方法包括:接收端检测到第二电平变换到第一电平的信号沿触发端口中断,并启动计时器计时;从计时器获取相邻两个端口中断之间的信号时长;根据信号时长转换出数据位的值或者复位信号;根据依次接收到的数据位的值还原数据组。本发明通过软件控制,只使用一根IO口实现了多个单片机收发双向的总线式工作,不需要特定硬件支持,可以在不同厂家不同系列的MCU上应用,电路简单,成本低廉。
Description
技术领域
本发明涉及单片机通信技术领域,尤其涉及一种单片机的数据发送和接收方法。
背景技术
为了元器件之间信号的相互联系,对应设计了大量的协议,如IIC、IIS、USB、Uart、SPI及一些公司的单线总线。各种协议各有优势,其中单总线是美国DALLAS公司推出的外围串行扩展总线技术。与SPI、I2C串行数据通信方式不同.它采用单根信号线,既传输时钟又传输数据,而且数据传输是双向的,具有节省I/O口线、资源结构简单、成本低廉、便于总线扩展和维护等诸多优点。但是这些单总线都是基于硬件而设计的功能,没有相应硬件就没有相应功能,单线总线虽有线路简单、成本低的优势,但是大部分的元件并无此功能。
加之市面上绝大部分的低档MCU(单片机)没有硬件上的Uart之类的通讯接口,所以相互之间很难联系,如IO类型单片机,这类单片机价格极低,在各种家电控制上都有使用。
发明内容
本发明的目的在于提出一种单片机的数据发送和接收方法,能够在低端单片机上使用软件控制通过一个IO口实现多个单片机之间的双向通讯功能。
为达此目的,本发明采用以下技术方案:
一方面,本发明提供一种单片机的数据发送方法,包括:
总线空闲状态下,发送端通过第一电平占用总线;
将数据组中每个数据位的值转换并依次输出为第一预设时长的第一电平加上相应时长的第二电平;
数据组发送完成后发送复位信号,解除对总线的占用;
将所述发送端由发送状态转换到接收状态。
其中,数据位的数量由数据组的字节数决定;发送端连续、依次发送各数据位;
数据位包括校验位、地址位和内容位。
进一步的,如果需要发送下一个数据组,需要等待第五预设时长的时间,才能重新启动发送功能,即相邻两组数据组之间设置第五预设时长的时间间隔。
其中,数据位的值包括0和1;
相应的,将发送数据组中每个数据位的值转换并依次输出为第一预设时长的第一电平加上相应时长的第二电平,包括:
第二预设时长的第二电平加上第一预设时长的第一电平为数据0;
第三预设时长的第二电平加上第一预设时长的第一电平为数据1;
第四预设时长的第二电平加上第一预设时长的第一电平为复位信号;
其中,第二预设时长、第三预设时长、第四预设时长和第五预设时长各不相等,且第二预设时长、第三预设时长均小于第四预设时长,第四预设时长小于第五预设时长。
进一步的,第一电平为低电平,第二电平为高电平;或者,第一电平为高电平,第二电平为低电平。
另一方面,本发明提供一种单片机的数据接收方法,包括:
总线空闲状态下,所有接收端处于初始接收状态等待端口中断;
接收端检测到第二电平变换到第一电平的信号沿触发端口中断,并启动计时器计时;
从计时器获取相邻两个端口中断之间的信号时长,并由计数器统计接收的数据位的数量;
根据所述信号时长转换出数据位的值或者复位信号;
若接收的数据位的数量达到预设值或者收到复位信号,则对每个数据位的值进行校验;
根据依次接收到的数据位的值还原数据组;
将接收端复位到初始接收状态。
进一步的,启动计时器计时之后,还包括:
若计时器计时超过第一预设时长与第四预设时长之和,接收端仍未检测到下一个端口中断,则计时器产生一个定时中断,等同于复位信号。
其中,对每个数据位的值进行校验,包括:
校验错误,则丢弃接收到的数据;
校验正确,则根据依次接收到的数据位的值还原数据组。
进一步的,根据依次接收到的数据位的值还原数据组之后,还包括:
判断数据组中的地址位是否为本机地址位,若否,丢弃数据组。
其中,根据所述信号时长转换出数据位的值或者复位信号,包括:
若所述信号时长等于第二预设时长与第一预设时长的和,则相应的数据位的值为0;
若所述信号时长等于第三预设时长与第一预设时长的和,则相应的数据位的值为1;
若所述信号时长等于第四预设时长与第一预设时长的和,则对应复位信号。
本发明的有益效果为:
本发明通过软件实现数据通信功能,不需要特定硬件支持,可以在不同厂家不同系列的MCU上应用;再者,本发明只使用了一根IO口实现了多个单片机之间收发双向的总线式工作,电路简单,成本低廉,可以在大量有此实际需求的产品方案上实施。
附图说明
图1是本发明实施例提供的单片机的数据发送方法的流程图;
图2是本发明实施例提供的单片机的数据接收方法的流程图;
图3是本发明实施例提供的单片机开漏输出的连接方式示意图;
图4是本发明实施例提供的单片机推挽输出的连接方式示意图。
具体实施方式
为使本发明解决的技术问题、采用的技术方案和达到的技术效果更加清楚,下面将结合附图对本发明实施例的技术方案作进一步的详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
本实施例提供一种单片机的数据发送方法和接收方法,适用于由至少两片单片机组成的硬件系统,这些单片机根据相同的协议进行编程,每个单片机都至少具备一个计数器、一个计时器和一个中断IO端口,可以是硬件器件,也可以是软件模拟的功能器件;计数器用于统计传输的数据位的数量,以判断传输是否完成;计时器用于发送定时中断或者在接收数据时计时。在连接线路上,如图3所示,开漏输出的情况下,多个单片机的IO端口通过一个上拉电阻R1接到电源VCC,部分型号的单片机自带该上拉电阻则无需额外接入。如图4所示,推挽输出的情况下,若单片机的数量为N个,则至少N-1个单片机的IO端口串接一个电阻R3再接入到总线,用于防止输出的电平冲突导致烧坏端口,保护电路;并且,电源VCC也通过一个电阻R2接入到总线,在输入时起到将总线电平强制拉到第二电平的作用,如果第二电平为低电平,R2应下拉到地。
图1是本实施例提供的单片机的数据发送方法的流程图。如图1所示,一种单片机的数据发送方法,包括如下步骤:
S11,总线空闲状态下,发送端通过第一电平占用总线。
准备发送数据前,确认总线状态是否为空闲,总线空闲时处于第二电平;若是,通过第一电平占用总线,防止其他器件在同一时间点使用总线。并且,在本实施例中,每次输出第一电平的时长均为第一预设时长。
S12,将数据组中每个数据位的值转换并依次输出为第一预设时长的第一电平加上相应时长的第二电平。
其中,数据位的数量由数据组的字节数决定;数据位包括校验位、地址位和内容位。例如,2字节的数据组包括16个数据位,其中,校验位4位,地址位4位,内容位8位。可根据字节数和具体需求设定各部分占用的数据位的数量。其中,每个器件都有一个或几个独立的接收地址或发送地址,发送地址与接收地址可以相同,也可以不同。
本实施例由计时器计时,并在预设的定时时长产生中断,通知程序改变输出端口的电平。其中,每次输出第一电平的时长是相等的,为第一预设时长。若所述数据位的值为0,则输出的第二电平相应的时长为第二预设时长;若所述数据位的值为1,则输出的第二电平相应的时长为第三预设时长。
其中,第二预设时长、第三预设时长、第四预设时长和第五预设时长各不相等,且第二预设时长、第三预设时长均小于第四预设时长,第四预设时长小于第五预设时长。
本实施例中,第一电平为低电平,第二电平为高电平;在其他实施例中也可以是第一电平为高电平,第二电平为低电平。
本实施例以基准频率4M为例,分频参数64,单位时长为16μs,第一预设时长为5个单位时长,第一预设时长的第一电平即为80μs的低电平。第二预设时长为第一预设时长的2倍,发送数据位的值为0,则对应160μs的高电平加上80μs的低电平;第三预设时长为第一预设时长的4倍,发送数值位的值为1,则对应320μs的高电平加上80μs的低电平。第四预设时长为第一预设时长的6倍,即复位信号为480μs的高电平加上80μs的低电平;发送端器件在检测到总线为高电平的空闲状态时,通过低电平占用总线后,根据数据组的数据位依次输出相应时长的低电平和高电平;对于2字节的数据,依次将16个数据位的值转化为对应时长的低电平和高电平输出,计数器记录中断以统计已输出的数据位的个数,输出结束后执行步骤S13。
S13,发送复位信号,解除对总线的占用。
本实施例中,发送完16字节数据后,再发送一个第一预设时长的第一电平与第四预设时长的第二电平组成的复位信号,标示发送完毕释放总线,并将作为发送端的单片机由发送状态转换成接收状态。
本实施例中,所有的单片机在接收到复位信号或发出复位信号后,都需要等待第五预设时长后再可以使用总线,第五预设时长为两个数据组之间的间隔。
完成一组数据发送后,需要等待第五预设时长再重新开始步骤S11的流程,目的是防止一个器件长时间占用总线。
本实施例还提供一种单片机的数据接收方法,如图2所示,本实施例的数据接收方法包括如下步骤:
S21,总线空闲状态下,接收端检测到第二电平变换到第一电平的信号沿触发端口中断,并启动计时器计时。
总线空闲状态下,所有接收端处于初始接收状态等待端口中断,接收端器件若收到端口中断,则表示开始了新一组数据的传输,等待接收数据。
总线由第二电平变换到第一电平的信号沿会触发端口中断,同时,启动计时器计时。
S22,从计时器获取相邻两个端口中断之间的信号时长,并由计数器统计接收的数据位的数量。
对应于上述数据发送方法,由第二电平跳转到第一电平的信号沿(上升沿或下降沿)触发端口中断,则相邻两个端口中断之间的信号时长表示一个数据位的值或复位信号,计数器统计收到的数据位的次数即可知道已接收的数据位的数量。
当下一个端口中断到达时,读取计时器得到两个端口中断之间的信号时长。
若一个中断产生后,计时器计时超过第一预设时长与第四预设时长之和,接收端仍未检测到下一个端口中断,则计时器产生一个定时中断,等同于产生了一个复位信号。
S23,根据所述信号时长转换出数据位的值或者复位信号。
若所述信号时长等于第二预设时长与第一预设时长的和,则相应的数据位的值为0;
若所述信号时长等于第三预设时长与第一预设时长的和,则相应的数据位的值为1;
若所述信号时长等于第四预设时长与第一预设时长的和,则对应复位信号。
其中,若第一电平为低电平,第二电平为高电平,则触发端口中断的信号沿为下降沿;若第一电平为高电平,第二电平为低电平,则触发端口中断的信号沿为上升沿。
沿用上例,根据计时器记录的信号时长,160μs的高电平加上80μs的低电平对应数据位的值为0,320μs的高电平加上80μs的低电平对应数值位的值为1。480μs的高电平加上80μs的低电平为复位信号;或者计时器超过560μs定时中断产生,等同于复位信号;
进一步的,考虑到误差问题,在处理这些数据时需要增加一定的允许误差,比如,160μs+80μs=240μs为数据0,允许60μs的误差,在判定上180~300μs都为数据0。
S24,若接收的数据位的数量达到预设值或者收到复位信号,则对每个数据位的值进行校验。
当接收的数据位的数量达到发送数据位的数量(本实施例为16个),或者接收到复位信号,或者接收到计时器产生的定时中断,则开始校验接收的数据组,若校验错误,丢弃接收到的数据;校验正确,则执行步骤S25。
S25,根据依次接收到的数据位的值还原数据组。
还原出发送数据组,进一步的,判断还原出的数据组中的地址位是否为本机地址位,若否,则丢弃数据;地址正确,标示接收到一组正确数据。
本实施例中,作为发送端的单片机和作为接收端的单片机按照约定的协议收发数据,以软件定时中断控制单片机的输出,再根据接收到的信号解析出相应的数据,解决了不具备特定通讯接口的单片机相互之间的通信问题,线路简单,大部分单片机都能支持,通过软件模拟实现等同于单总线的通信效果。
以上结合具体实施例描述了本发明的技术原理。这些描述只是为了解释本发明的原理,而不能以任何方式解释为对本发明保护范围的限制。基于此处的解释,本领域的技术人员不需要付出创造性的劳动即可联想到本发明的其它具体实施方式,这些方式都将落入本发明的保护范围之内。
Claims (7)
1.一种单片机的数据发送方法,其特征在于:
总线空闲状态下,发送端通过第一电平占用总线;
将数据组中每个数据位的值转换并依次输出为第一预设时长的第一电平加上相应时长的第二电平;
数据组发送完成后发送复位信号,解除对总线的占用;
将所述发送端由发送状态转换到接收状态;
相邻两组数据组之间设置第五预设时长的时间间隔;
数据位的值包括0和1;
相应的,将发送数据组中每个数据位的值转换并依次输出为第一预设时长的第一电平加上相应时长的第二电平,包括:
第二预设时长的第二电平加上第一预设时长的第一电平为数据0;
第三预设时长的第二电平加上第一预设时长的第一电平为数据1;
第四预设时长的第二电平加上第一预设时长的第一电平为复位信号;
其中,第二预设时长、第三预设时长、第四预设时长和第五预设时长各不相等,且第二预设时长、第三预设时长均小于第四预设时长,第四预设时长小于第五预设时长。
2.根据权利要求1所述的数据发送方法,其特征在于:
数据位的数量由数据组的字节数决定;
数据位包括校验位、地址位和内容位。
3.根据权利要求1至2任一项所述的数据发送方法,其特征在于:
第一电平为低电平,第二电平为高电平;
或者,第一电平为高电平,第二电平为低电平。
4.一种单片机的数据接收方法,其特征在于:
总线空闲状态下,接收端检测到第二电平变换到第一电平的信号沿触发端口中断,并启动计时器计时;
从计时器获取相邻两个端口中断之间的信号时长,并由计数器统计接收的数据位的数量;
根据所述信号时长转换出数据位的值或者复位信号;
若接收的数据位的数量达到预设值或者收到复位信号,则对每个数据位的值进行校验;
根据依次接收到的数据位的值还原数据组;
若所述信号时长等于第二预设时长与第一预设时长的和,则相应的数据位的值为0;
若所述信号时长等于第三预设时长与第一预设时长的和,则相应的数据位的值为1;
若所述信号时长等于第四预设时长与第一预设时长的和,则对应复位信号。
5.根据权利要求4所述的数据接收方法,其特征在于,启动计时器计时之后,还包括:
若计时器计时超过第一预设时长与第四预设时长之和,接收端仍未检测到下一个端口中断,则计时器产生一个定时中断,等同于复位信号。
6.根据权利要求4所述的数据接收方法,其特征在于,对每个数据位的值进行校验,包括:
校验错误,则丢弃接收到的数据;
校验正确,则根据依次接收到的数据位的值还原数据组。
7.根据权利要求6所述的数据接收方法,其特征在于,根据依次接收到的数据位的值还原数据组之后,还包括:
判断数据组中的地址位是否为本机地址位,若否,丢弃数据组。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810900996.XA CN109062850B (zh) | 2018-08-09 | 2018-08-09 | 一种单片机的数据发送和接收方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810900996.XA CN109062850B (zh) | 2018-08-09 | 2018-08-09 | 一种单片机的数据发送和接收方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109062850A CN109062850A (zh) | 2018-12-21 |
CN109062850B true CN109062850B (zh) | 2021-10-15 |
Family
ID=64678774
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810900996.XA Active CN109062850B (zh) | 2018-08-09 | 2018-08-09 | 一种单片机的数据发送和接收方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109062850B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112017689B (zh) * | 2019-05-13 | 2024-08-02 | 厦门鼎安电子有限公司 | 一种基于单片机音频通信的实现方法 |
CN113064845A (zh) * | 2021-04-28 | 2021-07-02 | 晶澄微电子(宁波)有限公司 | 一种用于与防伪安全芯片单线通信的实现方法 |
CN113298033B (zh) * | 2021-06-17 | 2024-09-03 | 麦克方程(北京)科技有限责任公司 | 信号处理方法、装置、电子设备及可读存储介质 |
CN117171072B (zh) * | 2023-11-03 | 2024-02-23 | 深圳联芯微电子科技有限公司 | 微控制单元单向通讯方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101499043A (zh) * | 2009-03-12 | 2009-08-05 | 杭州士兰微电子股份有限公司 | 单线总线系统和通信方法 |
CN102279834A (zh) * | 2011-06-10 | 2011-12-14 | 深圳市骏普科技开发有限公司 | 一种串行通讯方法 |
CN104811273A (zh) * | 2015-04-02 | 2015-07-29 | 福州大学 | 一种高速单总线通信的实现方法 |
CN106528484A (zh) * | 2016-10-28 | 2017-03-22 | 中国科学院上海微系统与信息技术研究所 | 一种串行通信方法 |
CN107402897A (zh) * | 2017-07-04 | 2017-11-28 | 厦门芯阳科技股份有限公司 | 一种两个单片机io口单线通信的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3976927B2 (ja) * | 1999-01-25 | 2007-09-19 | キヤノン株式会社 | バス制御装置 |
-
2018
- 2018-08-09 CN CN201810900996.XA patent/CN109062850B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101499043A (zh) * | 2009-03-12 | 2009-08-05 | 杭州士兰微电子股份有限公司 | 单线总线系统和通信方法 |
CN102279834A (zh) * | 2011-06-10 | 2011-12-14 | 深圳市骏普科技开发有限公司 | 一种串行通讯方法 |
CN104811273A (zh) * | 2015-04-02 | 2015-07-29 | 福州大学 | 一种高速单总线通信的实现方法 |
CN106528484A (zh) * | 2016-10-28 | 2017-03-22 | 中国科学院上海微系统与信息技术研究所 | 一种串行通信方法 |
CN107402897A (zh) * | 2017-07-04 | 2017-11-28 | 厦门芯阳科技股份有限公司 | 一种两个单片机io口单线通信的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109062850A (zh) | 2018-12-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109062850B (zh) | 一种单片机的数据发送和接收方法 | |
CN101399654B (zh) | 一种串行通信方法和装置 | |
US8103896B2 (en) | Method and system for I2C clock generation | |
CN100480923C (zh) | I2c总线从控制器软实现方法 | |
Liu et al. | A flexible hardware architecture for slave device of i2c bus | |
CN107771331B (zh) | 独立式uark brk检测 | |
CN103617138A (zh) | 多主机仲裁方法及多主机通信系统 | |
CN107770021A (zh) | 家庭总线系统hbs电路、信号转换方法和装置 | |
US7353300B2 (en) | Apparatus to improve the firmware efficiency for a multiframe serial interface | |
CN110647486A (zh) | 一种PCIe链路训练方法、端设备及通讯系统 | |
WO2005119448A1 (en) | Error recovery scheme for i2c slave | |
KR20210075878A (ko) | I2c와의 하위 호환성을 촉진하는 i3c 허브 | |
CN114003541A (zh) | 一种通用型iic总线电路及其传输方法 | |
CN105446837A (zh) | 检测iic接口器件是否连接的方法、装置以及系统 | |
CN101826068A (zh) | 热插拔pci-e装置的方法及其应用 | |
CN113792003A (zh) | 单总线通信单元、系统及方法 | |
CN103885910A (zh) | 多设备在主模式下进行iic通信的方法及系统 | |
CN111538626A (zh) | 一种从i2c设备解挂死的方法 | |
CN219181725U (zh) | Can数据帧同步结构及氛围灯光流帧同步控制系统 | |
CN117093529A (zh) | I2s总线协议验证系统 | |
CN101645057B (zh) | 一种防止cpu局域总线挂死的方法及装置 | |
CN113722251B (zh) | 用于功能安全监控的双线spi通信系统及方法 | |
CN111930582B (zh) | 系统管理总线检测平台、处理器及系统管理总线检测方法 | |
CN112445744B (zh) | I2c通信 | |
CN116860672B (zh) | 一种数字处理SMBus通讯系统及方法 |
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 |