找回密码
 注册
搜索
查看: 909|回复: 1

[MCU资料] 学习资料4

[复制链接]
发表于 2008-3-28 18:41:36 | 显示全部楼层 |阅读模式
第四章  扩展多路串行口
一、硬件设计
以扩展二路串行通道为例,介绍8251与MCS-51单片机的接口方法,相应的硬件电路见图8.47。
图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
发表于 2008-6-24 04:29:11 | 显示全部楼层
[em02][em09][em12][em13][em14][em08][em01][em01]
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-25 14:29 , Processed in 0.075534 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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