1 / 28

第七章 MCS - 51 单片机串行接口

第七章 MCS - 51 单片机串行接口. 第一节 串行通信的基本概念 第二节 MCS 串行接口的组成. 第一节 串行通信的基本概念. 一、基本概念 通信 并行通信 串行 通信. 接收器. 发送器. 发送器. 接收器. 串行接口功能. 串行数据传送方向 单工通讯:数据单向传送。 半双工通讯:数据可分时双向传送。 全双工通讯:可同时进行发送和接收。. 1. 发送器:并  串数据格式转换,添加标识位和校验位,一

tamma
Download Presentation

第七章 MCS - 51 单片机串行接口

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第七章MCS-51单片机串行接口 • 第一节串行通信的基本概念 • 第二节 MCS串行接口的组成

  2. 第一节串行通信的基本概念 • 一、基本概念 • 通信 • 并行通信 串行通信

  3. 接收器 发送器 发送器 接收器 串行接口功能 • 串行数据传送方向 • 单工通讯:数据单向传送。 • 半双工通讯:数据可分时双向传送。 • 全双工通讯:可同时进行发送和接收。 1.发送器:并串数据格式转换,添加标识位和校验位,一 帧发送结束,设置结束标志,申请中断。 2.接收器:串并数据格式转换,检查错误,去掉标识位, 保存有效数据,设置接收结束标志,申请中断。 3.控制器:接收编程命令和控制参数,设置工作方式:同步/ 异步、字符格式、波特率、校验方式、数据位与 同步时钟比例等。

  4. 二、两种串行通信方式 • 1、异步通讯方式 • 以字符为传送单位用起始位和停止位标识每个字符的 • 开始和结束字符间隔不固定,只需字符传送时同步。 • 异步通讯常用格式:一个字符帧 • 起始位:0,停止位:1 • 二帧信息之间可以无间隔,也可以有间隔,且间隔时间可任意改变,间隔用空闲位“1”来填充

  5. 异步通讯双方的两项约定 (1)字符格式规定(一帧): 数据位,校验位,起始位和停止位。 (2)波特率(位/秒)对传送速率的规定 位传送时间Td秒/位 Td的倒数称为波特率(Baud rate),单位 位/秒 例:要求每秒传送120个字符,每帧为10位。 解: B=120×10=1200波特, Td =0.83ms

  6. 2、同步通讯 • 以一串字符为一个传送单位,字符间不加标识位,在一串字符开始用同步字符标识,硬件要求高,通讯双方须严格同步。 • MCS-51串行I/O接口的基本工作是:发送时,将CPU送来的并行数据转换成一定格式的串行数据,从引脚TXD(P3.1)上按规定的波特率逐位输出;接收时,要监视引脚RXD(P3.0),一旦出现起始位“0”,就将外围设备送来的一定格式的串行数据转换成并行数据,等待CPU读入。

  7. 三、串行接口的功能 • MCS-51单片机中的异步通信串行接口能方便地与其他计算机或传送信息的外围设备(如串行打印机、CPU终端等)实现双机、多机通信。串行口有4种工作方式。

  8. 第二节 MCS-51串行接口的组成

  9. 二、串行接口的控制 • 1. 数据缓冲器SBUF • 发送SBUF和接收SBUF共用一个地址99H。 • (1)发送SBUF存放待发送的8位数据,写入SBUF将同 • 时启动发送。 • 发送指令: MOV SBUF,A • (2)接收SBUF存放已接收成功的8位数据,供CPU读取。 • 读取串行口接收数据指令:MOV A,SBUF

  10. 2.串行口控制/状态寄存器SCON(98H) SM0,SM1:选择串行口4种工作方式。 SM2:多机控制位,用于多机通讯。 REN:允许接收控制位,REN=1,允许接收;REN=0,禁止接 收。 TB8: 发送的第9位数据位,可用作校验位和地址/数据标识位 RB8: 接收的第9位数据位或停止位 TI: 发送中断标志,发送一帧结束,TI=1,必须软件清零 RI: 接收中断标志,接收一帧结束,RI=1,必须软件清零 3.节电控制寄存器PCON SMOD(PCON.7):波特率加倍控制位。 SMOD=1,波特率加倍, SMOD=0,则不加倍。

  11. 第三节串行接口的工作方式 • SM0,SM1选择四种工作方式。 • 一、方式0:同步移位寄存器方式。用于扩展并行I/O接口。 • 1. 一帧8位,无起始位和停止位。 • 2. RXD:数据输入/输出端。 • TXD:同步脉冲输出端,每个脉冲对应一个数据位。 • 3. 波特率B = fosc/12 • 如: fosc=12MHz, B=1MHz,每位数据占1s。

  12. TXD 发送时序 写入 SBUF (a) D5 D6 D7 D0 D1 D2 D3 D4 RXD输出 TI 接收时序 (b) 写REN=1 RI=0 RXD输入 RI • 4. 发送过程:写入SBUF,启动发送,一帧发送结束,TI=1。 • 接收过程:REN=1且RI=0,启动接收,一帧接收完毕,RI=1。

  13. 5. 移位寄存器方式举例 • 数据从RXD(P3.0)引脚串行输出,低位在先,高位 • 在后;TXD(P3.1)引脚输出移位脉冲,其频率为foc/12; • 发送完毕后,中断标志位TI为1。如要发送数据,如下所示: • MOV SCON,#00H ;串行口方式0 • MOV SBUF,A ;将数据送出 • JNB TI,$ ;等待数据发送完毕

  14. 二、 方式1 • 8位数据异步通讯方式。 • 1. 一帧10位:8位数据位,1个起始位(0),1个停止位(1)。 • 2. RXD:接收数据端。 TXD:发送数据端。 • 3. 波特率:用T1作为波特率发生器,B=(2SMOD/32)×T1溢出率。 • 4. 发送:写入SBUF,同时启动发送,一帧发送结束,TI=1。 • 接收:REN=1,允许接收。接收完一帧,若RI=0且停止位为1 (或SM2=0),将接收数据装入SBUF,停止位装入RB8,并使RI=1;否则丢弃接收数据,不置位RI。

  15. 写入 SBUF 起始位 TXD 数据输出 D0 D2 D3 D4 D6 D7 D1 D5 停止位 TI (a) 发送时序图 检测 负跳变 RXD 输入数据 起始位 D3 D6 D7 D0 D2 D4 D5 D1 停止位 采样 RI (b) 接收时序图 • 当REN=1,CPU开始采样RXD引脚负跳变信号,若出 • 现负跳变,才进入数据接收状态,先检测起始位,若第一 • 位为0,继续接收其余位;否则,停止接收,重新采样负跳 • 变。数据采样速率为波特率16倍频,在数据位中间,用第7、 • 8、9个脉冲采样3次数据位,并3中取2保留采样值。

  16. 三、 方式2和方式3 • 9位数据异步通讯方式。 • 1. 一帧为11位:9位数据位,1个起始位(0),1个停止位(1)。第9位数据位在TB8/RB8中,常用作校验位和多机通讯标识位。 • 2. RXD:接收数据端,TXD:发送数据端。 • 3. 波特率: 方式2:B=(2SMOD/64)×fosc 。 • 方式3:B=(2SMOD/32)×T1溢出率 。

  17. 写入 SBUF 发 送 时 序 起始位 D6 D5 D0 D1 D2 D3 D4 D7 TB8 停止位 TXD输出 TI 检测 负跳变 接 收 时 序 起始位 D6 RB8 D0 D1 D2 D3 D4 D7 D5 停止位 RXD输入 RI • 4. 发送:先装入TB8,写入SBUF并启动发送,发送结束, • TI=1。 • 接收:REN=1,允许接收。接收完一帧,若RI=0且第9位 • 为1 (或SM2=0),将接收数据装入接收SBUF,第9 • 位装入RB8,使RI=1;否则丢弃接收数据,不置位 • RI。

  18. 四、计算波特率 • 方式0为固定波特率: B=fosc/12 • 方式2可选两种波特率: B=(2SMOD /64)×fosc • 方式1、3为可变波特率,用T1作波特率发生器。 • B=(2SMOD/32)×T1溢出率 • T1为方式2的时间常数: X = 28 - t/T • 溢出时间: t= (28 -X)T = (28 -X)×12/ fosc • T1溢出率=1/t= fosc /[12×(2n -X)] • 波特率B=(2SMOD /32)×fosc/[12×(28-X)] • 串行口方式1、3,根据波特率选择T1工作方式,计算 • 时间常数。 • T1选方式2: TH1=X= 28-fosc/12×2SMOD/(32×B) • T1选方式1用于低波特率,需考虑T1重装时间常数时间。

  19. 五、串行口的应用 1、串行口初始化 • 串行口初始化编程格式: • SIO:MOV SCON,#控制状态字;写方式字且TI=RI=0 • (MOV PCON,#80H) ;波特率加倍 • ( MOV TMOD,#20H ) ;T1作波特率发生器 • ( MOV TH1,#X ) ;选定波特率 • ( MOV TL1,#X ) • ( SETB TR1) • ( SETB EA) ;开串行口中断 • ( SETB ES)

  20. 2、发送程序 • 查询方式: • TRAM: MOV A,@R0 ;取数据 • MOV SBUF,A ;发送一个字符 • WAIT: JBC TI,NEXT ;等待发送结束 • SJMP WAIT • NEXT: INC R0 ;准备下一次发送 • SJMP TRAM

  21. 中断方式: • ORG 0023H ;串行口中断入口 • AJMP SINT • MAIN: … ;初始化编程 • TRAM: MOV A,@R0 ;取数据 • MOV SBUF,A ;发送第一个字符 • H: SJMP H ;其它工作 • SINT: CLR TI ;中断服务程序 • INC R0 • MOV A,@R0 ;取数据 • MOV SBUF,A ;发送下一个字符 • RETI

  22. 接收程序 • REN=1、RI=0等待接收,当RI=1,从SBUF读取数据。 • 1.查询方式: • WAIT: JBC RI,NEXT ;查询等待 • SJMP WAIT • NEXT: MOV A,SBUF ;读取接收数据 • MOV @R0,A ;保存数据 • INC R0 ;准备下一次接收 • SJMP WAIT

  23. 数据输入 RXD 1 2 TXD 移位脉冲 74LS164 8 8051 3 4 5 6 10 11 12 13 数据输入 RXD 9 TXD 移位脉冲2 74LS165 8051 6 5 4 3 14 13 12 11 D7 D6 D5 D4 D3 D2 D1 D0 D0 D1 D2 D3 D4 D5 D6 D7 串行口方式0 • 用于扩展单片机的并行I/O接口。 • 串行口实现:并行→串行的数据转换 • 74LS165/74LS164实现:串行→并行的数据转换。

  24. 异步通讯程序举例1.发送程序:将片内RAM 50H起始单元的16个数由串 行口发送。要求发送波特率为系统时钟 的32分频,并进行奇偶校验。 • MAINT: MOV SCON,#80H ;串行口初始化 • MOV PCON,#80H ;波特率 • SETB EA • SETB ES ;开串行口中断 • MOV R0,#50H ;设数据指针 • MOV R7,#10H ;数据长度 • LOOP: MOV A,@R0 ;取一个字符 • MOV C,P ;加奇偶校验 • MOV TB8,C • MOV SBUF,A ;启动一次发送 • HERE: SJMP HERE ;CPU执行其它任务

  25. ORG 0023H ;串行口中断入口 AJMP TRANI • TRANI: PUSH A ;保护现场 • PUSH PSW • CLR TI ;清发送结束标志 • DJNZ R7,NEXT ;是否发送完? • CLR ES ;发送完,关闭串行口中断 SJMP TEND • NEXT: INC R0 ;未发送完,修改指针 • MOV A,@R0 ;取下一个字符 • MOV C,P ;加奇偶校验 • MOV TB8,C • MOV SBUF,A ;发送一个字符 • POP PSW ;恢复现场 • POP A • TEND: RETI  ;中断返回

  26. 2. 接收程序:串行输入16个字符,存入片内RAM的50H起 始单元,串行口波特率为2400(设晶振为11.0592MHz)。 • RECS: MOV SCON,#50H ;串行口方式1允许接收 MOV TMOD,#20H ;T1方式2定时 MOV TL1,#0F4H ;写入T1时间常数 MOV TH1,#0F4H SETB TR1  ;启动T1 MOV R0,#50H ;设数据指针 MOV R7,#10H ;接收数据长度 • WAIT: JBC RI,NEXT ;等待串行口接收 SJMP WAIT • NEXT: MOV A,SBUF ;读取接收字符 MOV @R0,A ;保存一个字符 INC R0 ;修改指针 DJNZ R7,WAIT ;全部字符接收完? RET

  27. 3. 接收程序:串行输入16个字符,进行奇偶校验。 • RECS: MOV SCON,#0D0H ;串行口方式3允许接收 MOV TMOD,#20H ;T1方式2定时 MOV TL1,#0F4H ;写入T1时间常数 MOV TH1,#0F4H SETB TR1  ;启动T1 MOV R0,#50H ;设数据指针 MOV R7,#10H ;接收数据长度 • WAIT: JBC RI,NEXT ;等待串行口接收 SJMP WAIT • NEXT: MOV A,SBUF ;取一个接收字符 JNB P,COMP ;奇偶校验 JNB RB8,ERR ;P≠RB8,数据出错 SJMP RIGHT ;P=RB8,数据正确 • COMP: JB RB8,ERR • RIGHT: MOV @R0,A ;保存一个字符 INC R0 ;修改指针 DJNZ R7,WAIT ;全部字符接收完? CLR F0 ;F0 =0,接收数据全部正确RETERR: SETB F0 ;F0 =1,接收数据出错 • RET

  28. 本章学习结束!

More Related