150 likes | 313 Views
www. jpk.tgc.edu.cn/ dpjyl .com. 第六章. 80C51 的串行接口. 第六章 80C51 的串行接口. 第二十四讲 单片机的串行接口. 一、串行通信概述 1 、什么叫串行通信? 并行、串行举生活中的例子(排横队行走,排纵队行走)说明; 引出并行通信,串行通信的概念。. P00 P01 P02 P03 单片机 RXD. 外设 1. 外设 2. TXD. 2 、同步通信、异步通信
E N D
www.jpk.tgc.edu.cn/dpjyl.com 第六章 80C51的串行接口
第六章 80C51的串行接口 第二十四讲 单片机的串行接口 一、串行通信概述 1、什么叫串行通信? 并行、串行举生活中的例子(排横队行走,排纵队行走)说明; 引出并行通信,串行通信的概念。 P00 P01 P02 P03 单片机 RXD 外设1 外设2 TXD
2、同步通信、异步通信 提问:数字电路中移位寄存器是怎样进行移位的? 同步——发送设备时钟等于接收设备时钟。 同步字符1 同步字符2 数据1 数据2 ···数据n 校验字符 校验字符 异步——发送时钟不一定等于接收时钟。 空闲位 起始位 5 ~ 8位数据 奇偶校验位 停止位 空闲位
3、串行通信方向 A B 发 单工 收 A B 发 半双工 发 收 收 A 全双工 B 发 收 收 发
4、波特率 • 即串行通信速率。 b/s 、 bps • 举例、设有一帧信息,1个起始位、8个数据位、1个停止位,传输速率为 • 240个字符。求波特率。 • 解: • (1+8+1)×240 = 2400 b/s = 2400波特。 • 5、串行通信接口 • 发送: 展示投影胶片 CPU • D7 D6 D5 D4 D3 D2 D1 D0 发送数据寄存器 • SBUF(99H) • 1 D7 D6 D5 D4 D3 D2 D1 D0 0 发送数据 • 发送时钟
接收时钟 0 D0 D1 D2 D3 D4 D5 D6 D7 1 接收数据 D0 D1 D2 D3 D4 D5 D6 D7 接收数据寄存器 SBUF(99H) CPU
二、80C51单片机机串行接口 • 单片机内有:通用异步接收/发送器 UART • 全双工,4种工作方式,波特率可编程设置,可中断。 • 1、串口的组成 • 从编程角度讲来看主要由以下寄存器组成。 • PCON SMOD • SCON SM0 SM1 SM2 REN TB8 RB8 TI RI • SBUF D7 D6 D5 D4 D3 D2 D1 D0 SBUF发 SBUF收
SM0、SM1:工作方式选择位(后面再讲) • SM2:多机通信控制位,常与RB8配合,决定是否激活RI • REN:允许接收 • TB8:发送的第九位数 • RB8:接收的第九位数 • TI :中断标志 • RI • SMOD:波特系数选择位,0 —— 20 = 1 • 1 —— 21 = 2
2、串行口的工作方式 • (1)方式0:同步移位寄存器方式,波特率固定为fosc / 12 • RXD —— 接收发送数据 • TXD —— 产生同步移位脉冲 • 接收/发送完,置位RI / TI ,(要求SM2 = 0) • 方式0 D7 D6 D5 D4 D3 D2 D1 D0 发送 • D0 D1 D2 D3 D4 D5 D6 D7 接收 • 无起始位,无停止位
(2)方式1:8位UART,波特率为(2SMOD×T1的溢出率)/ 32 • 停止位 D7 D6 D5 D4 D3 D2 D1 D0 起始位 发送位 • 起始位 D0 D1 D2 D3 D4 D5 D6 D7 停止位 接收位 • 送RB8位 • 1帧信息,10位。 • 波特率可变: 2SMOD / 32 ×(T1的溢出率) • 发送完置位TI。 • 接收完数据置位RI。 • 置位RI是有条件的。即: • REN = 1,RI = 0 且SM2 = 0或SM2 = 1但是接收到的停止位为1。 • 此时,数据装载SBUF,停止位进入RB8,RI置1。
(3)方式2、方式3 :9位UART,多机通信。 • 停止位 TB8 D7 D6 D5 D4 D3 D2 D1 D0 起始位 发送 • 起始位 D0 D1 D2 D3 D4 D5 D6 D7 TB8 停止位 接收 • 送RB8 • 方式2波特率:(固定)2SMOD / 64 × fosc • 方式3波特率: 2SMOD / 32 ×(T1溢出率) • 发送完数据置位TI。 • 接收到有效数据完毕,置位RI。 • 有效数据条件:REN = 1,RI = 0 且SM2 = 0或接收到第9位数据为1。 • 此时,数据装载SBUF,第9位数据(TB8) RB8,RI置1。
3、波特率的设置 • 方式0、方式2固定。 • 方式1,方式3可变。波特率 = 2SMOD / 32 ×(T1的溢出率) • T1溢出率 = 单位时间内溢出次数 = 1 /(T1的定时时间) • 而T1的定时时间t就是T1溢出一次所用的时间。此情况下,一般设T1工作在模式2(8位自动重装初值)。 • N = 28- t / T, t = (28-N)T =(28-N)×12 / fosc • 所以,T1溢出率 = 1/t = fosc / 12(28-N), • 故, 波特率 = 2SMOD / 32 × fosc / 12(256-N)。 • 若已知波特率,则可求出T1的计数初值: • y = 256-2SMOD×fosc / (波特率×32×12)
巩固练习: • 例、若fosc = 6MHz,波特率为2400波特,设SMOD = 1,则定时/计数器T1的计数初值为多少?并进行初始化编程。 • 解:y = 256-2SMOD×fosc / (2400×32×12)= 242.98≈243 = F3H • 同理,fosc = 11.0592MHz,波特率为2400,设SMOD = 0,则 • y = F4H • 初始化编程: • MOV TMOD,#20H • MOV PCON,#80H • MOV TH1,#0F3H • MOV TL1,#0F3H • SETB TR1 • MOV SCON,#50H
小结: • 1、什么叫串行通信? • 2、UART叫什么?(通用异步接收/发送器) • 3、单工、半双工、全双工? • 4、串口工作用到哪些寄存器?(PCON、SCON、SBUF) • 5、串口有几种工作方式? • 6、波特率如何设置?(T1的计数初值如何确定)