第5章80C51基本功能_第1页
第5章80C51基本功能_第2页
第5章80C51基本功能_第3页
第5章80C51基本功能_第4页
第5章80C51基本功能_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

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

文档简介

1、第第5章章 80C51基本功能单元结构与操基本功能单元结构与操作原理作原理v5.1 定时定时/计数器计数器v5.2 串行接口串行接口v5.3 中断系统中断系统5.2 串行接口串行接口 80C51单片机有一个可编程的全双工串行通信接口。通过软件编程它可以用作通用异步接收和发送器UART,同时接收和发送数据(时钟同步,时钟不同步);也可以用作同步移位寄存器。其帧格式可有8位、10位和11位,并能设置成多种波特率。5.2.1 串行口的结构和工作原理串行口的结构和工作原理5.2.1.1 串行口结构 80C51串行口结构如图5-7所示。它主要由两个数据缓冲寄存器和一个输入移位寄存器组成。发送数据缓冲器只

2、能写入,不能读出;接收数据缓冲器只能读出,不能写入。故两个缓冲器共用同一个符号(SBUF),占用同一个地址(99H)。CPU写SBUF,一方面修改发送缓冲器,一方面启动串行发送;CPU读SBUF,就是读接收寄存器。此外串行口中还有两个特殊功能寄存器SCON、PCON,分别用来控制串行口的工作方式和波特率。发送SBUF(99H)发送SBUF(99H)定时器T1门发送控制器接收控制器输入移位寄存器+(98H)串行控制寄存器888串行口中断TIRI内部总线TXD(P3.1)RXD(P3.0) 80C51串行口通过编程可设置串行口通过编程可设置4种工作方式,三种帧格式。种工作方式,三种帧格式。方式方式

3、0以以8位数据为一帧,不设起始位和停止位,先发送或接位数据为一帧,不设起始位和停止位,先发送或接收最低位。其帧格式如下:收最低位。其帧格式如下:方式方式1以以10位数据为一帧传输,设有一个起始位位数据为一帧传输,设有一个起始位“0”,8 个数个数据位和一个停止位据位和一个停止位“1”。其帧格式为:。其帧格式为: 方式方式2和和3以以11位数据为一帧传输,设有一个起始位位数据为一帧传输,设有一个起始位“0”,8个数据位,个数据位,1个可编程位(第九位数据)个可编程位(第九位数据)D8和一个停止位和一个停止位“1”。其帧格式如下:其帧格式如下: 可编程位可编程位D8由软件置由软件置“1”或清或清“

4、0”,该位可作校验位,也可,该位可作校验位,也可作他用。作他用。5.2.1.2 串行口控制寄存器 SCON用于确定串行通道的工作方式选择、接收和发送控制以及串行口的状态标志。其格式及功能如下: (1)SM0和SM1:工作方式控制位,可构成以下4 种工作方式: (2)SM2:在方式2和方式3中用于多机通信控制。当方式2或方式3处于接收时,若SM2=1,且接收到第9位RB8为0时,RI不置“1”,若SM2=1,且RB8为1时,则RI置“1”。 在方式1中,当处于接收时,若SM2=1,则只有接收到有效的停止位时,RI才置“1”。 在方式0中,SM2应置0。 (3)REN:允许串行接收控制位。用软件置

5、“1”或清“0”。REN=1时,允许接收,REN=0时,禁止接收。 (4)TB8:在方式2和方式3中,它是准备发送的第9个数据位。根据需要可用软件置“1”或清“0”。它可作为数据的奇偶校验位,或在多机通信中作为地址帧或数据帧的标志。 (5)RB8:在方式2和方式3中,它是接收到的第9个数据位。既可以作为约定好的奇偶校验位,也可以作为多机通信时的地址帧或数据帧的标志。 (6)TI:发送中断标志位。在工作方式0中,发送完8位数据后,由硬件置“1”,向CPU申请发送中断。CPU响应中断后,必须用软件清“0”,在其工作方式中,它在停止位开始发送时由硬件置“1”,同样必须用软件清“0”。 (7)RI:接

6、收中断标志位。在工作方式0中,接收完8位数据后,由硬件置“1”,向CPU申请接收中断。CPU响应中断后,必须用软件清“0”,在其他工作方式中,在接收到停止位的中间时刻由硬件置“1”,向CPU申请中断,表示一帧数据接收结束,并已装入缓冲器,要求CPU取走数据。CPU响应中断,取走数据后必须由软件清“0”,解除中断请求,准备接收下一帧数据。 串行发送中断标志与接收中断标志是同一个中断源,在全双工通信时,必须用软件来判断是发送中断请求还是接收中断请求。 SCON的地址是98H,可以位寻址。复位时,SCON所有位均清“0”。5.2.1.3 电源控制寄存器 PCON是为了在CHMOS的80C51单片机上

7、实现电源控制而设置的,其中只有一位SMOD与串行口工作有关。它的格式与功能如下: SMOD称为波特率选择位。在工作方式1、工作方式2和工作方式3时,若SMOD=1,则波特率提高一倍,若SMOD=0,则波特率不加倍。整机复位时SMOD=0(串行口每秒钟发送/接收的位数称为波特率)。 5.2.2 串行通信的工作方式 串行通信的工作方式包括: 5.2.2.1 工作方式0 在方式0下,串行口作同步移位寄存器使用,其波特率为fosc/12,即振荡器频率的1/12,固定不变。串行数据由RXD(P3.0)端输入或输出。同步移位脉冲由TXD(P3.1)端送出。这种方式常用于扩展I/O口。 发送时,当一个数据写

8、入发送缓冲寄存器SBUF(99H)时,即启动发送。串行口把8位数据以fosc/12的波特率从RXD送出,低位在前,高位在后,发送完置中断标志TI为“1”。具体接线如图5-8所示,其中74HC164是“串入并出”移位寄存器。图5-8 方式0用于I/O扩展输出数据输出74HC164D73D64D55D46D013D211D310D112128RXDTXD80C51移位脉冲 接收时,REN是串行口允许接收控制位。REN=0,禁止接收,REN=1,允许接收。当软件置REN为“1”时,即开始从RXD以fosc/12的波特率输入数据(低位在前),当接收到8位数据时,置中断标志RI为“1”。具体接线如图5-

9、9所示,其中74HC165是“并入串出”移位寄存器。 串行控制寄存器中TB8和RB8位在方式0中未用。每当发送或接收完8位数据时,由硬件将发送中断TI或接收中断RI标志置位。CPU响应TI或RI中断请求后,不会清除TI或RI标志,必须由用户用软件清“0”。方式0时SM2位必须为“0”。图5-9 方式0接收接线图数据输出74HC165D06D15D24D33D711D513D414D61292RXDTXD80C51移位脉冲 5.2.2.2 方式1 在方式1下,串行口为10位通用异步接口。发送或接收一帧信息,包括1位起始位“0”,8位数据和1位停止位“1”。其传送波特率可调。 发送时,数据从引脚T

10、XD(P3.1)端出,当数据写入发送缓冲寄存器SBUF时,即启动发送器发送。当发送完一帧数据后,就把TI标志置“1”,并申请中断。 接收时,由REN置“1”,允许接收。串行口采样引脚RXD(P3.0),当采样“1”至“0” 的跳变后,确认是起始位“0”,就开始接收一帧数据,当RI=0且停止位为“1”或者SM2=0时,停止位进入RB8位,同时置位中断标志RI;否则信息丢失。所以方式1接收时,应先用软件清除RI或SM2标志。 5.2.2.3 方式2 在方式2下,串行口为11位异步通信接口。发送或接收一帧信息,包括1位起始位“0”,8位数据位,1位可编程位和1位停止位“1”。其传送波特率与SMOD有

11、关。 发送前,先根据通信协议由软件设置TB8(如作奇偶校验位或地址/数据指针标识位),然后将要发送的的数据写入SBUF即启动发送器。 发送过程是由执行任何一条以SBUF作为目的寄存器的指令而启动的。写SBUF信号,把8位数据装入SBUF,同时还把TB8装到发送移位寄存器的第9位位置上,并通知发送控制器:要求进行一次发送。然后即从TXD(P3.1)端输出一帧信息。 接收时,由REN置“1”,允许接收,同时将RI清“0”。在满足这个条件的前提下,再根据SM2的状态和所接收到的RB8的状态才能决定此串行口在信息到来后是否会使RI置“1”,并申请中断,接收数据。 当 SM2=0时,不管RB8为“0”,

12、还是为“1”,RI都置“1”,此串行口将接收发来的信息。 当SM2=1,且RB8为“1”时,表示在多机通信情况下,接收的信息为地址帧,此时RI置“1”。串行口将接收发来的信息。 当SM2=1,且RB8为0时,表示接收的信息为数据帧,但不是发给本从机的,此时RI不置“1”,因而所接收的数据帧将丢失。 5.2.2.4 方式3 方式3为波特率可变的11位异步通信方式。除波特率外,方式3和方式2完全相同。5.2.2.5 多机通信 80C51的方式2和方式3有一个专门的应用领域,即多机通信。这一功能使它可以方便地应用于集散式分布系统中。这种系统采用一台主机和多台从机,它们的通信方式之一如图 5-10所示

13、。图5-10 多机通信连接图80C51TXDRXD主机TXDRXD80C510#从机TXDRXD80C511#从机TXDRXD80C512#从机 多机通信的实现,主要靠主、从机之间正确地设置与判断多机通信控制位SM2和发送或接收的第9数据位(D8)。以下简述如何实现多机通信。 在编程前,首先要给各从机定义一个地址字节,以辨认从机。地址字节和数据字节可用第9数据位来区别,前者的第9位为1,而后者的第9位为0。所以,在主机发送地址帧时,地址/数据标识位TB8应设置为“1”,以表示是地址帧。例如,可以这样编写指令:MOV SCON,0D8H ;设串行口为方式3,TB8置“1”,允许接收 此时,所有的

14、从机初始化时均置SM2=1,使它们只处于接收地址帧的状态。例如,从机中可以编写这样的指令:MOV SCON,0F0H ;置串行口为方式3,SM2=1,允许接收 当从机接收到从主机发来的信号后,第9位RB8若为“1”,则置位中断标志RI,中断后判断主机送来的地址与本机地址是否相符。若相符,则被寻址的从机就清除其SM2标志,即SM2=0,准备接收即将从主机送来的数据帧,未被选中的从机仍保持SM2=1。 当主机发送数据帧时,由于TB8=0,虽然各从机都接收到,但只有SM2=0的那个被寻址的从机才能接收到数据,那些未被选中的从机将不理睬进入到串行口的数据字节,继续进行它们自己的工作,直到一个新的地址字

15、节到来,这样就实现了主机控制的主从机之间的通信。综上所述,通信只能在主从机之间进行,从机之间的通信只有经主机才能实现。多机之间的通信过程可归纳如下:(1)主、从机均初始化为方式2或方式3,置SM2=1,允许中断。(2)主机置TB8=1,发送要寻址的从机地址。(3)所有从机均接收主机发送的地址,并进行地址比较。(4)被寻址的从机确认地址后,置本机SM2=0,向主机返回地址,供主机核对。(5)核对无误后,主机向被寻址的从机发送命令,通知从机接收或发送数据。(6)通信只能在主、从机之间进行,两从机之间通信要通过主机作中介。(7)本次通信结束后,主、从机重置SM2=1,主机可再对其他从机寻址。 在实际

16、应用中,因为单片机功能有限,因而在较大的测控系统中,常常把单片机应用系统作为前端机(也称为下位机或从机)直接用于控制对象的数据采集与控制,而把PC机作为中央处理机(也称为上位机或主机)用于数据处理和对下位机的监控管理。它们之间的信息交换主要是采用串行通信,此时单片机可直接利用其串行接口,而PC机可利用其配置的8255或8251、16450等可编程串行接口芯片。实现单片机与PC机之间串行通信的关键是在通信协议的约定上要一致,例如,应设定相同的波特率及帧格式等。在正式工作之前,双方应先互发联络信号,以确保通信收发数据的准确性。 此外,还有一点需注意的是,如果是多台单片机与PC机通信,80C51机可

17、采用多机通信工作方式,而PC机的串行接口芯片不具备多机通信功能,其11位帧格式中的第9位是奇偶位。为能实现80C51机中TB8的功能,可以通过灵活运用这些接口芯片,用软件实现上述功能。具体方法是对8250等串行接口芯片进行初始化时,使其通信线路控制寄存器的D5=D3=1,在发送地址时,置D4=0(则奇偶位为1);在发送数据时,置D4=1(则奇偶位为0)。由此可实现PC机与80C51单片机的多机通信。5.2.3 串行口应用举例串行口应用举例5.2.3.1 用串行口扩展I/O口 串行口的方式0主要用于扩展并行I/O口。(1)用并行输入8位移位寄存器74HC165作扩展输入口 例55 图5-11是利

18、用80C51的3根口线扩展为16根输入口线的实用电路,由2块74HC165串接而成(前级的数据输出QH与后级的信号输入端SIN相连)。现编程从16位扩展口读入20个字节数据,并把它们转存到内部RAM的50H63H单元中。v图5-11 利用串行口扩展输入口74HC165D06D15D24D33D711D513D414D612QHP3.0P3.180C51图5-10SIN12816+5V74HC165D06D15D24D33D711D513D414D612QH12816+5VP1.0S/LCKS/LCK99解 根据题意,编程如下: MOV R7,#20 ;设置读入字节数 MOV R0,#50 ;设

19、片内RAM指针 SETB F0 ;设置读入字节奇偶数标志RCV0: CLR P1.0 ;并行输入数据 SETB P1.0 ;允许串行移位RCV0:MOV SCON,#10H ;设串行口方式0并启动接收 JNB RI,$ ;等待接收一帧数据 CLR RI ;清接收中断标志 MOV A,SBUF ;取缓冲器数据 MOV R0,A INC R0 CPL F0 JB F0,RCV2 ;判是否接收完偶数帧,接收完则重新并行置入 DEC R7 SJMP RCV1 ;否则再接收一帧数RCV2:DJNZ R7,RCV0 ;判是否已读入预定的字节数 ;对读入数据进行处理 程序中F0用来读入字节数的奇偶性标志。由

20、于每次由扩展口并行置入到移位寄存器的是两个字节数据,置入一次,串行口应接收两帧数据,故已接收的数据字节数为奇数时F0=0,不再并行置入数据就直接启动接收过程,否则F0=1,则调动接收过程前,应该先在外部移位寄存器中置入新的数据。 (2)用8位并行输出串行移位寄存器74HC164作扩展输出口。 例5.6 图5-12是利用74HC164扩展为16根输出口线的实用电路。由于74HC164无并行输出控制端,在串行输入过程中,其输出端的状态会不断变化,故在某些使用场合,在74HC164与输出装置之间,还应加上输出可控的缓冲级(如74HC244),以便串行输入过程结束后再输出。 图中的输出装置是2位共阳极

21、七段显示发光二极管,采用静态显示方式。由于74HC164在低电平输出时,允许通过的电流可达8mA,故不需再加驱动电路。与动态扫描显示比较,静态显示方式的优点是CPU不必频繁地为显示服务,软件设计比较简单,很容易做到显示不闪烁。图5-12 利用串行口扩展输出口74HC1643 4 5 613111012P3.0P3.180C51图5-11899P1.0CLR1,2A,B共阳极LED. g f e d c b a147VCC74HC1643 4 5 6131110128CLR1,2A,B共阳极LED. g f e d c b a147VCC7CKCK7+5V 编程把片内20H、21H中的数字取出,

22、由串行口送给显示器,显示相应的数字。解 根据题意,编程如下: MOV R7,#2 ;设置显示位数 MOV R0,#50 ;设显示数据区指针 MOV SCON,#00H ;设串行口方式0DISP1:MOV A,R0 ADD A,#0BH ;设置偏移值 MOVC A,A+PC ;取X段显示码 MOV SBUF,A ;调动串行口发送过程 JNB TI,$ ;等待接收一帧数据 CLR TI ;清串行口发送中断标志 INC R0 ;修改指针取下一个数 DJNZ R7,DISP1 RETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H ;0,1,2,3,4的显示代码 DB 92H,82H,0

23、F8H,80H,98H ;5,6,7,8,9的显示代码5.2.3.2 用串行口进行异步通信 例5.7 编程把片内40H4FH单元中数据串行发送,定义为方式2,TB8作为奇偶校验位,在数据写入发送器之前,先将数据的奇偶位写入TB8,这时第9位数据作为奇偶校验用。解 :根据题意,编程如下: MOV SCON,#80H ;设串行口方式2 MOV PCON,#80H ;波特率为Fosc/32 MOV R0,40H ;设片内指针 MOV R2,10H ;数据长度送R2LOOP:MOV A,R0 ;取数据送A MOV C,P ;奇偶位送TB8 MOV TB8,C MOV SBUF,A ;启动发送WAIT:

24、 JBC TI,CONT ;判断发送中断标志 SJMP WQITCONT:INC R0 DJNZ R2,LOOP例5.8 :用工作方式2编制一个串行口接收程 序,校对奇偶 校验位,并进行接收正确和接收错 误的判断和处理。解 :根据题意,程序如下: MOV SCON,#90H ;设置工作方式2,并允许接收LOOP:JBC RI,READ ;等待接收数据并清RI SJMP LOOPREAD:MOV A,SBUF ;读入一帧数据 JB PSW.0 ONE ;判断接收端奇偶 JB RB8,ERR ;判断发送端奇偶 SJMP RIGHTONE: JNB RB8,ERR ;数据长度送R2RIGHT: ;接

25、收正确ERR: ;接收错误 当接收到一个字符时,从SBUF送到累加器A中会产生接收端的奇偶值,而保存在RB8中的值为发送端的奇偶值,若接收正确,两个奇偶值应相等,否则接收字符有错,需通知对方重发。 例5.9 双机异步通信的连接线路如图5-13所示。设甲机发送乙机接收,波特率为2400波特,两机晶振均为6MHz。要求甲机将外部数据存储器4000H40FFH单元的内容向乙机发送,在发送数据之前将数据块长度发送给乙机,发送完256B后,向乙机发送一个累加和校验。数据传送结束时,向甲机发送一个状态字节,表示传送是正确还是错误。图5-13 双机异步通信的连接线路解 因波特率已指定为2400波特,首先需要

26、确定定时初值和SMOD的值。初值按下式计算: 此时若取SMOD=0,则X=249.49249,误差较大;取SMOD=1,则X=242.98243=F3H,误差较小。 发送程序作如下约定:(1)定时器T1按方式2工作,计数初值为F3H,SMOD=1。(2)串行口按方式1工作,允许接收。(3)R6设为数据块长度寄存器,R5设为累加和寄存器。 甲机发送程序清单TRT:MOV TMOD,20H ;设定时器1工作在方式2 MOV TH1,0F3H ;设定时器1的初值 MOV TL1,0F3H SETB TR1 ;启动定时器1 MOV SCON,50H ;串行口初始化为方式1,允许接收 MOV PCON,

27、80H ;SMOD=1RPT: MOV DPTR,4000H MOV R6,00H ;长度寄存器初始化 MOV R5,00H ;校验和寄存器初始化 MOV SBUF,R6 ;发送长度 JNB TI, ;等待发送 CLR TIL1: MOVX A,DPTR ;读取数据 MOV SBUF,A ;发送数据 ADD A,R5 ;形成累加和送至R5 MOV R5,A INC DPTR ;修改地址指针 JNB TI, ;等待发送 CLR TI DJNZ R6,L1 ;判断是否发送完256个数据 MOV SBUF,R5 ;发校验码 MOV R5,00H JNB TI, CLR TI JNB RI, ;等乙机

28、回答 CLR RI MOV A,SBUF JZ L8 ;发送正确则返回 AJMP RPT ;发送有错则重发L8:RET乙机接收程序清单:接收程序的通信约定同发送程序。RSU:MOV TMOD,20H ;T1初始化 MOV TH1,0F3H MOV TL1,0F3H SETB TR1 MOV SCON,50H MOV PCON,80HRPT:MOV DPTR,4000H JNB RI, CLR RI MOV A,SBUF ;接收发送长度 MOV R6,A MOV R5,00H ;累加和寄存器清“0”WTD:JNB RI, CLR RI MOV A,SBUF ;接收数据 MOVX DPTR,A ;

29、存储数据 INC DPTR ;修改地址指针 ADD A,R5 MOV R5,A DJNZ R6,WTD ;未接收完继续 JNB RI, ;接收校验码 CLR RI MOV A,SBUF XRL A,R5 ;比较校验码 MOV R5,00H JZ L6 ;正确则转至R6 MOV SBUF,0FFH ;出错送0FFH JNB TI, CLR TI ALMP RPT ;重新接收 L6: MOV SBUF,00H ;正确回送00H JNB TI, ;发送完返回 CLR TI RET5.3 中断系统 在计算机与外部设备交换信息时,存在一个快速的CPU与慢速的外设之间的矛盾。若采用查询方式,则不但占用了C

30、PU的操作时间,并且响应速度慢。此外对CPU外部随机出现的紧急事件,也常常需要CPU马上响应。为解决这个问题,在计算机中引入了中断技术。5.3.1 中断的概念 中断是通过硬件来改变CPU程序运行方向的。计算机在执行程序的过程中,由于CPU以外的某种原因,需中止当前程序的执行,而去执行相应的处理程序,待处理结束后,再回来继续执行被中止了的原程序,这种情况称为中断。中断之后所执行的程序称为中断服务或中断处理程序,原来运行的程序称为主程序。主程序被断开的位置称为断点。引起中断的原因,或发出中断申请的来源称为中断源。 引入中断技术可以实现: (1)使CPU与外设同步工作。CPU启动外设工作后,就继续执

31、行主程序,而外设把数据准备好后,发出中断请求,请求CPU中断原程序的执行,转去执行中断服务程序,中断处理完后,CPU恢复执行主程序,外设也继续工作。这样CPU可指挥多个外设同时工作,大大提高了CPU的利用率; (2)实时处理。在实时控制中,现场采集到的各种数据可在任一时刻发出中断请求。要求CPU及时处理,若CPU是开放的,则CPU就可马上对数据进行处理; (3)故障处理。若计算机在运行过程中出现了事先预料不到的情况或故障时(如掉电、存储出错、溢出等),可以利用中断系统自动处理,而不必停机。5.3.2 80C51单片机中断系统单片机中断系统 80C51单片机的中断系统由与中断有关的特殊功能寄存器

32、、中断入口、顺序查询逻辑电路等组成,其结构框图如图5-14所示。 由图可见,80C51单片机有5 个中断请求源,4个用于中断控制的特殊功能寄存器IE、IP、TCON(用6位)和SCON(用2位),可提供两个中断优先级,实现两级中断嵌套。5个中断源对应5个固定的中断入口地址(矢量地址)。5.3.2.1 中断请求源 80C51单片机提供了5 个中断请求源,其中2个为外部中断请求和,分别由P3.2和P3.3脚输入 ,两个为片内定时/计数器T0和T1的溢出中断请求TF0(TCON.5)和TF1(TCON.7),1个片内串行口发送或接收中断请求TI(SCON.1)或RI(SCON.0),这些中断请求源分

33、别由特殊功能寄存器TCON和SCON的相应位锁存。图5-14 中断系统结构框图中断转移入口IE0EX0PX0ET0PT0IT0INT001TF0IE1EX1PX1ET1PT1IT1INT101TF1ESPS+TIRI高优先级中断转移入口低优先级EA图5-12(TCON)(IE)(IP) (1)定时/计数器控制寄存器TCON。TCON为定时计数器T0、T1的控制寄存器,同时也锁存了T0、T1的溢出中断源和外部中断请求源等,与中断有关的位如下: IT0:外部中断0触发方式控制位。当IT0=0时,外部中断0控制为电平触发方式。在此方式下,CPU在每个机器周期的S5P2期间采样(P3.2)的输入电平,

34、若采到低电平,则认为有中断请求,随即置位IE0。若采到高电平,则认为无中断请求或中断请求已清除,随即对IE0清“0”。在电平触发方式中,CPU响应中断后不能自动使IE0清“0”,也不能由软件使IE0清“0”,故在中断返回前必须清除引脚上的低电平,否则会再次响应中断造成出错。 若IT0=1,外部中断0控制为边沿触发方式。在此方式下,CPU在每个机器周期的S5P2期间采样(P3.2)的输入电平,若相继两次采样,一个周期采样为高电平,接下来的下一个周期采样为低电平,则置位IE0,表示外部中断0正在向CPU请求中断,直到该中断被CPU响应时,IE0由硬件自动清“0”。在边沿触发方式中,为保证CPU在两

35、个机器周期内检测到先高后低的负跳变,输入高低电平的持续时间起码要保持1个机器周期。 IE0:外部中断0标志,若IE0=1,则外部中断0向CPU请求中断。 IT1:外部中断1触发方式控制位,功能与IT0类似。 IE1:外部中断1标志,功能与IE0类似。 TF0:T0溢出中断标志,在启动T0计数后,T0从初值开始加1计数,当计满溢出时,由硬件使TF0置1,向CPU申请中断,CPU响应TF0中断后,由硬件对TF0清“0”, TF0也可由软件清“0”(查询方式)。 TF1:T1溢出中断标志,功能与TF0类似。系统复位后,TCON各位均清“0”。 (2)串行口控制寄存器SCON。SCON为串行口控制寄存

36、器,字节地址为98H,SCON的低2位TI和RI锁存串行口的接收中断标志和发送中断标志。其格式如下: TI:串行口的发送中断标志。在串行口以方式0发送时,每当发送完8位数,由硬件使TI置“1”;若以方式1、方式2或方式3发送时,在发送停止位的开始时使TI置“1”,TI=1表示串行口发送正在向CPU请求中断。但CPU响应中断时,不会对TI清“0”,必须由软件清“0”。 RI:串行口的接收中断标志。若串行口接收器允许接收,并以方式0工作,每当接到第9位时,使RI置“1”,若以方式1、2、3工作,且SM2=0时,每当接到停止位的中间时使RI置“1”,当串行口以方式2或方式3工作,且SM2=1时,仅当

37、接收到的第9位数据RB8为“1”,且同时还要在接收到停止位中间时才使RI置“1”。RI=1表示接收器正在向CPU请求中断。同样CPU响应中断时,不会对RI清“0”,必须由软件清“0”。 系统复位后,SCON各位均清“0”。5.3.2.2 中断控制 (1)中断禁止与开放。特殊功能寄存器IE为中断允许寄存器,通过向IE写入中断控制字,控制CPU对中断源的开放与屏蔽,以及每个中断源是否允许中断。其格式为: EA:CPU中断总允许位。当EA=1时,CPU允许中断,每个中断源是允许还是禁止,分别由各自的允许位确定,当EA=0时,CPU屏蔽所有的中断要求。 ES:串行口中断允许位。ES=1,允许串行口中断

38、,ES=0,禁止串行口中断。 ET1:T1中断允许位。ET1=1,允许T1中断,ET1=0,禁止T1中断。 EX1:外部中断1允许位。EX1=1,允许外部中断1中断,EX1=0,禁止外部中断1中断。 ET0:T0中断允许位。ET0=1,允许T0中断,ET0=0,禁止T0中断。 EX0:外部中断0允许位。EX0=1,允许外部中断0中断,EX0=0,禁止外部中断0中断。 系统复位后,IE中各位均清“0”,禁止所有中断。 ( 2)中断优先级设定。80C51单片机有两个中断优先级,对于每一个中断请求源,可编程为高优先级中断或低优先级中断,可实现二级中断嵌套。一个正在执行的低优先级中断能被高优先级中断所

39、中断,但不能被另一个低优先级中断所中断,一直执行到结束,遇到中断返回指令RETI,返回主程序后再执行一条指令才能响应新的中断请求。 特殊功能寄存器IP为中断优先级寄存器,锁存各中断源优先级的控制位,用户可由软件设定。其格式如下: PS:串行口中断优先级控制位。PS=1,设定串行口为高优先级中断,PS=0,串行口为低优先级中断。 PT1:T1中断优先级控制位。PT1=1,设定定时器T1为高优先级中断,PT1=0,T1为低优先级中断。 PX1:外部中断1中断优先级控制位。PX1=1,设定外部中断1为高优先级中断,PX1=0,为低优先级中断。 PT0:T0中断优先级控制位。PT0=1,设定定时器T0

40、为高优先级中断,PT0=0,T0为低优先级中断。 PX0:外部中断0中断优先级控制位。PX0=1,设定外部中断0为高优先级中断,PX0=0,为低优先级中断。 系统复位后,IE中各位均清“0”。各中断源均为低优先级中断。 80C51单片机的中断系统有两个不可寻址的优先级有效触发器。其中一个指示某高优先级的中断正在执行,所有后来申请的中断都被阻止。另外一个触发器指示某低优先级的中断正在执行,所有的同级中断都被阻止,但不阻止高优先级的中断。 若同时收到几个同一优先级的中断请求时,CPU通过内部硬件查询逻辑按自然优先级顺序确定响应哪一个中断请求。其自然优先级由硬件形成,排列如下: 中断源 同级自然中断

41、优先级 外部中断0 最高级 定时器T0中断 外部中断1 定时器T1中断 串行口中断 最低级 5.3.2.3 中断的响应条件与响应过程 (1)响应条件。单片机响应中断的条件是:中断源有请求,CPU允许所有中断源请求中断(EA=1),中断允许寄存器IE相应位置“1”。这样,在每个机器周期内,单片机对所有中断源都进行顺序检测,并可在任一周期的S6期间,找到所有有效的中断请求,并对其优先级排队,只要满足下列条件: 1)无同级或高级中断正在服务; 2)现行指令执行到最后一个机器周期且已结束; 3)若现行指令为RETI或访问特殊功能寄存器IE或IP的指令时,执行完该指令且紧随其后的另一条指令也已执行完。

42、单片机便在紧接着的下一个机器周期S1期间响应中断,否则将丢弃中断查询的结果。 (2)中断响应过程。单片机一旦响应中断,首先置位响应的优先级有效触发器,然后执行一个硬件子程序调用,把断点压入堆栈保护,然后将对应的中断入口地址值装入程序计数器PC,使程序转向该中断入口地址,以执行中断服务程序。 由上可知,单片机响应中断后,只保护断点而不保护现场(如累加器A、程序状态字寄存器PSW的内容),且不清除串行口中断标志TI和RI,也无法清除外部中断请求信号和,故用户在编程时应予考虑。80C51单片机中各中断源与对应的入口地址如下: 中断源 入口地址 外部中断0 0003H 定时器T0中断 000BH 外部

43、中断1 0013H 定时器T1 中断 001BH 串行口中断 0023H 各入口地址之间只相隔8个字节,一般的中断服务程序是容纳不下的。通常在中断服务程序入口地址处放一条无条件转移指令,这样可使中断服务程序安排在64K空间的任意处。 CPU从以上相应的地址开始执行中断服务程序,直到遇到一条RETI指令为止,若用户在中断服务程序中开始安排了保护现场指令(相应寄存器内容压入堆栈),则在RETI指令前应有恢复现场(相应寄存器内容弹出堆栈)指令 。5.3.2.4 中断响应时间 由上述可知,CPU不是在任何情况下都对中断请求立即响应,而且不同的情况对中断响应的时间也不同,下面以外部中断为例,说明中断响应

44、时间。 外部中断请求信号的电平在每个机器周期的S5P2期间,经反相后锁存到IE0或IE1标志位,CPU在下一个机器周期才会查询到这些值,这时如果满足响应条件,CPU响应中断时,需执行一条两个机器周期的调用指令,以转到相应的中断服务程序入口。这样从外部中断请求有效到开始执行中断服务程序的第一条指令至少需要3个机器周期。 如果在申请中断时,CPU正在处理最长指令(如乘、除法指令),则额外等待时间增加3个机器周期,若正在执行RETI或访问IE、IP指令,则额外等待时间又增加2个机器周期。 综合估算,若系统中只有一个中断源,则响应时间为38个机器周期。5.3.3 5.3.3 中断系统应用举例中断系统应

45、用举例 例5.10 晶振Fosc=6MHz利用T0产生周期为2ms方波,由P1.0输出。要求采用中断方式处理。解 : 根据题意,定时/计数器T0采用方式1,定时值为1ms,其初值计算如下:机器周期T=12/Fosc=12/6106s=2s则T0的初值为:X=216-1000/2=65036即:X=65036D=0FE0CH=1111111000001100B则:(TH0)=0FEH,(TL0)=0CH程序编写如下: ORG 0000H AJMP MAIN ;转主程序 ORG 000BH ;中断入口地址 MOV TL0,#0CH ;重赋初值 MOV TH1,#0FEH CPL P1.0 ;输出取

46、反 RETI ;中断返回MAIN: TMOD,#01 ;T0初始化 MOV TL0,#0CH ;赋初值 MOV TH0,#0FEH MOV IE,#82H ;CPU开中断,T0开中断HERE: SJMP HERE 例5.11 利用定时器作外部中断源。 80C51内部有两个定时/计数器,它们可以改用外部中断源。当它们选择计数方式时,T0或T1引脚上的负跳变将使T0或T1计数器加1计数,若计数初值设定为满量程,即全1状态,则T0或T1引脚上的一个负跳变即可触发溢出中断。此时的TF0或TF1作为外部中断标志。 以T1为例,将其作为外部中断源的程序如下: MOV TMOD,60H ;置T1为计数方式2

47、 MOV TH1,FFH ;置计数初值 MOV TL1,FFH SETB EA ;开CPU中断 SETB ET1 ;允许T1中断 SETB TR1 ;启动T1计数 此例T1端作外部中断请求输入端,中断的同时,0FFH可以自动加载到TL0上 例5.12 利用中断和查询相结合扩展中断源。 当外部中断源比较多时,可以在80C51的一个外部中断请求输入端“线或”多个中断源,这些中断源同时分别接到输入端口的各位,其电路如图5-15所示。 图5-15中IE1IE4为中断源,它们同时分别接到P1.0P1.3,平时IE1IE4都为低电平端为无效高电平。当IE1IE4信号中有一个以上变为高电平后,端变为低电平,

48、产生中断请求。在中断服务程序中CPU对P1.0P1.3脚进行查询,确定其中哪一个中断源产生了请求以转到相应的服务程序中去。在这样方式中查询的顺序决定了中断优先级的顺序。设IE1IE4的中断服务程序的入口地址分别为INT1INT4,中断服务程序和查询程序如下: ORG 000BH AJMP IT IT: PUSH ACC ;保护现场信息 PUSH PSW JNB P1.0,T2 ;顺序查询中断源 ACALL INT1T2: JNB P1.1,T3 ACALL INT2T3: JNB P1.2,T4 ACALL INT3T4: JNB P1.3,T5 ACALL INT4T5: POP PSW P

49、OP ACC RETIINT1: ;EI1中断服务子程序 RET INT2: ;EI2中断服务子程序 RET INT3: ;EI3中断服务子程序 RET INT4: ;EI4中断服务子程序 RET 例5.13 利用定时中断抗干扰。 单片机应用系统开发完成后,在工作现场由于系统本身的噪声干扰、电磁干扰、过压干扰以及环境干扰等原因,往往会出现“死机”现象。解决的办法有多种,这里介绍利用定时中断防止“死机”的方法。 设计思想是先估算系统主程序执行一次循环所需时间t,然后把定时器T0或T1的定时时间取得比t稍大,并在主程序中包含对定时器的初始化程序,这样,如果系统主程序运行正常,因定时时间比t大,故在

50、定时时间还未到时,主程序已完成一次循环,T0或T1被重新初始化,使定时时间常数重新置入其中,故不会产生溢出中断。若应用系统由于干扰失控,主程序不能正常循环运行,T0或T1不能及时初始化,则经过时间t后,T0或T1必将产生溢出中断,转入中断服务程序,这表明程序运行出现故障,用户可安排中断服务程序跳转回主程序需要的地址,以便重新使主程序运行。图5-15 扩展多中断源接口电路EI0EI1EI2EI3EI4+5V1NT01NT1P1.0P1.1P1.2P1.380C51图5-13 将T1设置为工作方式2,晶振频率为6MHz,防止“死机”的程序如下: SETB ET1 ;T1开中断 SETB PT1 ;

51、T1中断设置为高优先 SETB EA ;CPU 开中断 MOV TL1,#data ;T1赋初值(根据t) MOV TH1,#data MOV TMOD #20H ;T1工作方式2,定时 SETB TR1 ;启动T1计数 ORG 001BH ;T1溢出中断入口地址 POP A ;丢弃PC压入堆栈的错误地址 POP A MOV A,#data ;将需转去的主程序地址(2个字节)送入栈顶 PUSH A MOV A,#data PUSH A RETI ;中断返回 例5.14 编程实现一台主机和多台(255台)从机之间进行通信。 解 多机通信需要符合一定的通信协议。为叙述方便,在此定如下几条协议: (

52、1)系统中255台从机地址分别为0FFH。 (2)地址FFH是对所有从机都起作用的一条控制命令:命令各从机恢复SM2=1的状态。 (3)主机发送的控制命令代码为: 00 要求从机接收数据块; 01 要求从机发送数据块; 其他 非法命令。 (4)数据块长度:16个字节。 (5)从机状态字格式为: 其中,若ERR=1,从机接受到非法命令; 若TRDY=1,从机发送准备就绪; 若RRDY=1,从机接收准备就绪; 下面给出的串行口通信程序是按如下思路编制的。主机程序部分以子程序的方式给出,要进行串行通信时,可以直接调用这个子程序。主机在接受或发送完一个数据块后可返回主程序,完成其他任务。从机部分以串行

53、口中断服务程序的方式给出。若从机未做好接受或发送数据的准备,就从中断程序中返回,在主程序中做好准备。故主机在这种情况下不能简单地等待从机准备就绪,而要重新与从机联络,使从机再次进入串行口中断。系统可采用定时器1作为波特率发生器,也可采用固定的波特率。主机和从机中对定时器初始化的程序及定时器中断程序从略。图5-16为多机通信主机子程序框图,图5-17为多机通信从机中断服务程序框图。保护现场YN地址符合否?命令分类YN是命令帧吗?YN从机发送准备就绪否?接收数据帧从机接收准备就绪否?0001NY返回中断发回地址接收下一帧RRDY=0送主机非法命令RRDY=1送主机TRDY=0送主机接收完否?NYS

54、M2=1恢复现场发送数据帧TRDY=1送主机发送完否?YN子程序入口串行口初始化发送地址帧YN从机应答否?YN应答地址相符否?发送命令帧YN从机应答否?YN命令正确否?命令分类YN从机接收准备就绪否?接收数据块从机发送准备就绪否?发送数据块命令从机复位0001NY返回图5-17 多机通信从机中断服务程序框图图5-16 多机通信主机子程序框图(1)主机串行通信子程序 入口参数:R0 主机发送的数据块首址;R1 主机接受的数据块首址;R2 被寻址从机地址;R3 主机命令;R4 数据块长度 子程序清单如下: MS10: MOVSCON,#0D8H ;设串行口方式3,允许接受,TB8置“1”MS101

55、:MOVA,F2 ;发送地址帧 MOVSBUF,A JNBTI,$ CLRTI JNBRI,$ ;等待从机应答 CLRRI MOVA,SBUF XRLA,R2 JZMS103 ;判应答地址是否相符MS102:SETB TB8 MOVSBUF,#0FFH ;不相符重新联络 JNBTI,$ CLRTI SJMP MS101 ;转重发地址 MS103:CLRTB8 ;地址符合,准备发送命令 MOVSBUF,R3;发送命令 JNBTI,$ CLRTI JNBRI,$ ;等待从机应答 CLRRI MOVA,SBUF ;取应答信息 JNBACC.7,MS104 ;判断命令是否出错 SJMP MS102 ;

56、若从机接受命令出错,重新联络MS104:CJNE R3,#00,MS105 ;判断是否要求从机接收数据 JNBACC.0,MS102 ;从机接收数据准备就绪否LPTX:MOVSBUF,R0 ;主机发送数据块 JNBTI,$ ;等待发送完1帧 CLRTI INCR0 ;修改地址指针 DJNZ R4,LPTX ;判断数据块是否传完 RET ;返回主程序MS105: JNBACC.1,MS102 ;从机发送数据准备就绪否LPRX: JNBRI,LPRX ;等待接受完1帧 CLRRI MOVA,SBUF ;取出接受到的字符 MOVR1,A INCR1 DJNZ R4,LPRX ;未接受完则继续 RET

57、 若主机向10号从机发送数据块,数据块放置在内部RAM区的4041单元中,则主程序调用子程序的入口条件如下: MOVR2,#0AH MOVR3,#00H MOVR4,#10H MOVR0,#40H LACLL MS10 (2)从机串行通信程序。 从机的串行通信采用中断控制启动方式,串行口中断服务程序利用1区工作寄存器。在串行口通信启动后,仍采用查询方式来接受或发送数据块。从机的初始化程序中应包括定时器1和串行口初始化以及开中断程序,定时器1的初始化和开中断从略。程序中用F0(PSW.5)作发送准备就绪标志,F1(PSW.1)作接受准备就绪标志。初始化程序的其他有关部分如下: MOVSP,#1F

58、H ;设置堆栈指针 MOVSCON,#0F0H;置串行口模式3,SM=1,允许接受 MOV08H,#40H;接受缓冲区首址送1区工作寄存器R0 MOV09H,#50H;接受缓冲区首址送1区工作寄存器R1 MOV0AH,#10H;接受或接受字节数送1区工作寄存器R2 (3)串行口中断服务程序(由0023H转来)SS10:CLRRI PUSH A ;保护现场 PUSH PSW SETB RS0 ;选1区工作寄存器 CLR RS1 MOVA,SBUF XRLA,#SLAVE ;SLAVE为本地从机地址 JZ SSI01 ;判断地址是否符合RETU:POPPSW ;恢复现场 POPA RETISSI0

59、1:CLRSM2 ;地址符合,准备接受数据 MOVSBUF,#SLAVE ;从机地址送主机,准备核对 JNB TI,$ ;等待发送完1帧 CLR TI JNB RI,$ ;等待接受完1帧 CLR RI JNB RB8,SSI02 ;是数据帧跳转 SETB SM2 ;复位信号,把SM2置“1” SJMP RETUSSI02:MOV A,SBUF ;取命令 CJNE A,#02H,SS1 ;检查命令是否合法SS1: JC SSI03 ;A02H则继续 MOV SBUF,#80H;非法命令,置ERR=1 JNB TI,$ ;等待发送完1帧 CLR TI SJMP RETU ;返回SSI03:JZ C

60、MD0 ;A00H,准备接受数据块 JB F0,SSI04;发送准备就绪否 MOV SBUF,#00H;回答未准备就绪 JNB TI,$ ;等待发送完1帧 CLR TI SJMPRETUSSI04:MOVSBUF,#02H;发送准备就绪,置TRDY=1 JNBTI,$ CLRTI CLRF0 ;清发送准备标志LP1: MOVSBUF,R0;发送数据块 JNBTI,$ CLRTI INCR0 ;修改数据指针 DJNZR2,LP1 SETBSM2 ;发送完,置SM2=1 SJMPRETUCMD0:JBF1,SSI05;判断接受准备就绪否 MOVSBUF,#00H;回答未准备就绪 JNBTI,$ C

温馨提示

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

评论

0/150

提交评论