《单片机原理及应用:第5章 MCS-51系列单片机的片内接口及中断2》由会员分享,可在线阅读,更多相关《单片机原理及应用:第5章 MCS-51系列单片机的片内接口及中断2(54页珍藏版)》请在金锄头文库上搜索。
1、5.4 MCS-51串行接口及其应用串行接口及其应用串行通信:串行通信:指数据一位一位按顺序传送指数据一位一位按顺序传送串行通信方式:串行通信方式:单工单工半双工半双工全双工全双工串行通信:串行通信:异步通信异步通信同步通信同步通信同步通信同步通信串行通信的两种基本方式串行通信的两种基本方式1、异步传送方式、异步传送方式一帧一帧数据:一个字符在异步传送中称为一帧数据数据:一个字符在异步传送中称为一帧数据 一帧数据由一帧数据由4部分组成:部分组成: 起始位、数据位、奇偶位、停止位起始位、数据位、奇偶位、停止位 起始位:起始位:为逻辑为逻辑“0”0”信号,占用一位,用来通知接收设备,一个新的信号,
2、占用一位,用来通知接收设备,一个新的字符开始了字符开始了 数据位:数据位:5 58 8位。数据的最低位在前,最高位在后。位。数据的最低位在前,最高位在后。 奇偶位:奇偶位:紧跟在最高位之后,占用一位,奇偶校验时,根据协议置紧跟在最高位之后,占用一位,奇偶校验时,根据协议置“1”1”或或“0”0” 停止位:停止位:为逻辑为逻辑“1”1”信号,占用信号,占用1 1位或位或2 2位,当接收端收到停止位时,位,当接收端收到停止位时,表示一帧数据结束。表示一帧数据结束。2、同步传送方式、同步传送方式数据结构:数据结构: 在传送大量数据时,为了提高传送信息的效率,采用一个数在传送大量数据时,为了提高传送信
3、息的效率,采用一个数据块共用一个同步字作为起始位的格式,叫同步通信方式据块共用一个同步字作为起始位的格式,叫同步通信方式 用发、收双方规定的同步字来作为数据块的开始和结束用发、收双方规定的同步字来作为数据块的开始和结束5.4.1、MCS-51串行口结构串行口结构MCS-51内部有一个全双工的串行通信接口内部有一个全双工的串行通信接口1、数据缓冲器、数据缓冲器SBUF包括物理上独立的发送缓冲器、接收缓冲器包括物理上独立的发送缓冲器、接收缓冲器发送缓冲器:只能写入不能读出发送缓冲器:只能写入不能读出接收缓冲器:只能读出不能写入接收缓冲器:只能读出不能写入二者共用一个地址二者共用一个地址99H2、串
4、行口控制寄存器、串行口控制寄存器字节地址为字节地址为98H,可位寻址,位地址为可位寻址,位地址为98H9FHSM0 SM1 SM2 REN TB8 RB8 TI RISM0 SM1 SM2 REN TB8 RB8 TI RISCON (98H)SCON (98H)D7D7D0D05.4.25.4.2、串行口使用方法、串行口使用方法、串行口使用方法、串行口使用方法1 1、发送数据、发送数据 (1 1)设置工作方式)设置工作方式 SCONSCON (2 2)设置波特率)设置波特率 (3 3)写)写SBUFSBUF,开始发送,开始发送 (4 4)判断有无发送完)判断有无发送完 (5 5)清零)清零T
5、ITI2 2、接受数据、接受数据 (1 1)设置工作方式)设置工作方式 SCONSCON, 允许接受允许接受 (2 2)设置波特率)设置波特率 (3 3)判断有无接收完)判断有无接收完 (4 4)读取)读取SBUF SBUF (5 5)清零)清零RIRISM0 SM1 SM2 REN TB8 RB8 TI RISM0 SM1 SM2 REN TB8 RB8 TI RISCON (98H)SCON (98H)D7D7D0D0 1 1)SM0SM0、SM1SM1:串行口工作方式选择位。串行口工作方式选择位。 0 0 0 0 0 0 移位寄存器方式,波特率移位寄存器方式,波特率=fosc/12=fo
6、sc/12 0 1 1 80 1 1 8位位UARTUART,波特率可变波特率可变 1 0 2 91 0 2 9位位UARTUART,波特率为波特率为fosc/32fosc/32或或fosc/64fosc/64 1 1 3 91 1 3 9位位UARTUART,波特率可变波特率可变 SM0 SM1 SM0 SM1 SM0 SM1 SM0 SM1 方式方式方式方式功功功功 能能能能 (1 1 1 1)设置工作方式)设置工作方式)设置工作方式)设置工作方式 SCONSCONSCONSCON2 2)SM2 SM2 多机通信控制位多机通信控制位 用于方式用于方式2 2或方式或方式3 3中。中。 如如果
7、果SM2=1SM2=1,只只有有当当接接收收到到的的第第9 9位位数数据据(RB8RB8)为为“1 1”时时,才才将将接接收收到到的的前前8 8位位数数据据送送入入SBUFSBUF,并并置置“1 1” RIRI,产产生生中中断断请请求求;当当接接收收到到的的第第9 9位数据(位数据(RB8RB8)为为“0 0”时,则将接收到的前时,则将接收到的前8 8位数据丢弃。位数据丢弃。 如如果果SM2=0SM2=0,则则不不论论第第9 9位位数数据据是是“1 1”还还是是“0 0”,都都将将前前8 8位位数数据据送送入入SBUFSBUF中,并置中,并置“1 1” RI RI,产生中断请求。产生中断请求。
8、3 3)RENREN:允许接收控制位。:允许接收控制位。由软件置由软件置“1 1”时,允许接收。时,允许接收。置置“0 0”时,禁止接收时,禁止接收4 4)TB8TB8:发送的第发送的第9 9位数据位数据 方式方式2 2和和3 3时,时,TB8TB8是要发送的第是要发送的第9 9位数据位数据5 5 5 5)RB8RB8RB8RB8: 在方式在方式2 2和方式和方式3 3中要接收的第中要接收的第9 9位数据,在方式位数据,在方式1 1时,如时,如SM2=0SM2=0,RB8RB8是接收到的停止位。在方式是接收到的停止位。在方式0 0中,不使用中,不使用RB8RB86 6 6 6)TITITITI
9、:发送中断标志发送中断标志。 在方式在方式0串行发送第串行发送第8位结束时由硬件置位结束时由硬件置“1”,或在其他方式中串行,或在其他方式中串行发送停止位的开始时置发送停止位的开始时置“1”,必须由软件清,必须由软件清“0”7 7 7 7)RIRIRIRI:接收中断标志。接收中断标志。 在方式在方式0串行接收第串行接收第8位结束时由硬件置位结束时由硬件置“1”,或在其他方式中串行接,或在其他方式中串行接收停止位的开始时置收停止位的开始时置“1”,必须由软件清,必须由软件清“0”(2 2)、波特率的设计)、波特率的设计)、波特率的设计)、波特率的设计方式方式0 0的波特率是固定的:的波特率是固定
10、的:波特率波特率=fosc/12=fosc/12方式方式2 2波特率取决于波特率取决于SMODSMOD波特率波特率=2=2SMODSMOD/32/32T1T1的的溢出率溢出率方式方式2 2波特率波特率=2=2SMODSMOD/64/64 fosc foscSMOD=0SMOD=0时,波特率时,波特率=fosc/64=fosc/64,SMOD=1SMOD=1时,波特率时,波特率=fosc/32=fosc/32方式方式1 1、3 3波特率取决于波特率取决于T1T1的溢出率的溢出率SMOD=0SMOD=0时,波特率时,波特率= T1= T1的溢出率的溢出率/32/32,SMOD=1SMOD=1时,波
11、特率时,波特率= T1= T1的溢出率的溢出率/16/16(3 3)、特殊功能寄存器)、特殊功能寄存器)、特殊功能寄存器)、特殊功能寄存器PCONPCON其其字节地址字节地址87H87H,没有位寻址功能。没有位寻址功能。PCONPCON(87H87H)SMODSMODSMODSMODSMODSMOD:波特率选择位。波特率选择位。SMOD=1SMOD=1时,波特率加倍时,波特率加倍定时器定时器1作波特率发生器作波特率发生器T1的溢出率的溢出率=计数速度计数速度/(2K-初值)初值)T1为计数器时:为计数器时:T1为定时器时:为定时器时:T1的溢出率的溢出率=fosc/ 12(2N-初值)初值)工
12、作于方式工作于方式1、3时波特率:时波特率:波特率波特率=2SMOD/32T1的的溢出率溢出率= 2SMOD fosc/ 32 12(2K-初值)初值)5.4.35.4.3、串行口工作方式、串行口工作方式、串行口工作方式、串行口工作方式 1 1、工作方式、工作方式、工作方式、工作方式1 1)、方式)、方式)、方式)、方式0 0 同步移位寄存器输入同步移位寄存器输入/ /输出方式输出方式,常用于外接移位寄存,常用于外接移位寄存器,以扩展并行器,以扩展并行I/OI/O口。口。 8 8位数据为一帧,不设起始位和停止位,先发送或接位数据为一帧,不设起始位和停止位,先发送或接收收最低位。最低位。 方式方
13、式0 0的波特率为:的波特率为:波特率波特率=fosc/12=fosc/12该方式下必须使该方式下必须使SCONSCON寄存器中的寄存器中的SM2=0SM2=0方式方式方式方式0 0 发送发送发送发送 一个数据写入一个数据写入SBUFSBUF,串口将数据从串口将数据从RXDRXD输出(波特率输出(波特率fosc/12fosc/12),),TXDTXD输输出同步移位信号,发送完出同步移位信号,发送完TITI置置1 1图图5-12 方式方式0扩展扩展I/O口硬件逻辑图口硬件逻辑图方式方式方式方式0 0 接收接收接收接收 RENREN置置1 1,串口将数据从,串口将数据从RXDRXD输入(波特率输入
14、(波特率fosc/12fosc/12),),TXDTXD输出同步移输出同步移位信号,发送完位信号,发送完RIRI置置1 180518051RXDRXDTXDTXD74LS16574LS1653 3 4 4 5 5 6 61 14 41 11 11 12 21 13 3数据输入数据输入数据输入数据输入移位脉冲移位脉冲移位脉冲移位脉冲D7 D0D7 D0图图5-12 方式方式0扩展扩展I/O口硬件逻辑图口硬件逻辑图2 2)、方式)、方式)、方式)、方式1 1波特率可变的波特率可变的8 8位异步通信接口方式。位异步通信接口方式。起始位起始位1 1位、数据位位、数据位8 8位,停止位位,停止位1 1位
15、位波特率波特率=2=2SMODSMOD/32/32T1T1溢出率溢出率方式方式方式方式1 1 1 1发送发送发送发送CPU CPU 执行一条写执行一条写SBUFSBUF指令,就启动了串口发送指令,就启动了串口发送方式方式方式方式1 1 1 1接收接收接收接收 允许接收位允许接收位RENREN被置被置“1 1”后,接收器就开始工作,跳变检测器以波后,接收器就开始工作,跳变检测器以波特率特率1616倍的速率采样倍的速率采样RXDRXD端的电平,端的电平,RXDRXD引脚上发生由引脚上发生由“1 1”到到“0 0”的跳的跳变,接收器开始接收。变,接收器开始接收。3 3)、方式)、方式)、方式)、方式
16、2 29 9位异步通信接口方式。传送一帧数据信息为位异步通信接口方式。传送一帧数据信息为1111位位波特率波特率=2=2SMODSMOD/64/64foscfosc方式方式方式方式2 2 2 2发送发送发送发送 数据由数据由TXDTXD端输出,附加的第端输出,附加的第9 9位数据由位数据由SCONSCON中的中的TB8TB8提供。提供。 CPU CPU 执行一条写执行一条写SBUFSBUF指令,就启动了串口发送,发送完指令,就启动了串口发送,发送完TITI置置1 1方式方式方式方式2 2 2 2接收接收接收接收 与方式与方式1 1相似,相似,RENREN被置被置“1 1”后,跳变检测器以波特率
17、后,跳变检测器以波特率1616倍的速倍的速率采样率采样RXDRXD端的电平,端的电平,RXDRXD引脚上发生由引脚上发生由“1 1”到到“0 0”的跳变,接收器开的跳变,接收器开始接收。始接收。4 4 4 4)、方式)、方式)、方式)、方式3 3 3 39 9位异步通信接口方式。传送一帧数据信息为位异步通信接口方式。传送一帧数据信息为1111位位波特率波特率= 2= 2SMODSMOD/32/32T1T1的溢出率的溢出率方式方式方式方式3 3 3 3发送发送发送发送 数据由数据由TXDTXD端输出,附加的第端输出,附加的第9 9位数据由位数据由SCONSCON中的中的TB8TB8提供。提供。
18、CPU CPU 执行一条写执行一条写SBUFSBUF指令,就启动了串口发送,发送完指令,就启动了串口发送,发送完TITI置置1 1方式方式方式方式3 3 3 3接收接收接收接收 与方式与方式1 1相似,相似,RENREN被置被置“1 1”后,跳变检测器以波特率后,跳变检测器以波特率1616倍的速率倍的速率采样采样RXDRXD端的电平,端的电平,RXDRXD引脚上发生由引脚上发生由“1 1”到到“0 0”的跳变,接收器开始的跳变,接收器开始接收。接收。1 1、 MCS-51MCS-51单片机串行口接收数据的次序是下述的顺序单片机串行口接收数据的次序是下述的顺序( )( )。(1 1)接收完一帧数
19、据后,硬件自动将)接收完一帧数据后,硬件自动将SCONSCON的的RIRI置置1 1 (2 2)用软件将)用软件将RIRI清清零零(3 3)接收到的数据由)接收到的数据由SBUFSBUF读出读出 (4 4)置)置SCONSCON的的RENREN为为1 1,外部数据由,外部数据由RXDRXD(P3P30 0)输入)输入 A A(1 1)()(2 2)()(3 3)()(4 4) B B(4 4)()(1 1)()(2 2)()(3 3) C C(4 4)()(3 3)()(1 1)()(2 2) D D(3 3)()(4 4)()(1 1)()(2 2)2 2、在、在MCS-51MCS-51单片
20、机中,需要软件进行中断撤销的是单片机中,需要软件进行中断撤销的是:( ) :( ) A A定时中断定时中断 B B脉冲触发的外部中断脉冲触发的外部中断 C C电平触发的外部中断电平触发的外部中断 D D串行口中断串行口中断3 3、串行口每一次传送、串行口每一次传送( )( )字符。字符。 A.1A.1个个 B.1B.1串串 C.1C.1帧帧 D.1D.1波特波特4 4、在串行通信中,、在串行通信中, 80318031中发送和接收的寄存器是中发送和接收的寄存器是( ) ( ) 。 A.TMOD B. SBUF C. SCON D. DPTRA.TMOD B. SBUF C. SCON D. DP
21、TR5 5、要使、要使MCS-51MCS-51能响应定时器能响应定时器T1T1中断,串行接口中断,它的中断允许寄存器中断,串行接口中断,它的中断允许寄存器IEIE的的内容应是(内容应是( ) A.98H B.84H C.42H D.22HA.98H B.84H C.42H D.22H6 6、MCS-51MCS-51有一个全双工的有一个全双工的 步串行口,有步串行口,有 种工作方式。种工作方式。7 7、简述、简述89C5189C51串口通信的四种方式及其特点串口通信的四种方式及其特点8 8、假定异步串行通信的字符格式为一个起始位、假定异步串行通信的字符格式为一个起始位、8 8个数据位、一个停个数
22、据位、一个停止位和一个偶校验位,请画出传送字符止位和一个偶校验位,请画出传送字符“T”T”的帧格式。的帧格式。(T(T的的ASCIIASCII码为码为54H)54H)9 9、若已知:若已知:foscfosc=6MHz , =6MHz , (写出计算过程)求:(写出计算过程)求: 串行口方式串行口方式0 0传送的波特率?传送的波特率? 如果如果T1T1采用方式采用方式2 2定时,定时,SMOD=0SMOD=0,初值为,初值为156156,求串行口方式,求串行口方式1 1的波的波特率为多少?特率为多少?串行口工作在方式串行口工作在方式2 2时,时,SMOD=1SMOD=1,求其波特率为多少?,求其
23、波特率为多少?上节课知识回顾:串行口使用方法上节课知识回顾:串行口使用方法上节课知识回顾:串行口使用方法上节课知识回顾:串行口使用方法1 1、发送数据、发送数据 (1 1)设置工作方式)设置工作方式 SCONSCON (2 2)设置波特率)设置波特率 (3 3)写)写SBUFSBUF,开始发送,开始发送: SBUF=: SBUF=数据;数据; (4 4)判断有无发送完:)判断有无发送完: whilewhile(!(!TITI);); (5 5)清零)清零TITI: TI=0TI=0; 2 2、接受数据、接受数据 (1 1)设置工作方式)设置工作方式 SCONSCON,允许接受,允许接受 (2
24、2)设置波特率)设置波特率 (3 3)判断有无接收完:)判断有无接收完: whilewhile(!(!RIRI);); (4 4)读取)读取SBUFSBUF: 变量变量=SBUF =SBUF (5 5)清零)清零RIRI: RI=0RI=0;SM0 SM1 SM2 REN TB8 RB8 TI RISM0 SM1 SM2 REN TB8 RB8 TI RISCON (98H)SCON (98H)D7D7D0D0 1 1)SM0SM0、SM1SM1:串行口工作方式选择位。串行口工作方式选择位。 0 0 0 0 0 0 移位寄存器方式,波特率移位寄存器方式,波特率=fosc/12=fosc/12
25、0 1 1 80 1 1 8位位UARTUART,波特率可变波特率可变 1 0 2 91 0 2 9位位UARTUART,波特率为波特率为fosc/32fosc/32或或fosc/64fosc/64 1 1 3 91 1 3 9位位UARTUART,波特率可变波特率可变 SM0 SM1 SM0 SM1 SM0 SM1 SM0 SM1 方式方式方式方式功功功功 能能能能 (1 1 1 1)设置工作方式)设置工作方式)设置工作方式)设置工作方式 SCONSCONSCONSCON2 2)SM2 SM2 多机通信控制位多机通信控制位 用于方式用于方式2 2或方式或方式3 3中。中。 如如果果SM2=1
26、SM2=1,只只有有当当接接收收到到的的第第9 9位位数数据据(RB8RB8)为为“1 1”时时,才才将将接接收收到到的的前前8 8位位数数据据送送入入SBUFSBUF,并并置置“1 1” RIRI,产产生生中中断断请请求求;当当接接收收到到的的第第9 9位数据(位数据(RB8RB8)为为“0 0”时,则将接收到的前时,则将接收到的前8 8位数据丢弃。位数据丢弃。 如如果果SM2=0SM2=0,则则不不论论第第9 9位位数数据据是是“1 1”还还是是“0 0”,都都将将前前8 8位位数数据据送送入入SBUFSBUF中,并置中,并置“1 1” RI RI,产生中断请求。产生中断请求。3 3)RE
27、NREN:允许接收控制位。:允许接收控制位。由软件置由软件置“1 1”时,允许接收。时,允许接收。置置“0 0”时,禁止接收时,禁止接收4 4)TB8TB8:发送的第发送的第9 9位数据位数据 方式方式2 2和和3 3时,时,TB8TB8是要发送的第是要发送的第9 9位数据位数据5 5 5 5)RB8RB8RB8RB8: 在方式在方式2 2和方式和方式3 3中要接收的第中要接收的第9 9位数据,在方式位数据,在方式1 1时,如时,如SM2=0SM2=0,RB8RB8是接收到的停止位。在方式是接收到的停止位。在方式0 0中,不使用中,不使用RB8RB86 6 6 6)TITITITI:发送中断标
28、志发送中断标志。 在方式在方式0串行发送第串行发送第8位结束时由硬件置位结束时由硬件置“1”,或在其他方式中串行,或在其他方式中串行发送停止位的开始时置发送停止位的开始时置“1”,必须由软件清,必须由软件清“0”7 7 7 7)RIRIRIRI:接收中断标志。接收中断标志。 在方式在方式0串行接收第串行接收第8位结束时由硬件置位结束时由硬件置“1”,或在其他方式中串行接,或在其他方式中串行接收停止位的开始时置收停止位的开始时置“1”,必须由软件清,必须由软件清“0”(2 2)、波特率的设计)、波特率的设计)、波特率的设计)、波特率的设计方式方式0 0的波特率是固定的:的波特率是固定的:波特率波
29、特率=fosc/12=fosc/12方式方式2 2波特率取决于波特率取决于SMODSMOD波特率波特率=2=2SMODSMOD/32/32T1T1的的溢出率溢出率= =方式方式2 2波特率波特率=2=2SMODSMOD/64/64 fosc foscSMOD=0SMOD=0时,波特率时,波特率=fosc/64=fosc/64,SMOD=1SMOD=1时,波特率时,波特率=fosc/32=fosc/32方式方式1 1、3 3波特率取决于波特率取决于T1T1的溢出率的溢出率1 1、利用方式、利用方式0 0扩展并行扩展并行I/OI/O口口 例例1 1:利用:利用5151单片机的串行口外接单片机的串行
30、口外接74LS16474LS164扩展扩展8 8位并行输位并行输出口。电路图如下图所示,出口。电路图如下图所示,8 8位并行输出口的各位分别接一个位并行输出口的各位分别接一个发光二极管,要求发光二极管按从左到右的顺序,以一定的时发光二极管,要求发光二极管按从左到右的顺序,以一定的时间间隔依次循环发光,试编程实现。间间隔依次循环发光,试编程实现。 5.4.4 5.4.4 串行口的应用串行口的应用 设计分析:设计分析:设计分析:设计分析: 要求要求LedLed灯从左至右一次点亮灯从左至右一次点亮 依次发送依次发送0x800x80、0x400x40、0x200x20、0x100x10、0x080x0
31、8、0x040x04、0x020x02、0x010x01即可即可 定义变量定义变量ledled,初始化为,初始化为0x800x80,led=_led=_crolcrol_ _(ledled,1 1) 设计实现:设计实现:设计实现:设计实现: 1 1)设置工作方式)设置工作方式; SCON=0x00; SCON=0x00; 2 2)设置波特率)设置波特率; ; 方式方式0 0下波特率固定下波特率固定 3 3)开始发送)开始发送 ; SBUF=led; SBUF=led; 4 4)判断有无发送完)判断有无发送完 ; while; while(!(!TITI);); 5 5)清零)清零TITI; T
32、I=0TI=0; 6 6)变量)变量ledled左移一位;左移一位; led=_crol_(led,1)led=_crol_(led,1)参考程序如下:参考程序如下: ORG 0000HORG 0000H LJMP MAIN LJMP MAIN ORG 2000H ORG 2000HMAINMAIN: CLR P1.0CLR P1.0 MOV SCON MOV SCON,#00H#00H SETB P1.0 SETB P1.0 MOV A MOV A,#80H#80HBACK1BACK1: MOV SBUFMOV SBUF,A ABACK2BACK2: JNB TIJNB TI,BACK2BA
33、CK2 CLR TI CLR TI LCALL DELAY LCALL DELAY RR A RR A SJMP BACK1 SJMP BACK1DELAY: MOV R0,#00HDELAY: MOV R0,#00H MOV R1,#00H MOV R1,#00H MOV R2,#5 MOV R2,#5LOOP2: DJNZ R0,LOOP2LOOP2: DJNZ R0,LOOP2 DJNZ R1,LOOP2 DJNZ R1,LOOP2 DJNZ R2,LOOP2 DJNZ R2,LOOP2 RET RET END ENDC51C51参考程序如下:参考程序如下:#include “reg51
34、.h”#include “reg51.h”#include #include SbitSbit P1_0 =P10; P1_0 =P10;void void delay(voiddelay(void) )Void main()Void main()Unsigned char led;Unsigned char led;P1_0=0;P1_0=0;SCON=0;SCON=0;P1_0=1;P1_0=1;Led=0x80;Led=0x80;While(1)While(1) SBUF=led;SBUF=led;While(!TIWhile(!TI) );TI=0;TI=0;delay();delay
35、();led=_cror_(led,1);led=_cror_(led,1); void delay()void delay() unsigned char unsigned char i,ji,j; ;for(ifor(i=0;i255;i+)=0;i255;i+)for(jfor(j=0;j255;j+);=0;j255;j+); 练习:利用练习:利用5151单片机的串行口外接单片机的串行口外接74LS16474LS164扩展扩展8 8位并行输位并行输出口。电路图如下图所示,出口。电路图如下图所示,8 8位并行输出口的各位分别接一个发位并行输出口的各位分别接一个发光二极管,要求发光二极管按
36、从左到右的顺序,以光二极管,要求发光二极管按从左到右的顺序,以1S1S的间隔依的间隔依次循环发光,试编程实现。次循环发光,试编程实现。 设计分析:设计分析:设计分析:设计分析: 发光二极管按从左到右的顺序,以发光二极管按从左到右的顺序,以1S1S的间隔依次循环发光的间隔依次循环发光 1 1)先点亮第一个,即发送)先点亮第一个,即发送0x800x80(定义变量(定义变量x x,初始化为,初始化为0x800x80);); 2 2)开始设置定时器定时)开始设置定时器定时1s1s,启动定时器,启动定时器 3 3)1S1S时间到:变量时间到:变量x x循环右移一位,发送变量循环右移一位,发送变量 设计实
37、现:设计实现:设计实现:设计实现: 1 1)先点亮第一个,即发送)先点亮第一个,即发送0x800x80(定义变量(定义变量x x,初始化为,初始化为0x800x80) unsigned char x=0x80unsigned char x=0x80;/全局变量定义全局变量定义 SCON=0x00;SCON=0x00; SBUF=x; SBUF=x; while(!TIwhile(!TI); TI=0;); TI=0; 2 2)开始设置定时器定时)开始设置定时器定时1s1s,启动定时器,启动定时器 TMOD=0x01; TH0=0x3c; TL0-0xb0; EA=1;TMOD=0x01; TH
38、0=0x3c; TL0-0xb0; EA=1; ET0=1; TR0=1; ET0=1; TR0=1;3) 1S3) 1S时间到:变量时间到:变量x x循环右移一位,发送变量循环右移一位,发送变量 void intt0() interrupt 1void intt0() interrupt 1 TH0=0x3c; TL0-0xb0; i+; TH0=0x3c; TL0-0xb0; i+; if(iif(i=20)=20) i=0; i=0; x=_cror_(x,1); x=_cror_(x,1); SBUF=x; SBUF=x; while(!TIwhile(!TI);); TI=0; TI
39、=0; #include #include #include #include unsigned char i;unsigned char i;unsigned char led=0x80;unsigned char led=0x80;void main()void main() TMOD=0x01; TMOD=0x01; TH0=0x3c; TH0=0x3c; TL0=0xb0; TL0=0xb0; EA=1; EA=1; ET0=1; ET0=1; SCON=0; SCON=0; SBUF=led; SBUF=led; while(!TIwhile(!TI);); TI=0; TI=0;
40、led=_cror_(led,1); led=_cror_(led,1); TR0=1; TR0=1; while(1); while(1); void intt0() void intt0() interrupt 1interrupt 1 TH0=0x3c; TH0=0x3c; TL0=0xb0; TL0=0xb0; i+; i+; if(iif(i=20)=20) i=0; i=0; led=_cror_(led,1); led=_cror_(led,1); SBUF=led; SBUF=led; while(!TIwhile(!TI);); TI=0; TI=0; 例例2 2、利用、利用
41、5151单片机的串行口外接单片机的串行口外接74ls16574ls165扩展扩展8 8位并行输入口,位并行输入口,如图所示要求通过如图所示要求通过LEDLED灯显示灯显示74LS165874LS1658位输入口的状态。位输入口的状态。 设计分析:设计分析:设计分析:设计分析: 利用方式利用方式0 0接受输入数据,然后通过接受输入数据,然后通过ledled显示接收到的数据显示接收到的数据 设计实现:设计实现:设计实现:设计实现: 1 1)利用方式)利用方式0 0接受输入数据接受输入数据 SCON=0x10;SCON=0x10; while(!RIwhile(!RI);); 变量变量=SBUF=S
42、BUF; RI=0;RI=0; 2 2)通过)通过ledled显示接收到的数据显示接收到的数据 P1=P1=变量;变量;汇编语言源程序:汇编语言源程序:ORG 0000H;ORG 0000H;LJMP MAIN;LJMP MAIN;ORG 2000H;ORG 2000H;MAIN: CLR P1.0;MAIN: CLR P1.0; SETB P1.0; SETB P1.0;BACK: MOV SCON,#10H;BACK: MOV SCON,#10H;BACK1BACK1:JNB RI,BACK1;JNB RI,BACK1; CLR RI; CLR RI; MOV A,SBUF; MOV A,
43、SBUF; MOV R2,A; MOV R2,A; SJMP $; SJMP $;C51C51参考程序:参考程序:#include #include sbitsbit P2_0=P20; P2_0=P20;void main()void main() unsigned char led;unsigned char led;P2_0=0;P2_0=0;P2_0=1;P2_0=1;SCON=0x10;SCON=0x10;whilewhile(1 1) while(!RIwhile(!RI););RI=0;RI=0;led=SBUF;led=SBUF;P1=led;P1=led; 2 2、方式、方式
44、1 1:两个单片机串行通信:两个单片机串行通信 设计分析:设计分析:设计分析:设计分析: 单片机单片机1 1利用方式利用方式1 1发送数据;发送数据; 单片机单片机2 2利用方式利用方式1 1接收数据,然后通过接收数据,然后通过ledled显示接收到的数据显示接收到的数据 设计实现:设计实现:设计实现:设计实现: 单片机单片机1 1利用方式利用方式1 1发送数据发送数据 1 1)设置工作方式:)设置工作方式:SCON=0x40SCON=0x40; 2 2)设置波特率:)设置波特率: TMOD=0X20;TL1=TH1=0XF4; TR1=1;TMOD=0X20;TL1=TH1=0XF4; TR
45、1=1; 3 3)开始发送数据:)开始发送数据:SBUF=SBUF=变量;变量; 4 4)判断有无发送完:)判断有无发送完:while(!TIwhile(!TI);); 5 5)清零)清零TITI: TI=0TI=0;单片机单片机2 2利用方式利用方式1 1接受输入数据,并通过接受输入数据,并通过LedLed灯显示接收数据灯显示接收数据 1 1)设置工作方式:)设置工作方式:SCON=0x50;SCON=0x50; 2 2)设置波特率:)设置波特率: TMOD=0X20;TL1=TH1=0XF4; TR1=1;TMOD=0X20;TL1=TH1=0XF4; TR1=1; 3 3)判断有无接收完
46、:)判断有无接收完: while(!RIwhile(!RI);); 4 4)读取接收到的数据:变量)读取接收到的数据:变量=SBUF;=SBUF; 5 5)清零)清零RIRI: RI=0RI=0; 6 6)通过)通过ledled灯显示接收到的数据:灯显示接收到的数据:P2=P2=变量;变量;单片机(单片机(1 1):):#include #include void delay();void delay();void main()void main() SCON=0x40;SCON=0x40;TMOD=0X20;TMOD=0X20;TL1=TH1=0XF4;TL1=TH1=0XF4;TR1=1;
47、TR1=1;SBUF=0xAA;SBUF=0xAA;while(TIwhile(TI=0);=0);TI=0;TI=0;while(1);while(1); void delay()void delay() unsigned char unsigned char i,ji,j; ;for(ifor(i=0;i255;i+)=0;i255;i+)for(jfor(j=0;j255;j+);=0;j255;j+); 单片机(单片机(2 2):):#include #include void delay();void delay();void main()void main() unsigned c
48、har a;unsigned char a;SCON=0x50;SCON=0x50;TMOD=0X20;TMOD=0X20;TL1=TH1=0XF4;TL1=TH1=0XF4;TR1=1;TR1=1;while(RIwhile(RI=0);=0);RI=0;RI=0;a=SBUF;a=SBUF;P2=a;P2=a;while(1);while(1); void delay()void delay() unsigned char unsigned char i,ji,j; ;for(ifor(i=0;i255;i+)=0;i255;i+)for(jfor(j=0;j255;j+);=0;j255
49、;j+); 3 3、利用方式、利用方式2 2、方式、方式3 3与多机通信与多机通信 串行口控制寄存器串行口控制寄存器SCONSCON中的中的SM2SM2位为方式位为方式2 2、方式、方式3 3的多机通讯控的多机通讯控制位。在多机通讯中起着非常重要的作用。一个典型的多机通讯系统制位。在多机通讯中起着非常重要的作用。一个典型的多机通讯系统硬件连接如下图所示。硬件连接如下图所示。#include #include unsigned char unsigned char ledtabledtab=0x3F,0x06,0x5B,0x4F,0x66,0x=0x3F,0x06,0x5B,0x4F,0x66,
50、0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71;0x5E,0x79,0x71;unsigned char add=0x01,0x02,0x03;unsigned char add=0x01,0x02,0x03;void main()void main() unsigned char i unsigned char i, a;a;while(1)while(1)a=P1;a=P1;if(aif(a=0xfe)=0xfe) SCON=0x88;SBUF=add0
51、; SCON=0x88;SBUF=add0; while(!TI);TIwhile(!TI);TI=0;=0; SCON=0x80;SBUF=ledtab1;SCON=0x80;SBUF=ledtab1; while(!TI);TIwhile(!TI);TI=0;=0;if(aif(a=0xfd)=0xfd) SCON=0x88; SCON=0x88;SBUF=add1;SBUF=add1;while(!TIwhile(!TI););TI=0;TI=0; SCON=0x80; SCON=0x80;SBUF=ledtab3;SBUF=ledtab3;while(!TIwhile(!TI););T
52、I=0;TI=0;if(aif(a=0xfb)=0xfb) SCON=0x88; SCON=0x88;SBUF=add2;SBUF=add2;while(!TIwhile(!TI););TI=0;TI=0; SCON=0x80; SCON=0x80;SBUF=ledtab5;SBUF=ledtab5;while(!TIwhile(!TI););TI=0;TI=0; #include #include void main()void main() unsigned char unsigned char a,ba,b; ;while(1)while(1) b=0; b=0;SCON=0xB0;SC
53、ON=0xB0; while(!RIwhile(!RI););a=SBUF;a=SBUF;RI=0;RI=0;if(aif(a=0x01)=0x01)SCON=SCON&0xdf;SCON=SCON&0xdf;elseelseSCON=SCON|0x20;SCON=SCON|0x20;while(!RIwhile(!RI););b=SBUF;b=SBUF;RI=0;RI=0;SBUF=0;SBUF=0;P1=b;P1=b; 上图为一主多从结构的多机通讯系统,主机和从机应设置成相同上图为一主多从结构的多机通讯系统,主机和从机应设置成相同的方式,使用相同的波特率。其工作通讯过程简单描述如下:的方式
54、,使用相同的波特率。其工作通讯过程简单描述如下: 主机发出要求与之通讯的从机地址信号,并使主机发出要求与之通讯的从机地址信号,并使TB8TB81 1。 将所有从机的将所有从机的SM2SM2都置为都置为1 1,将接收到的第,将接收到的第9 9位的状态送入从机位的状态送入从机的的RB8RB8,使,使RB8RB81 1。 所有满足所有满足SM2SM21 1、RB8=1RB8=1条件的条件的从机都从机都能激活能激活RIRI,进入各自的,进入各自的中断服务程序,在从机的中断服务程序中判断主机发出的地址信号是中断服务程序,在从机的中断服务程序中判断主机发出的地址信号是否与本从机号相同,若相同则将其否与本从
55、机号相同,若相同则将其SM2SM2设为设为0 0,并将本机地址发回主机,并将本机地址发回主机作为应答,否则不动作。作为应答,否则不动作。 主机发出需传送的数据。并使主机发出需传送的数据。并使TB8=0TB8=0。 所有从机均接收到该数据帧,其第所有从机均接收到该数据帧,其第9 9位进入位进入RB8RB8,即,即RB8=0RB8=0。对。对于地址号与主机发出的地址不相符的那些从机,由于其于地址号与主机发出的地址不相符的那些从机,由于其SM2=1SM2=1,而接,而接收到的第收到的第9 9位使它们的位使它们的RB8RB8都为都为0 0,因此都不能激活,因此都不能激活RIRI,使得接收到的,使得接收
56、到的数据自然丢失。数据自然丢失。 地址号与主机发出的地址相同的那台从机地址号与主机发出的地址相同的那台从机SM2SM20 0,这就使得不,这就使得不管接收到的第管接收到的第9 9位为何值,都能激活位为何值,都能激活RIRI,接收到的数据有效。,接收到的数据有效。 通过以上通过以上6 6步,可完成主机与从机的一对一通讯。当主机需与其步,可完成主机与从机的一对一通讯。当主机需与其他从机联系时,则正与主机通讯的这台从机应恢复他从机联系时,则正与主机通讯的这台从机应恢复SM2=1SM2=1,主机可再,主机可再发出地址帧寻址其他从机。发出地址帧寻址其他从机。 (2 2)利用方式)利用方式1 1实现点对点
57、的异步通信实现点对点的异步通信 例:编程将甲机片内例:编程将甲机片内RAM 50HRAM 50H5FH5FH单元中的数据向乙机发送,在单元中的数据向乙机发送,在发送之前将数据块长度发送之前将数据块长度N N发送给乙机,当发送完发送给乙机,当发送完N N个字节后,再发送一个字节后,再发送一个累加效验和。乙机接收数据进行累加和校验,如果和发送方的累加个累加效验和。乙机接收数据进行累加和校验,如果和发送方的累加和一致,发送数据和一致,发送数据“0000”,表示接收正确,如果不一致,发数据,表示接收正确,如果不一致,发数据FFHFFH,甲机再重发,乙机接收的数据存入片内,甲机再重发,乙机接收的数据存入
58、片内70H70H7FH7FH单元中。设波特率单元中。设波特率为为24002400,f foscosc=6MHz=6MHz,试编程实现。,试编程实现。 参考程序如下:参考程序如下: 甲机发送程序甲机发送程序TRTTRT: MOV TMODMOV TMOD,#20H#20H MOV TH1 MOV TH1,#0F3H#0F3H MOV TL1 MOV TL1,#0F3H#0F3H SETB TR1 SETB TR1 MOV SCON MOV SCON,#50H#50HRPTRPT: MOV R0MOV R0,#50H#50H MOV R2 MOV R2,#10H#10H MOV R3 MOV R3
59、,#00H#00H MOV SBUF MOV SBUF,R2R2BACK1BACK1:JNB TIJNB TI,BACK 1BACK 1 CLR TI CLR TIBACK2BACK2:MOV AMOV A,R0R0 MOV SBUF MOV SBUF,A A ADD A ADD A,R3R3 MOV R3MOV R3,A A INC R0 INC R0BACK3BACK3: JNB TIJNB TI,BACK 3BACK 3 CLR TI CLR TI DJNZ R2 DJNZ R2,BACK 2BACK 2 MOV SBUF MOV SBUF,R3R3 MOV R3 MOV R3,#0#0
60、BACK4BACK4: JNB TIJNB TI,BACK4BACK4 CLR TI CLR TIBACK5BACK5: JNB RIJNB RI,BACK5BACK5 CLR RI CLR RI MOV A MOV A,SBUFSBUF JNZ RPT JNZ RPT RET RET乙机接收程序乙机接收程序RSURSU: MOV TMODMOV TMOD,#20H#20H MOV TH1 MOV TH1,#0F3H#0F3H MOV TL1 MOV TL1,#0F3H#0F3H SETB TR1 SETB TR1 MOV SCON MOV SCON,#50H#50HBACKBACK: MOV
61、 R0MOV R0,#70H#70HBACK1BACK1:JNB RIJNB RI,BACK1BACK1 CLR RI CLR RI MOV A MOV A,SBUFSBUF MOV R2 MOV R2,A A MOV R3 MOV R3,#00H#00HBACK2BACK2:JNB RIJNB RI,BACK2BACK2 CLR RI CLR RI MOV A MOV A,SBUFSBUF MOV R0 MOV R0,A A INC R0 INC R0 ADD AADD A,R3R3 MOV R3 MOV R3,A A DJNZ R2 DJNZ R2,BACK 2BACK 2BACK3BAC
62、K3:JNB RIJNB RI,BACK3BACK3 CLR RI CLR RI MOV A MOV A,SBUFSBUF XRL A XRL A,R3R3 MOV R3 MOV R3,#00H#00H JZ BACK5 JZ BACK5 MOV SBUF MOV SBUF,#0FFH#0FFHBACK4BACK4:JNB TIJNB TI,BACK4BACK4 CLR TI CLR TI AJMP BACK AJMP BACKBACK5BACK5:MOV SBUFMOV SBUF,#00H#00HBACK6BACK6:JNB TIJNB TI,BACK6BACK6 CLR TI CLR TI
63、 RET RET甲机发送甲机发送C51C51参考程序:参考程序:#include #include “reg51.hreg51.h”Void main()Void main()Volatile unsigned char Volatile unsigned char rev;rev;Unsigned char *Unsigned char *pt,chk,lenpt,chk,len; ;TMOD=0x20;TMOD=0x20;TH1=0xF3;TH1=0xF3;TL1=0xF3;TL1=0xF3;TR1=1;TR1=1;SCON=0x50;SCON=0x50;DoDoPt=0x50;Pt=0x
64、50;Len=0x10;Len=0x10;ChkChk=0;=0;SBUF=SBUF=lenlen; ;While(!TIWhile(!TI) )TI=0;TI=0;DoDoSBUF=*pt;SBUF=*pt;ChkChk= =chkchk+*pt;+*pt;Pt+;Pt+;While(!TIWhile(!TI) )TI=0;TI=0;Len-;Len-; while(lenwhile(len0);0);SBUF=SBUF=chkchk; ;While(!TIWhile(!TI) )TI=0;TI=0;While(!RIWhile(!RI) )RI=0;RI=0;Rev=SBUF;Rev=SB
65、UF; while(revwhile(rev!=0);!=0);Return;Return;乙机接收乙机接收C51C51参考程序:参考程序:#include #include “reg51.hreg51.h”Void main()Void main()Volatile unsigned char Volatile unsigned char rev;rev;Unsigned char *Unsigned char *pt,chk,lenpt,chk,len; ;Bit stat;Bit stat;TMOD=0x20;TMOD=0x20;TH1=0xF3;TH1=0xF3;TL1=0xF3;TL
66、1=0xF3;TR1=1;TR1=1;SCON=0x50;SCON=0x50;Do pt=0x70;Do pt=0x70; while(!RIwhile(!RI) ) RI=0; RI=0; Rev=SBUF; Rev=SBUF; Len=rev; Len=rev; ChkChk=0;=0; do do While(!RIWhile(!RI) )RI=0;RI=0;Rev=SBUF;Rev=SBUF;*pt=rev;*pt=rev;Pt+;Pt+;ChkChk= =chk+revchk+rev; ;Len-;Len-; while(lenwhile(len0);0);While(!RIWhile(!RI) )RI=0;RI=0;Rev=SBUF;Rev=SBUF;If (Rev=If (Rev=chkchk) )SBUF=0;SBUF=0;ElseElseSBUF=0xff;SBUF=0xff;While(!TIWhile(!TI) )TI=0;TI=0; while(revwhile(rev!=!=chkchk););Return;Return;