《最新单片微机原理第四章43定时中断串行ppt课件》由会员分享,可在线阅读,更多相关《最新单片微机原理第四章43定时中断串行ppt课件(29页珍藏版)》请在金锄头文库上搜索。
1、单片微机原理第四章单片微机原理第四章4343定定时、中断、串行时、中断、串行基本通信方式基本通信方式计算机与外界的信息交换称为通信。计算机与外界的信息交换称为通信。串行通信是串行通信是CPU与外界交换信息的一种基本通信方式。与外界交换信息的一种基本通信方式。常用通信方式有两种:常用通信方式有两种:并行通信并行通信所传送数据的各位同时发送或接受;所传送数据的各位同时发送或接受;串行通信串行通信所传送数据的各位按顺序一位一位地发所传送数据的各位按顺序一位一位地发送或接受送或接受并行通信方式的特点:并行通信方式的特点:传送速度快,但传输线多,价格较贵,适合近传送速度快,但传输线多,价格较贵,适合近距
2、离传输。距离传输。串行通信方式的特点:串行通信方式的特点:传送速度较慢,需传输线少,适合远距离传输。传送速度较慢,需传输线少,适合远距离传输。串行口结构串行口结构串行口结构串行口结构 一、数据缓冲寄存器一、数据缓冲寄存器SBUF数据缓冲寄存器共两个,一个对应发送,一个对应接收。当CPU向SBUF写入时,数据进入发送寄存器,同时启动串行发送;CPU读SBUF时,实际是读接收寄存器数据。注意:两个两个SBUF用同一个地址用同一个地址99H。二、串行控制寄存器二、串行控制寄存器SCONSCON控制串行通信方式的选择、接收、发送及保存串行口的状态。其格式如图所示:8051单片微机通过对SCON的设置、
3、检测与读、取来管理串行口的通信。三、专用寄存器三、专用寄存器PCONPCON的最高位SMOD是串行口波特率倍增位。当SMOD=1时,波特率加倍,复位时,SMOD=0。D7D6D5D4D3D2D1D0接收中断标志位发送中断标志位接收数据/地址标志位RB8=0接收的是数据,RB8=1接收的是地址发送数据/地址标志位RB8=0发送的是数据,RB8=1发送的是地址串行接收允许位REN=0允许接收,REN=1禁止接收功能控制方式选择控制8051单片微机正是通过对SCON的设置、检测与读、取来管理串行口的通信。SM0 SM1 SM2REN TB8 RB8 TIRI三、输入移位寄存器三、输入移位寄存器输入移
4、位寄存器的作用是在接收到外部数据后,先进入输入移位寄存器,再送入接收缓冲寄存器SBUF。这样起到了双缓冲作用,防止第1帧数据没取走,第2帧数据又输入,造成数据重迭的错误4.3.2 串行口工作方式SCON中最高两位SM0、SM1是方式选择控制位。两位组合出四种状态:00、0l、10、11,正好对应串行口的方式0、方式1、方式2、方式3四种工作方式。方式方式0:串行口为同步移位寄存器方式,波特率固定为fosc/12。该方式主要用于IO口扩展,串行数据由RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)端送出。发送时,8位数据以fosc/12的波特率从RXD端输出(低低位位在在前前),
5、发送完置中断标志TI为“l”。接收时,当RENl时,RXD以fosc/12的波特率接收数据(低位在前),接收完8位数据,置RI为“1”。方式方式1串行口为10位异步通信口。一帧信息10位(包括起始标志“O”和停止标志位“l”及8位数据)。2SMOD波特率T1溢出率32发送时,只要数据写入发送缓冲器SBUF,就启动发送器,数据则从TXD端输出。发送完一帧数据把TI置“1”申请中断。接收时RENl,数据从RXD端输入。当采样到起始位为“0”,开始接收一帧数据,采到停止位为“l”此时RI0(或SM2=0),则把RI置“1”。注意:方式1,发送前先清TI,接收前先清RI和SM2。方式方式2串行口为11
6、位异步通信口。一帧信息由11位组成。除了起始位0、停止位l和8位数据还有一位可编程位(第9位),存放数据地址标志。发送时,写SBUF地址,把8位数据装入SBUF,同时把数据/地址标志TB8状态送入第9位,从TXD端送出一帧数据,置TI为“l”。接收时,RKNl允许接收,RB8接收的是TB8状态。RB8=0表示接收的是数据,RB8l表示接收的是地址。在多机通信中能否接收还受SM2控制,2SMOD方式2波特率fOSC64方式方式3:2SMOD方式3波特率为T1溢出率32除此之外,方式3与方式2通信方式完全相同。说明:表中用到的SMOD是专用寄存器PCON的最高位(其它位无用),SMOD是串行口波特
7、率倍增位。SMOD=1时波特率加倍4.3.3 串行口通信举例串行口通信举例串行口通信,要进行波特率设置、通信双方的约定以及接收、发送程序设计。一、波特率设置在串行通信中,接收和发送双方的波特率必须一致。因此,首先要约定通信波特率,根据需要设置合理的发送、接收速率。波特率和串行口工作方式有关。方式0:波特率固定为时钟频率fosc的十二分之一,且不受SMOD影响。若fosc12MHz,波特率为fosc/12即1Mbs。方式方式2:波特率与SMOD值有关其关系式为:2SMOD波特率fosc64若fosc12MHz,SMOD0波特率1875kbsSMODl波特率375kbs方式方式l和方式和方式3:波
8、特率可变8051单片机在串行口方式1和方式3两种方式工作时,常用定时器T1为波特率发生器。T1的溢出率和SMOD共同决定波特率,其关系式如下:2SMOD波特率-T1溢出率32T1的溢出率取决于T1的工作方式和初值。T1常设置为定时方式(C/T0),方式2(自动装初值),即TL1作8位计数器、TH1存放备用初值。设定时器初值为设定时器初值为X则则计数速率计数速率fosc/12fosc溢出率溢出率(代入上式代入上式)256-X256-X12(256-X)2SMODfosc波特率波特率=3212(256-X)从从表表达达式式可可见见,这这种种方方式式波波特特率率随随fosc、SOMD及及初初值值x而
9、而变变化,都会引起波特率的改变。化,都会引起波特率的改变。为方便,波特率可查表。为方便,波特率可查表。注注意意:若若CT1,T1为为计计数数方方式式,这这时时的的计计数数速速率率取取决决于于外外部输入脉冲频率。部输入脉冲频率。在在串串行行通通信信设设置置中中,经经常常根根据据已已知知波波特特率率和和时时钟钟频频率率,计计算算定时器定时器T1的初值。的初值。表常用的波特率及计算器初值例例若若805l单单片片机机时时钟钟频频率率11.059MHz,需需要要波波特特率率2400bs,试试计计算算T1初值。初值。解:设解:设T1为工作方式为工作方式2,选,选SMOD0根据根据2SMODfosc波特率波
10、特率=3212(256-X)fosc2SMODx256-384波特率波特率把把fosc、SMOD、波特率代入式中则:、波特率代入式中则:11.05910620x256-244DF4H3842400只要把只要把F4H装入装入TH1和和TTL1,则,则T1发出的波特率为发出的波特率为2400b/s。二、串行口双机通信二、串行口双机通信二、串行口双机通信二、串行口双机通信设两个8051系统直接通信,甲机发送,乙机接收,如图46所示。图46双机通信示意图RXD8051(甲机)TXDGNDTXD8051RXD(乙机)GND1 1通信任务及约定通信任务及约定通信任务及约定通信任务及约定任务:甲机将外部数据
11、存储器4000H40FFH单元的内容向乙机发送,在发送数据之前先将数据块长度发送给乙机,发送完256B,向乙机发送一个累加校验和。乙机接收甲机发送的数据并存入乙机以4000H为首地址的外部数据存储器中。首先接收数据长度,然后接受数据,接受完256B,最后接受累加和校验码之后,进行一次累加和校验,数据全部接收完毕且校验码比较时向甲机送出状态字,表示传送状态。双机通信必有许多约定,以保持两者数据传送正常。设约定如下:波特率约定为2400即T1方式2,常数为F4H,SMOD=0。行口初始化为方式1,允许接收方式。工作寄存器设置R5为累加和寄存器,R4为页内计数器,R6为数据块长度寄存器。2. 2.
12、双机通信程序双机通信程序双机通信程序双机通信程序发送程序TRT:MOVTMOD,#20HMOVTH1,#0F4H;T1初始化MOVTL1,#0F4HSETBTR1MOVSCON,#50H;串行口初始化方式1,允许接收MOVPCON,#00H;置SMOD0RPT:MOVDPTR,#4000H;送数据块首地址MOVR6,#00H;数据块长度初值R6MOVR5,#00H;累加和寄存器清“0”MOVSBUF,R6;发送长度L1:JBCT1,L2;等待发送,TI1发送结束AJMPL1L2:MOVXA,DPTR;读数据块中数据MOVSBUF,A;发送数据ADDA,R5;累加MOVR5,A;累加和送R5IN
13、CDPTR;地址加1L4:JBCT1,L3;等待发送AJMPL4L3:DJNZR6,L2;判断256个数是否发送完MOVSBUF,R6;若R60,256个数发送完,发校验码MOVR5,#00HL6:JBCTI,L5;等待发送校验码结束AJMPL6L5:JBCRI,L7;等待接收乙机发来的结束标志码AJMPL5L7:MOVA,SBUFJZL8;标志码为00H,接收正确AJMPRPT;发送有错,重发L8:RET乙机接收程序RSU:MOVTMOD,#20HMOVTH1,#0F4HMOVTL1,#0F4HSETBTR1MOVSCON,#50HMOVPCON,#00HRPT:MOVDPTR,#4000H
14、L0:JBCRI,L1AJMPL0L1:MOVA,SBUF;接收发送长度MOVR6,A;长度R6MOVR5,#00H;累加和寄存器清0WTD:JBCRI,L2;等待接收AJMPWTDL2:MOVA,SBUF;接收数据MOVXDPTR,AINCDPTRADDA,R5MOVR5,ADJNZR6,WTD;R60未接收完,继续L5:JBCRI,L4;接收校验码AJMPL5L4:MOVA,SBUFXRLA,R5MOVR5,#00JZL6;接收正确转L6MOVSBUF,#0FFH;接收出错回送0FFHL8:JBCTI,L7AJMPL8L7:AJMPRPT;重新接收L6:MOVSBUF,#00H;正确回送00HL9:JBCTI,L10;发送完返回AJMPL9L10:RET