加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSSRSS-巴斯仪表网
您当前的位置:首页 > 电子发烧 > 单片机学习

89C51 单片机I/O 口模拟串行通信的实现方法

时间:2013-09-08  来源:123485.com  作者:9stone

        目前普遍采用的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 口模拟实现串行通信的方法,已成功地应用在某电压数据采集系统中,实践证明能可靠地传送和接收数据。


分享到:
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
栏目导航->单片机学习
  • 电子应用基础
  • 电源技术
  • 无线传输技术
  • 信号处理
  • PCB设计
  • EDA技术
  • 单片机学习
  • 电子工具设备
  • 技术文章
  • 精彩拆解欣赏
  • 推荐资讯
    使用普通运放的仪表放大器
    使用普通运放的仪表放
    3V与5V混合系统中逻辑器接口问题
    3V与5V混合系统中逻辑
    数字PID控制及其改进算法的应用
    数字PID控制及其改进
    恶劣环境下的高性价比AD信号处理数据采集系统
    恶劣环境下的高性价比
    栏目更新
    栏目热门