单片机原理及应用:第5章 MCS-51系列单片机的片内接口及中断2_第1页
单片机原理及应用:第5章 MCS-51系列单片机的片内接口及中断2_第2页
单片机原理及应用:第5章 MCS-51系列单片机的片内接口及中断2_第3页
单片机原理及应用:第5章 MCS-51系列单片机的片内接口及中断2_第4页
单片机原理及应用:第5章 MCS-51系列单片机的片内接口及中断2_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、5.4 MCS-51串行接口及其应用串行通信:指数据一位一位按顺序传送串行通信方式:单工半双工全双工串行通信:异步通信同步通信串行通信的两种基本方式1、异步传送方式一帧数据:一个字符在异步传送中称为一帧数据 一帧数据由4部分组成: 起始位、数据位、奇偶位、停止位 起始位:为逻辑“0”信号,占用一位,用来通知接收设备,一个新的字符开始了 数据位:58位。数据的最低位在前,最高位在后。 奇偶位:紧跟在最高位之后,占用一位,奇偶校验时,根据协议置“1”或“0” 停止位:为逻辑“1”信号,占用1位或2位,当接收端收到停止位时,表示一帧数据结束。2、同步传送方式数据结构: 在传送大量数据时,为了提高传送

2、信息的效率,采用一个数据块共用一个同步字作为起始位的格式,叫同步通信方式 用发、收双方规定的同步字来作为数据块的开始和结束5.4.1、MCS-51串行口结构MCS-51内部有一个全双工的串行通信接口1、数据缓冲器SBUF包括物理上独立的发送缓冲器、接收缓冲器发送缓冲器:只能写入不能读出接收缓冲器:只能读出不能写入二者共用一个地址99H2、串行口控制寄存器字节地址为98H,可位寻址,位地址为98H9FHSM0 SM1 SM2 REN TB8 RB8 TI RISCON (98H)D7D05.4.2、串行口使用方法1、发送数据 (1)设置工作方式 SCON (2)设置波特率 (3)写SBUF,开始

3、发送 (4)判断有无发送完 (5)清零TI2、接受数据 (1)设置工作方式 SCON, 允许接受 (2)设置波特率 (3)判断有无接收完 (4)读取SBUF (5)清零RISM0 SM1 SM2 REN TB8 RB8 TI RISCON (98H)D7D0 1)SM0、SM1:串行口工作方式选择位。 0 0 0 移位寄存器方式,波特率=fosc/12 0 1 1 8位UART,波特率可变 1 0 2 9位UART,波特率为fosc/32或fosc/64 1 1 3 9位UART,波特率可变 SM0 SM1 方式功 能 (1)设置工作方式 SCON2)SM2 多机通信控制位 用于方式2或方式3

4、中。 如果SM2=1,只有当接收到的第9位数据(RB8)为“1”时,才将接收到的前8位数据送入SBUF,并置“1” RI,产生中断请求;当接收到的第9位数据(RB8)为“0”时,则将接收到的前8位数据丢弃。 如果SM2=0,则不论第9位数据是“1”还是“0”,都将前8位数据送入SBUF中,并置“1” RI,产生中断请求。3)REN:允许接收控制位。由软件置“1”时,允许接收。置“0”时,禁止接收4)TB8:发送的第9位数据 方式2和3时,TB8是要发送的第9位数据5)RB8: 在方式2和方式3中要接收的第9位数据,在方式1时,如SM2=0,RB8是接收到的停止位。在方式0中,不使用RB86)T

5、I:发送中断标志。 在方式0串行发送第8位结束时由硬件置“1”,或在其他方式中串行发送停止位的开始时置“1”,必须由软件清“0”7)RI:接收中断标志。 在方式0串行接收第8位结束时由硬件置“1”,或在其他方式中串行接收停止位的开始时置“1”,必须由软件清“0”(2)、波特率的设计方式0的波特率是固定的:波特率=fosc/12方式2波特率取决于SMOD波特率=2SMOD/32T1的溢出率方式2波特率=2SMOD/64 foscSMOD=0时,波特率=fosc/64,SMOD=1时,波特率=fosc/32方式1、3波特率取决于T1的溢出率SMOD=0时,波特率= T1的溢出率/32,SMOD=1

6、时,波特率= T1的溢出率/16(3)、特殊功能寄存器PCON其字节地址87H,没有位寻址功能。PCON(87H)SMODSMOD:波特率选择位。SMOD=1时,波特率加倍定时器1作波特率发生器T1的溢出率=计数速度/(2K-初值)T1为计数器时:T1为定时器时:T1的溢出率=fosc/ 12(2N-初值)工作于方式1、3时波特率:波特率=2SMOD/32T1的溢出率= 2SMOD fosc/ 32 12(2K-初值)5.4.3、串行口工作方式 1、工作方式1)、方式0 同步移位寄存器输入/输出方式,常用于外接移位寄存器,以扩展并行I/O口。 8位数据为一帧,不设起始位和停止位,先发送或接收最

7、低位。 方式0的波特率为:波特率=fosc/12该方式下必须使SCON寄存器中的SM2=0方式0 发送 一个数据写入SBUF,串口将数据从RXD输出(波特率fosc/12),TXD输出同步移位信号,发送完TI置1图5-12 方式0扩展I/O口硬件逻辑图方式0 接收 REN置1,串口将数据从RXD输入(波特率fosc/12),TXD输出同步移位信号,发送完RI置18051RXDTXD74LS165345614111213数据输入移位脉冲D7 D0图5-12 方式0扩展I/O口硬件逻辑图2)、方式1波特率可变的8位异步通信接口方式。起始位1位、数据位8位,停止位1位波特率=2SMOD/32T1溢出

8、率方式1发送CPU 执行一条写SBUF指令,就启动了串口发送方式1接收 允许接收位REN被置“1”后,接收器就开始工作,跳变检测器以波特率16倍的速率采样RXD端的电平,RXD引脚上发生由“1”到“0”的跳变,接收器开始接收。3)、方式29位异步通信接口方式。传送一帧数据信息为11位波特率=2SMOD/64fosc方式2发送 数据由TXD端输出,附加的第9位数据由SCON中的TB8提供。 CPU 执行一条写SBUF指令,就启动了串口发送,发送完TI置1方式2接收 与方式1相似,REN被置“1”后,跳变检测器以波特率16倍的速率采样RXD端的电平,RXD引脚上发生由“1”到“0”的跳变,接收器开

9、始接收。4)、方式39位异步通信接口方式。传送一帧数据信息为11位波特率= 2SMOD/32T1的溢出率方式3发送 数据由TXD端输出,附加的第9位数据由SCON中的TB8提供。 CPU 执行一条写SBUF指令,就启动了串口发送,发送完TI置1方式3接收 与方式1相似,REN被置“1”后,跳变检测器以波特率16倍的速率采样RXD端的电平,RXD引脚上发生由“1”到“0”的跳变,接收器开始接收。1、 MCS-51单片机串行口接收数据的次序是下述的顺序( )。(1)接收完一帧数据后,硬件自动将SCON的RI置1 (2)用软件将RI清零(3)接收到的数据由SBUF读出 (4)置SCON的REN为1,

10、外部数据由RXD(P30)输入 A(1)(2)(3)(4) B(4)(1)(2)(3) C(4)(3)(1)(2) D(3)(4)(1)(2)2、在MCS-51单片机中,需要软件进行中断撤销的是:( ) A定时中断 B脉冲触发的外部中断 C电平触发的外部中断 D串行口中断3、串行口每一次传送( )字符。 A.1个 B.1串 C.1帧 D.1波特4、在串行通信中, 8031中发送和接收的寄存器是( ) 。 A.TMOD B. SBUF C. SCON D. DPTR5、要使MCS-51能响应定时器T1中断,串行接口中断,它的中断允许寄存器IE的内容应是( ) A.98H B.84H C.42H

11、D.22H6、MCS-51有一个全双工的 步串行口,有 种工作方式。7、简述89C51串口通信的四种方式及其特点8、假定异步串行通信的字符格式为一个起始位、8个数据位、一个停止位和一个偶校验位,请画出传送字符“T”的帧格式。(T的ASCII码为54H)9、若已知:fosc=6MHz , (写出计算过程)求: 串行口方式0传送的波特率? 如果T1采用方式2定时,SMOD=0,初值为156,求串行口方式1的波特率为多少?串行口工作在方式2时,SMOD=1,求其波特率为多少?上节课知识回顾:串行口使用方法1、发送数据 (1)设置工作方式 SCON (2)设置波特率 (3)写SBUF,开始发送: SB

12、UF=数据; (4)判断有无发送完: while(!TI); (5)清零TI: TI=0; 2、接受数据 (1)设置工作方式 SCON,允许接受 (2)设置波特率 (3)判断有无接收完: while(!RI); (4)读取SBUF: 变量=SBUF (5)清零RI: RI=0;SM0 SM1 SM2 REN TB8 RB8 TI RISCON (98H)D7D0 1)SM0、SM1:串行口工作方式选择位。 0 0 0 移位寄存器方式,波特率=fosc/12 0 1 1 8位UART,波特率可变 1 0 2 9位UART,波特率为fosc/32或fosc/64 1 1 3 9位UART,波特率可

13、变 SM0 SM1 方式功 能 (1)设置工作方式 SCON2)SM2 多机通信控制位 用于方式2或方式3中。 如果SM2=1,只有当接收到的第9位数据(RB8)为“1”时,才将接收到的前8位数据送入SBUF,并置“1” RI,产生中断请求;当接收到的第9位数据(RB8)为“0”时,则将接收到的前8位数据丢弃。 如果SM2=0,则不论第9位数据是“1”还是“0”,都将前8位数据送入SBUF中,并置“1” RI,产生中断请求。3)REN:允许接收控制位。由软件置“1”时,允许接收。置“0”时,禁止接收4)TB8:发送的第9位数据 方式2和3时,TB8是要发送的第9位数据5)RB8: 在方式2和方

14、式3中要接收的第9位数据,在方式1时,如SM2=0,RB8是接收到的停止位。在方式0中,不使用RB86)TI:发送中断标志。 在方式0串行发送第8位结束时由硬件置“1”,或在其他方式中串行发送停止位的开始时置“1”,必须由软件清“0”7)RI:接收中断标志。 在方式0串行接收第8位结束时由硬件置“1”,或在其他方式中串行接收停止位的开始时置“1”,必须由软件清“0”(2)、波特率的设计方式0的波特率是固定的:波特率=fosc/12方式2波特率取决于SMOD波特率=2SMOD/32T1的溢出率=方式2波特率=2SMOD/64 foscSMOD=0时,波特率=fosc/64,SMOD=1时,波特率

15、=fosc/32方式1、3波特率取决于T1的溢出率1、利用方式0扩展并行I/O口 例1:利用51单片机的串行口外接74LS164扩展8位并行输出口。电路图如下图所示,8位并行输出口的各位分别接一个发光二极管,要求发光二极管按从左到右的顺序,以一定的时间间隔依次循环发光,试编程实现。 5.4.4 串行口的应用 设计分析: 要求Led灯从左至右一次点亮 依次发送0 x80、0 x40、0 x20、0 x10、0 x08、0 x04、0 x02、0 x01即可 定义变量led,初始化为0 x80,led=_crol_(led,1) 设计实现: 1)设置工作方式; SCON=0 x00; 2)设置波特

16、率; 方式0下波特率固定 3)开始发送 ; SBUF=led; 4)判断有无发送完 ; while(!TI); 5)清零TI; TI=0; 6)变量led左移一位; led=_crol_(led,1)参考程序如下: ORG 0000H LJMP MAIN ORG 2000HMAIN: CLR P1.0 MOV SCON,#00H SETB P1.0 MOV A,#80HBACK1: MOV SBUF,ABACK2: JNB TI,BACK2 CLR TI LCALL DELAY RR A SJMP BACK1DELAY: MOV R0,#00H MOV R1,#00H MOV R2,#5LOO

17、P2: DJNZ R0,LOOP2 DJNZ R1,LOOP2 DJNZ R2,LOOP2 RET ENDC51参考程序如下:#include “reg51.h”#include Sbit P1_0 =P10;void delay(void)Void main()Unsigned char led;P1_0=0;SCON=0;P1_0=1;Led=0 x80;While(1)SBUF=led;While(!TI);TI=0;delay();led=_cror_(led,1);void delay()unsigned char i,j;for(i=0;i255;i+)for(j=0;j255;j

18、+); 练习:利用51单片机的串行口外接74LS164扩展8位并行输出口。电路图如下图所示,8位并行输出口的各位分别接一个发光二极管,要求发光二极管按从左到右的顺序,以1S的间隔依次循环发光,试编程实现。 设计分析: 发光二极管按从左到右的顺序,以1S的间隔依次循环发光 1)先点亮第一个,即发送0 x80(定义变量x,初始化为0 x80); 2)开始设置定时器定时1s,启动定时器 3)1S时间到:变量x循环右移一位,发送变量 设计实现: 1)先点亮第一个,即发送0 x80(定义变量x,初始化为0 x80) unsigned char x=0 x80;/全局变量定义 SCON=0 x00; SB

19、UF=x; while(!TI); TI=0; 2)开始设置定时器定时1s,启动定时器 TMOD=0 x01; TH0=0 x3c; TL0-0 xb0; EA=1; ET0=1; TR0=1;3) 1S时间到:变量x循环右移一位,发送变量 void intt0() interrupt 1 TH0=0 x3c; TL0-0 xb0; i+; if(i=20) i=0; x=_cror_(x,1); SBUF=x; while(!TI); TI=0; #include #include unsigned char i;unsigned char led=0 x80;void main() TMO

20、D=0 x01; TH0=0 x3c; TL0=0 xb0; EA=1; ET0=1; SCON=0; SBUF=led; while(!TI); TI=0; led=_cror_(led,1); TR0=1; while(1); void intt0() interrupt 1 TH0=0 x3c; TL0=0 xb0; i+; if(i=20) i=0; led=_cror_(led,1); SBUF=led; while(!TI); TI=0; 例2、利用51单片机的串行口外接74ls165扩展8位并行输入口,如图所示要求通过LED灯显示74LS1658位输入口的状态。 设计分析: 利用

21、方式0接受输入数据,然后通过led显示接收到的数据 设计实现: 1)利用方式0接受输入数据 SCON=0 x10; while(!RI); 变量=SBUF; RI=0; 2)通过led显示接收到的数据 P1=变量;汇编语言源程序:ORG 0000H;LJMP MAIN;ORG 2000H;MAIN: CLR P1.0; SETB P1.0;BACK: MOV SCON,#10H;BACK1:JNB RI,BACK1; CLR RI; MOV A,SBUF; MOV R2,A; SJMP $;C51参考程序:#include sbit P2_0=P20;void main()unsigned c

22、har led;P2_0=0;P2_0=1;SCON=0 x10;while(1) while(!RI);RI=0;led=SBUF;P1=led;2、方式1:两个单片机串行通信 设计分析: 单片机1利用方式1发送数据; 单片机2利用方式1接收数据,然后通过led显示接收到的数据 设计实现: 单片机1利用方式1发送数据 1)设置工作方式:SCON=0 x40; 2)设置波特率: TMOD=0X20;TL1=TH1=0XF4; TR1=1; 3)开始发送数据:SBUF=变量; 4)判断有无发送完:while(!TI); 5)清零TI: TI=0;单片机2利用方式1接受输入数据,并通过Led灯显示

23、接收数据 1)设置工作方式:SCON=0 x50; 2)设置波特率: TMOD=0X20;TL1=TH1=0XF4; TR1=1; 3)判断有无接收完: while(!RI); 4)读取接收到的数据:变量=SBUF; 5)清零RI: RI=0; 6)通过led灯显示接收到的数据:P2=变量;单片机(1):#include void delay();void main()SCON=0 x40;TMOD=0X20;TL1=TH1=0XF4;TR1=1;SBUF=0 xAA;while(TI=0);TI=0;while(1);void delay()unsigned char i,j;for(i=0

24、;i255;i+)for(j=0;j255;j+);单片机(2):#include void delay();void main()unsigned char a;SCON=0 x50;TMOD=0X20;TL1=TH1=0XF4;TR1=1;while(RI=0);RI=0;a=SBUF;P2=a;while(1);void delay()unsigned char i,j;for(i=0;i255;i+)for(j=0;j255;j+);3、利用方式2、方式3与多机通信 串行口控制寄存器SCON中的SM2位为方式2、方式3的多机通讯控制位。在多机通讯中起着非常重要的作用。一个典型的多机通讯

25、系统硬件连接如下图所示。#include unsigned char ledtab=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F,0 x77,0 x7C,0 x39,0 x5E,0 x79,0 x71;unsigned char add=0 x01,0 x02,0 x03;void main() unsigned char i, a;while(1)a=P1;if(a=0 xfe) SCON=0 x88;SBUF=add0; while(!TI);TI=0; SCON=0 x80;SBUF=ledtab1; while(

26、!TI);TI=0;if(a=0 xfd) SCON=0 x88;SBUF=add1;while(!TI);TI=0; SCON=0 x80;SBUF=ledtab3;while(!TI);TI=0;if(a=0 xfb) SCON=0 x88;SBUF=add2;while(!TI);TI=0; SCON=0 x80;SBUF=ledtab5;while(!TI);TI=0;#include void main()unsigned char a,b;while(1) b=0;SCON=0 xB0; while(!RI);a=SBUF;RI=0;if(a=0 x01)SCON=SCON&0 x

27、df;elseSCON=SCON|0 x20;while(!RI);b=SBUF;RI=0;SBUF=0;P1=b; 上图为一主多从结构的多机通讯系统,主机和从机应设置成相同的方式,使用相同的波特率。其工作通讯过程简单描述如下: 主机发出要求与之通讯的从机地址信号,并使TB81。 将所有从机的SM2都置为1,将接收到的第9位的状态送入从机的RB8,使RB81。 所有满足SM21、RB8=1条件的从机都能激活RI,进入各自的中断服务程序,在从机的中断服务程序中判断主机发出的地址信号是否与本从机号相同,若相同则将其SM2设为0,并将本机地址发回主机作为应答,否则不动作。 主机发出需传送的数据。并使

28、TB8=0。 所有从机均接收到该数据帧,其第9位进入RB8,即RB8=0。对于地址号与主机发出的地址不相符的那些从机,由于其SM2=1,而接收到的第9位使它们的RB8都为0,因此都不能激活RI,使得接收到的数据自然丢失。 地址号与主机发出的地址相同的那台从机SM20,这就使得不管接收到的第9位为何值,都能激活RI,接收到的数据有效。 通过以上6步,可完成主机与从机的一对一通讯。当主机需与其他从机联系时,则正与主机通讯的这台从机应恢复SM2=1,主机可再发出地址帧寻址其他从机。 (2)利用方式1实现点对点的异步通信 例:编程将甲机片内RAM 50H5FH单元中的数据向乙机发送,在发送之前将数据块

29、长度N发送给乙机,当发送完N个字节后,再发送一个累加效验和。乙机接收数据进行累加和校验,如果和发送方的累加和一致,发送数据“00”,表示接收正确,如果不一致,发数据FFH,甲机再重发,乙机接收的数据存入片内70H7FH单元中。设波特率为2400,fosc=6MHz,试编程实现。 参考程序如下: 甲机发送程序TRT: MOV TMOD,#20H MOV TH1,#0F3H MOV TL1,#0F3H SETB TR1 MOV SCON,#50HRPT: MOV R0,#50H MOV R2,#10H MOV R3,#00H MOV SBUF,R2BACK1:JNB TI,BACK 1 CLR TIBACK2:MOV A,R0 MOV SBUF,A ADD A,R3 MOV R3,A INC R0BACK3: JNB TI,BACK 3 CLR TI DJNZ R2,BACK 2 MOV SBUF,R3 MOV R3,#0BACK4: JNB TI,BACK4 CLR TIBACK5: JNB RI,BACK5 CLR RI MOV A,SBUF JNZ RPT RET乙机接收程序RSU: MOV TMOD,#20H MOV TH1,#0F3H MOV TL1,#0F3H SETB TR1 MOV SCON,#50HBACK: MOV R0,#70H

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论