如何模拟实现应用在数据采集系统中的89C51单片机I/O口串行通信?

目前普遍采用的mcs51 和pic 系列单片机通常只有一个(或没有)uart异步串行通信接口,在应用系统中若需要多个串行接口(例如在多机通信系统中,主机既要和从机通信又要和终端通信)的情况下,通常的方法是扩展一片8251 或 8250 通用同步/异步接收发送芯片(usart),需额外占用单片机i/o 资源。
mcs51是指由美国intel公司(对了,就是大名鼎鼎的intel)生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼mcs51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称。
1.串行接口的基本通信方式 串行接口的有异步和同步两种基本通信方式。异步通信采用用异步传送格式,如图1 所示。数据发送和接收均将起始位和停止位作为开始和结束的标志。在异步通信中,起始位占用一位(低电平)。
异步通信采用用异步传送格式
用来表示字符开始。其后为7 或8 位的数据编码,第8 位通常做为奇偶校验位。最后为停止位(高电平)用来表示字符传送结束。上述字符格式通常作为一个串行帧,如无奇偶校验位,即为常见的n.8.1帧格式。串行通信中,每秒传送的数据位称为波特率。如数据传送的波特率为1200 波特,采用n.8.1 帧格式(10 位),则每秒传送字节为120 个,而字节中每一位传送时间即为波特率的倒数:t=i/1200=0.833ms。同样,如数据传送的波特率为9600 波特,则字节中每一位传送时间为t=1/9600=0.104 ms。
2.硬件电路 89c51是一种带4k字节闪烁可编程可擦除只读存储器(fperom—falsh programmable and erasable read only memory)的低电压、高性能cmos8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用atmel高密度非易失存储器制造技术制造,与工业标准的mcs-51指令集和输出管脚相兼容。由于将多功能8位cpu和闪烁存储器组合在单个芯片中,atmel的89c51是一种高效微控制器,89c2051是它的一种精简版本。89c单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
89c51 单片机通过普通i/o 口与pc 机rs232 串口实现通信的硬件接口电路如图2 所示。由于pc 系列微机串行口为rs232c 标准接口,与输入、输出均采用ttl 电平的89c51 单片机在接口规范上不一致,因此ttl电平到rs232 接口电平的转换采用maxim 公司的max232 标准rs232接口芯片,该芯片可以用单电压(+5v)实现rs232接口逻辑“1”(-3v~215v)和逻辑“0”(+3v~15v)的电平转换。图中89c51 的p1.0 模拟发送端,p1.1 模拟接收端。
3.接口程序设计 软件设计中,89c51 单片机的p1.0 和p1.1 口分别模拟串行通信的发送和接收,其接口程序主要由input 发送子程序和output接收子程序组成。通信速率1200 bit /s,帧格式为n.8.1。发送时,先发送一个起始位(低电平),接着按低位在先的顺序发送8 位数据,最后发送停止位。接收时,先判断p1.1 接收端口是否有起始低电平出现,其中软件编写要严格按照异步通信的时序进行,每bit 位传送时间间隔按通信速率1200 bit /s计算为833μs。
其模拟串行通信程序清单见下,系统要求单片机晶振为6m。程序清单如下:
txd equ p1.0
rxd equ p1.1 ;定义89c51 p1.0 为发送端,p1.1 为接收端
org 0000h
ajmp main
org 0100h
main: mov a, #30h
mov r5,#n
setb rxd ;p1.0 置高
tx: lcall input ;调用发送子程序,将寄存器a 中内容发给pc 机

setb txd ;p1.1 置高
mov r0,#40h
rx: lcall output ;调用接收子程序,将接收的n 个数据存放在以40h开始的地址中
mov @r0,a
inc r0
djnz r5, rx ;n 个数据接收结束,则等待,否则转rx 继续接收
3
ajmp $
;**************延时833μs 子程序*****
del833: mov r7 ,#205
ms11: djnz r7,ms11
ret
; **********************************
;******** 89c51发送数据给pc 机子程序****
input: clr c
mov txd,c ;发送起始位
lcall del833 ;延时
mov r3,#8
rep: rrc a
mov txd ,c
lcall del833
djnz r3,rep ;发送8 位数据
setb c ;发送停止位
mov txd,c
lcall del833
ret
;********从pc 机接收数据子程序********
output: jb rxd, $ ; 判断是否有起始位出现
lcall del833
mov r3,#8
out: mov c ,rxd
rrc a
lcall del833
djnz r3,out ; 接收8 位数据
jnb rxd ,$ ; 判断是否有停止位出现
ret
本文介绍的用 89c51 单片机i/o 口模拟实现串行通信的方法,已成功地应用在某电压数据采集系统中,这样的进步,让这项技术有了更加高的期待性,在社会上也有了很好的反应,这样就让这个研究成果有了很好的作用。

如何构建高效的数字基础设施和可交易的数字化能力
浅析无线电波传播模式
基于BQ40z80的电量计电路设计原则
2012 PCB有望持续成长,行动装置应用成趋势
为什么SMT贴片加工越来越难做了?
如何模拟实现应用在数据采集系统中的89C51单片机I/O口串行通信?
英伟达 RTX 3060 Ti 11 月 17 日发布,3060 待定
ST和YouTransactor为了现在的市场发布安支付系统芯片
猎豹发布五款“真有用”机器人产品
魔珐科技获数亿元融资
霍尔开关有哪些型号?
华为9月10日举行新品发布会,鸿蒙系统将同步亮相
研究人员提出具有葡萄糖响应型胰高血糖素微针阵列贴片
法国视频游戏出版商育碧希望采用区块链来为其财产提供更多保护
华为CEO任正非谈团队管理,面对低绩效员工坚持好聚好散
基于泊松方程的生成模型 PFGM
关于连接器和电缆线束组件的几个好处
京微齐力再次荣获“IC独角兽”称号
5G时代 网络安全建设成为行业共识
微软是否会推出基于Windows 10系统的智能手机Surface Phone?