1、1,02:25,单片机原理与接口技术,第7章 MCS-51单片机 定时/计数器和串行接口,2,02:25,(1) 了解定时/计数器的结构和工作原理。 (2) 熟悉定时/计数器的控制寄存器。 (3) 掌握定时/计数器的应用编程。 (4) 了解串行通信接口的结构和工作原理。 (5) 熟悉串行通信接口的控制寄存器。 (6) 掌握串行通信的应用编程。,本章教学要求,3,02:25,本 章 目 录,7.1 定时/计数器 7.1.1 定时/计数器的结构与原理 7.1.2 定时/计数器的工作方式 7.1.3 定时/计数器的应用 7.2 串行通信接口 7.2.1 串行通信基础知识 7.2.2 MCS-51串行
2、通信接口 7.2.3 串行通信接口的应用,4,02:25,7.1 定时/计数器,MCS-51单片机内有2个16位可编程的定时/计数器,T0和T1,由两个8位寄存器组成,都是加1计数器。用于定时控制、延时、对外部事件计数等场合。每个定时器都可由软件通过设置特殊功能寄存器TMOD和TCON规定其为定时或计数工作方式及其它可控功能方式。,5,02:25,7.1.1 定时/计数器的结构与原理,加1计数器计数脉冲有两个输入源, 一是由系统时钟振荡器输出脉冲经12分频后送来;另一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲从1到0跳变计数器加1,当加到计数器为全1时,再来一个脉冲计数器就回零,且溢出使
3、TCON中TF0或TF1置1,向CPU发出中断请求。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。,6,02:25,7.1.1 定时/计数器的结构与原理,定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期)。计数值:N=满计数值-初始设定值定时时间:t=计数值N机器周期T。,7,02:25,7.1.1 定时/计数器的结构与原理,计数器模式时,由T0或T1引脚输入计数脉冲。在每个机器周期的S5P2期间,CPU采样引脚输入电平。当前一机器周期采样到高电平,下一周期机器采样到低电平时,则计数器加1,更新的计数值在下一个机器周期的S
4、3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期,最高计数频率不超过振荡频率的1/24 ,当晶振频率为12MHz时,计数频率为1/2MHz,计数脉冲的周期要大于2 s。,8,02:25,定时控制寄存器(TCON),TF0、TF1:计数溢出中断请求标志位。TF0=1或TF1=1时计数溢出;TF0=0或TF1=0时计数未满。 TR0、TR1:启/停控制位。TR0=1或TR1=1,使T0或T1启动计数;TR0=0或TR1=0,使T0或T1停止计数。,7.1.1 定时/计数器的结构与原理,TCON的低4位用于控制外部中断触发方式选择和触发标
5、志位。TCON的高4位用于控制定时/计数器的启动和中断申请。,9,02:25,方式控制寄存器(TMOD),7.1.1 定时/计数器的结构与原理,设置定时/计数器的工作方式,低四位用于T0,高四位用于T1,GATE-门控选择位 : =0,非门控方式,定时/计数器由内部软件启动:TRx=1,启动定时器工作;TRx=0,停止定时器工作。=1,门控方式,定时/计数器由内、外部启动:TRx=1,同时必须引脚INTx=1,才启动。,10,02:25,7.1.2 定时/计数器的工作方式,作为波特率发生器,C/T: C/T =1,计数方式,对 T0、T1引脚输入的负脉冲计数;C/T =0,定时方式,对机器周期
6、计数。 M1、M0:计数器工作方式选择位:,11,02:25,13位定时/计数器,由TLx的低5位(高3位未用)和THx的8位组成。TLx的低5位溢出时向THx进位,THx溢出时,置位TCON中的TFx标志,向CPU发出中断请求。,7.1.2 定时/计数器的工作方式,1)方式0 (M1M0=00),计数外部脉冲个数: 18192(213) 定时时间: T8192T fosc=12MHz,T=1us时,最大定时时间:8.19ms,初始化定时/计数器时,初值N计算: 定时机器周期数: Nt/ T -定时时间/机器周期 计数初值:X=213-N -计数最大值与计数值之差,12,02:25,7.1.2
7、 定时/计数器的工作方式,GATE=0时,经反相后使或门输出为1,此时仅由TRx控制与门的开启,与门输出1时,控制开关接通,计数开始; GATE=1时,由INT0引脚信号控制或门的输出,此时控制与门的开启由INT0引脚信号和TRx共同控制。TRx=1时, INT0引脚信号高电平启动计数,低电平停止计数。常用来测量外中断引脚上正脉冲的宽度。,13,02:25,7.1.2 定时/计数器的工作方式,2)方式1(16位定时/计数器,M1M0=01 ),计数外部脉冲个数范围:165536(216) 定时时间范围 :T65536T,初始化定时/计数器时,初值N计算: 定时机器周期数: Nt/ T -定时时
8、间/机器周期 计数初值:X=216-N -计数最大值与计数值之差,14,02:25,7.1.2 定时/计数器的工作方式,3)方式2(自动再装入8位定时/计数器, M1M0=00 ),TLx为8位加1计数器, THx为8位初值暂存器。 TLx计数溢出时,一方面将TFx置位,另一方面,将THx的内容重新装入TLx,但不影响THx中的内容,用于需要重复定时和计数的场合,可实现每隔预定时间发出控制信号。,计数外部脉冲个数范围:1256(28) 定时时间范围:T256T,初值N计算: 定时机器周期数: Nt/ T 计数初值:X=28-N,15,02:25,4)方式3(M1M0=00),7.1.2 定时/
9、计数器的工作方式,T0分成两个8位定时/计数器TL0和TH0 ;TL0:既可计数也可定时,是一个8位定时/计数器。占用了T0所有控制位: C/T,TR0,GATE,TF0和INT0、T0引脚;TH0:只能作为定时器,因为T0已被TL0占用, TH0用 T1的控制位:TR1、TF1;,16,02:25,T0在方式3时T1的工作模式,7.1.2 定时/计数器的工作方式,如果定时/计数器T0工作在方式3,T1只能工作在0、1、2方式。此时由于T1的运行控制位TR1及计数溢出标志位TF1已被定时/计数器T0借用,这时,T1作为串行口的波特率发生器使用。当作为波特率发生器使用时,只需要设置好工作方式,便
10、可自动运行。如要停止工作,只需送入一个把T1设置为方式3的方式控制字。因为定时/计数器T1不能在方式3下工作,如果硬把它设置为方式3,则停止工作。,17,02:25,T0在方式3时T1的工作模式,7.1.2 定时/计数器的工作方式,18,02:25,7.1.3 定时/计数器的应用,(1)初始化步骤 1) 设置工作方式 TMOD 2) 计算加1计数器的计数初值Count,并将计数初值Count送入TH、TL中 3) 启动计数器工作TCON,即将TRx置1 4) 若采用中断方式,则应设置IE,1)定时/计数器初始化,19,02:25,例7-1 定时/计数器T0工作于门控计数方式,计数值x=1,允许
11、中断,使用工作方式2。进行初始化编程。,7.1.3 定时/计数器的应用,1) T0定时/计数器工作于门控、计数、方式2下,可确定T0的GATE = 1, C/T = 1,M1M0=102) 计数器位数n = 8,计数器初值:Count = 28-1 = 1111,1111B = FFH即,TH0 = FFH,TL0 = FFH,20,02:25,T0工作于方式2的初始化程序MOV TMOD, #0EH ;设置T0工作于门控计数方式2MOV TL0, #0FFH ;计数器TL1赋初值FFHMOV TH0, #0FFH ;重装寄存器TH1赋初值FFHSETB ET0 ;T0开中断SETB EA ;
12、CPU开中断SETB TR0 ;预启动T0(当INT0输入高时启动),7.1.3 定时/计数器的应用,21,02:25,分析:周期为2ms的方波要求定时间隔为1ms,每次时间到将P1.0取反。机器周期T=12/fosc=1s。每个机器周期定时器计数加1,1ms=1000s,定时器赋初值65536-1000=64536=0FC18H.用定时器1的方式1编程,采用中断方式。,例7-2 设单片机的fosc=12MHz,要求在P1.0引脚上输出周期为2ms的方波。,7.1.3 定时/计数器的应用,-应用实例,22,02:25,(1)汇编语言程序:ORG 0000H ;复位入口AJMP STARTORG
13、 001BH ;T1中断服务程序入口地址AJMP T1INTORG 0030H START:MOV SP, #60H ;初始化程序MOV TMOD, #10H ;设置T1工作于定时方式1MOV TH1, #0FCH ;设置加1计数器的计数初值高字节MOV TL1, #18H ;设置加1计数器的计数初值低字节SETB TR1 ;启动T1SETB ET1 ;开T1中断SETB EA ;开总允许中断 MAIN: AJMP MAIN ;主程序 T1INT: CPL P1.0 ;T1中断服务程序MOV TH1, #0FCHMOV TL1, #18HRETI,7.1.3 定时/计数器的应用,-应用实例,2
14、3,02:25,尽管MCS-51为用户只提供了两个外部中断源,但用户可以根据实际需求,进行外部中断请求的扩展,如用定时器中断作为外部中断的扩展。 当引脚T0或T1上发生负跳变时,T0或T1计数器则加1。若设定计数初值为满量程,计数器加1,就会产生溢出中断请求,TF0或TF1变成了外部中断请求标志位,T0或T1的中断入口地址被扩展成了外部中断源的入口地址。,采用定时/计数器扩展外部中断,7.1.3 定时/计数器的应用,-扩展外部中断,24,02:25,将定时器T0引脚作为外部中断源使用的具体做法为,设定时器T0工作方式为方式2,计数器TH0、TL0初值为0FFH,允许计数器T0中断,则T0的初始
15、始化程序如下:MOV TMOD, 06H ;将计数器T0设定为;方式2外部计数MOV TL0, #0FFH ;设置计数器初值MOV TH0, #0FFH ;设置重装计数器初值SETB ET0 ;允许T0中断SETB EA ;CPU开中断SETB TR0 ;启动T0,7.1.3 定时/计数器的应用,-扩展外部中断,25,02:25,7.2 串行通信接口,7.2.1 串行通信基础知识,-数据通信传输方式,计算机与外界进行信息交换称为通信。 通信的基本方式:并行通信:数据的每位被同时传输串行通信:数据传输是逐位传输的,1) 通信方式,26,02:25,2)异步串行通信和同步串行通信,异步串行通信:异
16、步通信是指通信双方使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求收、发双方的时钟尽可能一致,以起始位、停止位保持通信同步。其数据传送以帧为单位传送。每1帧数据由1个字符代码组成,每1个字符代码由起始位、数据位、奇偶校验位和停止位组成。,7.2.1 串行通信基础知识,-串行通信,27,02:25,异步串行通信特点:异步通信对硬件要求较低,实现起来比较简单、灵活,适用于数据的随机发送/接收,但因每个字节都要建立一次同步,即每个字符都要额外附加两位,所以工作速度较低,在单片机中主要采用异步通信方式。 同步串行通信:以一串字符为一个传送单位,字符间不加标识位,字符串开始用同步字符标识
17、(一般约定为12个字符),以触发同步时钟开始发送或接收数据;字节数据之间不允许有空隙。传送时为了保证接收正确,发送方除传送数据外,同时还要传送时钟信号。 同步串行通信特点:硬件要求高,通讯双方须严格同步,适用于成批数据传送。,7.2.1 串行通信基础知识,-串行通信,28,02:25,3)串行通信的制式,串行通信按照数据传输方向可分为三种制式: 单 工: 数据传输仅能沿一个方向传输。 半双工:数据传输可以沿两个方向,但分时进行。 全双工:数据可以同时进行双向传输。,7.2.1 串行通信基础知识,-串行通信,29,02:25,4)波特率及时钟频率,波特率(BR):单位时间传输的数据位数。单位:b
18、ps (bit per second),1 bps=1 bit/s。波特率的倒数即为传输一位所需的时间。 发送/接收时钟频率与波特率有关,即 fT/R=nBRT/R 式中,fT/R为发/收时钟频率,单位:Hz;BRT/R为发/收波特率,单位:bps;n为波特率因子。 同步通信n=1。异步通信n可取1、16或64。也就是说,同步通信中数据传输的波特率即为同步时钟频率;而异步通信中,时钟频率可为波特率的整数倍。,7.2.1 串行通信基础知识,-波特率,时钟频率,30,02:25,5)串行通信的校验,异步通信时可能会出现帧格式错、超时错等传输错误。在具有串行口应用的单片机开发中,应考虑在通信过程中对
19、数据差错进行校验,因为差错校验是保证准确无误通信的关键。常用差错校验方法有奇偶校验(MCS-51系列单片机编程采用此法)、和校验及循环冗余码校验。,7.2.1 串行通信基础知识,-传输的准确性,31,02:25,发送数据时, 数据位尾随1位数据, 为奇偶校验位(1或0)。 当设置为奇校验时,数据中“1”的个数与校验位“1”的个数之和应为奇数。 当设置为偶校验时,数据中“1”的个数与校验位“1”的个数之和应为偶数。 接收时,接收方应具有与发送方一致的差错检验设置。当接收一个字符时,对“1”的个数进行校验,若二者不一致,则说明数据传送出现了差错。 奇偶校验是按字符校验,数据传输速度将受到影响。这种
20、特点使得它一般只用于异步串行通信中。,7.2.1 串行通信基础知识,奇偶校验,-奇偶校验,32,02:25,7.2.2 MCS-51串行通信接口,MCS-51单片机内部有一个全双工的串行通信口,可以实现异步串行通信。两个物理上独立的接收、发送数据缓冲器SBUF,占用同一地址99H;既可以接收数据,也可以发送数据。,-SBUF,1)串行口结构,33,02:25,1)串行口结构,7.2.2 MCS-51串行通信接口,-串行口结构,但接收缓冲器只能读出不能写入,而发送缓冲器则只能写入不能读出,接收器是双缓冲结构,即在接收一个数据字节后,能接收第二个数据字节,但它完成接收第二个数据字节之后,第一个字节
21、仍未取走,则该字节数据丢失;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。,34,02:25,在逻辑上,SBUF只有一个,既表示发送寄存器,又表示接收寄存器。具有同一个单元地址99H。在物理上,SBUF有两个,一个是发送寄存器,另一个是接收寄存器。,7.2.2 MCS-51串行通信接口,(1)接收/发送缓冲器(SBUF),-接收/发送缓冲器(SBUF),2)与串行口有关的特殊功能寄存器,与串行通信有关的寄存器共有4个:SBUF、SCON、PCON和IE。,35,02:25,SCON是MCS-51的一个可位寻址的专用寄存器,用以设定串行口的工作方式、接收/发送控制以及设置状态标志:,7
22、.2.2 MCS-51串行通信接口,(2)串行控制寄存器(SCON),-串行控制寄存器(SCON),SM0和SM1:工作方式选择位,可选择四种工作方式:,36,02:25,SM2:多机通信控制位 SM2=1,允许多机通信。接收到一帧信息,如果接收到的第9位数据为1,硬件将RI置1,申请中断;如果第九位数据为0,则RI不置1,且所接收的数据无效。 SM2=0,不属于多机通信。只要接收到一帧信息,不管第九位数据是0还是1,硬件都置RI=1,并申请中断。RI由软件清0,SM2由软件置1或清0。 多机通信时,各从机先将SM2置l。接收并识别主机发来的地址,当地址与本机相同时,将SM2清0,与主机进行数
23、据传递。各机所发送的数据第9位必须为0。,7.2.2 MCS-51串行通信接口,-串行控制寄存器(SCON),37,02:25,REN:允许接收控制位 REN=1时允许并启动接收。 REN=0时禁止接收。 REN由软件置1或清0。 TB8:发送数据D8位 TB8是方式2、方式3中要发送的第九位数据,事先用软件写入1或0。方式0、方式1不用。 RB8:接收数据D8位 方式2、方式3中,由硬件将接收到的第九位数据存入RB8。方式1中,停止位存入RB8。方式0中,该位未用。 TI:发送中断标志位 发送完一帧信息,由硬件置TI为1,必须由软件清0。,7.2.2 MCS-51串行通信接口,-串行控制寄存
24、器(SCON),38,02:25,RI:接收中断标志位 接收完一帧有效信息,由硬件置RI为1,由软件清0。,7.2.2 MCS-51串行通信接口,-与串行口有关的寄存器,(3)电源控制寄存器(PCON)PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,其最高位SMOD为波特率控制位:该位为1时,波特率增大一倍。(4)中断允许控制寄存器(IE)串行口允许中断的控制位为ES,ES=1允许串行口中断;ES=0,禁止串行中断。,39,02:25,方式0,串行口用做同步移位寄存器。用RXD(P3.0)引脚为数据移位的输入和输出,由TXD(P3.1)引脚提供移位脉冲。移位数据的发送和接收以8
25、位为一帧,没有起始位和停止位,低位在前高位在后,波特率为fosc/12,其帧格式:,工作方式0,7.2.2 MCS-51串行通信接口,-工作方式0,3)MCS-51串行通信工作方式,40,02:25,工作方式0,7.2.2 MCS-51串行通信接口,MOV SBUF, A,MOV A, SUBF,第9位写1,下一机器周期接收移位寄存器写FE,41,02:25,工作方式1方式1是10位为一帧的异步串行通信方式。TXD为数据发送引脚,RXD为数据接收引脚,传送一帧数据的格式如图所示。其中1位起始位“0”表示字符的开始,8位数据位,1位停止位“1”表示字符结束,从低位到高位逐位传送, 传送波特率可调
26、。,7.2.2 MCS-51串行通信接口,-工作方式1,42,02:25,(1) 数据发送方式1发送由写发送缓冲寄存器MOV SBUF, A开始。由硬件自动加入起始位和停止位,构成一个完整的帧格式,然后在移位脉冲的作用下,由TXD端串行输出。一个字符帧发送完后,TXD输出线维持在1状态下(空闲),同时硬件置TI为1,通知CPU可以发送下一个字符。,7.2.2 MCS-51串行通信接口,-工作方式1,43,02:25,(2) 数据接收接收数据时,SCON的REN=1。串行口采样RXD引脚,当采样到从1向0的状态跳变时,就认定是接收到起始位。启动接收,复位16分频计数器使输入位与时钟对齐,并将1F
27、F写入接收移位寄存器,在移位脉冲的控制下,接收缓冲寄存器左移,当起始位移到最左边时,接收控制器控制最后一次移位,把接收到的9位数据送SBUF和RB8中,并置位接收中断标志位RI,通知CPU从SBUF取走接收到的一个字符,指令为MOV A, SUBF。,7.2.2 MCS-51串行通信接口,-工作方式1,44,02:25,(3)工作方式2和方式3方式2和方式3是11位一帧的串行通信方式。其帧格式起始位1位,数据9位(含1位附加的第9位,发送时为SCON中的TB8,接收时为RB8),停止位1位。方式2的波特率固定为晶振频率的1/64或1/32,方式3的波特率由定时器T1的溢出率决定。,7.2.2
28、MCS-51串行通信接口,-工作方式2、3,第9位D8,既可作为奇偶校验位使用,也可作为控制位使用发送时先将SCON中的TB8准备好,可使用如下指令完成。SETB TB8 ;TB8位置1CLR TB8 ;TB8位清零,45,02:25,(3)工作方式2和方式3,7.2.2 MCS-51串行通信接口,-工作方式2、3,准备好第9位数据之后,再向SBUF写入字符的8位数据,并以此来启动串行发送。 一个字符帧发送完毕后,将TI位置1,其过程与方式1相同。 方式2的接收过程也与方式1类似,不同的是串行口把接收到的8位数据送入SBUF,把第9位数据送入RB8。 方式2和方式3的不同之处在于波特率的计算方
29、法不同。方式3同方式1,即通过设置定时器1的初值来设定波特率。方式2的波特率是固定的。,46,02:25,方式0时波特率是固定的,fOSC/12(fOSC为晶振频率)。即一个机器周期移位一次。 方式2的波特率有两种。BR = 2SMOD fOSC/64 (SMOD=0或1) 方式1、方式3波特率可变,由定时器T1的溢出率决定:BR = 2SMOD fd / 32fd为定时器T1的溢出率: fd=fOSC/(12*(256-TH1)方式0到方式3的常用波特率见表7-6,可查找对应的方式设置及定时器T1的时间常数。,7.2.2 MCS-51串行通信接口,-串行口波特率,4)MCS-51串行口波特率
30、,47,02:25,定时器T1用做波特率发生器时,通常选用定时器工作模式2(自动重装载方式),设置为定时方式,T1计数内部机器周期fOSC/12 ,注意这时要禁止T1中断。先设定TH1,TL1的初值 ,每过28-TH1个机器周期,T1溢出一次,T1的溢出速率为:T1溢出率= fOSC/12 ( 28-TH1)方式1、3波特率= 2SMOD / 32 fOSC/12( 28-TH1)定时器T1模式2的初值TH1: TH1=28- fOSC ( SMOD+1)/(384 波特率),7.2.2 MCS-51串行通信接口,-串行口波特率,4)MCS-51串行口波特率,48,02:25,例 使用74HC
31、164的并行输出引脚接8支发光二极管,利用它的串入并出功能,把发光二极管从左向右轮流点亮,并反复循环。发光二极管为共阴极型,电路连接如图所示。,7.2.3 串行通信接口的应用,-串行移位输出,1)串口方式0应用,分析:当串行口把8位状态码串行移位输出后,TI置1。把TI作为状态查询标志,使用查询方法。,49,02:25,ORG 1000H START:MOV SCON, #00H ;置串行口工作方式0MOV A, #80H ;最高位灯先亮CLR P1.0 ;关闭并行输出 OUT0:MOV SBUF, A ;开始串行输出 OUT1:JNB TI, OUT1 ;输出完否?未完,等待CLR TI ;
32、完了,清零TI标志位,;以备下次发送SETB P1.0 ;打开并行口输出ACALL DELAY ;延时一段时间,-串行移位输出,汇编程序1,7.2.3 串行通信接口的应用,(1) 汇编语言编程,50,02:25,RR A ;循环右移CLR P1.0 ;关闭并行输出SJMP OUT0 ;循环 ;延时子程序 DELAY: MOV R7, #250 D1: MOV R6, #250 D2: DJNZ R6, D2DJNZ R7, D1RETEND,7.2.3 串行通信接口的应用,-串行移位输出,汇编程序2,51,02:25,2)串口方式1应用,-双机通信,例 双机通信 单片机1内部RAM20H-23
33、H中有4个数据要发给单片机2,单片机2接收到后存入其内部RAM的33H-36H中。晶振都为6MHz,通信波特率4800bps,收发双方都采用串口方式1.,7.2.3 串行通信接口的应用,52,02:25,-双机通信,7.2.3 串行通信接口的应用,两个单片机的接收端都接一个上拉电阻,以保证单片机上电后串口检测机构在该接收端上检测到的信号为空闲状态。由于两个系统上电后各自都需要初始化,事先无法预料哪个系统先初始化好,所以发送端在发送数据之前应先发送一个联络信号询问接收端是否准备好。假如发送01010101为询问信号。接收端在接收到这个信号后也回应一个01010101表示接收端准备好,然后发送端开
34、始发送数据,接收端开始接收数据。单片机1中用程序状态字PSW中的用户标志位F0指示单片机2是否处于准备好状态,单片机2中用F0指示单片机1送来的信息是查询信息还是有效数据。,53,02:25,-双机通信,7.2.3 串行通信接口的应用,2、程序 ORG 0000H LJMP MAIN ORG 0023H LJMP SUB1 MAIN: MOV SCON, #50H; 设置串口工作方式1,不允许多机通信,允许接收,TB,RB方式1;中未用;串口发送无中断,接收无请求MOV TMOD, #20H;定时器1工作在方式2;MOV TL1, #0FDHMOV TH1, #0FDHMOV IE, #90H
35、;打开全局和串口中断SETB TR1; 启动定时器1,使波特率发生器产生移位和采样脉冲 INI: MOV SBUF, #55H;发送到缓冲器MOV R1, #0FFH:延时参数设置,应大于单片机1,2串口通信时间 LOOP:NOP ;中断服务程序处理时间之和 DJNZ R1, LOOPJNB F0, INI ;为0接收端为准备好,否则再发送询问信号MOV R0,#21H; 设下次发送数据的地址指针MOV SBUF, 20H;发第一个数据LJMP $,54,02:25,-双机通信,7.2.3 串行通信接口的应用,中断服务程序: SUB1: JNB RI,LAB0;如果是接收中断,则SBUF中是2
36、的;应答信号,处理应答,如果是发送中 ;断,跳转执行发送数据程序。MOV A, SBUFCJNZ A, #55H,LAB1,相等,2准备好SETB F0;告诉主程序单片机2准备好CLR RI ;清接收中断,为下次作准备 LAB1: RETI LAB0: MOV SBUF, R0INC R0CJNE R0,#24H,LAB2CLR ES;发送完,禁止串口中断 LAB2: CLR TIRETIEND,55,02:25,单片机2程序: ORG 0000H LJMP MAIN ORG 0023H LJMP SUB1 MAIN: MOV SCON, #50H; 设置串口工作方式1,不允许多机通信,允许接
37、收TB,RB方式1;中未用;串口发送无中断,接收无请求MOV TMOD, #20H;定时器1工作在方式2;MOV TL1, #0FDHMOV TL2, #0FDHMOV IE, #90H;开全局和串口中断 SETB TR1; 启动定时器1,使波特率发生器产生移位和采样脉冲LJMP $ SUB1: JB F0,LAB2 ;为0,表明当前数据为单片机1送的查询信号,为1为有效数据MOV A,SBUFCJNE A,#55H,LAB1SETB, F0;表明下一次接收的数据为有效数据CLR ,RI;清除接收中断申请标志MOV SBUF,#55H;发送应答信号 LAB1:RETI LAB2:MOV R,S
38、BUF;存储接收数据INC R0CJNE R0,#37,LAB3CLR ES;关闭串口中断 LAB3:CLR RI;清除串口接收中断申请标志RETIEND,56,02:25,3)串口方式2、3应用(多机通信),(1)硬件连接单片机构成的多机系统常采用总线型主从式结构。所谓主从式,即在数个单片机中,有一个是主机,其余的是从机,从机要服从主机的调度、支配。单片机的串行口方式2和方式3适于这种主从式的通信结构。当然采用不同的通信标准时,还需进行相应的电平转换,有时还要对信号进行光电隔离。在实际的多机应用系统中,常采用RS-485串行标准总线进行数据传输。,7.2.3 串行通信接口的应用,-多机通信,57,02:25,(2)通信协议 所有从机的SM2位置1,处于接收地址帧状态。 主机发送一地址帧,其中8位是地址,第9位为地址/数据的区分标志,该位置1表示该帧为地址帧。 所有从机收到地址帧后,都将接收的地址与本机的地址比较。对于地址相符的从机,使自己的SM2位置0(以接收主机随后发来的数据帧),并把本站地址发回主机作为应答;对于地址不符的从机,仍保持SM2=1,对主机随后发来的数据帧不予理睬。 从机发送数据结束后,要发送一帧校验和,并置第9位(TB8)为1,作为从机数据传送结束的标志。,7.2.3 串行通信接口的应用,-双机通信,