第 7章 串行接口与应用
7.1 串行通信的基本知识
7.2 MCS-51单片机串行口的结构与工作方式
7.3 主从式多机通信退出
7.1 串行通信的基本知识在 MCS-51单片机内部,有一个通用异步接收 /发送器 ( UART) 。 这是一个全双工串行接口,能同时进行发送和接收数据 。 利用这个串行接口,可以实现单片机之间的单机通信,多机通信,以及与 PC机之间的通信 。
7.1.1 数据通信的基本概念
1,数据通信
2,通信方式有两种通信方式:一种是并行通信,一种是串行通信。
7.1.2 串行通信方式串行通信有三种方式:单工通信、半双工通信和全双工通信。
7.1.3 数据同步技术
1,异步通信
7.2 MCS-51单片机串行口的结构与工作方式
7.2.1 串行口的结构
MCS-51有一个可编程的全双工串行通信接口,可作为通用异步接收 /发送器 UART,也可作为同步移位寄存器 。 它的帧格式有 8位,10位和 11位,可以设置为固定波特率和可变波特率,给使用者带来很大的灵活性 。
7.2.2 串行口控制寄存器 SCON和电源控制寄存器
PCON
1,串行口控制寄存器 SCON
串行口控制寄存器 SCON决定串行口通信工作方式,
控制数据的接收和发送,并标示串行口的工作状态等。
其位格式为:
SM0,SM1:串行口工作方式控制位,两位对应四种工作方式,如表 7-1所示( fosc是晶振频率)。
2,电源控制寄存器 PCON
电源控制寄存器 PCON中只有一位 SMOD与串行口工作有关,它的位格式为:
SMOD:波特率倍增位 。 串行口工作在方式 1,方式 2,方式 3时,若 SMOD=1,则波特率提高一倍;若
SMOD=0,则波特率不提高一倍 。 单片机复位时,
SMOD=0。
7.2.3 波特率设计
1,方式 0的波特率工作方式 0时,移位脉冲由机器周期的第 6个状态周期 S6给出,每个机器周期产生一个移位脉冲,发送或接收一位数据 。 因此,波特率是固定的,为振荡频率的 1/12,不受 PCON寄存器中 SMOD的影响 。 用公式表示为:
工作方式 0的波特率 =fosc/12
2,方式 2的波特率工作方式 2时,移位脉冲由振荡频率 fosc的第二节拍 P2时钟(即 fosc/2)给出,所以,方式 2波特率取决于 PCON中的 SMOD位的值,当 SMOD=0时,波特率为 fosc的 1/64;当 SMOD=1时,波特率为 fosc的 1/32,
用公式表示为;
工作方式 2波特率 =( 2SMOD/64) × fosc
3、工作 方式 1和方式 3的波特率
【 例 8-1】 8051单片机时钟振荡频率为
11.0592MHZ,选用定时器 T1(工作在方式 2)作波特率发生器,波特率为 4800bps,求定时器 T1的初值 X。
解 设波特率控制位 SMOD=0,则:
X=256?( 11.0592× 106× ( 0+1) /( 384× 4800)
=250=FAH
所以,( TH1) =( TL1) =FAH
系统晶振频率选用 11.0592MHZ,是为了使初值为整数,从而产生精确的波特率。
7.2.4 串行口的四种工作方式串行口的四种工作方式中,串行通信只使用方式 1、
方式 2、方式 3,方式 0主要用于扩展并行输入输出口。
1,串行口工作方式 0
7.3 主从式多机通信
7.3.1主从式多机通信原理
7.3.2多机通信协议
7.3.3串行通信实例
【 例 7-1】 有两台 8031单片机相距很近,直接将它们的串行口相连,1#机的 TXD接 2#机的 RXD,2#机的
TXD接 1#机的 RXD,二机的 GND相连 。 二机的晶振频率均为 11.0592MHZ,通信的波特率为 4800bps。 现将第一台 8031单片机片内 RAM40H~ 5FH单元内的数据,
串行发送到第二台 8031单片机片内 RAM60H~ 7FH单元中 。
发送与接收的参考程序如下:
1#单片机发送程序:
ORG 1000H
TX,MOV TMOD,#02H
MOV TH1,#0FAH
MOV TL1,#0FAH
MOV SCON,#80H ;
设定工作方式 2
MOV PCON,#00H ;
波特率为 fosc/64
SETB TR0
MOV R0,#40H ;设发送数据的地址指针
MOV R2,#20H ;设发送数据长度
LOOP,MOV A,@R0 ;取发送数据送 A
MOV C,PSW.0
MOV TB8,C ;奇偶位送 TB8
MOV SBUF,A ;启动发送
WAIT,JBC TI,LL1 ;判发送中断标志
SJMP WAIT
LL1,INC R0
DJNZ R2,LOOP
RET
2#单片机接收程序:
ORG 1000H
RX,MOV TMOD,#02H
MOV TH1,#0FAH
MOV TL1,#0FAH
MOV SCON,#90H ;设定工作方式 2,并允许接收
MOV PCON,#00H
SETB TR0
MOV R0,#60H
MOV R2,#20H
LOOP,JBC RI,MM1 ;等待接收数据
SJMP LOOP
MM1,MOV A,SBUF ;读入一帧数据
JB PSW.0,PP1 ;判接收端奇偶
JB RB8,ERROR ;判发送端奇偶
SJMP RIGHT
PP1,JNB RB8,ERROR ;接收出错
RIGHT,MOV @R0,A ;接收正确
INC R0
DJNZ R2,LOOP
ERROR,SETB PSW.5 ;置出错标志
RET
【 例 7-2】 甲乙两机进行串行通信,将甲机片外
RAM中 1000H单元开始的 32个数据发送到乙机的片外
RAM 1000H开始的单元中。二机的晶振频率均为
11.0592MHZ,通信的波特率为 1200bps。
设甲、乙机串行口均工作在方式 1,根据发送和接收的波特率,设置定时器 T1工作在方式 2,当
SMOD=0,则计数初值为 E8H。甲机发送子程序流程图如图 7-7( a)所示,乙机接收子程序流程图如图 7-7
( b)所示。
参考程序如下:
(1)甲机发送子程序:
ORG 1000H
TTTT,MOV TMOD,#20H
MOV TH1,#0E8H
MOV TL1,#0E8H
SETB TR1
MOV SCON,#50H
MOV 87H,#00H
ENTER,MOV DPH,#10H
MOV DPL,#00H
MOV R4,#20H
MOV R5,#00H
TX1,MOV A,#04H
MOV SBUF,A
WAIT1,JBC TI,RX1
SJMP WAIT1
RX1,JBC RI,NEXT1
SJMP RX1
NEXT1,MOV A,SBUF
CJNE A,#00H,TX1
TX2,MOV A,R4
MOV SBUF,A
ADD A,R5
MOV R5,A
WAIT2,JBC TI,TX3
SJMP WAIT2
TX3,MOVX A,@DPTR
MOV SBUF,A
ADD A,R5
MOV R5,A
INC DPTR
WAIT3,JBC TI,NEXT2
SJMP WAIT3
NEXT2,DJNZ R4,TX3
MOV A,R5
MOV SBUF,A
WAIT4,JBC TI,RX_11H
SJMP WAIT4
RX_11H,JBC RI,IF_11H
SJMP RX_11H
IF_11H,MOV A,SBUF
CJNE A,#11H,ENTER
RET
(2)乙机接收子程序:
ORG 1000H
RRRR,MOV TMOD,#20H
MOV TH1,#0E8H
MOV TL1,#0E8H
SETB TR1
MOV SCON,#50H
MOV 87H,#00H
ENTER,MOV DPH,#10H
MOV DPL,#00H
MOV R5,#00H
RX1,JBC RI,IF_04H
SJMP RX1
IF_04H,MOV A,SBUF
CJNE A,#04H,TX_FFH
MOV A,#00H
MOV SBUF,A
WAIT1,JBC TI,RX2
SJMP WAIT1
LJMP RX2
TX_FFH,MOV A,#0FFH
MOV SBUF,A
WAIT2,JBC TI,LL1
SJMP WAIT2
LL1,LJMP ENTER
RX2,JBC RI,LL2
SJMP RX2
LL2,MOV A,SBUF
MOV R4,A
MOV R5,A
RX3,JBC RI,LL3
SJMP RX3
LL3,MOV A,SBUF
MOVX @DPTR,A
INC DPTR
ADD A,R5
MOV R5,A
DJNZ R4,RX3
RX4,JBC RI,LL4
SJMP RX4
LL4,MOV A,SBUF
MOV 30H,R5
CJNE A,30H,T_ERR
T_RIGHT:MOV A,#11H
MOV SBUF,A
WAIT3,JBC TI,EN
SJMP WAIT3
T_ERR,MOV A,#0F0H
MOV SBUF,A
WAIT4,JBC TI,AGAIN
SJMP WAIT4
AGAIN,LJMP ENTER
EN,RET