![第5章-中断与定时[157页]课件_第1页](http://file4.renrendoc.com/view/72a17e7338dc3576e55a50c2fd34396d/72a17e7338dc3576e55a50c2fd34396d1.gif)
![第5章-中断与定时[157页]课件_第2页](http://file4.renrendoc.com/view/72a17e7338dc3576e55a50c2fd34396d/72a17e7338dc3576e55a50c2fd34396d2.gif)
![第5章-中断与定时[157页]课件_第3页](http://file4.renrendoc.com/view/72a17e7338dc3576e55a50c2fd34396d/72a17e7338dc3576e55a50c2fd34396d3.gif)
![第5章-中断与定时[157页]课件_第4页](http://file4.renrendoc.com/view/72a17e7338dc3576e55a50c2fd34396d/72a17e7338dc3576e55a50c2fd34396d4.gif)
![第5章-中断与定时[157页]课件_第5页](http://file4.renrendoc.com/view/72a17e7338dc3576e55a50c2fd34396d/72a17e7338dc3576e55a50c2fd34396d5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章 中断与定时单片机技术及应用授课人:庄友谊第5章 中断与定时 5.1 MCS-51单片机的中断系统5.4 简易数字频率计设计案例及Proteus仿真 5.3 中断与定时器/计数器综合应用举例5.2 MCS-51单片机定时器/计数器5.1 MCS-51单片机的中断系统5.1.1 单片机中断技术概述:1、CPU与外设数据传送方式及中断的基本概念:(1)无条件传送方式:CPU直接与外设进行数据传送。缺点:只适用于总是处于准备好状态的外设常见的用直接传送方式的简单外设有: 发光二极管、数码管、开关、继电器、步进电机等P1.0P1.1P1.2P1.3P1.4P1.5.89C51+5V红绿黄3003
2、00300(2)查询方式:CPU在进行数据传送前,先检查设备状态。例:查询方式的红外防盗报警系统缺点:CPU效率低,数据传送的实时性差准备好?N数据传送Y读入状态(3)中断方式: CPU不主动查询,只执行自己的程序,当事件发生提出要求CPU进行处理的请求时,若CPU准予请求,则CPU暂时中断正在运行的程序,转而去处理该事件,待处理完毕再返回被中断的程序继续执行。中断请求主程序RETI 中断服 务程序中断方式下程序运行流程:查询方式下程序运行流程:CPU主动查询CPU被动等待中断事件发生和处理是在程序中设计好的事件发生是随机的,事件处理由中断服务程序完成准备好?N事件处理Y读入状态效率低,实时性
3、差效率高,实时性好2、中断的优点及功能:(1)解决速度矛盾(2)实现并行工作(分时)、提高CPU效率(3)实现实时处理、应对突发事件中断功能强弱是体现计算机性能优劣的一个重要标志过压温度浓度CPU外设1外设2外设3CPU中断处理(4)故障处理3、有关中断的几个概念:(2) 中断源:产生中断的外部和内部事件。(1)中断请求:外设向CPU发出的“中断申请信号” 。通常中断源有:请求CPU外设键盘打印机磁盘掉电定时器另外,还有为调试程序而设的中断,如单步、断点设置等。外设请求输入输出数据,报告故障等事件掉电、硬件故障、软件错误、非法操作、 定时时间到等(5) 中断优先级: 当有几个中断源同时申请中断
4、时,或者CPU正在处理某中断源服务程序时,又有另一中断源申请中断,CPU按照一定的优先规则对这些中断进行处理,这样的处理规则称为中断优先级。(3) 中断响应:(4) 中断服务程序:CPU由于中断响应,为处理该事件而执行的计算机程序。CPU由于接收到中断请求信号,而去进行相应处理的操作。中断请求中断请求RETIRETI主程序中断系统能实现中断嵌套中断服务程序4、中断过程:中断申请中断响应中断处理中断返回中断判优1、中断源与中断向量MCS-51中有5个中断源: MCS-52有6个中断源,即增加了一个定时器计数器溢出中断源T2。两个内部的定时/计数器溢出中断源T0和T1一个内部的串行口发送或接收中断
5、源。两个外部中断源INT0和INT1每一个中断源都能被程控设置为高优先级或低优先级。5.1.2 MCS-51单片机的中断系统2、MCS-51中断系统结构:各单路开关总开关IP寄存器实行两级控制SCON寄存器 EA总允许位中断源标志位查询机构高优先级低优先级中断入口中断源标志位中断入口中断源标志位IE0EX0TF0IE1TF1TIESET1EX1ET0RI+源允许位优先级外部中断 请求0外部中断 请求1定时器/计数器0定时器/计数器1串行口TRINT0INT1RXDTXDT1T0中断标志位IE寄存器TCON寄存器与中断系统相关的特殊功能寄存器有:中断源寄存器:TCON(88H),SCON(98H
6、) 中断允许控制寄存器IE(A8H) 中断优先级控制寄存器IP(B8H) 实行两级控制,即以EA位作为总控制位,以各中断源的中断允许位作为分控制位。只有当总控制位EA有效时,即开放中断系统,这时各分控制位才能对相应中断源分别进行开放或禁止。各中断允许控制位=0,开关断开各中断允许控制位=1,开关接通 MCS-51单片机在CPU响应中断时,由硬件直接产生一个固定的地址,称为矢量地址,由矢量地址指出每个中断源设备的中断服务程序的入口。3、 中断向量(矢量) 外部中断0 0003H 计时器T0溢出 000BH 外部中断1 0013H 计时器T1溢出 001BH 串行口中断 0023H 计时器 T2/
7、T2EX 002BH MCS-51单片机的 5 个(MCS-52为6个)中断源对应的中断服务程序入口地址中断矢量为: 当CPU识别出某个中断源时,由硬件直接给出一个与该中断源相对应的矢量地址,从而转入各自中断服务程序。1、中断标志:(1)TCON(Timer Control): 定时器/计数器的中断标志控制寄存器,锁存外部中断请求标志,其字节地址为88H 。 位地址8FH8EH8DH8CH8BH8AH89H88H符号TF1TR1TF0TR0IE1IT1IE0IT0D7 D6 D5 D4 D3 D2 D1 D0 INT0,INT1,T0 及 T1的中断标志存放在 TCON(定时器计数器控制)寄存
8、器中; 串行口的中断标志存放在 SCON(串行口控制)寄存器中。5.1.3 中断控制B、IE0、IE1(external interrupt flag)A、IT0、IT1 (interrupt trigger mode):当ITi=0当ITi=1INT0INT1ITi=1 为负跳沿触发方式;ITi 可由软件置“1”或清“0”。ITi=0 为低电平触发方式;当ITi=0 时,若INTi=0,则由硬件对IEi置“1” ,否则IEi清“0”当ITi=1 时,若INTi=,则由硬件对IEi置“1” ,否则IEi清“0” IEi=1表示外部正在向CPU申请中断,CPU响应中断后由硬件自动清0外部中断请求
9、触发方式外部中断标志,当有外部中断请求时,该位置“1”0C、 TF0、TF1(Timer overflow interrupt flag) 当定时器/计数器最高位进位时,由硬件对TFi置“1” ,表示正在向CPU申请中断,CPU响应中断后, TFi由硬件自动清“0” 。定时器溢出中断标志D、 TR0、TR1: 定时器运行控制位。 =1 启动计数; =0 停止计数(2)SCON (Serial port Control) :位地址9FH9EH9DH9CH9BH9AH99H98H符号SM0SM1SM2RENTB8RB8TIRI低两位锁存接收中断源RI和发送中断源TI。TI(SCON1):串行口发送
10、中断源。发送完一帧,由硬件置位。RI(SCON0):串行口接收中断源。接收完一帧,由硬件置位。D7 D6 D5 D4 D3 D2 D1 D0串行口控制寄存器,字节地址为98H响应中断后,必须用软件清0。IP(Interrupt priority):中断优先权控制寄存器(1)PS:串行口中断优先级控制位(2)PT0、PT1:定时器/计数器中断优先级控制位(3)PX0、PX1:外部中断优先级控制位 上述中:“1”表示高优先级,“0”表示低优先级。位地址BFHBEHBDHBCHBBHBAHB9HB8H符号 PSPT1PX1PT0PX0D7 D6 D5 D4 D3 D2 D1 D0设置中断优先权,字节
11、地址为B8H。 系统复位后IP寄存器中各位均为0,即此时全部设定为低中断优先级。3、 中断优先级控制 在同一优先级内有一个由内部查询序列确定的笫二个优先级结构。其排列如下: 中断源中断优先级1、 外部中断02、 定时器T0中断3、外部中断14、定时器T1中断5、串行口中断6、定时器T2中断最高最低对发生多个中断申请时: 不同优先级的中断同时申请 先高后低 相同优先级的中断同时申请 按序执行 正处理低优先级中断又接到高级别中断 高打断低 正处理高优先级中断又接到低级别中断 高不理低中断优先级处理原则:(P.131)中断源提出了中断申请;CPU响应中断的条件:在现行指令结束后才响应中断;若正在执行
12、RETI,或正在访问IE或IP寄存器,须执行完上述指令,并再执行一条指令后方能响应中断。中断是开放的或者是允许的;没有同级的中断或更高级别的中断正在处理; CPU 在每个机器周期的S5P2期间,会自动查询各个中断申请标志位,若查到某标志位被置位,将启动中断机制。CPU识别中断申请的依据:Tc=1/fosc Ts=6Tc Tm=12Tc =6TsTcTsTmTmS5S6S4S3S2S5S6S4S3S2S15.1.4 外部中断中断响应过程1、 中断的响应过程:采样并置标志查询标志,转入处理每个周期的S5P2对外部中断采样,并置入相应标志在下一个周期的S6期间按优先级顺序依次进行中断查询若查询到某中
13、断标志为1,从相邻的下一个机器周期的S1状态开始进行中断响应CPU执行硬件LCALL转向相应中断的特定单元,进入中断服务程序 CPU响应中断时先置“1”相应的优先级触发器,然后执行硬件LCALL(压栈与转移),同时清“0”中断请求标志(TI、RI除外)。 (1)关于中断请求采样: 对于外部中断才需要对中断请求信号进行采样,而其他中断源由于中断请求都发生在芯片内部,可以直接置位相应的中断请求标志位,因此不存在中断请求采样问题。 当外部中断为边沿触发方式。CPU在每一个机器周期的S5P2期间对和引脚进行采样,若在连续两个机器周期采样到先高后低的电平变化,则认为有中断请求,将IE0或IE1置1;否则
14、认为没有中断请求,IE0或IE1继续为0。 当外部中断为电平触发方式时,CPU在每一个机器周期的S5P2期间对引脚进行采样。若测得为低电平,则认为有中断请求,将外部中断请求标志位IE0或IE1置1;否则,则认为没有中断请求或中断请求已撤除,将IE0或IE1清0。几点说明:(2)关于中断查询与响应: 中断查询是指CPU测试各中断请求标志位的状态,以确定有没有中断请求发生以及是哪一个中断请求。 在每一个机器周期的最后一个状态S6,按优先级顺序对中断请求标志位进行查询。如果查询到有标志位1,则表明有中断请求发生,接着就从下一个机器周期开始进行中断响应。 当中断请求被响应时,由硬件生成长调用指令(LC
15、ALL),将当前的PC值自动压栈保护,但PSW寄存器的内容不压栈,然后将对应的中断入口地址装入PC,程序转向中断服务子程序,处理被响应的中断。(3) 中断服务 CPU响应中断结束后转入中断服务程序的入口。从中断服务子程序的第一条指令开始到返回指令为止,这个过程称为中断处理或中断服务。 一般情况下,中断处理包括两部分内容:现场保护和中断源服务。 现场通常有PSW、通用寄存器、专用寄存器等。如果在中断服务程序中要用这些寄存器,则在进入中断服务之前应将它们的内容保护起来称保护现场;同时在中断结束,执行RETI指令之前应恢复现场。中断源服务是针对中断源的具体要求进行处理。(4)中断返回 中断处理程序的
16、最后一条指令是中断返回指令RETI。它的功能是将断点弹出送回PC中,使程序能返回到原来被中断的程序继续执行。 中断响应是有条件的,在接受中断申请时,如遇下列情况之一时,硬件生成的长调用指令“LCALL”将被封锁: CPU正在执行同级或高一级的中断服务程序中。 查询中断请求的机器周期不是执行当前指令的最后一个周期。 当前正在执行RETI指令或执行对IE、IP的读写操作指令。 MCS-51中断系统规定:在当前指令执行完毕后,才能响应中断。 中断服务程序由中断矢量地址开始,直至遇到RETI。 执行RETI,一是撤销中断申请,弹出断点地址进入PC,先弹出高位地址,后弹出低位地址,同时堆栈指针SP减2,
17、恢复原程序的断点地址执行;二是恢复中断触发器原先状态。中断的执行过程与调用子程序有许多相似点: 都是中断当前正在执行的程序,转去执行子程序或中断服务程序。 都是由硬件自动地把断点地址压入堆栈,然后通过软件完成现场保护。 执行完子程序或中断服务程序后,都要通过软件完成现场恢复,并通过执行返回指令,重新返回到断点处,继续往下执行程序。 二者都可以实现嵌套,如中断嵌套和子程序嵌套。中断的执行与调用子程序也有一些大的差别: 中断请求信号可以由外部设备发出,是随机的;子程序调用却是由软件编排好的。 中断响应后由固定的矢量地址转入中断服务程序,而子程序地址由软件设定。 中断响应是受控的,其响应时间会受一些
18、因素影响;子程序响应时间是固定的。在单级中断系统中,中断的响应时间为38个机器周期。2、 中断响应时间最短:中断请求标志位查询占1个机器周期,CPU即响应中断,产生硬件长调用LCALL指令,执行这条长调用指令需要2个机器周期。最长:如果CPU正在执行的是RETI指令或访问IP、IE指令,则等待时间不会多于2个机器周期,而中断系统规定把这几条指令执行完必须再继续执行一条指令后才能响应中断,如这条指令恰好是4个机器周期长的指令,再加上执行长调用指令LCALL所需2个机器周期,总共需要8个机器周期。 如果中断请求被前面所列三个条件之一所阻止,不能产生硬件长调用LCALL指令,那么所需的响应时间就更长
19、些。如果正在处理同级或优先级更高的中断,那么中断响应的时间还需取决于处理中的中断服务程序的执行时间。5.1.5 中断处理流程 CPU响应中断请求,转向中断服务程序执行,在其执行中断返回指令(RETI)之前,中断请求信号必须撤除,否则将会再一次引起中断而出错。5.1.6 中断请求的撤除中断请求撤除的方式有三种:1、由单片微机内部硬件自动复位: 对于T0、T1 的溢出中断和采用跳变触发方式的外部中断请求,在CPU响应中断后,由内部硬件自动清除中断标志TF0和TF1、 IE0和IE1,而自动撤除中断请求。2、应用软件清除相应标志: 对于串行接收发送中断请求,在CPU响应中断后,必须在中断服务程序中应
20、用软件清除RI和 TI中断标志。3、外部中断采用外加硬件结合软件清除中断请求: 对于采用电平触发方式的外部中断请求,中断标志的撤消是自动的,但中断请求信号的低电平可能继续存在,在以后机器周期采样时又会把已清“0”的IE0、IE1标志重新置“1”,再次申请中断。(1)硬件电路:原理:在中断响应后,利用直接置位端SD来撤消低电平引起的中断请求。采用MCS-51的一根I/O口线来控制SD端。ANL P1,#0FEH ;Q置1(SD为直接置位端,低电平有效)ORL P1,#01H ;SD无效,准备接受下一次中断请求(2)软件:5.1.7 中断编程 中断程序包括中断控制程序和中断服务程序两部分。 MCS
21、-51共有5个中断源,由4个特殊功能寄存器TCON、SCON、IE和IP进行管理和控制。在MCS-51中,需要用软件对以下5个内容进行设置: 中断服务程序入口地址的设定。 某一中断源中断请求的允许与禁止。 对于外部中断请求,还需进行触发方式的设定。 各中断源优先级别的设定。 CPU开中断与关中断。 中断控制程序即中断初始化程序,一般包含在主程序中,根据上述的5点通过编写几条指令来实现。例. 试编写设置外部中断INT0和串行接口中断为高优先级,外部中断INT1为低优先级。屏蔽T0 和T1中断请求的初始化程序段。 将中断请求优先级寄存器IP的第0、4位置“l”,其余位置“0”。将中断请求允许寄存器
22、的第0、2、4、7位置“l”,其余位置“0” 。位地址AFHAEHADHACHABHAAHA9HA8H符号EA ESET1EX1ET0EX0位地址BFHBEHBDHBCHBBHBAHB9HB8H符号 PSPT1PX1PT0PX0IEIP1、汇编程序:编程如下:ORG0000HSJMPMAINORG0003HLJMPINT0INT;设外部中断/INT0中断矢量 ORG 0013HLJMPINT1INT;设外部中断/INT1中断矢量ORG0023HLJMPSIOINT;设串行口中断矢量ORG0030HMAIN:MOV IP, #00010001B ;设外部中断INT0和 ;串行口中断为高优先级MO
23、V IE, #10010101B ;允许INT0、INT1、;串行口中断,开CPU中断中断响应很突出的一点是它的随机性。 保护断点和现场、恢复断点和现场 在中断响应过程中,断点的保护主要由硬件电路自动实现。 所谓现场是指中断发生时单片微机中存储单元、寄存器、特殊功能寄存器中的数据或标志位等。保护的方法可以有以下几种: 通过堆栈操作指令PUSH direct; 通过工作寄存器区的切换; 通过单片微机内部存储器单元暂存。 现场保护一定要位于中断服务程序的前面,在中断服务程序结束之前要恢复现场,中断服务程序的最后一条指令必须是RETI指令。 对中断的控制 MCS-51单片机具有多级中断功能(即多重中
24、断嵌套),为了不至于在保护现场或恢复现场时,由于CPU响应其它中断请求,而使现场破坏。一般规定,在保护和恢复现场时,CPU不响应外界的中断请求,即关中断。因此,在编写程序时,应在保护现场和恢复现场之前,关闭CPU中断;在保护现场和恢复现场之后,再根据需要使CPU开中断。 对于重要中断,不允许被其它中断所嵌套。除了设置中断优先级外,还可以采用关中断的方法,彻底屏蔽其它中断请求,待中断处理完之后再打开中断系统。2、C51中断服务函数: 由于标准C没有处理单片机中断的定义,为直接编写中断服务程序,C51编译器对函数的定义进行了扩展,增加了一个扩展关键字interrupt,使用该关键字可以将一个函数定
25、义成中断服务函数。由于C51编译器在编译时对声明为中断服务程序的函数自动添加了相应的现场保护、阻断其他中断、返回时恢复现场等处理的程序段,因而在编写中断服务函数时可不必考虑这些问题,减轻了用汇编语言编写中断服务程序的繁琐程度,而把精力放在如何处理引发中断请求的事件上。函数类型 函数名(参数)interrupt n using m /中断服务程序 说明: 1、 n是中断源编号 (可为031,04对应着51的5个中断, 其它值预留); 2、m是使用的寄存器组号,默认是Bank 0; 3、当调用函数时,SFR的ACC、B、DPTR、PSW自动入栈; 4、不使用寄存器组切换,中断所用到的寄存器自动入栈
26、; 5、中断返回(RETI)前,所有寄存器自动出栈;中断服务函数的一般形式为 :C51中断号与中断向量 中断号 n中 断 源中断向量 8n+30外部中断 00003H1定时器 0000BH2外部中断 10013H3定时器 1001BH4串行口0023H例、外中断1的中断服务函数书写如下:void int1( ) interrupt 2 using 0/*中断号n=2,选择0区工作寄存器区*/ 关键字using和关键字interrupt都不允许用于外部函数。编写AT89S51中断程序时,应遵循以下规则:(1)中断函数没有返回值,如果定义了一个返回值,将会得到不正确的结果。因此建议在定义中断函数时
27、,将其定义为void类型,以明确说明没有返回值。(2)中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。 (3)在任何情况下都不能直接调用中断函数,否则会产生编译错误。因为中断函数的返回是由指令RETI完成的。RETI指令会影响51单片机中的硬件中断系统内的不可寻址的中断优先级寄存器的状态。如果在没有实际中断请求的情况下,直接调用中断函数,也就不会执行RETI指令,其操作结果有可能产生一个致命的错误。(4)如果在中断函数中再调用其他函数,则被调用的函数所使用的寄存器区必须与中断函数使用的寄存器区不同。例1:如图所示,单片机上电,程序运行后发光二极管D4点亮,按下P3.2
28、所接的按键K,D4灭掉,再按按键K,D4又点亮,循环往复。5.1.8 外部中断举例 ORG 0000H SJMP MAIN;上电,转向主程序 ORG 0003H;外部中断0入口地址 SJMP INSER;转向中断服务程序 ORG 0030H ;主程序MAIN: SETB EX0 ;允许外部中断0中断 SETB IT0 ;选择边沿触发方式 SETB EA ;CPU开中断 CLR P1.0HERE:SJMP HERE ;等待中断 ORG 0200H ;中断服务程序INSER:CPL P1.0 RETI ;中断返回 END#include sbit P1_0=P10;void main( )/*主函
29、数*/EX0=1; /*外部中断0中断允许*/IT0=1; /*选择外部中断0为跳沿触发方式*/EA=1;/*总中断允许*/ P1_0=0; /* P1.0=0,LED亮*/ while(1);void xint0( ) interrupt 0 using 0 /外中断0的中断服务函数 P1_0= ! P1_0; ORG 0000H SJMP MAIN ORG 0003H SJMP INSER ORG 0030HMAIN: SETB EX0 SETB IT0 SETB EA CLR P1.0HERE:SJMP HERE ORG 0200HINSER:CPL P1.0 RETI END#incl
30、ude sbit P1_0=P10;void main( )EX0=1;IT0=1; EA=1; P1_0=0; while(1);void xint0( ) interrupt 0 using 0 P1_0= ! P1_0; 例2:单片机上电,单灯按一定的频率循环,一旦按下P3.2所接的按键,发光二极管全亮,2秒钟后,单灯继续原来的循环。1、流水灯的源程序2、流水灯的源程序+中断初始化程序中断服务程序及延时子程序3、 用查询程序实现上述任务4、从INT0输入,并采用了去抖动电路。1、流水灯的源程序 ORG 0000H SJMP MAIN ORG 0030H ;主程序MAIN: MOV A,
31、#0FEH MOV R5, #4OUTPUT:MOV P1,A RL A LCALL Delay DJNZ R5, Output LJMP MAINDelay: MOV R6, #250 MOV R7, #200Dela: DJNZ R7, Dela DJNZ R6, DelaRETEND开始设置初始值设移位次数数据输出左移一位延时100ms移位完 成?是否主程序框图#include void delay(int i) int j,k; for(j=0;ji;j+) for(k=0;k(8-n); b=cn; result=a|b; return(result);main() unsigned
32、 char n; while(1) for(n=0, P1=0 xFE;n8;n+) delay(100); P1 = RL(0 xFE,n); 2、流水灯的源程序+中断初始化程序 ORG 0000H SJMP MAIN;上电,转向主程序 ORG 0003H;外部中断0入口地址 AJMP INSER;转向中断服务程序 ORG 0030H ;主程序MAIN: SETB EX0 ;允许外部中断0中断 SETB IT0 ;选择边沿触发方式 SETB EA ;CPU开中断MAIN1: MOV A, #0FEH MOV R5, #8Output: MOV P1,A RL A LCALL DEL100MS
33、 DJNZ R5, Output LJMP MAIN1中断服务程序及延时子程序 ORG 0200HINSER:PUSH P1 MOV P1, #00H ACALL DEL2S POP P1 RETIDEL2S: MOV R4, #20LLL:ACALL DEL100MSDJNZ R4, LLLRETDEL100MS:;2502002=100000MOV R6, #250Delay: MOV R7, #200Dela: DJNZ R7, Dela DJNZ R6, DelayRET ENDvoid main(void) unsigned char n; IT0=1; EA=1; EX0=1; w
34、hile(1) for(n=0, P1 = 0 xFE;n8;n+) delay(100); P1 = RL (0 xFE,n); #include void delay(int i) int j,k; for(j=0;ji;j+) for(k=0;k(8-n); b=cn; result=a|b; return(result);void INT_0(void) interrupt 0 using 0 char c; c=P1; P1=0; delay(200); P1=c;开始设置初值数据输出左移一位延时P3.2按下?是否输出00H延时2秒 ORG 0000H SJMP MAIN ORG 0
35、030H MAIN: MOV A, #0FEHOutput: MOV P1,A RL A LCALL Delay JB P3.2, output ;JNB IE0,OUTPUT ; CLR IE0MOV P1,#00HACALL delay2sSJMP output Delay: MOV R6, #0Dela1: MOV R7, #0Dela2: DJNZ R7, Dela2 DJNZ R6, Dela1RETDelay2s: RETEND8位的流水灯+键查询流程图3、 用查询程序实现上述任务void main(void) unsigned char n; while(1) if(!P32)
36、P1=0;delay(2000); else for(n=1, P1 =0 xFE;n8;n+) delay(100); P1 = RL(0 xFE,1); #include sbit P32=P32;void delay(int i) int j,k; for(j=0;ji;j+) for(k=0;k(8-n); b=cn; result=a|b; return(result);例3、在单片机系统的P1口上接有8只LED,LED的阳极接+5V,阴极接P1口的引脚。当P1口某一口线输出为0时,将LED点亮。在外部中断0输入脚P3.2引脚接上拉电阻并接有一只按钮开关K1。用K1按钮来产生外部中断
37、0的输入信号。接口电路如图所示。 要求:将外部中断0设为负跳沿触发。在程序刚启动时,P1口上的8只LED亮。按一次按钮开关K1,使引脚P3.2接地,产生一个外中断0的中断请求,在中断服务程序中,让低4位LED和高4位LED交替闪烁。#include void Delay(unsigned int i)/* 定义延时函数Delay( ), i是形式参数,不能赋初值*/ unsigned int j; for(;i 0;i-) for(j=0;j333;j+);void main( )/*主函数*/ EA=1; /*总中断允许*/EX0=1; /*外部中断0中断允许*/IT0=1; /*选择外部中
38、断0为跳沿触发方式*/ while(1) P1=0; /* P1口的8只LED全亮*/void int0( ) interrupt 0 using 0 /外中断0的中断服务函数 EX0=0;/*禁止外部中断0中断*/P1=0 x0f;/*低4位LED灭,高4位LED亮*/Delay(800) ;/*延时800ms*/P1=0 xf0;/*高4位LED灭,低4位LED亮*/Delay(800); /*延时800ms */EX0=1; /*中断返回前,打开外部中断0中断*/例4、 对下图要求每中断一次,发光二极管显示开关状态#include int0( ) interrupt 0 /*INT0中断
39、函数*/ P1=0 x0f; /*输入端先置1,灯灭*/ P1=4; /* 读入开关状态,并左移四位, 使开关反映在发光二极管上*/ main() EA=1; /*开中断总开关*/ EX0=1; /*允许INT0中断*/ IT0=1; /*下降沿产生中断*/ while(1); /*等待中断*/ 例5、 记录并显示中断次数用C语言编程。方法1:在主程序中判断中断次数,程序如下:#include char i;code char tab16=0 x3f,0 x06,0 x5b,0 x4F,0 x66,0 x6d, 0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39
40、,0 x5e,0 x79,0 x71;xint1( ) interrupt 2 i+; /*计中断次数*/ main() EA=1; EX1=1; IT1=1; i=0;while(1) if(i16) P1=tabi; /*查表,次数送显示*/ else i=0; 方法2:在中断程序中判断中断次数:#include char i;code char tab16=0 x3f,0 x06,0 x5b,0 x4F,0 x66,0 x6d,0 x7d,0 x07, 0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;xint1( ) interrupt 2
41、 i+; if(i15) i=0;main() EA=1; EX1=1; IT1=1; P1=0 x3f; while(1) P1=tabi; /*显示并等待中断*/ ORG 0100HINTP:JB F0, FS CLR P1.0 ;F0=0,关水 CPL F0 RETIFS: SETB P1.0 ;F0=1,放水 CPL F0 RETIENDORG 0003HSJMP MAINORG 0003HLJMP INTPORG 0040HMAIN:CLR P1.0CLR IT0 ;低电平触发SETB PX0 ;高优先级 SETB EA ;开总中断SETB EX0 ;开INT0中断SETB F0主程
42、序例6、水塔问题:例7:分析下图电路及其程序,指出其功能。P1.0P1.7INT1300 ORG 0000H LJMP MAIN ORG 0013H ;中断矢量 LJMP INTMAIN:SETB EA ;开总中断允许“开关” SETB EX1 ;开分中断允许“开关” CLR PX1 ;0 优先级(也可不要此句) SETB IT1 ;边沿触发 MOV B,#01H ;给 B 寄存器赋初值HERE:SJMP HERE ;原地等待中断申请INT:MOV A,B ;自B寄存器中取数 RL A ;左环移一次 MOV B,A ;存回B,备下次取用 MOV P1,A ;输出到P1口 RETI ;中断返回中
43、断服 务程序功能:通过外部中断1,每按一下按钮就申请一次中断,中断服务则是:依次点亮八盏灯中的一盏。 例8、交通灯控制: (1)要求:以P0作为输出口,控制4个双色LED灯(可发红,绿,黄光),模拟交通灯管理。 (2)电路及连线1、96H DR4 DR3 DR2 DR1 DG4 DG3 DG2 DG1 1 0 0 1 0 1 1 0 HL4、HL1 绿 (南北) HL3、HL2 红 (东西)2、69H 0 1 1 0 1 0 0 1 HL4、HL1 红 (南北) HL3、HL2 绿 (东西)3、9FH 1 0 0 1 1 1 1 1 HL4、HL1 暗 (南北) HL3、HL2 红 (东西)
44、6FH 0 1 1 0 1 1 1 1 HL4、HL1 红 (南北) HL3、HL2 暗 (东西)0FH 全红F0H 全绿00H 全黄4、06H 0 0 0 0 0 1 1 0 HL4、HL1 黄 (南北) HL3、HL2 红 (东西) 09H 0 0 0 0 1 0 0 1 HL4、HL1 红 (南北) HL3、HL2 黄 (东西)ORG 0000H LJMP START ORG 0040HSTART: MOV SP,#60H LCALL STATUS0 ;初始状态(都是红灯)CIRCLE: LCALL STATUS1 ;南北绿灯,东西红灯 LCALL STATUS2 ;南北绿灯闪转黄灯,东
45、西红灯 LCALL STATUS3 ;南北红灯,东西绿灯 LCALL STATUS4 ;南北红灯,东西绿灯闪转黄灯 LJMP CIRCLESTATUS0: ;南北红灯,东西红灯 MOV A,#0FH MOV P0,A MOV R2,#10 ;延时1秒 LCALL DELAY RETSTATUS1: ;南北绿灯,东西红灯MOV A,#96H ;南北绿灯,东西红灯 MOV P0,A MOV R2,#200 ;延时20秒 LCALL DELAY RETSTATUS2: ;南北绿灯闪转黄灯,东西红灯MOV R3,#03H ;绿灯闪3次FLASH: MOV A,#9FH MOV P0,A MOV R2,
46、#03H LCALL DELAY MOV A,#96H MOV P0,A MOV R2,#03H LCALL DELAY DJNZ R3,FLASH MOV A,#06H ;南北黄灯,东西红灯 MOV P0,A MOV R2,#10 ;延时1秒 LCALL DELAY RETSTATUS3: ;南北红灯,东西绿灯 MOV A,#69H MOV P0,A MOV R2,#200 ;延时20秒 LCALL DELAY RETSTATUS4: ;南北红灯,东西绿灯闪转黄灯 MOV R3,#03H ;绿灯闪3次FLASH1: MOV A,#6FH MOV P0,A MOV R2,#03H LCALL
47、DELAY MOV A,#69H MOV P0,A MOV R2,#03H LCALL DELAY DJNZ R3,FLASH1 MOV A,#09H ;南北红灯,东西黄灯 MOV P0,A MOV R2,#10 ;延时1秒 LCALL DELAYNOP RETDELAY: ;延时子程序 PUSH 2 PUSH 1 PUSH 0DELAY1: MOV 1,#00HDELAY2: MOV 0,#0B2H DJNZ 0,$ DJNZ 1,DELAY2 ;延时 100 mS DJNZ 2,DELAY1 POP 0 POP 1 POP 2 RET END例9、外部中断实验(急救车与交通灯) (1)要求
48、:有急救车到达时,两向交通信号全红,以便让急救车通过。假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。本实验以按键为中断申请,表示有急救车通过 (2)PO0PO3接DG1DG4,PO4PO7接DR1DR4,K8接P3.2。 TRLED2.ASM ORG 0000H LJMP START ORG 0003H ;INT 0 中断入口地址 LJMP INT0 ORG 0040HSTART: MOV SP,#60H SETB EX0 ;INT 0 中断有效 SETB IT0 SETB EA LCALL STATUS0 ;初始状态(都是红灯)CIRCLE: LCALL STATUS1
49、 ;南北绿灯,东西红灯 LCALL STATUS2 ;南北绿灯闪转黄灯,东西红灯 LCALL STATUS3 ;南北红灯,东西绿灯 LCALL STATUS4 ;南北红灯,东西绿灯闪转黄灯 LJMP CIRCLEINT0: PUSH PSW ;保护现场 PUSH 2 PUSH ACCMOV DPTR,#8300H MOV A,#0FH ;南北,东西都亮红灯 MOVX DPTR,A MOV R2,#100 ;延时10秒 LCALL DELAY POP ACC ;恢复现场 MOVX DPTR,A POP 2 POP PSW RETI因此,中断服务程序应做的工作: (1)关中断(硬件自动实现) (2
50、)保留断点(硬件自动实现) (3)保护现场(软件完成) (4)中断服务程序(软件完成) (5)恢复现场(软件完成) (6)开中断与返回(由RETI指令实现) 在单片微机应用系统中,常常会需要定时或计数,通常采用以下三种方法来实现:5.2 MCS-51单片机定时器/计数器特点:可以通过软件编程来实现定时时间的改变,通过中断或查询方法来完成定时功能或计数功能。1、利用软件实现(延时程序): 优点:简单,控制方便;缺点:CPU效率低。2、硬件实现,专门设计一个单稳态定时器: 优点:CPU效率高;缺点:修改参数麻烦。3、利用计数器实现计数器溢出预置数输入脉冲1us8位256us5.2.1定时器/计数器
51、的功能 定时功能和计数功能的设定和控制都是通过软件来设定的,有关的特殊功能寄存器: TCON 和 TMOD。外来脉冲T0机器周期片内计数器单片机计数器:对外来脉冲进行计数 T0、T1 引脚上从1到0的跳变时,计数器内容加1。 定时器:对机器周期计数 每过一个机器周期,计数器内容加1 ;T0、T1 的内部结构简图示: 计数器TH0 、TL0和TH1、TL1; 特殊功能寄存器TMOD、TCON; 时钟分频器; 输入引脚T0、T1。MCS-51包含有两个16位的定时器计数器:T0和T1;1、定时器计数器T0、T1 的控制寄存器TCON: 位地址8FH8EH8DH8CH8BH8AH89H88H符号TF
52、1 TR1TF0 TR0IE1IT1IE0IT05.2.2 定时器/计数器的控制寄存器字节地址为88H,位寻址的地址为88H8FH。 (1) TF0、TF1:定时器溢出中断标志 =1 计数溢出;=0 计数未满; 用于申请中断或供CPU查询。 进入中断服务程序时自动清零;查询方式时必须软件清零(2) TR0、TR1:运行控制位。 =1 启动计数; =0 停止计数2. T0、T1 的方式寄存器TMOD字节地址为89H。M1C/TD7D6 D5 D4D3 D2 D1 D0M0GATEM0M1C/TGATET1T0(1)GATE门控位:GATE =0 普通用法: 仅由TR0和TR1置位来启动定时器T0
53、和T1。GATE =1 门控用法: 由外部中断引脚INTx 和TRx共同来启动定时器。 当外部中断引脚INTx=1时,TRx置位启动定时器。(2)C/T:定时器/计数器选择: “1”:计数器 “0”:定时器(3)M1、M0工作方式选择位:0 0:方式0 13位定时器/计数器0 1:方式1 16定时器/计数器1 0:方式2 8位自动重装定时器/计数器1 1:方式3 定时器0分为两个8位计数器TL0和TH0,定时器1停止计数(T1可工作于方式0、1、2)3、 T0、T1 的数据寄存器: 由TH1(地址为8DH)、TL1(地址为8BH)和TH0(地址为8CH)、TL0(地址为8AH)寄存器所组成。4
54、、定时器/计数器中断: 中断允许寄存器IE: EA位-中断允许总控制位 ET0位、ET1位、ET2位(IE.5) - T0、T1和T2的中断允许控制位。 中断矢量:定时器T0:000BH定时器T1:001BH定时器T2:002BH 中断优先级寄存器IP: PT0位、PT1位、PT2位(IP.5) -T0、T1和T2中断优先级控制位。 T0可选择四种不同的工作方式,而T1只具有三种工作方式(即方式0、方式1和方式2)。5.2.3 定时器计数器T0、T1 的工作方式1、方式0:13位定时器/计数器 计数溢出时,TFx置位。如果中断允许,CPU响应中断并转入中断服务程序,由内部硬件自动清0。 TFx
55、也可以由程序查询和清零。振荡器12TLx THx (5位) (8位)TFx申请中断Tx端TRx位GATE位INTx端1&C/T=0C/T=1控制 =1开关接通或门与门 方式0的计数器是13位结构,因而在完成计数功能时,其计数范围为18192(213)。由于进行加1计算,并在计数器计满溢出时将溢出中断标志TF0(TF1)置位,此时计数完成,所以计数初值计算为: 计数初值=213-N其中N为要求的计数值。 在完成定时功能时,计数器对机器周期数进行加1计算,因此其定时时间的计算公式为: (213计数初值)机器周期 或 (213计数初值)振荡周期12例1 现用T0作计数器,计算从引脚T0输入的脉冲个数
56、,当计数值N为5000时结束,计算TH0、TL0的初值。计数初值=8192-5000=3192=0 1100 0111 1000B 所以 (TH0)=63H (TL0)=18H例2.设单片机晶振频率fosc=6MHz,选用定时器1以方式0产生周期为1ms的方波,并由P1.0输出。 计算计数初值: 欲产生周期为1ms宽的方波,只需在P1.0端以500s为周期交替输出高低电平即可实现,为此定时时间应为500s。使用6MHz晶振,则每个机器周期为2s。设待求的计数初值为X,则: (213-X)210-6=50010-6 求解得:X=7942=1 1111 0000 0110B转换为十六进制,高8位为
57、F8H,即(TH1)=F8H。低5位为06H,因TL1的高3位未用,应填0,故(TL1)=06H。 TMOD寄存器的初始化: 为把定时器1设定为方式0,则M1M0=00;为实现定时功能,应使C/T=0;为实现定时器的运行控制,则GATE=0。定时器0不用,有关位设定为0。因此(TMOD)=00H。 由定时器控制寄存器TCON中的TR1位控制定时的启动和停止,TR1=1启动,TR1=0停止。程序设计1:ORG0000HAJMPMAINORG001BHAJMPIN1PORG0100HMAIN:MOVTMOD,#00H;设置T1工作方式MOVTH1,#0F8H ;设置计数初值MOVTL1,#06H
58、;MOVIE,#88H;允许中断SETBTR1;启动定时SJMP$;等待中断中断服务程序:IN1P:MOVTH1,#0F8H;重新设置计数初值MOVTL1,#06H;CPLP1.0;输出取反RETI;中断返回程序设计2:ORG0100HMOVTMOD,#00H ;设置T1工作方式MOVTH1,#0F8H ;设置计数初值MOVTL1,#06H ;MOVIE,#00H ;禁止中断SETBTR1;启动定时LOOP:JBCTF1,LOOP1;查询计数溢出;并对溢出标志位清0AJMPLOOPLOOP1:MOVTH1,#0F8H;重新设置计数初值MOVTL1,#06H;CPLP1.0;输出取反AJMPLO
59、OP;重复循环#include reg51.hsbit P1_0=P10;timer1() interrupt 3 using 1 /* T1中断服务程序 */ P1_0=! P1_0; /* 100ms到P1.0反相*/ TH1=0 xF8; /* 重载计数初值 */ TL1=6; main () TMOD=0; /*设置T1工作方式*/ TH1=0 xF8; /* 预置计数初值 */ TL1=6; IE=0 x88; /* 开中断 */ TR1=1; /* 启动计数器 */ while(1); /* 等待中断 */ 2、方式1:16位定时器/计数器 计数时,TLx溢出后向THx进位,THx
60、溢出后将TFx置位,如果中断允许,CPU响应中断并转入中断服务程序,由内部硬件自动清TFx。TFx也可以由程序查询和清零。振荡器12TLx THx (8位) (8位)TFx申请中断Tx端TRx位GATE位INTx端1&C/T=0C/T=1控制 =1开关接通或门与门例3 用定时器1以方式1产生频率为50Hz的方波,由P1.0输出。以中断方式完成。设单片机晶振频率fosc=12MHz。 计算计数初值方波周期T=1/50=0.02s=20 ms,只要每隔10 ms P1.0引脚输出取反一次。因此定时时间为10 ms,计算计数初值X:(216-X)110-6=1010-3 求解得:X=55536=D8
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年糖、加工糖及制糖副产品合作协议书
- 2025年三维多向整体编织物合作协议书
- 2025年五金采购合同标准版本(2篇)
- 2025年买卖合同鸭饲料(2篇)
- 2025年产品供销合同简单版(2篇)
- 2025年二手简装房购房协议样本(三篇)
- 2025年二手房买卖交合同常用版(4篇)
- 2025年临时劳务合同样本(2篇)
- 2025年个人投资公司协议经典版(三篇)
- 2025年交通事故现场协议书表(2篇)
- 风神汽车4S店安全生产培训课件
- ICU患者的体位转换与床旁运动训练
- 人教版四年级上册竖式计算200题及答案
- 建设工程工作总结报告
- 脾破裂术后健康宣教课件
- 三废环保管理培训
- 财务管控的间接成本
- 藏族唐卡艺术特色分析
- 操作系统课程设计报告
- QFD模板含计算公式计分标准说明模板
- 医院护理培训课件:《早产儿姿势管理与摆位》
评论
0/150
提交评论