8051单片机的异步串行通信技术 联系客服

发布时间 : 星期一 文章8051单片机的异步串行通信技术更新完毕开始阅读

另外,电源控制寄存器PCON中SMOD位可影响串行口的波特率。 当(SMOD)=1,串行口波特率加倍。

还有中断允许寄存器IE中的ES位可选择串行口中断允许或禁止。 ES=0,禁止串行口中断 ES=1,允许串行口中断

第三节 80 51串行通信工作方式及应用

8051单片机的串行通信共有四种工作方式:

1. 串行工作方式0

串行口为同步移位寄存器方式,波特率固定为f晶振/12。该方式主要用于I/O口扩展等,

方式0传送数据时,串行数据由RXD(P3.0)端输入或输出,而TXD(P3.1)此时仅作为同步移位脉冲发生器发出移位脉冲。

串行数据的发送和接收以8位为一帧,不设起始位和停止位,其格式如下:

D0 D1 D2 D3 D4 D5 D6 D7 方式0输出数据时,向SBUF写入数据的指令: MOV SBUF, A 或:

MOV SBUF, XXH

即为从RXD端输出数据的发送启动指令。当8位数据全部移出后,SCON 中的TI位被自动置1。

方式0输入数据时,使 SCON 中REN位置1指令:

SETB REN

即为从RXD端输入数据启动指令。当接收到8位数据后SCON中的RI位被自动置1。 方式0工作时往往需要外部有串入并出寄存器(输出)和并入串出寄存器(输入)配合使用,方式0多用于将串行口转变为并行口的使用场合,如图8—4所示:

并行输出 并行输入 8051 串行输出 P8 …… P1 8051 串行输入 P8 …… P1 RXD D CD4094 RXD Q8 CD4014 TXD CLK STB TXD CLK P/S 移位脉冲 移位脉冲 P1.0 P1.0 (a) (b)

图8—4 串行工作方式0与输入,输出电路的连接示例

图8—4(a)中CD4094是”串入并出”移位寄存器,TXD端输出频率为F

晶振 /12

的固定

方波信号(移位脉冲),在该移位脉冲的作用下,D端串行输入数据可依次存入CD4094内部8D锁存器锁存。P1.0为选通信号, 当P1.0=STB为高电平时,将内部8D锁存器数据并行输出。图8—4(b)中CD4014为“串入/并出—串出”移位寄存器,P1—P8为并行输入端,Q8为串行输出端,当P1.0=P/S=1,加在并行输入端P1—P8上的数据在时钟脉冲作用下从Q8端串行输出。

方式0的移位操作的波特率固定为单片机晶振频率f晶振的十二分之一。 即:

波特率=f晶振/12。

例如当f晶振=12MHZ,波特率 = 10 (位/秒)。

例8—1 试编写从CD4094并行输出数据36H的参考程序: 解: 参考程序如下:

MOV SCON, #00H CLR ES

; 串行口工作方式0。

6

; 禁止串行口中断。

; 传送数据送A。 ; 关闭并行输出。

MOV A, #36H CLR P1.0 MOV SBUF, A

; 启动串行输出。

HERE:JBC TI, FS AJMP HERE FS:SETB P1.0

RET

2.串行工作方式1

(1) 方式1传送的数据格式

; 等待串行输出完毕。

;开启并行输出。 ;返回。

方式1传送一帧为10位的串行数据,包括1位起始位,8位数据位和1位停止位。其帧格式为:

始 D0 D1 D2 D3 D4 D5 D6 D7 停 止

(2)方式1的波特率的确定

方式1的波特率是可变的,计算公式为:

smod

波特率=(2/ 32)×( T1溢出率)

其中smod为PCON寄存器最高位的值。

所谓定时器T1的溢出就是T1在单位时间内溢出的次数。如设T1为工作方式2,那么T1定时时间:

88

T1定时=(2—X)×T机 =(2—X)×12 / F晶振

8

则T1的溢出率= 1/ T1定时= F晶振 /(12(2—X))

由此可得波特率的计算公式为:

波特率=(2

实际使用时总是先确定波特率,再计算定时器T1的记数初值X,然后进行T1的初始化。根据上述波特率的计算公式,可得T1记数初值的计算公式为:

X = 256 -(F晶振×2

smod

smod

/32)×F晶振 /(12(2—X))

8

)/(384×波特率)

定时器T1之所以选择工作方式2,是因为方式2具有自动加载功能,可避免通过程序反复装入计数初值而影响波特率的准确性。

(3)方式1数据的发送和接收

方式1的数据发送由一条写入单片机发送寄存器SBUF指令启动。8位数据在串行口由硬件自动加入起始位和停止位组成完整的帧格式。在内部移位脉冲作用下,由TXD端串行输出。发送完一帧数据后,使TXD输出端维持”1”状态并置使TI标志位置1以通知CPU发送下一个字符。

接收数据由接收单片机SCON中的REN置1开始,随后串行口不断采样RXD端电平,当采样到RXD端电平从1向0跳变时,就认定是接收信号并开始接收从RXD端输入的数据,并送入内部接收寄存器SBUF中,直到停止位到来之后,并使RI位置1,通知CPU从SBUF中取走接收到的一帧字符。

方式1传送数据时发送前应先清TI,接收前应先清RI。

例8—2 甲,乙两单片机拟以工作方式1进行串行数据通信,波特率为1200,甲机发送,发送数据在甲机外部RAM 1000H-101FH单元中。乙机接收,并把接收数据依次放入乙机外部RAM 1000H-101FH单元中。甲,乙机晶振频率均为6MHZ。 连接方式如图8—5所示:

TXD RXD

甲机 乙机

图8—5 例8—2示意图 解:设定:

(1) 甲、乙机定时用工作方式2,即初值

6

6×10×1

X=256 - =243=F3H 384×1200 (2) SMOD=0,即波特率不倍增。 (3) 用查询传送方式。 (4) SCON=01000000B=40H