现在遍及选用的MCS51 和PIC 系列单片机一般只要一个(或没有)UART异步串行通讯接口,在使用体系中若需求多个串行接口(例如在多机通讯体系中,主机既要和从机通讯又要和终端通讯)的情况下,一般的办法是扩展一片8251 或 8250 通用同步/异步接纳发送芯片(USART),需额定占用单片机I/O 资源。本文介绍一种用单片机一般I/O 口完结串行通讯的办法,可在单片机的最小使用体系中完结与两个以上串行接口设备的多机通讯。
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。依据数据传送的波特率即字节中每一位的传送时刻,咱们便可用一般I/O 口来模仿完结串行通讯的时序。
2.硬件电路
89C51 单片机经过一般I/O 口与PC 机RS232 串口完结通讯的硬件接口电路如图2 所示。因为PC 系列微机串行口为RS232C 规范接口,与输入、输出均选用TTL 电平的89C51 单片机在接口规范上不一致,因而TTL电平到RS232 接口电平的转化选用MAXIM 公司的MAX232 规范RS232接口芯片,该芯片可以用单电压(+5V)完结RS232接口逻辑“1”(-3V~15V)和逻辑“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 接纳端口是否有开端低电平呈现,如有则按低位在先的次序接纳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 持续接纳
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 口模仿完结串行通讯的办法,已成功地使用在某电压数据收集体系中,实践证明能可靠地传送和接纳数据。