《第5章51单片机的内部资源.ppt》由会员分享,可在线阅读,更多相关《第5章51单片机的内部资源.ppt(197页珍藏版)》请在三一文库上搜索。
1、第5章 51单片机的内部资源 本章介绍了51单片机的内部资源,包括定时与中断以及串口通信,中断功能使单片机具有了实时处理能力,定时功能使单片能够处理与时间和计数相关的问题的能力,串口通信使单片机可以与其他单片机、计算机或其它设备相连,在实际的工程应用中非常广泛。学习过程中要注意掌握相关的基础知识和基本原理,重点是相关寄存器的功能和设置方法,并注意与实际操作相结合,不断提高实践能力。,5.1 51单片机的中断系统 中断系统主要用于实时测控,要求单片机能及时地响应和处理单片机外部事件或内部事件所提出的中断请求。中断方式大大地提高了CPU的工作效率。 5.1.1 中断的概念 CPU正在执行程序时,单
2、片机外部或内部发生的某一事件,请求CPU迅速去处理。CPU暂时中止当前的工作,转到中断服务处理程序处理所发生的事件。 处理完该事件后,再回到原来被中止的地方,继续原来的工作,这称为中断。 CPU处理事件的过程,称为CPU的中断响应过程。,如下图所示。对事件的整个处理过程,称为中断处理(或中断服务)。,执行主程序,继续执行主程序,断点,中断请求,中断响应,执行中断处理程序,中断返回,能够实现中断处理功能的部件称为中断系统;产生中断的请求源称为中断请求源。 中断源向CPU提出的处理请求,称为中断请求(或中断申请)。 进入中断保护现场中断处理恢复现场 中断返回 当有几个中断源同时申请中断时,或者CP
3、U正在处理某中断源服务程序时,又有另一中断源申请中断,那么CPU必须要确定优先去处理谁的能力,称为中断优先级。 优先级高的事件可以中断CPU正在处理的低级的中断服务程序,待完成了高级中断服务程序之后,再继续被打断的低级中断服务程序。这是中断嵌套问题。,5,引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。,单片微机的中断系统需要解决的问题 单片微机的中断系统需要解决的问题主要有三点,即: 当单片微机内部或外部有中断申请时,
4、CPU能及时响应中断,停下正在执行的任务,转去处理中断服务子程序,中断服务处理后能回到原断点处继续处理原先的任务; 当有多个中断源同时申请中断时,应能先响应优先级高的中断源,实现中断优先级的控制; 当低优先级中断源正在使用中断服务时,若这时优先级比它高的中断源也申请中断,要求能停下低优先级中断源的服务程序转去执行更高优先级中断源的服务程序,实现中断嵌套,并能逐级正确返回原断点处。,中断的主要功能: 实现CPU与外部设备的速度配合(分时操作) 由于应用系统的许多外部设备速度较慢,可以通过中断的方法来协调快速CPU与慢速外部设备之间的工作。 实现实时控制 在单片微机中,依靠中断技术能实现实时控制。
5、实时控制要求计算机能及时完成被控对象随机提出的分析和计算任务。在自动控制系统中,要求各控制参量随机地在任何时刻可向计算机发出请求,CPU必须作出快速响应、及时处理。,中断的主要功能: 实现故障的及时发现及处理 单片微机应用中由于外界的干扰、硬件或软件设计中存在问题等因素,在实际运行中会出现硬件故障、运算错误、程序运行故障等,有了中断技术,计算机就能及时发现故障并自动处理。 实现人机联系 比如通过键盘向单片微机发出中断请求,可以实时干预计算机的工作。,5.1.2 MCS-51中断系统的结构 MCS-51的中断系统包括中断源、中断允许寄存器IE、中断优先级寄存器IP、中断矢量等。 MCS-51有5
6、个中断请求源,两个中断优先级,可两级嵌套。 MCS-51五个中断源中包括二个外部中断源和三个内部中断源。 二个外部中断源INT0和INT1,外部设备的中断请求信号、掉电等故障信号都可以从INT0或INT1引脚输入。 三个内部中断源为定时器/计数器T0和T1的定时/计数谥出中断源和串行口发送或接收中断源。 中断系统结构示意图如下图所示。,5.1.3 中断请求源 51单片机的五个中断请求源 : (1)INT0外部中断请求0,由引脚INT0 (P3.2)输入,中断请求标志为IE0。 (2)INT1外部中断请求1,由引脚INT1 (P3.3)输入,中断请求标志为IE1。 外部中断请求有二种信号触发方式
7、,即电平有效方式和跳变有效方式,可通过设置有关控制位进行定义。 当设定为电平有效方式时,若INT0或INT1引脚上采样到有效的低电平,则向CPU提出中断请求;当设定为跳变有效方式时,若INT0或INT1引脚上采样到有效负跳变,则向CPU提出中断请求。,51单片机的五个中断请求源 : (3)定时器/计数器T0溢出中断请求,中断请求标志为TF0 (P3.4) 。 (4)定时器/计数器T1溢出中断请求,中断请求标志为TF1 (P3.5) 。 定时中断是为满足定时或计数的需要而设置的。当计数器发生计数溢出时,表明设定的定时时间到或计数值已满,这时可以向CPU申请中断。由于定时器/计数器在单片微机芯片内
8、部,所以定时中断属于内部中断。 (5)串行口中断请求,中断请求标志为TI或RI。 串行中断是为串行数据传送的需要而设置的。每当串行口发送或接收一组串行数据时,就产生一个中断请求。,当CPU响应中断时,由硬件直接产生一个固定的地址,即矢量地址,由矢量地址指出每个中断源设备的中断服务程序的入口,这种方法通常称为矢量中断。很显然,每个中断源分别有自已的中断服务程序,而每个中断服务程序又有自已的矢量地址。当CPU识别出某个中断源时,由硬件直接给出一个与该中断源相对应的矢量地址,从而转入各自中断服务程序。中断矢量地址见右表。,中断矢量(中断入口地址):,中断向量地址的使用规则,中断向量就是程序存储器的地
9、址,CPU从0000H开始执行的常规方式:在“ORG 00H”之后即执行“JMP START”,这里的地址标号START理论上是在所有中断向量之后,方能避免冲突,标准格式如下:,ORG 0000H ;程序从00H地址开始 JMP START ;跳至START ORG 0003H ;INT0中断向量 JMP #1 ;执行#1中断子程序 ORG 0013H ;INT1中断向量 JMP #2 ;执行#1中断子程序 : START: :,中断向量空间范围,观察左边的中断源与中断向量,可以发现两个中断向量之间,只有个地址的存贮空间,个字节是很难写出实用的中断程序的,通常的原则是只在这个地址放置“JMP
10、#”之指令,#才是真正的中断子程序。,中断标志: 特殊功能寄存器TCON和SCON的相应位锁存各中断请求标志。 TCON为定时器/计数器的控制寄存器,字节地址为88H。 包含INT0,INT1,T0 及 T1的中断标志。 (1)T0和T1的溢出中断请求标志位TF1和TF0 (2)外部中断请求标志位IE1与IE0。,各标志位的功能: (1)IT0选择外中断请求0为跳沿触发方式还是电平触发方式: IT0=0,为电平触发方式。 IT0=1,为跳沿触发方式。 可由软件置“1”或清“0”。 (2)IE0外部中断请求0的中断请求标志位。 IE0=0,无中断请求。 IE0=1,外部中断0有中断请求。当CPU
11、响应该中断,转向中断服务程序时,由硬件清“0”IE0。 (3)IT1外部中断请求1为跳沿触发方式还是电平触发方式,意义与IT0类似。 (4)IE1外部中断请求1的中断请求标志位,意义与IE0类似。,(5)TF0T0溢出中断请求标志位。 T0计数后,溢出时,由硬件置“1”TF0,向CPU申请中断,CPU响应TF0中断时,硬件自动清“0”TF0,TF0也可由软件清0。 (6)TF1T1的溢出中断请求标志位,功能和TF0类似。 TR1、TR0 2个位与中断无关。 当MCS-51复位后,TCON被清0,则CPU关中断,所有中断请求被禁止。,SCON为串行口控制寄存器,字节地址为98H。串行口的发送中断
12、和接收中断的中断请求标志TI和RI,格式如下: 各标志位的功能: (1)TI发送中断请求标志位。串口每发送完一帧串行数据后,硬件自动置“1”TI。响应中断后,必须在中断服务程序中用软件对TI标志清“0”。 (2)RI接收中断请求标志位。串口接收完一个数据帧,硬件自动置“1”RI标志。响应中断后,必须在中断服务程序中用软件对RI标志清“0”。,5.1.4 中断控制 1 中断允许寄存器IE CPU对中断源的开放或屏蔽,由片内的中断允许寄存器IE控制。字节地址A8H,可位寻址。格式如下: IE寄存器中各位设置: 为0时,禁止中断;为 1时,允许中断。 系统复位后IE寄存器中各位均为0,即此时禁止所有
13、中断。 MCS-51复位后,IE清0,所有中断请求被禁止。 若使某一个中断源被允许中断,除了IE相应的位的被置“1” ,还必须使EA位=1。,IE对中断的开放和关闭为两级控制 总的开关中断控制位EA(IE.7位): EA=0,所有中断请求被屏蔽。 EA=1,CPU开放中断,但五个中断源的中断请求是否允许,还要由IE中的5个中断请求允许控制位决定。 IE中各位的功能如下: (1)EA:中断允许总控制位 0:CPU屏蔽所有的中断请求(CPU关中断); 1:CPU开放所有中断(CPU开中断)。 (2)ES:串行口中断允许位 0:禁止串行口中断; 1:允许串行口中断。,(3)ET1:定时器/计数器T1
14、的溢出中断允许位 0:禁止T1溢出中断; 1:允许T1溢出中断。 (4)EX1:外部中断1中断允许位 0:禁止外部中断1中断; 1:允许外部中断1中断。 (5)ET0:定时器/计数器T0的溢出中断允许位 0:禁止T0溢出中断; 1:允许T0溢出中断。 (6)EX0:外部中断0中断允许位。 0:禁止外部中断0中断; 1:允许外部中断0中断。,改变IE的内容,可由位操作指令来实现,即: SETB bit; CLR bit。 例1 若允许片内2个定时器/计数器中断,禁止其它中断源的中断请求。编写设置IE的相应程序段 (1)用位操作指令来编写如下程序段: CLR ES ;禁止串行口中断 CLR EX1
15、 ;禁止外部中断1中断 CLR EX0 ;禁止外部中断0中断 SETB ET0 ;允许定时器/计数器T0中断 SETB ET1 ;允许定时器/计数器T1中断 SETB EA ;CPU开中断,(2)用字节操作指令来编写: MOV IE,#8AH 或者用: MOV 0A8H,#8AH ;A8H为IE寄存器字节地址,对同时发生多个中断申请时: 不同优先级的中断同时申请(很难遇到) 先高后低 相同优先级的中断同时申请(很难遇到) 按序执行 正处理低优先级中断又接到高级别中断 高打断低 正处理高优先级中断又接到低级别中断 高不理低,优先级的控制处理原则,2 中断优先级寄存器IP,中断优先原则:(概括为四
16、句话) 1、低级不打断高级 2、高级不睬低级 3、同级不能打断 4、同级、同时中断,事先约定。,CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。 正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。 正在进行的低优先级中断服务,能被高优先级中断请求所中断。这称之为“中断嵌套”。,优先级对中断响应的影响,事件1,事件2,子程序2,子程序1,中断嵌套的概念:,主程序,中断,中断,若CPU正在执行高优先级的中断,则不能被任何中断源所中断。 中断优先级寄存器IP,其字节地址为B8H。 IP各个位的含义: (1)PS串行口中断优先级控制位 1:高优先级中断; 0:低优先级中断。 (2
17、)PT1定时器T1中断优先级控制位 1:高优先级中断; 0:低优先级中断。,(3)PX1外部中断1中断优先级控制位 1:高优先级中断; 0:低优先级中断。 (4)PT0定时器T0中断优先级控制位 1:高优先级中断; 0:低优先级中断。 (5)PX0外部中断0中断优先级控制位 1:高优先级中断; 0:低优先级中断 由软件可改变各中断源的中断优先级。 系统复位后IP寄存器中各位均为0,即此时全部设定为低中断优先级。,中断优先级控制,除了中断优先级控制寄存器之外,还有两个不可寻址的“优先级激活触发器”: 一个用来指示某高优先级的中断正在执行,所有后来的中断均被阻止。 另一个用来指示某低优先级的中断正
18、在执行,所有同级中断都被阻止,但不阻断高优先级的中断请求。 在中断执行过程中,高中断优先级可以中断低中断优先级的中断过程。但是若在中断服务程序中,关掉所有中断(CLR EA)或关掉部分中断时除外。 在同时收到几个同一优先级的中断请求时,优先响应哪一个中断,取决于内部的查询顺序。查询顺序如下:,中断源 中断级别 外部中断0 最高 T0溢出中断 外部中断1 T1溢出中断 串行口中断 最低 MCS-51是一个二级中断系统。但是通过软件可以模仿第三优先级。,例2 设置IP寄存器的初始值,使2个外中断请求为高优先级,其它中断请求为低优先级。 (1)用位操作指令 SETB PX0 ;2个外中断为高优先级
19、SETB PX1 CLR PS ;串口为低优先级中断 CLR PT0 ;2个定时器/计数器低优先级中断 CLR PT1 (2)用字节操作指令 MOV IP,#05H 或: MOV 0B8H,#05H ;B8H为IP寄存器的字节地址,5.1.5 响应中断请求的条件 一个中断请求被响应,需满足以下必要条件: (1)IE寄存器中的中断总允许位EA=1。 (2)该中断源发出中断请求,即该中断源对应的中断请求标志为“1”。 (3)该中断源的中断允许位=1,即该中断没有被屏蔽。 (4)无同级或更高级中断正在被服务。 中断响应的主要过程:首先由硬件自动生成一条长调用指令: LCALL addr16 接着就由
20、CPU执行该指令,将PC的内容压入堆栈以保护断点,再将中断入口地址装入PC。各中断源服务程序的入口地址固定。,中断响应是有条件的,遇到下列三种情况之一时,中断响应被封锁: (1)CPU正在处理同级的或更高优先级的中断。 (2)所查询的机器周期不是所当前正在执行指令的最后一个机器周期。只有在当前指令执行完毕后,才能进行中断响应。 (3)正在执行的指令是RETI或是访问IE或IP的指令。需要再去执行完一条指令,才能响应新的中断请求。 如果存在上述三种情况之一,CPU将丢弃中断查询结果,不能对中断进行响应。,5.1.6 外部中断的响应时间 外部中断的最短的响应时间为3个机器周期: (1)中断请求标志
21、位查询占1个机器周期。 (2)子程序调用指令LCALL转到相应的中断服务程序入口,需2个机器周期。 外部中断响应的最长的响应时间为8个机器周期: (1)发生在CPU进行中断标志查询时,刚好是开始执行RETI或是访问IE或IP的指令,则需把当前指令执行完再继续执行一条指令后,才能响应中断,当前指令执行完最长需2个机器周期。,(2)接着再执行一条指令,按最长指令(乘法指令MUL和除法指令DIV)来算,也只有4个机器周期。 (3)加上硬件子程序调用指令LCALL的执行,需要2个机器周期。 所以,外部中断响应最长时间为8个机器周期。 如果中断请求被前面所列三个条件之一所阻止,不能产生硬件长调用LCAL
22、L指令,那么所需的响应时间就更长些。如果已在处理同级或更高级中断,响应时间无法计算。 在一个单一中断的系统里,MCS-51单片机对外部中断请求的响应的时间总是在38个机器周期之间。,5.1.7 外部中断的触发方式选择 外部中断有两种触发方式:电平触发方式和跳沿触发方式。 这两种触发方式可由设置TCON寄存器中的IT1(TCON2)、 IT0(TCON0)中断申请触发方式控制位来选择:设置IT1、IT00,选择电平触发方式;设置IT1、IT0l,选择跳变触发方式,即当INT0,INT1引脚检测到前一个机器周期为高电平、后一个机器周期为低电平时,则置位IE0、IE1且向CPU申请中断。 由于CPU
23、每个机器周期采样INT0,INT1引脚信号一次,为确保中断请求被采样到,外部中断源送INT0,INT1引脚的中断请求信号应至少保持一个机器周期。,1 电平触发方式 CPU在每个机器周期采样到的外部中断输入线的电平。外部中断源送INT0,INT1引脚请求中断的低电平有效信号,应一直保持到CPU响应中断为止。否则CPU返回主程序后会再次响应中断。 适于外中断以低电平输入且中断服务程序能清除外部中断请求(即外部中断输入电平又变为高电平)的情况。 2 跳沿触发方式 连续两次采样,一个机器周期采样到外部中断输入为高,下一个机器周期采样为低,则置“1”中断请求标志,直到CPU响应此中断时,该标志才清0。这
24、样不会丢失中断,但输入的负脉冲宽度至少保持1个机器周期。,5.1.8 中断请求的撤消 CPU响应中断请求,转向中断服务程序执行,在其执行中断返回指令(RETI)之前,中断请求信号必须撤除,否则将会再一次引起中断而出错。 中断请求撤除的方式有三种,即: 1 由单片微机内部硬件自动复位(定时器/计数器中断请求的撤消 )。 对于定时器计数器T0、T1 的溢出中断和采用跳变触发方式的外部中断请求,在CPU响应中断后,由内部硬件自动清除中断标志TF0和TF1、IE0和IE1,而自动撤除中断请求。(硬件置位,硬件清除)。,2采用外加 硬件结合软件清除中断请求(外部中断请求的撤消) (1)跳沿方式外部中断请
25、求的撤消是自动撤消的。 (2)电平方式外部中断请求的撤消: 对于采用电平触发方式的外部中断请求,中断标志的撤消是自动的,但中断请求信号的低电平可能继续存在,在以后机器周期采样时又会把已清“0”的IE0、IE1标志重新置“1”,再次申请中断。为保证在CPU响应中断后、执行返回指令前,撤除中断请求,必须在中断响应后把中断请求信号引脚从低电平强制改变为高电平。可在系统中加入如图所示电路。,从上图中可看到,用D触发器锁存外部中断请求低电平,并通过触发器输出端Q送或,所以D触发器对外部中断请求没有影响。但在中断响应后,为了撤消低电平引起的中断请求,可利用D触发器的直接置位端SD来实现。采用80C51的一
26、根I/O口线来控制SD端。只要在SD端输入一个负脉冲即可使D触发器置“1”,从而撤消了低电平的中断请求信号。(硬件置位,硬、软件结合清除) 。只要P1.0端输出一个负脉冲就可以使D触发器置“1”,从而撤消了低电平的中断请求信号。 所需的负脉冲可通过在中断服务程序中增加如下两条指令得到: ORL P1,#01H ;P1.0为“1”,SD无效 ANL P1,#0FEH ;P1.0为“0”,Q置1(SD为直接置位端,低 电平有效) 使P1.0输出一个负脉冲,其持续时间为二个机器周期,足以使D触发器置位,撤除低电平中断请求。第二条指令是必要的,否则D触发器的Q端始终输出“1”,无法再接受外部中断请求。
27、 电平方式的外部中断请求信号的完全撤消,是通过软硬件相结合的方法来实现的。,3应用软件清除相应标志(串行口中断请求的撤消) 对于串行接收发送中断请求和80C52中的定时器计数器T2的溢出和捕获中断请求,在CPU响应中断后,必须在中断服务程序中应用软件清除RI、TI、TF2和 EXF2这些中断标志,才能撤除中断。(硬件置位,软件清除) 。 响应串行口的中断后,CPU无法知道是接收中断还是发送中断,还需测试这两个中断标志位的状态,以判定是接收操作还是发送操作,然后才能清除。所以串行口中断请求的撤消只能用软件清除 CLR TI ;清TI标志位 CLR RI ;清RI标志位,5.1.9 中断服务程序的
28、设计 在MCS-51单片微机中,需要用软件对以下5个内容进行设置: 中断服务程序入口地址的设定。 某一中断源中断请求的允许与禁止。 对于外部中断请求,还需进行触发方式的设定。 各中断源优先级别的设定。 CPU开中断与关中断。 中断程序一般包含中断控制程序和中断服务程序两部分。 中断控制程序即中断初始化程序,一般不独立编写,而是包含在主程序中,根据上述的5点通过编写几条指令来实现。,一、中断服务程序设计的任务 基本任务: (1)设置中断允许控制寄存器IE。 (2)设置中断优先级寄存器IP。 (3)对外中断源,是采用电平触发还是跳沿触发。 (4)编写中断服务程序,处理中断请求。 前2条一般放在主程
29、序的初始化程序段中。 例3 假设允许外部中断0中断,并设定它为高级中断,其它中断源为低级中断,采用跳沿触发方式。在主程序中编写如下程序段: SETB EA ;CPU开中断 SETB ET0 ;允许外中断0产生中断 SETB PX0 ;外中断0为高级中断 SETB IT0 ;外中断0为跳沿触发方式,二、采用中断时的主程序结构 常用的主程序结构如下: ORG 0000H LJMP MAIN ORG 中断入口地址 LJMP INT ORG XXXXH MAIN:主 程 序 INT:中断服务程序 中断服务程序是一种为中断源的特定事态要求服务的独立程序段,以中断返回指令RETI结束。在程序存储器中设置有
30、六个固定的单元作为中断矢量,即是0003H、000BH、0013H、00lBH、0023H及002BH单元。 一般将中断服务程序存放在程序存储器的其它部位,而在中断矢量中安排一条无条件转移指令。这样,当CPU响应中断请求后,转入中断矢量执行无条件转移指令,再转向实际的中断服务子程序的入口。,三、中断服务程序的流程 中断响应很突出的一点是它的随机性。下面针对中断服务程序在编写中的几个问题进行说明。 保护断点和现场、恢复断点和现场 中断服务程序和子程序一样,在调用和返回时,也有一个保护断点和现场、恢复断点和现场的问题。 在中断响应过程中,断点的保护主要由硬件电路自动实现。它将断点压入堆栈,再将中断
31、服务程序的入口地址送入程序计数器PC,使程序转向中断服务程序,即为中断源的请求服务。,三、中断服务程序的流程 所谓现场是指中断发生时单片微机中存储单元、寄存器、特殊功能寄存器中的数据或标志位等。在MCS-51中,现场一般包括累加器 A、工作寄存器 R0R7以及程序状态字PSW等。保护的方法可以有以下几种: 通过堆栈操作指令PUSH direct; 通过工作寄存器区的切换; 通过单片微机内部存储器单元暂存。 现场保护一定要位于中断服务程序的前面。 在结束中断服务程序返回断点处之前要恢复现场,与保护现场的方法相对应。而恢复断点也是由硬件电路自动实现的,中断服务程序的最后一条指令必须是RETI指令。
32、,三、中断服务程序的流程 对中断的控制 MCS-51单片微机具有多级中断功能(即多重中断嵌套),为了不至于在保护现场或恢复现场时,由于CPU响应其它中断请求,而使现场破坏。一般规定,在保护和恢复现场时,CPU不响应外界的中断请求,即关中断。因此,在编写程序时,应在保护现场和恢复现场之前,关闭CPU中断;在保护现场和恢复现场之后,再根据需要使CPU开中断。 对于重要中断,不允许被其它中断所嵌套。除了设置中断优先级外,还可以采用关中断的方法,彻底屏蔽其它中断请求,待中断处理完之后再打开中断系统。,例4 根据上图的中断服务程序流程,编出中断服务程序。假设,现场保护只需将PSW和A的内容压入堆栈中保护
33、。典型的中断服务程序如下: INT: CLR EA ;CPU关中断 PUSH PSW ;现场保护 PUSH ACC ; SETB EA ;CPU开中断 中断处理程序段 CLR EA ;CPU关中断 POP ACC ;现场恢复 POP PSW SETB EA ;CPU开中断 RETI ;中断返回,恢复断点,几点说明: (1)现场保护仅涉及到PSW和A的内容,如还有其它需保护的内容,只需要在相应的位置再加几条PUSH和POP指令即可。 (2) “中断处理程序段”,应根据任务的具体要求,来编写。 (3)如果本中断服务程序不允许被其它的中断所中断。可将“中断处理程序段”前后的“SETB EA”和“CL
34、R EA”两条指令去掉。 (4)中断服务程序的最后一条指令必须是返回指令RETI。,中断应用前后要做的几项工作,中断前 开中断允许:必须 选择优先级:根据需要选择,可有/可无 设置控制位:INTx触发方式(ITx) TxTCON,TMOD,TRx,初值 RI/TISCON,REN,RB8,TB8,中断后 进入中断服务后:保护现场,关中断, 退出中断服务前:恢复现场,开中断,设Tx的初 值,清TI/RI, 中断服务程序的最后一条指令必是 RETI,回顾,中断源 中断申请 开放中断 保护现场 中断服务 恢复现场 中断返回,中断涉及的几个环节与应用步骤,中断应用的步骤: 、即中断向量的指定设置; 、
35、中断相关寄存器的设定;包括开启中断开关(IE寄存器)、中断优先级的设定(IP寄存器)、中断信号的设定(TCON寄存器); 、中断子程序设计。子程序的最后指令是 “RETI”。,回顾,中断处理程序格式,INTT0: PUSH ACC PUSH DPH PUSH DPL PUSH PSW 中断源服务 POP PSW POP DPL POP DPH POP ACC RETI,保护现场,恢复现场,回顾, 中断请求: 定时和外中断控制寄存器TCON; 串行控制寄存器SCON; 中断使能控制寄存器IE; 中断优先级控制寄存器IP。,MCS-51单片机中涉及中断控制的有3个方面4个特殊功能寄存器:,回顾,中
36、断设定方法,IE寄存器、IP寄存器、TCON寄存器、SCON寄存器的设定,可以利用MOV指令、SETB指令、CLR指令来实现。,、MOV IE,#10000101B 、SETB IE.7 SETB IE.2 SETB IE.0,例:若开启“总开关”、“INT0开关”、“INT1开关”。,、MOV 0A8H,#85H 、SETB EA SETB EX0 SETB EX1,回顾,例:若要把“INT1”中断的优先级提高。,、MOV IP,#00000100B 、SETB IP.2 、MOV 0B8H,#04H 、SETB PX1,例:若想“INT1”中断拟采用负缘触发的信号。,、MOV Tcon,#
37、00000100B 、SETB Tcon.2 、MOV 088H,#04H 、SETB IT1,“中断子程序”就是一种子程序,其与一般子程序的最大差异是其的返回指令是“RETI”,而不是“RET”。,回顾,中断应用实例:中断_int0之单向,单片机的P2口接个LED发光二极管,P3.2引脚保持高电平,另外接一按钮开关。主程序运行时LED同时闪烁,若按开关,进入中断状态单灯左移3次。,回顾,中断应用实例:中断_int0之单向,单片机的P2口接个LED发光二极管,P3.2引脚保持高电平,另外接一按钮开关。主程序运行时LED同时闪烁,若按开关,进入中断状态单灯左移3次。 ;一开始即允许所有中断产生,
38、并特意指明启用INT0中断 ORG 0000H ;源程序从0地址开始 JMP START ;跳过中断向量 ORG 0003H ;INT0中断向量 JMP INT_0 ;执行INT_0中断子程序 ;= START: MOV IE,#10000001B ;打开总开关与EX0分路开关 MOV SP,#30H ;设定堆栈地址 SETB IT0 ;采用负触发信号,回顾,中断应用实例:中断_int0之单向,MOV A,#0 ;将ACC清零 LOOP: MOV P2,A ;输出到LED CALL DELAY ;调用延时子程序 CPL A ;将A的内容反相 JMP LOOP ;=INT0中断子程序开始= IN
39、T_0: PUSH ACC ;累加器入出栈时不能用简称A PUSH PSW ;将程序状态控制字入栈 SETB RS0 ;切换到RB1,回顾,中断应用实例:中断_int0之单向,;=外层循环开始 MOV R0,#3 ;设定三次循环 INT_LOOP0: ;=第二层循环1定义开始 MOV A,#0FEH ;单灯左移初始值 MOV R1,#8 ;设定八次左移 INT_LOOP1: MOV P2,A ;输出LED 到P2口 CALL DELAY ;调用延时子程序 RL A ;将A的内容左移 DJNZ R1,INT_LOOP1 ;=第二层循环1结束,中断应用实例:中断_int0之单向,;=第二层循环2定
40、义开始 MOV A,#07FH ;单灯右移初始值 MOV R1,#8 ;设定八次右移 INT_LOOP2: MOV P2,A ;输出LED 到P2口 CALL DELAY ;调用延时子程序 RR A ;将A的内容右移 DJNZ R1,INT_LOOP2 ;=第二层循环2结束 DJNZ R0,INT_LOOP0 ;=外层循环结束 POP PSW,中断应用实例:中断_int0之单向,POP ACC ;累加器入出栈时不能用简称A RETI ;返加主程序 ;= ;INT0中断子程序结束 ;= DELAY: MOV R7,#200 D1: MOV R6,#250 DJNZ R6,$ DJNZ R7,D1
41、 RET END,中断应用实例:中断_int0之单向,该程序的C51代码如下: #include #include sbit k1=P32; void delay_ms(unsigned int xms); /ms级延时子程序 void key_scan() interrupt 0 /使用了外部中断0的键盘扫描子函数。 int i=0,j=0,num; if(k1=0) /有键按下吗?(k1=0 ?) delay_ms(10); /延时消抖,中断应用实例:中断_int0之单向,if(k1=0) /确实是否有键按下 for(j=0;j3;j+) num=0xfe; for(i=0;i8;i+)
42、P2=num; delay_ms(600); num=_crol_(num,1); num=0x7f; for(i=0;i8;i+),中断应用实例:中断_int0之单向, P2=num; delay_ms(600); num=_cror_(num,1); P2=0x0; delay_ms(600); while(!k1); /等待按键放开 void main() ,中断应用实例:中断_int0之单向,TCON=0x01; /打开外部中断0,并设置为下降沿触发 IE=0x81; /开总中断 while(1) P2=0xff; delay_ms(600); P2=0x0; delay_ms(600
43、); ,中断应用实例:中断_int0之单向,void delay_ms(unsigned int xms) /ms级延时子程序 unsigned int x,y; for(x=xms;x0;x-) for(y=130;y0;y-); ,5.2 51单片机的定时计数器 我们通常采用以下三种方法来实现定时或计数: 1、硬件定时(采用时基电路定时) 硬件定时是指由硬件电路来实现定时的功能 。 例如采用555电路,外接必要的元器件(电阻和电容),即可构成硬件定时电路。但在硬件连接好以后,定时值与定时范围不能由软件进行控制和修改,即不可编程,且定时时间容易漂移。 2、软件定时 软件定时是执行一段循环程序
44、来进行时间延时,优点是无额外的硬件开销,时间比较精确。但占用了CPU的时间,降低了CPU的利用率。例如延时程序。 3、可编程定时/计数器 最方便的办法是利用单片机内部的定时器/计数器。结合了软件定时精确和硬件定时电路独立的特点。由于纯软件要占用CPU,而纯硬件又欠灵活。 定时/计数器是单片机系统一个重要的部件,其工作方式灵活、编程简单、使用方便,可用来实现定时控制、延时、频率测量、脉宽测量、信号发生、信号检测等。此外,定时/计数器还可作为串行通信中波特率发生器。,5.2 51单片机的定时计数器 T0和T1有都具有以下2种工作模式: (1)计数器工作模式 对外来脉冲进行计数,T0(P3.4)和T
45、1(P3.5)为计数脉冲输入端,等计数输入引脚的脉冲发生负跳变时,计数器加1。 定时/计数器作为计数器时,外部事件脉冲必须从规定的引脚输入。且外部脉冲的最高频率不能超过时钟频率的1/24。 (2)定时器工作模式 通过计数片内脉冲来实现定时功能:每个机器周期产生1个计数脉冲,即每经过1个机器周期的实践,计数器加1。 MCS-51的两个可编程的定时器/计数器均有4种工作方式(方式0-方式3)。 用户通过对相应的特殊功能寄存器编程,可以选择定时器/计数器的2种工作模式和4种工作方式。,71,定时器/计数器的工作原理概述,计数器输入的计数脉冲源 1、系统的时钟振荡器输出脉冲经12分频后产生; 2、T0
46、或T1引脚输入的外部脉冲源。 计数过程 每来一个脉冲计数器加1,当加到计数器为全1(即FFFFH)时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时器/计数器中断允许时)。如果定时器/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。,设置为定时应用时 用作定时器:此时设置为定时器模式,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t 。 设置为计数应用时 用作计数器:此时设置为计数器模式,外部事件计数脉冲由T0(P3.
47、4)或T1(P3.5)引脚输入到计数器。每来一个外部脉冲,计数器加1。但单片机对外部脉冲有基本要求:脉冲的高低电平持续时间都必须大于1个机器周期。,定时与计数都是利用计数实现!,定时器/计数器的工作原理概述,5.2.1 定时器/计数器的结构 定时器/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成:TH1(地址为8DH)、TL1(地址为8BH)和TH0(地址为8CH)、TL0(地址为8AH)寄存器。 复位后,所有这四个寄存器全部清零。 TMOD(工作方式寄存器):选择定时器/计数器T0、T1的工作模式和工作方式。 TCON(定时器/计数器控制寄存器):控制T0、T1的启动和停止计数,同时包含了T0、T1的状态。 单片机复位时,TMOD、TCON都清0。,5.2.1 定时器/计数器的结构,1 工作方式控制寄存器TMOD TMOD(工作方式寄存器):选择定时器/计数器T0、T1的工作模式和工作方式,字节地址为89H,不能位寻址。 8位分为两组,高4位控制T1,低4位控制T0。 (1)GATE门控位 0:以运行控制位TRX(X=0,1)来启动定时器/计数器运行。 1:用外中断引脚(INT0*或INT1*)上的高电平和TRX两个条件来启动定时器/计数器运行。
链接地址:https://www.31doc.com/p-2606208.html