- 串行口控制寄存器SCON
- 电源控制寄存器PCON
- 工作方式
1. 工作方式0
- 波特率=fosc/12
- SCON中SM2=0(非多机通讯)
- 8位串行数据从RXD输入或输出,TXD输出同步脉冲,每个机器周期传输1位数据
- 输出:CPU将数据写入发送寄存器时,立即启动发送,8位数据从RXD输出时,低位在前,高位在后;发送完一帧数据后,发送中断标志TI由硬件置位;
- 输入:当RI=0和REN=1同时满足时,有移位脉冲开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。
1.1 使用89C51串行口外接串入并出寄存器74HC164扩展并行口,8位并行口的每位接一个发光二极管,要求发光二极管以1s的延迟轮流循环显示。
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP SBR
ORG 0100H
MAIN: SETB ES
SETB EA
MOV SCON,#00H ;工作方式0
MOV A,#7FH ;准备发送数据
MOV SBUF,A ;发送
LOOP: NOP
SJMP LOOP
;中断程序
SBR: SETB P1.0
LCALL DELAY
CLR TI ;手动清0,发送完成的标志位
RR A
MOV SBUF,A
RETI
;延时子程序
DELAY1S: MOV R6,#10 ;估计是11.0592Hz
DELAY0: MOV R5,#200
DELAY1: MOV R4,#230
DELAY2: DJNZ R4,DELAY2
DJNZ R5.DELAY1
DJNZ R6,DELAY0
2.工作方式1
- 发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1;
- 发送:是靠写入SBUF的指令来启动的。
- 接收:在REN=1时,串行口采样RXD引脚。
- 接收值是3次采样中至少两次相同的值;
- 当采样到1至0的跳变(起始位)时,开始接收一帧数据;
- 满足(1)RI=0,(2)停止位=1时,8位数据进入接收寄存器,并由硬件置位中断标志RI
- 波特率设置
- 8位URAT
3.工作方式2 -9位URAT
- 发送或接收一帧信息,包括1个起始位0,9个数据位(多一位自定义位TB8/RB8)和1个停止位1。
- 发送或接收控制同方式1。
4.方式3 -9位URAT
- 接收和发送时序同方式2;
- 使用注意事项同方式2;
- 波特率设定同方式1 :
5.串行口的应用
单片机89C51甲为下位机,当自身工作正常时向上位机单片机89C51乙发送数据00H;若出现异常,则发送故障号XXH。上位机在P1口显示下位机故障。
上位机和下位机串口采用方式1,晶振选择11.0592MHz,通信波特率为9600bps。T1为波特率发生器,选择工作方式2。上、下位机发送接收数据采用中断方式。
解:工作方式1
- SCON的SM0,SM1=01
- PCON的SMOD位为0
- T1工作方式2,TMOD=20H,晶振选择11.0592MHz,通信波特率为9600bps
计算得出T1装入的初值为:X=253(FDH)
;下位机程序
ORG 0000H
LJMP START
ORG 0023H ;串行口中断
LJMP SEND
ORG 0100H
START: MOV SCON,#01000000B ;上下位机工作方式为1
MOV PCON,#00H ;波特率不提高一倍
MOV TMOD,#20H ;定时器T1,模式2,256
MOV TH1,#0FDH ;初始化波特率
MOV TL1,#0FDH ;
MOV 70H,#0H ;准备送的数
SETB EA ;开总中断
SETB ES ;开串口中断
SETB ET1 ;开T1中断
SETB TR1 ;
MOV A,70H ;故障号
MOV SBUF,A
LOOP:NOP
LCALL CHECK ;检错程序
LJMP LOOP
CHECK:........RET
SEND: CLR TI ;必须手动清除传送完成标志
MOV A,70H
MOV SBUF,A
RETI
END
;上机位程序
ORG 0000H
LJMP START
ORG 0023H ;串行口中断
LJMP RECIVE
ORG 100H
START: MOV SCON, #40H ; UART 方式1
MOV PCON, #00H ; SMOD=0
MOV TMOD, #20H ; T1: 模式2
MOV TH1, #0FDH ; 初始化波特率
MOV TL1, #0FDH
SETB EA ; 开总中断
SETB ES ; 开串口中断
SETB ET1 ; 开T1中断
MOV 71H, #0H
SETB TR1 ; T1开始工作
SETB REN ;允许接收
LOOP:NOP
MOV P1,71H
NOP
SJMP LOOP
RECIVE: CLR RI
MOV A,SBUF
MOV 71H,A
RETI
END