270 likes | 392 Views
第九章 MCS-51串行接口 9.1 串行口与串行通信 9.2 MCS-51 单片机的串行接口 9.3 51 单片机串行口的工作方式. 9.1 串行口与串行通信. 一、串行通信的基本特征. 串行通信的基本特征是数据逐位顺序进行传送. 二、串行通信的协议与接口标准. 串行通信的格式及约定(如:同步方式、通讯速率、数据块格式、信号电平 …… 等)不同,形成了多种串行通信的协议与接口标准。 常见的有: ☞ 通用异步收发器 (UART) —— 本课程介绍的串口 ☞ 通用串行总线( USB ) ☞ I2C 总线 ☞ CAN 总线 ☞ SPI 总线
E N D
第九章 MCS-51串行接口 9.1 串行口与串行通信 9.2 MCS-51单片机的串行接口 9.3 51单片机串行口的工作方式
9.1串行口与串行通信 一、串行通信的基本特征 串行通信的基本特征是数据逐位顺序进行传送 二、串行通信的协议与接口标准 串行通信的格式及约定(如:同步方式、通讯速率、数据块格式、信号电平……等)不同,形成了多种串行通信的协议与接口标准。 常见的有: ☞通用异步收发器(UART)——本课程介绍的串口 ☞通用串行总线(USB) ☞I2C总线 ☞CAN总线 ☞SPI总线 ☞RS-485,RS-232C,RS422A标准……等等
三、全双工串行接口(UART) ☞数据通信的几个术语: 并行:数据各位同时进行传送 串行:数据逐位顺序进行传送 ☞全双工:(串行通信)收/发可同时进行 半双工:(串行通信)收/发不可同时进行 ☞异步串行通信:以字符为单位进行传送 同步串行通信:以数据块为单位进行传送 波特率(bps.):单位时间传送的位数
9.2 MCS-51单片机的串行接口 一、51单片机的串行接口结构图 引脚 SBUF(发) (门)移位寄存器 TxD 波特率发生器T1 发送控制器 TI A累加器 1 接收控制器 RI 引脚 SBUF(收) 移位寄存器 RxD 去申请中断
二、串行口的结构 ☞两个同名的接收/发送缓冲寄存器SBUF 指令 MOV SBUF,A 启动一次数据发送,可向SBUF再发送下一个数 指令 MOV A,SBUF 完成一次数据接收,SBUF可再接收下一个数 ☞接收/发送数据,无论是否采用中断方式 工作,每接收/发送一个数据都必须用指 令对 RI/TI 清0,以备下一次收/发。 ☞串行口相关的SFR(SCON,PCON)
三、串行口控制寄存器SCON(98H) SCON SM0 SM1 SM2 REN TB8 RB8 TI R1 ☞ 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 x1/32或1/64 1 1 方式3:9位UART(1+8+1+1位),波特率可变,按公式计算 ☞ SM2:串行口多机通信控制位 (作为方式2、方式3的附加控制位)
SCON SM0 SM1 SM2 REN TB8 RB8 TI R1 ☞ RI,TI:串行口收/发数据申请中断标志位 =1 申请中断; =0 不申请中断 ☞ RB8:在方式2、3中,是收到的第9位数据。 在多机通信中,用作区别地址帧/数据帧的 标志。(奇偶校验) ☞ TB8:方式2、3中,是要发送的第9位数据。 多机通信中,TB8=0 表示发送的是数据; TB8=1 表示发送的是地址。(奇偶校验) ☞ REN:串行口接收允许控制位 = 1 表示允许接收; = 0 禁止接收。
四、电源控制寄存器 PCON(97H) ——特殊功能寄存器PCON不能按位寻址—— PCON SMOD — — — GF1 GF0 PD 1DL ☞ SMOD:在串行口工作方式 1、2、3 中, 是波特率加倍位 =1 时,波特率加倍 =0 时,波特率不加倍。 (在PCON中只有这一个位与串口有关) ☞ GF1,GF0:用户可自行定义使用的通用标志位
PCON SMOD — — — GF1 GF0 PD IDL ☞ PD:掉电方式控制位 =0:常规工作方式。 =1:进入掉电方式: 振荡器停振 片内RAM和SRF的值保持不变 P0—P3口维持原状。 程序停止 只有复位能使之退出掉电方式。
PCON SMOD — — — GF1 GF0 PD 1DL ☞ IDL:待机方式(空闲方式)控制位 =0:常规工作方式。 =1:进入待机方式: 振荡器继续振荡 中断、定时器、串口功能继续有效 片内RAM和SRF保持不变 CPU状态保持、P0—P3口维持原状 程序停顿。 中断和复位能退出待机,继续后面的程序。
PCON SMOD — — — GF1 GF0 PD 1DL ☞ PD:掉电控制位 =0:常规方式。 =1:掉电方式: 振荡器停振 片内RAM和SRF不变 P0—P3口维持原状 程序停止 只有复位能退出掉电 ☞ IDL:待机控制位 =0:常规方式。 =1:待机方式: 振荡器继续振荡 中断,定时器,串口有效 片内RAM和SRF不变 CPU状态,P0—P3维持原状 程序停顿。 中断和复位能退出待机,继续后面的程序。
9.3 51单片机串行口的工作方式 一、工作方式0:8位移位寄存器I/O方式 ☞发送:SBUF中的串行数据由RxD逐位移出; TxD输出移位时钟,频率=fosc1/12; 每送出8位数据 TI就自动置1; 需要用软件清零 TI。 ☞接收:串行数据由RxD逐位移入SBUF中; TxD输出移位时钟,频率=fosc1/12; 每接收 8位数据RI就自动置1; 需要用软件清零 RI。
工作方式0:8位移位寄存器I/O方式(续) ☞经常配合“串入并出”“并入串出”移位 寄存器一起使用扩展接口(第六章)。 ☞方式0工作时,多用查询方式编程: 发送:MOV SBUF,A 接收:JNB RI,$ JNB TI,$ CLR RI CLR TI MOV A, SBUF ☞复位时,SCON 已经被清零,缺省值: 方式0。 ☞接收前,务必先置位 REN=1 允许接收数据。
串行口方式0的扩展应用——经常用到 串行口常用工作方式0扩展出并行I/O口, 工作方式1、2、3则常用于串行通信 +5V VCC TxD RxD AB AB AB CLK CLK CLK CLR CLR CLR 74LS164 74LS164 74LS164 h g f e d c b a h g f e d c b a h g f e d c b a 51单片机 共阳LED 数码管 +5V 74LS164是串入并出芯片;74LS165是并入串出芯片
h g f e d c b a a 共阳LED数码管 公共端(字位)接高电平, 笔划(字段)置为低电平 就被点亮了 f b g e c d h 共阳极 ☞比如要显示“0” 须令a b c d e f 为“0” 电平,g h为“1”电平。 累加器 A h g f e d c b a ☞再比如要显示“3” 须令a b c d g 为“0” 电平,e f h为“1”电平。 0C0H = “0” 0B0H = “3”
例:利用串行口工作方式0扩展出8位并行I/O口,驱动共阳LED数码管显示0—9。例:利用串行口工作方式0扩展出8位并行I/O口,驱动共阳LED数码管显示0—9。 +5V VCC TxD RxD AB CLK CLR 74LS164 h g f e d c b a 51单片机 共阳LED数码管
h g f e d c b a a 根据上图编写的通过串行口和 74LS164 驱动共阳LED数码管 (查表)显示0-9数字的子程序: DSPLY:MOV DPTR, #TABLE MOVC A, @A+DPTR MOV SBUF, A JNB TI, $ CLR TI RET TABLE:DB 0C0H,0F9H,0A4H DB 0B0H,99H,92H DB 82H,0F8H,80H,90H f b g e c d h 共阳极 累加器 A h g f e d c b a 1 1 0 0 0 0 0 0 0C0H = “0” 1 0 1 1 0 0 0 0 0B0H = “3”
二、工作方式1:8位UART(1+8+1位)波特率可变 ☞常用于串行通讯。除发/收8位数据外,还 在D0位前有一个起始位“0”; 在D7位后有一个停止位“1”。 ☞方式1工作时: 发送端自动添加一个起始位和一个停止位; 接收端自动去掉一个起始位和一个停止位。 ☞波特率可变 ——用定时器T1作波特率发生器: 公式:波特率 =(2SMOD/32)T1的溢出率
波特率=(2SMOD/32)T1的溢出率 ☞ 溢出率:T1溢出的频繁程度 即:T1溢出一次所需时间的倒数。 2SMOD fosc 32 12(2n - X) ☞ 波特率 = 其中:X 是定时器初值 2SMOD fosc 32 波特率 12 ☞ 初值 X = 2n -
常用波特率和T1初值查表 ☞表格有多种, 晶振也不止一种
工作方式1的接收/发送 ☞RxD引脚为接收端,TxD引脚为发送端,由波特率 发生器T1控制发送速度,不同于方式0:收/发都 需要由TxD送出移位时钟。 ☞串行口的初始化包括: 对SCON选工作方式 对PCON设波特率加倍位“SMOD”(缺省值=0) 如果是接收数据,仍要先置“1”REN位 ☞T1作波特率发生器时初始化包括: 选定时器工作方式2(TMOD选8位自动重装); 将计算(或查表)出的初值X赋给TH1,TL1; 启动T1 (SETB TR1); 对T1不要开中断 !!
串行口控制寄存器SCON SCON SM0 SM1 SM2 REN TB8 RB8 TI R1 0 1 0 1 0 0 0 0 ☞ SM0,SM1:串行口工作方式选择位。 0 1 :方式1,8位UART(1+8+1位) ☞ SM2:串行口多机通信控制位,作为方式2、3 的附加控制位,此处不用,可写成“0” ☞ REN:串行口接收允许位。 REN=1 允许接收 ☞ TB8,RB8,TI,RI等位由运行中间的情况 决定,可先写成 “0”
三、工作方式2: 9位UART(1+8+1+1位)两种波特率 ☞由于波特率固定,常用于单片机间通讯。 数据由8+1位组成,通常附加的一位 (TB8/RB8)用于“奇偶校验”。 ☞方式2的波特率 = fosc 2SMOD/64 即: fosc 1/32 或 fosc 1/64 两种
☞奇偶校验是检验串行通信双方传输的数据正确与否的一个措施,并不能保证通信数据的传输一定正确。☞奇偶校验是检验串行通信双方传输的数据正确与否的一个措施,并不能保证通信数据的传输一定正确。 换言之:如果奇偶校验发生错误,表明数据传输一定出错了;如果奇偶校验没有出错,绝不等于数据传输完全正确。 ☞奇校验:8位有效数据连同1位附加位中, 二进制“1”的个数为奇数 偶校验:8位有效数据连同1位附加位中, 二进制“1”的个数为偶数
☞约定发送采用奇校验 若发送的8位有效数据中“1”的个数为偶数, 则要人为添加一个附加位“1”一起发送; 若发送的8位有效数据中“1”的个数为奇数, 则要人为添加一个附加位“0”一起发送。 ☞约定接收采用奇校验 若接收到的9位数据中“1”的个数为奇数, 则表明接收正确,取出8位有效数据即可; 若接收到的9位数据中“1”的个数为偶数, 则表明接收出错!应当进行出错处理。 采用偶校验时,处理方法与奇校验相反
工作方式2 的奇偶校验用法 回顾: 程序状态字寄存器PSW中有一个奇偶状态位 P PSW.7 PSW.0 CY AC F0 RS1 RS0 OV P P (PSW.0):奇偶状态位。 P=1 表示目前累加器中 “1”的个数为奇数 P=0 表示目前累加器中 “1”的个数为偶数 CPU随时监视着Acc的“1”的个数并自动反映在 P
四、工作方式3 9位UART(1+8+1+1位) 波特率可变 串口方式3和方式2唯一的区别是波特率机制不同。 ☞方式2的波特率固定为时钟周期的32或64分频,不可变。此工作方式与其他串行通讯设备连接困难,因此不常用。 ☞方式3的波特率可变,按前面的公式计算: 波特率=(2SMOD/32)T1的溢出率 2SMOD fosc 32 12(2n - X) ☞ 波特率 = 其中:X 是定时器初值