480 likes | 666 Views
第六章 MCS-51 单片机的串行通信接口. 基于 KEIL 和 PROTEUS 的单片机技术 侯俊才. 6.1 串行通信概述 6.1.1 并行通信与串行通信 计算机与计算机之间,计算机与外设之间的数据交换称为 通信 。 计算机与外部设备的通信有两种基本方式:并行通信和串行通信。 一个信息的各位数据被同时传送的通信方法称为 并行通信 。并行通信依靠并行 I/O 接口实现。并行通信速度快,但传输线根数多,成本高,适合近距离通信,通常传送距离小于 30 米。
E N D
第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
6.1 串行通信概述 6.1.1 并行通信与串行通信 计算机与计算机之间,计算机与外设之间的数据交换称为通信。 计算机与外部设备的通信有两种基本方式:并行通信和串行通信。 一个信息的各位数据被同时传送的通信方法称为并行通信。并行通信依靠并行I/O接口实现。并行通信速度快,但传输线根数多,成本高,适合近距离通信,通常传送距离小于30米。 一条信息的各位数据被逐位顺序传输的通信方式称为串行通信。串行通信通过串行接口实现。串行通信速度慢,但传输线少,适宜长距离传输。 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
6.1.2 串行通信的两种基本方式 串行通信的两种基本方式:根据信息传送的格式分为:异步通信和同步通信。 异步通信是以字符为单位传送的,数据传送可靠性高,适合低速通信的场合。 同步通信方式是以多个字符组成的数据块为单位的方式传送的,数据传输率高,适合高速率、大容量的数据通信。 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
异步通信 第N个字符 第N-1个字符 停止位 起始位 停止位 奇偶校验 7或8位数据位 1 0 高位 低位 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
异步通信用起始位“0”表示字符的开始,然后从低位到高位逐位传送数据,最后用停止位“1”表示字符的结束。一个字符又称为一帧信息。在MCS-51单片机系统中,第九位数据D8可以用作奇偶效验位,也可以用作地址/数据贞标志,D8=1表示该贞信息传送的是地址,D8=0表示传送的是数据。两贞信息之间可以有间隔,也可以无间隔,且间隔时间可以任意改变,间隔用空闲位“1”填充。异步通信用起始位“0”表示字符的开始,然后从低位到高位逐位传送数据,最后用停止位“1”表示字符的结束。一个字符又称为一帧信息。在MCS-51单片机系统中,第九位数据D8可以用作奇偶效验位,也可以用作地址/数据贞标志,D8=1表示该贞信息传送的是地址,D8=0表示传送的是数据。两贞信息之间可以有间隔,也可以无间隔,且间隔时间可以任意改变,间隔用空闲位“1”填充。 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
异步通信方式: 异步通信中,计算机与外设之间必须约定: (1)字符格式约定好字符的编码形式、奇偶效验位形式以及起始位和停止位的规定。 (2)波特率是每秒数据传输的位数。 1波特=1bps(位/秒) 异步通信要求发送与接收以相同的波特率进行。 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
同步通信方式: 同步通信在数据开始处用1~2个同步字符来指示。 同步通信中,由同步时钟来实现发送和接收的同步。在发送时要插入同步字符,接收端在检测到同步字符后,就开始接收串行数据。可见,同步通信具有较高的传输速率,通常在几十至几百千波特,但在硬件上要求较高。 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
6.1.3 串行通信中数据的传送方向 • 单工 • 半双工 • 全双工 80C51有1个全双工串行口 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
第六章 MCS-51单片机的串行通信接口 6.2 MCS-51单片机的串行通信接口 6.2.1 串行口结构及工作原理 基于KEIL和PROTEUS的单片机技术 侯俊才
串行口工作原理: 串行口的发送和接收都是以特殊功能寄存器SBUF的名义进行读或写的.当向SBUF发“写”命令时(执行“MOV SBUF,A”指令),即是向发送缓冲器SBUF装载并开始由TXD引脚向外发送一帧数据,发送完便使发送中断标志位TI=1。 在满足串行口接收中断标志位RI=0的条件下,置允许接收位REN=1就会接收一帧数据进入移位寄存器,并装载到SBUF中,同时使RI=1.当89C51发出读SBUF命令时(MOV A,SBUF),便由接收缓冲器SBUF取出数据送入A。 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
6.2.2 串行通信接口的控制寄存器 a.串行口控制寄存器SCON 第六章 MCS-51单片机的串行通信接口 SM0 SM1 SM2 REN TB8 RB8 TI RI • SM0,SM1:串行口4种工作方式的选择位。 • 0 0 方式0:8位移位寄存器I/O,波特率固定为 fosc/12 • 0 1 方式1:8位UART(1+8+1位), 波特率可变,按公式计算 • 1 0 方式2:9位UART(1+8+1+1位),波特率固定=fosc /32或1/64 • 1 1 方式3:9位UART(1+8+1+1位), 波特率可变,按公式计算 基于KEIL和PROTEUS的单片机技术 侯俊才
SM2:串行口多机通信控制位(作为方式2、方式3的附加控制位).SM2:串行口多机通信控制位(作为方式2、方式3的附加控制位). 在方式0时:SM2必须为0。 在方式1时:若SM2=1,则只有接收到有效的停止位时,才能置位RI。若SM2=0,则接收一贞信息的第九位数据不管是0还是1,都由软件置位RI。 在方式2或方式3时,若SM2=1,当接收到的第9位数据RB8=0时,不能置位RI,接收数据无效。若SM2=0,不管接收到的第9位数据为0或1,前8位数据都送入SBUF,并使RI=1。 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
REN:串行口接收允许控制位,由软件置位或清0。 = 1 表示允许接收; = 0 禁止接收。 TB8:方式2、3中,是要发送的第9位数据。多机通信中,TB8=0 表示发送的是数据;TB8=1 表示发送的是地址。 RB8:在方式2、3中,是收到的第9位数据。在多机通信中,用作区别地址帧/数据帧的标志。(奇偶校验) RI,TI:串行口收/发数据申请中断标志位=1 申请中断; =0 不申请中断 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
b. 电源控制寄存器PCON ——PCON不能按位寻址 第六章 MCS-51单片机的串行通信接口 SMOD — — — GF1 GF0 PD 1DL • SMOD:在串行口工作方式 1、2、3 中,是波特率加倍位 • =1 时,波特率加倍 • =0 时,波特率不加倍。 • (在PCON中只有这一个位与串口有关) • 单片机复位时,SMOD=0。 基于KEIL和PROTEUS的单片机技术 侯俊才
6.2.3 串行口的工作方式 a.方式0的波特率 工作方式0时,移位脉冲由机器周期的第6个状态周期S6给出,每个机器周期产生一个移位脉冲,发送或接收一位数据。因此,波特率是固定的,为振荡频率的1/12,不受PCON寄存器中SMOD的影响。 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
发送:SBUF中的串行数据由RxD逐位移出; TxD输出移位时钟,频率=fosc1/12; 每送出8位数据 TI就自动置1; 需要用软件清零 TI。 接收:串行数据由RxD逐位移入SBUF中; TxD输出移位时钟,频率=fosc1/12; 每接收 8位数据RI就自动置1; 需要用软件清零 RI。 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
第六章 MCS-51单片机的串行通信接口 b.串行工作方式1 方式1为10位为一帧的异步串行通信方式。其帧格式为1个起始位、8个数据位和1个停止位。如下图所示。 数据发送 数据写入SBUF后,开始发送,此时由硬件加入起始位和停止位,构成一帧数据,由TXD串行输出。输出一帧数据后,TXD保持在高电平状态下,并将TI置位,通知CPU可以进行下一个字符的发送。 基于KEIL和PROTEUS的单片机技术 侯俊才
第六章 MCS-51单片机的串行通信接口 数据接收 当REN=1且接收到起始位后,在移位脉冲的控制下,把接收到的数据移入接收缓冲寄存器(SBUF)中,停止位到来后,把停止位送入RB8中,并置位RI,通知CPU接收到一个字符。 波特率的设定 工作在方式1时,其波特率是可变的,波特率的计算公式为: 其中,SMOD为PCON寄存器最高位的值,其值为1 或0。 基于KEIL和PROTEUS的单片机技术 侯俊才
第六章 MCS-51单片机的串行通信接口 c. 串行工作方式2 方式2为11位为一帧的异步串行通信方式。其帧格式为1个起始位、9个数据位和1个停止位。如下图所示。由于波特率固定,常用于单片机间多机通讯。 在方式2下,字符还是8个数据位,只不过增加了一个第9个数据位(D8),而且其功能由用户确定,是一个可编程位。 在发送数据时,应先在SCON的TB8位中把第9个数据位的内容准备好。这可使用如下指令完成: SETB TB8 ;TB8位置“1” CLR TB8 ;TB8位置“0” 基于KEIL和PROTEUS的单片机技术 侯俊才
d. 串行工作方式3 方式3同方式2几乎完全一样,只不过方式3的波特率是可变的,有用户来确定。其波特率的确定同方式1。 方式3的波特率可变,按前面的公式计算: 波特率=(2SMOD/32)T1的溢出率 其中:X 是定时器初值 第六章 MCS-51单片机的串行通信接口 2SMOD fosc 32 12(2n - X) ☞ 波特率 = 基于KEIL和PROTEUS的单片机技术 侯俊才
方式1、2、3的区别 (1)传送位数 方式1是8位异步通信接口。 方式2、3是9位异步通信接口。 (2)波特率 方式1、3的波特率是可变的,其波特率取决于定时器T1的溢出率(此时T1作为波特率发生器用,禁止其中断)和PCON中的SMOD的值,即 波特率=(2SMOD/32)T1的溢出率 方式2的波特率只取决于时钟频率fosc和PCON中的SMOD的值,即 波特率 = fosc 2SMOD/64 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
6.2.4 波特率的设定 第六章 MCS-51单片机的串行通信接口 方式0时,波特率是时钟频率的1/12,是固定不变的。 方式2时波特率可变,是 波特率 = fosc 2SMOD/64 方式1、3时,波特率是可变的 波特率=(2SMOD/32)T1的溢出率 2SMOD fosc 32 波特率 12 ☞ 初值 X = 2n - 基于KEIL和PROTEUS的单片机技术 侯俊才
6.3 串行口编程举例 6.3.1. 工作方式0的应用 串行口工作方式0主要用于扩展并行I/O接口。扩展成并行输出口时,需要外接一片8位串行输入并行输出的同步移位寄存器74LS164或CD4094。扩展成并行输入口时,需要外接一片并行输入串行输出的同步移位寄存器74LS165或CD4014。 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
例: 利用串行口工作在方式0,外扩一片74LS164构成一个3位LED动态显示器,并将片内RAM显示单元65H、66H和67H单元中的段码输出显示。其硬件电路如图所示。 1 P1.0 P1.1 1 P1.2 1 89C51 8 8 +5V RXD SASB VCCLR 74LS164 TXD CLK 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
ORG 0100H STPRT:MOV SCON,#00H ;串口工作方式0 SETB P1.2 ;消去最高显示位 SETB P1.1 ;消去次高显示位 MOV SBUF, 65H ;传送最低显示位 JNB TI, $ ;等待发送 CLR P1.0 ;最低位显示 CLR TI ;清中断标志位 LCALL DSSJ ;调延时子程序 SETB P1.0 ;消去最低显示位 MOV SBUF, 66H ;传送中间显示位 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
JNB TI, $ ;等待传送结束 CLR P1.1 ;显示中间位 CLR TI ;清中断标志位 LCALL DSSJ ;调延时子程序 SETB P1.1 ;消去中间显示位 MOV SBUF, 67H ;传送最高显示位 JNB TI, $ ;等待传送结束 CLR P1.2 ;显示最高位 CLR TI ;清中断标志位 LCALL DSSJ SETB P1.2 RET 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
6.3.2 工作方式1的应用 例: A、B两台单片机,均采用11.0592MHz晶振。A机以2400bps波特率将内部RAM中30H至39H的10个字节及校验和经串行口发送给B机,B机正确接收后存入片内RAM的30H至39H单元,并同时显示其中的前8位数据。 A、B两机的RXD、TXD交叉相连并共地。两机串行口均设置为方式1,定时器T1定时初值为F4H,两机采用查询控制方式程序如下: 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
A机发送程序: ORG 0 MOV R0,#30H ;R0指向数据块首址 MOV R7,#0AH ;循环次数为10次 MOV A,#1 ;初值为1 MAIN:MOV @R0,A ;设置数据初值为1~A INC R0 INC A DJNZ R7,MAIN MOV TMOD,#20H ;T1定时方式2 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
MOV TL1,#0F4H ;波特率为1200bps MOV TH1,#0F4H SETB TR1 ;启动T1 MOV SCON,#40H ;串口方式1 MOV R0,#30H ;R0指向发送数据块首址 MOV R1,#0AH ;数据块长度为10 MOV 70H,#00H ;校验和清0 DWFP:MOV A,@R0 ;数据送A MOV SBUF,A ;启动串口发送 ADD A,70H ;求校验和 第六章 MCS-51单片机的串行通信接口
MOV 70H, A JNB TI,$ ;等待发送完毕 CLR TI ;清发送中断标志 INC R0 ;R0指向下一字节数据 DJNZ R7,DWFP ;10个字节数据发送完? MOV SBUF,A ;发送校验和 JNB TI,$ ;等待发送完毕 CLR TI ;清发送中断标志 SJMP $ ;停机 END 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
B机接收并显示程序 ORG 0 … ;******主程序****** MOV TMOD,#20H ;T1定时方式2 MOV TL1,#0F4H ;串口波特率为2400bps MOV TH1,#0F4H SETB TR1 ;启动T1 MOV SCON,#50H ;串口方式1,允许接收 MOV R0,#30H ;R0指存放接收数据首地址 MOV R1,#0AH ;接收数据块长度为10 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
MOV 70H,#00H ;校验和清0 DWFP:JNB RI,$ ;等待接收 MOV A,SBUF ;读取接收数据 MOV @R0,A ;保存至接收数据块单元 ADD A,70H ;求校验和 MOV 70H,A CLR RI ;清接收中断标志 INC R0 ;R0指向下一单元地址 DJNZ R1,DWFP ;10个数据接收完? JNB RI,$ ;等待接收校验和 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
MOV A,SBUF ;读取校验和 CLR REN ;禁止接收数据 CJNE A,70H,PEND ;校验和不正确转PEND LOP: LCALL DISP ;校验和正确则调显示 SJMP LOP PEND:SJMP $ ;******显示子程序(分两屏显示)****** DISP: MOV R0,#30H DISP1:MOV R1,#08H MOV R2,#01H MOV DPTR,#TAB 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
LOOP:MOV A,R2 MOV P2,A RL A MOV R2,A MOV A,@R0 MOVC A,@A+DPTR MOV P1,A INC R0 LCALL DELY DJNZ R1,LOOP RET 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
;******延时子程序****** DELY:MOV R7,#10 DEL1:MOV R6,#100 DJNZ R6,$ DJNZ R7,DEL1 RET TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H DB 0F8H,80H,90H,88H,83H,0C6H,0A1H DB 86H,8EH,0BFH,8CH,0CH,0FFH END 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
6.3.3 工作方式2与工作方式3的应用 方式2与方式3都是11位异步通信方式,这两种方式的区别仅在于波特率不同。方式2的波特率只有固定的两种,而方式3的波特率则可由用户自行设定。 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
例: 利用串行口方式2编制一发送程序,将片内RAM中60H~6FH单元的数据串行发送出去,第9数据位TB8作偶校验位。 根据要求,将串行口设置为方式2、单工发送,则SCON控制字为80H。波特率选为fosc/64。 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
采用中断方式发送的主程序和中断程序如下: ORG 0000H AJMP MAIN ;转主程序 ORG 0023H ;串口中断服务程序 INC R0 ;发送数据地址增1 MOV A, @R0 ;取出待发数据 MOV C,PSW.0 ;将奇偶位送TB8 MOV TB8, C MOV SBUF, A ;发送数据 DJNZ R7, SSJS ;判断数据是否发送完 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
CLR ES ;发送完关中断 SSJS:CLR TI ;清中断标志 RETI MAIN:ORG 0100H ;主程序 MOV SP,#20H ;置堆栈指针 MOV SCON, #80H ;串口设置为方式2 MOV PCON, #00H ;波特率选为fosc/64 MOV R0, #60H ;数据块首址送R0 MOV R7, #10H ;数据块长度送R7 SETB EA ;开总中断 SETB ES ;开串行口中断 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
MOV A, @R0 ;取出待发数据 MOV C, PSW.0 ;将奇偶位送TB8 MOV TB8, C MOV SBUF, A ;发送数据 SJMP $ ; END 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
例: 试编制串行口在方式3下接收数据块的程序。设单片机晶振为11.0592MHz,波特率为2400 b/s,接收的数据存在片内RAM的40H起始单元的一段区间内,数据块长度由发送方先发送过来(不超过允许值),每接收一个数据都核对其奇偶校验位,正确则存储数据,否则给出出错标志。 解:根据要求,设置T1工作于方式2,当SMOD=0时,T1计数初值为F4H。 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
查询法源程序如下: START:MOV TMOD, #20H ;T1定时方式2 MOV TL1, #0F4H ;置T1计数初值 MOV TH1, #0F4H SETB TR1 ;启动T1 MOV SCON, #0D0H ;串口方式3,允许接收 MOV PCON, #00H ;设SMOD=0 MOV R0, #40H ;接收数据区首址送R0 JNB RI,$ ;等待接收数据块长度 CLR RI ;接收后清RI 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
MOV A, SBUF ;数据块长度存R7中 MOV R7,A MAR0: JNB RI, $ ;等待接收数据 CLR RI ;清RI MOV A, SBUF ;将接收字符读入A JB PSW.0,MAR1 ;进行奇偶位校验 JB RB8, MAR3 SJMP MAR2 MAR1: JNB RB8, MAR3 MAR2: MOV @R0, A ;校验正确保存数据 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
INC R0 ;存储单元地址增1 CLR PSW.5 ;设置正确的标志 DJNZ R7,MAR0 ;未接收完,继续 SJMP $ ;接收完停机 MAR3: SETB PSW.5 ;置校验出错标志 SJMP $ ; 停机 END 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
6.3.4 多机通信 双机通信时,两台单片机地位是平等的,此时,两台单片机的串行口均可工作于方式1。多机通信是指一台主机和多台从机之间的通信。而在多机通信中,有主机和从机之分,多机通信时,主机发送的信息可以传送到各个从机,而各从机发送的信息只能被主机接收,其中的主要问题是怎样识别地址和怎样维持主机与指定从机之间的通信。 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
在串行方式2或方式3条件下,可实现一台主机和多台从机之间的通信,其连接电路如图所示。在串行方式2或方式3条件下,可实现一台主机和多台从机之间的通信,其连接电路如图所示。 TXD RXD TXD RXD TXD RXD TXD RXD … 89C51 89C2051 89C2051 89C2051 主机 从机2 从机n 从机1 多机通信连接图 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
多机通信原理 多机通信时,主机向从机发送的信息分为地址帧和数据帧两类,以第9位可编程TB8作区分标志,TB8=0,表示数据;TB8=1,表示地址。多机通信充分利用了89C51串行控制寄存器SCON中的多机通信控制位SM2的特性。当SM2=1时,CPU接收的前8位数据是否送入SBUF取决于接收的第9位RB8的状态:若RB8=1,将接收到的前8位数据送入SBUF,并置位RI产生中断请求;若 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才
RB8=0,则接收到的前8位数据丢弃。即当从机SM2=1时,从机只能接收主机发送的地址帧(RB8=1),对数据帧(RB8=0)不予理睬。当从机SM2=0时,从机可接收主机发送的所有信息。 通信开始时,主机首先发送地址帧。由于各从机的SM2=1和RB8=1,所以各从机均分别发出串行接收中断请求,通过串行中断服务程序来判断主机发送的地址与本从机地址是否相符。如果相符,则把自身的SM2清0,以准备接收随后传送来的数据帧。其余从机由于地址不符,则仍保持SM2=1状态,因而不能接收主机传送来的数据帧。这就是多机通信中主、从机一对一的通信情况。这种通信只能在主、从机之间进行,如果想在两个从机之间进行通信,则要通过主机作中介才能实现。 第六章 MCS-51单片机的串行通信接口 基于KEIL和PROTEUS的单片机技术 侯俊才