用单片机普通I_O口模拟串口的一种方法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子报/2005年/12月/18日/第011版

单片机应用

用单片机普通I/O口模拟串口的一种方法

南昌李春玲

MCS-51系列单片机片内有一个串行I/O端口,通过引脚RXD (P3.0)和TXD(P3.1)与外设进行全双工的串行异步通信。串行端口有四种基本工作方式:方式0主要用于外接移位寄存器,以扩展单片机的I/O接口;方式1多用于双机之间或与外设的通信;方式2、方式3除有方式1的功能外,还可用作主从式多机通信,构成分布式多机系统。

在应用系统中,若需要多个串口,且各串口工作方式要求不同,如:通信波特率不一样,通常的方法是扩展一片可编程串行接口芯片,如8251或8250,但这样增加了硬件开销,且需要占用较多的I/O资源。本文介绍一种用单片机普通I/O口模拟串口的方法。

以A、B两个单片机之间的串行通信为例,电路如图1所示。使用了P1口中的3条普通I/O口,其中P1.0为串行发送端(模拟TXD),P1.1为串行接收端(模拟RXD),P1.2作为对方单片机的中断申请信号INTO的输入线(模拟内部串行口中断源RI/TI)。

串行通信信息帧的发送与接收由软件编程实现。工作过程如下(以A机发送、B机接收为例):

1.A机从P1.2口输出中断申请信号。

2.A机通过P1.0口发送一帧模拟信息。串行通信采用异步传送格式:包括1位起始位(低电平)、7或8位数据编码、1位奇偶校验位(可不要)、1位停止位(高电平)。串行通信中,如果数据传送的波特率为1200bps,则每位信息维持时间为0.833ms。

程序段TTXD完成上述发送功能。信息帧为10位(1位起始位、8位数据编码、无奇偶校验位、1位停止位)。

3.B机接收到INTO的中断申请信号后,自动进入中断服务程序,同步进行模拟异步接收。当P1.1口从高变低时,说明一帧开始,然后依次接收8位数据编码,采样数据在每一位的中间进行,故接收与发送要错开半位,最后检测到高电平后,跳出中断。一次中断完成一帧信息的接收,获得一个字节的数据。

INTO的中断服务程序段RRXD完成上述接收功能。

程序清单如下:

TTXD:MOV A,#DATA;发送字节送A

CLR P1.2;送中断申请信号

SETB P1.0

LCALL DELAY417

CLR P1.0

LCALL DELAY417

LCALL DELAY417

;模拟1位起始位

MOV R3,#8

OUT:RRC A

MOV P1.0,C;发送1位数据

LCALL DELAY417

LCALL DELAY417

;维持0.833ms

DJNZ R3,OUT;发送下一位数据

SETB P1.0

LCALL DELAY417

LCALL DELAY417;模拟停止位

SETB P1.2;“1”送P1.2

RET

RRXD:SETB P1.1

JB P1.1,$;检测起始位

MOV R3,#8

LCALL DELAY417;错开半位

IN:LCALL DELAY417

LCALL DELAY417

MOV C,P1.1;接收采样数据

RRC A;移入A中

DJNZ R3,IN;接收下一位

JNB P1.1,$;检测停止位

RETI

若单片机使用12MHz的晶振,延时约417μs的程序为:

DELAY417:MOV R5,#205

XH:DJNZ R5,XH

RET

使用该方式亦可实现主从式多机通信。模拟单片机串口方式2和方式3所构成的主从式多机通信电路如图2所示。编程时,发送程序生成欲与之通信的从机地址编号,接收程序接收到地址编码后,与本机地址比较,若相同,则准备接收数据;若不同,则跳出中断服务程序。

相关文档
最新文档