找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

扩展多路串行口

[复制链接]
admin 发表于 2010-6-3 22:19:20 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
一、硬件设计
   以扩展二路串行通道为例,介绍8251与MCS-51单片机的接口方法,相应的硬件电路见图8.47。

8af0731c85757bfb970f76d7990a6a48.gif
图8.47



  8253可编程定时器/计数器用来产生8251所需要的接收发送时钟。它片内包含三个独立的通道,每个通道为16位的计数器,均可工作在不同的工作方式,由软件预先设置。在图8.47中,8253的计数器0通过OUT0输出一定频率的方波作为8251的接收发送时钟;计数器1通过OUT1输出一定频率的方波作为8251(II)的接收发送时钟。由于8253的三个定时器/计数器相互独立,因此8251(I)和8251(II)所采用的波特率可以相同,也可以不同,视实际需要而定。
  当8031以中断方式管理8251的操作时,可将TXRDY和RXRDY相或后连接到8031中断源INT0、 INT1.当8251发送缓冲器空接收了一个字符后,便向8031发出中断信号。当然,8031也可以通过查询方式管理8251的操作,这只需在每次发送或接收字符前查询8251状态寄存器的内容即可。在图8.47中,由于不对发数据实行中断控制,故仅将8251的RXRDY信号线经反相后连到8031的中断输入端。
 由于不采用调制解调器,各个8251的有关信号DSR、CTS接地。
  在图8.47的安排中,8031的P2口高位地址经138译码器后产生8253、8251的片选信号,从而得到:8253控制寄存器的地址是2403H,计数器0和计数器1的地址是2400H、2401H、825(I)的控制字和状态字寄存器地址为2001H,数据缓冲器地址为2000H,8251(II)的控制、状态寄存器的地址为2801H,数据缓冲寄存器的地址为2800H。
二、软件设计
  软件设计包括波特率的计算、初始化程序及通讯程序。
(一)波特率的计算
8251的波特率取决于RXC、TXC的时钟输入。在异步方式中,RXC、TXC可以是波特率,也可以是波特率的16倍或64倍,由8251控制字中的波特率因子决定。在本例中,我们设波特率因子为异步*16,即RXC、TXC是传输波特率的16倍。
从图8.47可以看出,8251的接收发送时钟由8253的OUT端提供。因此设置波特率的关键在于确定8253的计数常数N。
若将8253设置成工作方式3,则OUT端输出周期性的方波信号,其频率为fout=fclk/N,其中N为计数器的计数常数,fclk为8253的输入时钟.
设8251的分频系数为16,则波特率可由下式计算:
波特率= =
在图8.47中,fclk由系统时钟经4分频得到,若系统选用6M晶振,则fout=1.5MHz.
若8251采用2400的波特率发送、接收数据,则8253的计时常数为:
N= = ≈39=27H
同样,当采用1200的波特率时:
N= ≈78=4CH
(二)初始化编程
初始化程序主要包括8253的初始化及8251的初始化。
在图8.47中,若要求8251(Ⅰ)的波特率为2400,8251(Ⅱ)的波特率为1200,均工作在异步方式,波特率因子为异步*16,每个字符8位,一个停止位,偶校验,允许发送/接收,则初始化编程如下:
;8253初始化:
MOV DPTR,#2403H ;对0通道初始化
MOV A,#36H ;送0通道控制字
MOVX @DPTR,A
MOV DPTR,#2400H ;送0通道时间常数
MOV A,#27H ;送时间常数低字节
MOV @DPTR,A
MOV A,#00H ;送时间常数高字节
MOVX @DPRT,A
MOV DPTR,#2403H ;送1通道控制字
MOV A,#76H
MOVX @DPTR,A
MOV DPTR,#2401H ;送1通道时间常数
MOV A,#4CH ;送时间常数低字节
MOVX @DPTR,A
MOV A,#00H
MOVX @DPTR,A
;8251(Ⅰ)初始化:
MOV DPTR,#2001H ;送方式控制字
MOV A,#7EH
MOVX @DPTR,A
MOV A,#37H ;送命令指令
MOVX @DPTR,A
;8251(Ⅱ)初始化:
MOV DPTR,#2801H
MOV A,#7EH
MOVX @DPTR,A
MOV A,#37H
MOVX @DPTR,A
(三) 查询方式通讯软件
   以8251(Ⅰ)为例,给出发送、接收一个字符的子程序。其中2000H为数据口,2001H为命令/状态口。(初始化程序同上,略)
发送一个字符子程序:
Sendchar: PUSH ACC ;保护将要发送的数据
MOV DPTR,#2001H ;读状态口
Waitsend: MOVX A,@DPTR
RRC A
JNC Waitsend ;发送器未准备好,循环等待
POP ACC
MOV DPTR,#2000H ;发送字符
MOVX @DPTR,A
RET
接收一个字符子程序:
Recelive: MOV DPTR,#2001H ;读状态口
Waitrece: MOVX A,@DPTR
ANL A,#02H
JZ Waitrece ;接收器未准备好就循环
MOV DPTR,#2000H ;从数据口读入一字符
MOVX A,@DPTR
RET ;返回
(四) 中断方式通讯软件
以8251(Ⅰ)为例。若8251波特率为2400,异步方式,分频系数为16,字符长度为8位,偶校验,1位停止位,编写程序如下:
ORG 0000H
LJMP START ;转初始化程序
ORG 0003H
LJMP SERVE ;INT0中断入口
……
ORG 0050H
SETART:MOV DPTR,#2403H ;8253通道0初始化
MOV A,#36H
MOV @DPTR,A ;送控制字
MOV DPTR,#2400H ;送时间常数低位
MOV A,#27H
MOVX @DPTR,A
MOV A,#00H ;送时间常数高位
MOVX @DPTR,A
MOV DPTR,#2001H ;8251(Ⅰ)初始化
MOV A,@7EH ;送方式控制字
MOVX @DPTR,A
MOV A,#37 ;送命令指令
MOVX @DPTR,A
SETB EA ;开中断
SETB EX0 ;允许外部中断0中断
LJMP MAIN ;转主程序
……
;INT0中断服务程序:
SERVE:CLR EA ;禁止中断
PUSH ACC ;保护现场
PUSH PSW
PUSH DPH
PUSH DPL
MOV DPTR,#2001H
MOVX A,@DPTR
RRC A
JC Send ;为TXRDY,转发送处理
RRC A
JC Receive ;为RXRDY,转接收处理
END:POP DPL
POP DPH
POP PSW
POP ACC
SETB EA
RETI ;中断返回
Send:…… ;发送处理程序(略)
LJMP END
……
Receive:…… ;接收处理程序(略)
……
LJMP END
heruihung 发表于 2010-7-1 23:54:48 | 显示全部楼层
thanks!!!!!!!!!!!!!!!!!!!!!!!!!!!!
计数器 发表于 2010-7-13 12:17:25 | 显示全部楼层
发现之前学的东西全部还给老师了 T_T
田力 发表于 2012-5-10 19:23:28 | 显示全部楼层
谢谢分享!!!!
sjie518 发表于 2012-5-11 20:56:12 | 显示全部楼层
dingyixia、、、、、、、、、、、、、
339659359 发表于 2012-5-11 21:20:22 | 显示全部楼层
下来试试看看,谢谢楼主啦啦啦
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-23 10:51 , Processed in 0.057909 second(s), 12 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表