1、1,本章主要介绍串行通信概念及51系列单片机的串行口问题,将具体介绍以下内容:计算机串行通信基础-基本概念、标准接口 。51单片机串行口-串行口结构、串行口的控制寄存器、串行口的工作方式、应用举例。,第七章 MCS-51的串行口,2,本章学习目标,* 串行通信概述,7.1 串行口的结构,7.2 串行口的4种工作方式,7.3 多机通信,7.4 串行口的编程和应用,3,通 信 方 式,1. 异步通信与同步通信,并行通信方式空间上区分各位数据及联络控制信号。占用传输线多,速度快。,串行通信方式时间上区分各位数据及联络控制信号。占用传输线少,速度慢。,* 串行通信概述,4,*2. 串行通信方式,-信息
2、传输在一个方向上只占用一跟通信线,它既作为数据线,又作为联络线。,信息各式上分,异步通信方式按字符传输,同步通信方式按数据块传输,5,* 3. 异步通信方式,0,1,停止位,起始位,低位,高位,7位数据位,奇偶校验,停止位,第N个字符,第N-1个字符,6,异步通信方式利用每一帧的起、止信号建立发送和接收之间的同步。 特点: a、每一帧内部各位均采用固定的时间间隔 b、帧与帧之间的间隔是随机的 c、接收机依靠每一帧的起始位和停止位识别字符传送是否结束,或是一个新字符 d、异步传送时不传送同步时钟脉冲,异步传送方式中字符按帧格式传送。,7,* 4同步通信SYNC (Synchronous Data
3、 Communication),在同步通信中,数据或字符开始处是用一同步字符来指示(一般约定为12个字符),以实现发送端和接收端同步,一旦检测到约定同步字符,下面就连续按顺序接收数据。,8,同步传送方式是一种连续传送方式。,特点:a、在被传送的数据块前加上同步字符SYN;b、数据之间没有间隙;c、传输速度高、容量大;d、发送方在发送数据的同时,要将时钟信号同时传送。,9,* 5. 串行通信的波特率,波特率(band rate)是异步通信中每秒钟传送的二进制数码的位数(比特数),单位是位/秒。 作用:1、反映串行通信的速率;2、反映对传输通道的要求:波特率越高,要求的传输通道的频带宽度就越宽异步
4、通信:波特率为每秒传送的字符数和每个字符位数的乘积。例如:数据传送的速率为120个字符每秒,每个字符由1个起始位、8个数据位和1个停止位组成,则其传送波特率为: 10b120s1200bs1200波特。 注意:时钟频率和波特率不是同一个概念,时钟频率比波特率高得多。,10,* 6. 串行通信的方式,按照数据传送方向,串行通信可分为半双工(half duplex)制式和全双工(full duplex)制式。 1半双工制式在半双工制式下,甲机和乙机之间只有一个通信回路,接收和发送不能同时进行,只能分时发送和接收。,2全双工制式在全双工制式下,甲、乙两机之间数据的发送和接收可以同时进行,称为全双工传
5、送。不管哪种形式的串行通信,在两机之间均应有共地线。,11,* 7. 数据传送方向,单工方式,半双工方式,全双工方式,12,MCS-51 单片机串行接口的硬件,MCS-51 单片机串行接口的控制,MCS-51 单片机串行接口工作方式,P3.0 位的第二功能 收端 RXDP3.1 位的第二功能 发端 TXD,寄存器 SCON、PCON、SBUF寄存器 IE、IP,方式 0 方式 2,方式 1 方式 3,7.1 串行口的结构,13,有两个数据缓冲寄存器SBUF,一个输入移位寄存器,一个串行控制寄存器SCON和一个特殊功能寄存器PCON等组成。,8 位SBUF是全双工串行接口寄存器, 它是特殊功能寄
6、存器,地址为 99H,不可位寻址;串行输出时为发送数据缓冲器,发送寄存器只写不读,数据从 发送端TXD(P3.1)输出; 串行输入时为接收数 据缓冲器,接收寄存 器只读不写,数据从 接收端 RXD(P3.0) 输入;由指令确定是对发 送寄存器或接收寄存器作用。,14,SM0、SM1 串行接口工作方式定义位,SM0、SM1 = 00 方式 0,8位同步移位寄存器SM0、SM1 = 01 方式 1,10 位异步接收发送SM0、SM1 = 10 方式 2,11 位异步接收发送SM0、SM1 = 11 方式 3,11 位异步接收发送,7.1.1 串行口控制寄存器SCON,注意: 方式 0 的特点,方式
7、 2、方式 3 的差异,15,SM2 多机通信控制位(方式2和3),SM2 = 0,无多机通信SM2 = 1,允许多机通信,串行口控制寄存器SCON,REN 串行口接收数据控制位,REN = 1,允许串行口接收数据REN = 0,禁止串行口接收数据,由软件置位或清除,16,TB8 发送串行输出数据的第 9 位,串行口控制寄存器SCON,RB8 接收串行输入数据的第 9 位,双机通信时它可作奇偶校验位;在多机通信中可作为区别地址帧或数据帧的标识位。,在方式2和方式3中是接收的第9位数据。,17,TI 串行口中发送完一组数据后的中断标志,若串口发送完一组数据,则由硬件自动置 TI = 1 若串口还
8、要发数据,则应手动编程使 TI = 0,串行口控制寄存器SCON,RI 串行口中接收完一组数据后的中断标志,若串口接收完一组数据,则由硬件自动置 RI = 1 若串口还要收数据,则应手动编程使 RI = 0,18,7.1.2 特殊功能寄存器PCON,串行数据传送速率控制寄存器 PCON,SMOD = 0,定义波特率不变,SMOD = 1,定义波特率加倍,注:PCON 寄存器的地址为87H,仅 b7 位有用,不可位寻址。,地址:87H,TDL:等待方式位,PD:掉电方式,GF1、 GF2通用标志位,ANL PCON,7FH:对SMOD位清零,ORL PCON,80H:对SMOD位置位,19,7.
9、2 串行口的4种工作方式,SM0 SM1,串行口工作方式选择位,20,7.2.1 方式 0 移位寄存器输入/输出方式,非串行通信用方式扩展并行I/O,RXD、TXD 线的作用,用并入串出移位寄存器扩展并行输入口用串入并出移位寄存器扩展并行输出口,RXD 串 并、并 串 数据传送线TXD 同步时钟线,同步时钟为 fosc/12(固定波特率),注:为应用串行接口扩展并行接口的方式。,串行口为同步移位寄存器方式,21,7.2.2 方式 1 10 位异步接收/发送(波特率可变),方式 1 的数位,1 位起始位 值 08 位数据位 为有用信息(低位在前,可含 1 位校验位)1 位停止位 值 1,异步传送
10、时的速率设置,速率设置的方法 设置定时器 T1 的初值常用波特率:用T1作为波特率发生器,B=(2SMOD/32)T1溢出率。,串行口为8位异步通信接口,22,方式 1(续),异步发送时的工作过程,发送条件 清 SCON 中发送中断标志 TI = 0,发送指令 MOV SBUF,A,注: 需发送的 8 位字节数据送串行数据缓冲器SBUF 后将启动异步发送开始。,起始位 0、停止位 1 在执行发送指令时自动加入,发送传输线 TXD、GND,发送 10 位数据结束 发送中断标志 TI = 1,注: 若需继续发送,置TI = 0,送数据到 SBUF,23,方式 1(续),异步接收时的工作过程,接收条
11、件 清 SCON 中接收中断标志 RI = 0置 SCON 中接收控制标志 REN = 1,接收传输线 RXD、GND,接收同步位 接收传输线 RXD 有从 1 到 0 的信号,接收数据 9 位数据送数据接收器,8 位字节数据送串行数据缓冲器 SBUF 1 位停止位送入 SCON 中的 RB8 = 1,接收 10 位数据结束 接收中断标志 RI = 1,注: 若需继续接收,置RI = 0,24,7.2.3 方式 2 11 位异步接收/发送(波特率固定),方式 2 的数位,1 位起始位 值 08 位数据位 为 1 字节有用信息 1 位校验位 对有用信息的奇偶校验1 位停止位 值 1,异步传送时的
12、速率设置,若 PCON 中 SMOD = 0,速率 = fosc/32若 PCON 中 SMOD = 1,速率 = fosc/64,串行口为9位异步通信接口,25,方式 2(续),异步发送时的工作过程,异步接收时的工作过程,基本过程同方式 11 位校验位在发送前应先置入 SCON 中的 TB8,基本过程同方式 11 位校验位(第 9 位)送 SCON 中的 RB8,注: RB8 中未存放 1 位停止位,26,7.2.4 方式 3 11 位异步接收/发送(波特率可变),方式 3 11 位异步接收/发送(波特率可变),基本定义同方式 2,速率设置同方式 1,注: 方式 0 固定波特率为 fosc/
13、12方式 2 固定波特率为 fosc/32或fosc/64上述方式与单片机主频有关方式 1 可变波特率方式 3 可变波特率上述方式与定时器 T1 的初值有关,27,7.3 多机通信,多个MCS-51单片机可以利用串行口进行多机通信。在多机通信中要保证主机与所选择的从机实现可靠地通信,必须保证串行口具有识别功能。控制寄存器SCON的SM2位就是为满足这一条而设置的多机通信控制位。原理:在串行口以方式2(或方式3)接收时,若SM21,表示置多机通信功能位,此时可能出现两种情况:接收到的第9位数据为1时,数据才装入SBUF,并置中断标志RI1,向CPU发出中断请求。接收到的第9位数据为0时,则不产生
14、中断标志,信息抛弃若SM20,则接收到的第9位数据不论为0还是1,都产生RI1中断标志,接收到的数据装入SBUF。,28,多机通信系统示意图,多机通信的实现,主要靠主、从机之间正确地设置与判断多机通信控制位SM2和发送或接收的第9数据位(D8)。下面简述如何实现多机通信。,29,(1)主、从机均初始化为方式2或方式3,置SM21,允许中断。 (2)主机置TB81,发送要寻址的从机地址。 (3)所有从机均接收主机发送的地址,并进行地址比较。 (4)被寻址的从机确认地址后,置本机。SM20,向主机返回地址,供主机核对。 (5)核对无误后,主机向被寻址的从机发送命令,通知从机接收或发送数据。 (6)
15、通信只能在主、从机之间进行,两个从机之间的通信需通过主机作中介。 (7)本次通信结束后,主、从机重置SM21,主机可再对其他从机寻址。,30,例:主机向02号从机发送50H5FH中的数据;02号从机将接收到的数据放到内RAM30H 3FH单元中。,主机程序: ORG 0030H MAIN:MOV SCON,98H M1: MOV SBUF,02H L1: JNB TI,$CLR TIJNB RI,$MOV A,SUBFXRL A,#02HJZ RHTAJMP M1,RHT :CLR TB8MOV R0,50H M1: MOV R7,10H L3: MOV A,R0MOV SBUF,AJNB T
16、I,$CLR TIINC R0DJNZ R7,L3AJMP MAINEND,31,从机程序: ORG 0030H MAIN: MOV R0,30HMOV R6,10H SI: MOV SCON,0B0H SR1: JNB RI,$CLR RI SR2: MOV A,SUBFXRL A,#02HJNZ SR1CLR SM2MOV SBUF,#02HJNB TI,$CLR TI,SR3 :JNB RI,$CLR RIJNB TB8,RHTSETB SM2SJMP SR1 RHT: MOV A,SBUFMOV R0 , AINC R0DJNZ R6,SR3AJMP SIEND,32,7.3 波特率的
17、制定方法,(1)方式0的波特率在方式0下,串行口通信的波特率是固定的,其值为fosc/12(fosc为主机频率)。 (2)方式2的波特率在方式2下,通信波特率为fosc/32或fosc/64,根据特殊功能寄存器PCON中SMOD位的状态来决定串行口在那个波特率下工作。选择公式为:,波特率的定义串行口每秒钟发送(或接收)的位数。,33,(3)方式1或方式3的波特率在这两种方式下,串行口波特率是由定时器的溢出率决定的,因而波特率是可变的。波特率的公式为:,式中:K为定时器T1的位数。,34,定时器T1产生的常用波特率,35,7.3 串行口的编程和应用,方式 0 用于扩展并行 I/O口,方式 1 和
18、方式 3 仅传送数位不同,方式 2 为固定波特率,方式 1 和方式 3 均需设置可变波特率,36,方式 0 用于扩展并行 I/O口,串 并方式,扩展并行输出口,电路图,RXDTXD,DATACLK,功能线,RXD 接移位寄存器的数据输入端TXD 接移位寄存器的同步时钟端,8031,串入并出移位寄存器,注: 注意信号方向,37,方式 0 用于扩展并行 I/O口,并 串方式,扩展输入口,电路图,功能线,RXDTXD,DATACLK,8031,并入串出移位寄存器,RXD 接移位寄存器的数据输出端TXD 接移位寄存器的同步时钟端,注: 注意信号方向,38,方式 0 用于扩展并行 I/O口,例10.1:
19、用 8031 的串口外接 1 个串入并出移位寄存器 芯片CD4094 扩展为 8 位并行输出口,并口接 8 个 LED,并循环轮流显示。,电路图,P1.0,DATACLK,TBS,CD4094,8031,TXD,RXD,39,方式 0 用于扩展并行 I/O口,编程,ORG 0000HLJMP MAINORG 0023HLJMP SBR MAIN: MOV SCON,#00XXXX0XB ; 方式 0,TI = 0SETB EASETB ESMOV A,#10000000B ; 初值,左边 LED 亮CLR P1.0 ; CD4094 输出并口关闭MOV SBUF,A ; 数据传出,产生中断 L
20、OOP: SJMP $,40,方式 0 用于扩展并行 I/O口,编程(续),SBR: SETB P1.0 ; CD4094 输出并口打开,LED 亮ACALL DELAYCLR TI ; 手动清中断标志RR A ; 循环位移; 80H、40H、20H、10H、08H CLR P1.0 ; CD4094 输出并口关闭MOV SBUF,A ; 数据传出,产生中断RETIEND,注: 延时子程序 DELAY 未给出,41,方式 0 用于扩展并行 I/O口,例10.2:用 8031 的串口外接 1 个并入串出移位寄存器 芯片 CD4014 扩展为 8 位并行输入口,并口 接 8 个开关量输入,开关 K
21、 闭合时有效。,电路图,P/S,CD4014,8031,P1.0,K,RXD,TXD,DATA,CLK,P1.1,42,方式 0 用于扩展并行 I/O口,编程,START: JB P1.0,START ; 若 K 未合上则循环查询SETB P1.1 ; CD4014 并行数据输入有效MOV SCON,#00X1XXX0B; 方式 0,REN = 1 允许接收,RI = 0 CLR P1.1 ; CD4014 串行数据输出有效LOOP: JNB RI,LOOP ; 若 RI = 0 数据未收完; 若 RI = 1 数据已收完CLR RI ; 手动清 RI,准备下次传送数据MOV A,SBUF,4
22、3,方式 1 用于串行通信,例10.3:8031串行口双工方式收发 ASCII 字符,最高1 位用来作奇偶校验位,采用奇校验方式,波特率为 1200 。,工作方式,数据区,主频选用,方式 1, 7 位 ASCII 码,1 位校验码,发送数据区首址 20H,接收数据区首址 40H,T1 设置,fosc = 6MHz,方式 2,初值为 F4H(查表 10.2),44,方式 1 用于串行通信,主程序(2 个单片机均有),ORG 0000H LJMP MAIN ORG 0023H LJMP SBR1 MOV TMOD,#20H ; 定时器 T1 设置为方式 2 MOV TL1,#0F4H MOV TH
23、1,#0F4H ; 装定时器 T1 的初值 SETB TR1 ; 启动定时器 T1,45,方式 1 用于串行通信,主程序(2 个单片机均有),MOV SCON,#50H ; 串口工作方式 1,REN = 1 MOV R0,#20H ; 发数据区首址 MOV R1,#40H ; 收数据区首址 SETB ET1 ; 开 T1 中断 SETB ES ; 开串口中断 SETB EA ; 开总中断 ACALL SOUT ; 调用发送子程序 SJMP $,46,方式 1 用于串行通信,串行口中断服务程序,SBR1: JNB RI,SENDACALL SIN ; 若 RI = 1,调用接收子程序SJMP N
24、EXT SEND: ACALL SOUT ; 若 RI = 0,调用发送子程序 NEXT: RETI,47,方式 1 用于串行通信,发送子程序,SOUT: MOV A,R0MOV C,PCPL CMOV ACC.7,CINC R0MOV SBUF,ACLR,TIRET,48,方式 1 用于串行通信,接收子程序,SIN: MOV A,SBUFMOV C,PCPL CANL A,#7FHMOV R1,AINC R1CLR RIRET,49,7.3 单片机串行口的应用,7.3.1 串行口扩展显示器 【例7-1】用8位串入并出移位寄存器74HC164扩展显示器。,50,功能:把数据从显示缓冲区送到数码
25、管。 入口;将要显示的数放在以DIS0为首的8个单元中。 出口:把预置的数输出以更新原有的显示。,MOV R2,08H ;显示8个数码管MOV R0,DIS7 ;显示缓冲区未地址送入R0 DL0:MOV A,R0 ;取要显示数作查表偏移量 MOV DPTR,TAB ;指向字形表首 MOVC A,ADPTR;查表得字形码 MOV SBUF,A ;发送显示 DL1: JNB T1,DL1 ;等待发送完一帧 CLR T1 ;清中断标志,准备继续发送DEC R0 ;更新显示单元DJNZ R2,DL0 ;重复显示所有数码管 TAB: DB 0C0H,0F9H,0A4H,0B0H,99H;0,1,2,3,
26、4, DB 92H,82H,0F8H,80H,90H;5,6,7,8,9, DB 88H,83H,0C6H,0A1H,86H;A,B,C,D,E,DB 8EH,0BFH,8CH,0FFH;F,P,暗,51,7.3.2 串行口扩展的键盘,在方式0下,串行口作同步移位寄存器用,以8位数据为一帧,先发送或接收最低位,每个机器周期发送或接收一位,故其波特率是固定的,为fosc12。串行数据由RXD(P3.0)端输入或输出。,52,CJNE R1,08,LP1 SJMP RCVI N1:MOV A,R0 ADD A,A JMP ADPTR TAB:AJMP OPR0 AJMP OPR1 AJMP OPR
27、7 OPR0: LJMP START OPR7: LJMP START END,ORG 0100H START: MOV R7,20 MOV R0,50H MOV DPTR,#TAB RCVI:MOV SCON,10H JNB RI,$ CLR RI MOV A,SBUF MOV R0,#0 MOV R1,#0 LP1: RRC A JNC N1 INC R0 INC R1,53,7.3.3 双机通信,编程使乙机从甲机接收16个字节数据块,并存入片外3000H300FH单元。接收过程中要求判奇偶校验标志RB8。若出错则置F0标志为1,若正确则置F0标志为0,然后返回。,【例7-3】编程把甲机片
28、内RAM50H5FH单元中的数据块从串行口输出。定义在方式3下发送,TB8作奇偶校验位。采用定时器1方式2作波特率发生器,波特率为1200波特,fosc110592MHz,预置值TH10E8H。,54,发送子程序如下:,MOV TMOD,#20H ;设置定时器1为方式2 MOV TL1,0E8H ;设预置值 MOV TH1,0E8H SETB TRI ;启动定时器1 MOV SCON,0C0H ;设置串行口为方式3 MOV PCON,00H ;SMOD0 MOV R0,#50H ;设数据块指针 MOV R7,10H ;设数据长度10H TRS: MOV A,R0;取数据送至A MOV C,P
29、MOV TB8,C ;奇偶位P送至TB8 MOV SBUF,A 启动发送 WAIT: JNB TI,$ ;判1帧是否发送完 CLR TI INC R0 ;更新数据单元 DJNZ R7,TRS ;循环发送至结束,55,接收子程序编程如下:,MOV TMOD,20H ;设置定时器1为方式2 MOV TL1,0E8H ;设预置值 MOV TH1,0E8H SETB TR1 ;启动定时器1 MOV SCON,0C0H ;设置串行口为方式3 MOV PCON3,00H ;SMOD0 MOV DPTR,3000H ;设置数据块指针 MOV R7,10H ;设数据块长度 SETB REN ;允许接收 WAI
30、T: JNB RI,$ ;判1帧是否接收完 CLR RI,56,MOV A,SBUF ;读入1帧数据 JNB PSW.0,PZ ;奇偶位P为0则跳转 JNB RB8,ERR ;Pl,RB80则出错 SJMP YES ;二者全为1则正确 PZ: JB RB8,ERR ;P0,RB8l则出错 YES: MOVX DPTR,A ;正确,存放数据 INC DPTR ;修改地址指针 DJNZ R7,WAIT ;判断数据块接收完否 CLR PSW.5 ;接收正确且接收完清F0标志 RET ;返回 ERR: SETB PSW.5 ;出错则置F0标志为“l” RET ;返回,57,作业10.1 10.3,58,END,