单片机(汇编)课件-第5章.ppt

上传人:小飞机 文档编号:5937807 上传时间:2023-09-06 格式:PPT 页数:41 大小:268.50KB
返回 下载 相关 举报
单片机(汇编)课件-第5章.ppt_第1页
第1页 / 共41页
单片机(汇编)课件-第5章.ppt_第2页
第2页 / 共41页
单片机(汇编)课件-第5章.ppt_第3页
第3页 / 共41页
单片机(汇编)课件-第5章.ppt_第4页
第4页 / 共41页
单片机(汇编)课件-第5章.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《单片机(汇编)课件-第5章.ppt》由会员分享,可在线阅读,更多相关《单片机(汇编)课件-第5章.ppt(41页珍藏版)》请在三一办公上搜索。

1、第5章,单片机原理与控制技术,中断的基本概念 80C51中断源 中断控制寄存器 中断处理过程 中断优先控制和中断嵌套 中断系统的应用 80C51定时/计数器 定时/计数器控制寄存器 定时/计数器工作方式 定时/计数器的应用,第5章 中断系统和定时/计数器,本章要点:,5-1 80C51中断系统,CPU暂时中止其正在执行的程序,转去执行请求中断的那个外设或事件的服务程序,等处理完毕后再返回执行原来中止的程序,叫做中断。,为什么要设置中断?提高CPU工作效率 具有实时处理功能 具有故障处理功能 实现分时操作,一.中断概述,什么叫中断?,INT0:外部中断0,中断请求信号由P3.2输入。INT1:外

2、部中断1,中断请求信号由P3.3输入。T0:定时/计数器0溢出中断,对外部脉冲计数由P3.4输入。T1:定时/计数器1溢出中断,对外部脉冲计数由P3.5输入。串行中断:包括串行接收中断RI和串行发送中断TI。,二.中断源和中断控制寄存器,中断源,中断源是指能发出中断请求,引起中断的装置或事件。80C51单片机的中断源共有5个,其中2个为外部中断源,3个为内部中断源:,中断请求:定时和外中断控制寄存器TCON;串行控制寄存器SCON;中断允许控制寄存器IE;中断优先级控制寄存器IP。,中断控制寄存器,80C51单片机中涉及中断控制的有3个方面4个特殊功能寄存器:,INT0、INT1、T0、T1中

3、断请求标志放在TCON中串行中断请求标志放在SCON中。,中断请求控制寄存器,TCON的结构、位名称、位地址和功能如下:,TCON位功能:TF1 T1溢出中断请求标志 T1计数溢出后,TF1=1 TF0 T0溢出中断请求标志 T0计数溢出后,TF0=1 IE1 外中断中断请求标志 当P3.3引脚信号有效时,IE1=1 IE0 外中断中断请求标志 当P3.2引脚信号有效时,IE0=1 IT1 外中断触发方式控制位 IT1=1,边沿触发方式;IT1=0,电平触发方式。IT0 外中断触发方式控制位 其意义和功能与IT1相似。,串行控制寄存器SCON,TI 串行口发送中断请求标志 RI 串行口接收中断

4、请求标志,80C51对中断源的开放或关闭由中断允许控制寄存器IE控制。,中断允许控制寄存器IE,IE的结构、位名称和位地址如下:,EA CPU中断允许控制位 EA=1,CPU开中;EA=0,CPU关中,且屏蔽所有5个中断源。EX0 外中断INT0中断允许控制位 EX0=1,INT0开中;EX0=0,INT0关中。EX1 外中断INT1中断允许控制位 EX1=1,INT1开中;EX1=0,INT1关中。ET0 定时/计数器T0中断允许控制位 ET0=1,T0开中;ET0=0,T0关中。ET1 定时/计数器T1中断允许控制位 ET1=1,T1开中;ET1=0,T1关中。ES 串行口中断(包括串发、

5、串收)允许控制位 ES=1,串行口开中;ES=0,串行口关中。,说明:80C51对中断实行两级控制,总控制位是EA,每一中断源还有各自的控制位。首先要EA=1,其次还要自身的控制位置“1”。,三.中断处理过程 中断处理过程大致可分为四步:中断请求、中断响应、中断服务、中断返回 中断请求 中断源发出中断请求信号,相应的中断请求标志位(在中断允许控制寄存器IE中)置“1”。中断响应 CPU查询(检测)到某中断标志为“1”,在满足中断响应条件下,响应中断。中断响应条件:该中断已经“开中”;CPU此时没有响应同级或更高级的中断;当前正处于所执行指令的最后一个机器周期;正在执行的指令不是RETI或者是访

6、向IE、IP的指令,否则必须再另外执行一条指令后才能响应。,中断响应操作 CPU响应中断后,进行下列操作:保护断点地址;撤除该中断源的中断请求标志;关闭同级中断;将相应中断的入口地址送入PC;80C51五个中断入口地址:INT0:0003H;T0:000BH;INT1:0013H T1:001BH;串行口:0023H 执行中断服务程序 中断服务程序应包含以下几部分:保护现场 执行中断服务程序主体,完成相应操作 恢复现场 中断返回 在中断服务程序最后,必须安排一条中断返回指令RETI,当CPU执行RETI指令后,自动完成下列操作:恢复断点地址。开放同级中断,以便允许同级中断源请求中断。,四.中断

7、响应等待时间 若排除CPU正在响应同级或更高级的中断情况,中断响应等待时间为:38个机器周期五.中断请求的撤除 中断源发出中断请求,相应中断请求标志置“1”。CPU响应中断后,必须清除中断请求“1”标志。否则中断响应返回后,将再次进入该中断,引起死循环出错。对定时/计数器T0、T1中断,外中断边沿触发方式,CPU响应中断时就用硬件自动清除了相应的中断请求标志。对外中断电平触发方式,需要采取软硬结合的方法消除后果。对串行口中断,用户应在串行中断服务程序中用软件清除TI或RI。,六.中断优先控制和中断嵌套 中断优先控制 80C51中断优先控制首先根据中断优先级,此外还规定了同一中断优先级之间的中断

8、优先权。其从高到低的顺序为:INT0、INT1、T0、T1、串行口。中断优先级是可编程的,而中断优先权是固定的,不能设置,仅用于同级中断源同时请求中断时的优先次序。80C51中断优先控制的基本原则:高优先级中断可以中断正在响应的低优先级中断,反之则不能。同优先级中断不能互相中断。同一中断优先级中,若有多个中断源同时请求中断,CPU将先响应优先权高的中断,后响应优先权低的中断。,中断嵌套,当CPU正在执行某个中断服务程序时,如果发生更高一级的中断源请求中断,CPU可以“中断”正在执行的低优先级中断,转而响应更高一级的中断,这就是中断嵌套。中断嵌套只能高优先级“中断”低优先级,低优先级不能“中断”

9、高优先级,同一优先级也不能相互“中断”。,中断嵌套结构类似与调用子程序嵌套,不同的是:子程序嵌套是在程序中事先按排好的;中断嵌套是随机发生的。子程序嵌套无次序限制,中断嵌套只允许高优先级“中断”低优先级。,七.中断系统的应用 中断初始化 设置堆栈指针SP 定义中断优先级 定义外中断触发方式 开放中断 安排好等待中断或中断发生前主程序应完成的操作内容。中断服务主程序 中断服务子程序内容要求:在中断服务入口地址设置一条跳转指令,转移到中断服务程序的实际入口处。根据需要保护现场。中断源请求中断服务要求的操作。恢复现场。与保护现场相对应,注意先进后出、后进先出操作原则。中断返回,最后一条指令必须是RE

10、TI。,【例】出租车计价器计程方法是车轮每运转一圈产生一个负脉冲,从外中断(P3.2)引脚输入,行驶里程为轮胎周长运转圈数,设轮胎周长为2m,试实时计算出租车行驶里程(单位米),数据存32H、31H、30H。,中断系统应用举例,解:编程如下:ORG 0000H;复位地址 LJMP STAT;转初始化 ORG 0003H;中断入口地址 LJMP INT;转中断服务程序,ORG 0100H;初始化程序首地址STAT:MOV SP,#60H;置堆栈指针 SETB ITO;置边沿触发方式 MOV IP,#01H;置高优先级 MOV IE,#81H;开中 MOV 30H,#0;里程计数器清0 MOV 3

11、1H,#0;MOV 32H,#0;LJMP MAIN;转主程序,并等待中断 ORG 0200H;中断服务子程序首地址INT:PUSH Acc;保护现场 PUSH PSW;MOV A,30H;读低8位计数器 ADD A,#2;低8位计数器加2m MOV 30H,A;回存 CLR A;ADDC A,31H;中8位计数器加进位 MOV 31H,A;回存 CLR A;ADDC A,32H;高8位计数器加进位 MOV 32H,A;回存 PUSH PSW;恢复现场 PUSH Acc;RETI;中断返回,【例】现有5个外中断源EX1、EX20、EX21、EX22和EX23,高电平时表示请求中断,要求执行相应

12、中断服务程序,试编制程序。,解:ORG0000H;复位地址LJMPMAIN;转主程序ORG0003H;中断入口地址LJMPPINT0;转中断服务程序ORG0013H;中断入口地址LJMPPINT1;转中断服务程序,ORG0100H;主程序首地址MAIN:MOVSP,#60H;置堆栈指针 ORLTCON,#05H;置INT0、INT1为边沿触发方式 SETBPX0;置为高优先级 MOVIE,#0FFH;全部开中;主程序内容 ORG 1000H;中断服务程序首地址 PINT0:PUSHAcc;中断,保护现场 LCALL WORK1;调用EX1服务子程序 POPAcc;恢复现场 RETI;中断返回

13、ORG 2000H;中断服务程序首地址PINT1:CLR EA;CPU禁中 PUSH Acc;中断保护现场 PUSH DPH;PUSH DPL;SETB EA;CPU开中,JB P1.0,LWK20;P1.0=1,EX20请求中断 JB P1.1,LWK21;P1.1=1,EX21请求中断 JB P1.2,LWK22;P1.2=1,EX22请求中断 LCALL WORK23;P1.3=1,调用EX23服务子LRET:CLR EA;CPU禁中 POP DPL;恢复现场 POP DPH;POP Acc;SETB EA;CPU开中 RETI;中断返回LWK20:LCALL WORK20;P1.0=1

14、,调用EX20服务子程序 SJMP LRET;转中断返回LWK21:LCALL WORK21;P1.1=1,调用EX21服务子程序 SJMP LRET;转中断返回LWK22:LCALL WORK22;P1.2=1,调用EX22服务子程序 SJMP LRET;转中断返回,定时/计数器是单片机系统一个重要的部件,其工作方式灵活、编程简单、使用方便,可用来实现定时控制、延时、频率测量、脉宽测量、信号发生、信号检测等。此外,定时/计数器还可作为串行通信中波特率发生器。,5-2 80C51定时/计数器,80C51单片机内部有两个定时/计数器T0和T1,其核心是计数器,基本功能是加1。对外部事件脉冲(下降

15、沿)计数,是计数器;对片内机周脉冲计数,是定时器。计数器由二个8位计数器组成。定时时间和计数值可以编程设定,其方法是在计数器内设置一个初值,然后加1计满后溢出。调整计数器初值,可调整从初值到计满溢出的数值,即调整了定时时间和计数值。定时/计数器作为计数器时,外部事件脉冲必须从规定的引脚输入。且外部脉冲的最高频率不能超过时钟频率的1/24。,一.定时/计数器概述,TCON低4位与外中断、有关,已在中断中叙述。高4位与定时/计数器T0、T1有关。TF1:定时/计数器T1溢出标志。TF0:定时/计数器T0溢出标志。TR1:定时/计数器T1运行控制位。TR1=1,T1运行;TR1=0,T1停。TR0:

16、定时/计数器T0运行控制位。TR0=1,T0运行;TR0=0,T0停。TCON的字节地址为88H,每一位有位地址,均可位操作。,定时/计数器控制寄存器TCON,二.定时/计数器的控制寄存器,TMOD用于设定定时/计数器的工作方式低4位用于控制T0,高4位用于控制T1。,定时/计数器工作方式控制寄存器TMOD,M1M0 工作方式选择位,C/T 计数/定时方式选择位 C/T=1,计数工作方式,对外部事件脉冲计数,用作计数器。C/T=0,定时工作方式,对片内机周脉冲计数,用作定时器。GATE 门控位 GATE=0,运行只受TCON中运行控制位TR0/TR1的控制。GATE=1,运行同时受TR0/TR

17、1和外中断输入信号的双重控制。只有当INT0/INT1=1且TR0/TR1=1,T0/T1才能运行。TMOD字节地址89H,不能位操作,设置TMOD须用字节操作指令。,三.定时/计数器工作方式 工作方式0 13位计数器,由TL0低5位和TH0 8位组成,TL0低5位计数满时不向TL0第6位进位,而是向TH0进位,13位计满溢出,TF0置“1”。最大计数值213=8192。工作方式1 16位计数器,最大计数值为216=65536。工作方式2 8位计数器,仅用TL0计数,最大计数值为28=256,计满溢出后,一方面进位TF0,使溢出标志TF0=1;另一方面,使原来装在TH0中的初值装入TL0。优点

18、:定时初值可自动恢复;缺点:计数范围小。适用于需要重复定时,而定时范围不大的应用场合。工作方式3 方式3仅适用于T0,T1无方式3。T0方式3 在方式3情况下,T0被拆成二个独立的8位计数器TH0、TL0。TL0使用T0原有的控制寄存器资源:TF0,TR0,GATE,C/T,INT0,组成一个8位的定时/计数器;TH0借用T1的中断溢出标志TF1,运行控制开关TR1,只能对片内机周脉冲计数,组成另一个8位定时器(不能用作计数器)。T0方式3情况下的T1 T1由于其TF1、TR1被T0的TH0占用,计数器溢出时,只能将输出信号送至串行口,即用作串行口波特率发生器。,其中:N与工作方式有关:方式0

19、时,N=13;方式1时,N=16;方式2、3时,N=8。机周时间与主振频率有关:机周时间=12/fosc fosc=12MHZ时,1机周=1S;fosc=6MHZ 时,1机周=2S。,四.定时/计数器的应用,计算定时/计数初值,80C51定时/计数初值计算公式:,解:工作方式0:213500S/2S=8192-250=7942=1F06H 1F06H化成二进制:1F06H=0001 1111 0000 0110B=000 11111000 00110 B其中:低5位00110前添加3位000送入TL0 TL0=000 00110B=06H;高8位11111000B送入TH0 TH0=11111

20、000B=F8H。,【例】已知晶振6MHz,要求定时0.5mS,试分别求出T0工作于方式0、方式1、方式2、方式3时的定时初值。,工作方式1:T0初值=216-500s/2s=65536250=65286=FF06H TH0=FFH;TL0=06H。,工作方式2:T0初值=28-500s/2s=256-250=6 TH0=06H;TL0=06H。,工作方式3:T0方式3时,被拆成两个8位定时器,定时初值可分别计算,计算方法同方式2。两个定时初值一个装入TL0,另一个装入TH0。因此:TH0=06H;TL0=06H。,从上例中看到,方式0时计算定时初值比较麻烦,根据公式计算出数值后,还要变换一下

21、,容易出错,不如直接用方式1,且方式0计数范围比方式1小,方式0完全可以用方式1代替,方式0与方式1相比,无任何优点。,定时/计数器应用步骤,合理选择定时/计数器工作方式 计算定时/计数器定时初值(按上述公式计算)编制应用程序 定时/计数器的初始化 包括定义TMOD、写入定时初值、设置中断系统、启动定时/计数器运行等。正确编制定时/计数器中断服务程序 注意是否需要重装定时初值,若需要连续反复使用原定时时间,且未工作在方式2,则应在中断服务程序中重装定时初值。,【例】试用T1方式2编制程序,在P1.0引脚输出周期为400S的脉冲方波,已知fosc=12MHZ。,解:计算定时初值 T1初值=28-

22、200s/1s=256200=56=38H TH1=38H;TL1=38H,设置TMOD:0 0 10 0000 B=20H T0控制位,与T1无关 T1方式2 T1定时器 T1启动与 无关,编制程序如下:ORG0000H;复位地址LJMPMAIN;转主程序ORG001BH;T1中断入口地址LJMPIT1;转T1中断服务程序 ORG0100H;主程序首地址MAIN:MOVTMOD,#20H;置T1定时器方式2MOVTL1,#38H;置定时初值MOVTH1,#38H;置定时初值备份MOVIP,#00001000B;置T1高优先级MOVIE,#0FFH;全部开中SETBTR1;T1运行SJMP$;

23、等待T1中断 ORG 0200H;T1中断服务程序首地址IT1:CPL P1.0;输出波形取反首地址RETI;中断返回,【课堂练习题】参照以上例题工作方式2,按下列要求分别修改程序:脉冲方波从P3.0输出;fosc=6MHz;脉冲方波脉宽为100s;用定时/计数器T0;,【例】已知晶振12MHZ,参阅图5-15,要求利用定时器 T0使图中发光二极管D进行秒闪烁。,解:发光二极管进行秒闪烁。即一秒钟一亮一暗,亮500ms,暗500 ms。晶振12MHz,每机周1s,T0方式1最大定时只能65ms余。取T0定时50ms,计数10次,即可实现500ms定时。,计算定时初值 T0初值=216-5000

24、0s/1s=6553650000=15536=3CB0H TH0=3CH;TL0=B0H。,设置TMOD:0000 0 0 01 B=01H T0方式1 T0 与 无关 T1控制位,编制程序如下:ORG 0000H;复位地址LJMP MAIN;转主程序ORG 000BH;T0中断入口地址LJMP IT0;转T0中断服务程序ORG 0100H;主程序首地址MAIN:MOV TMOD,#01H;置T0定时器方式1MOV TH0,#3CH;置T0初值50mSMOV TL0,#0B0H;MOV IE,#10000010B;T0开中 MOV R7,#0AH;置50mS计数器初值 SETB TR0;T0运

25、行SJMP$;等待中断,【例】已知fosc=6MHz,试编写24小时模拟电子钟程序,秒分时数分别存在R1、R2、R3中,可直接调用显示程序DIR。解:ORG 0000H;复位地址 LJMP IT0;转主程序 ORG 000BH;T0中断入口地址 LJMP IT0;T0中断,转T0中断服务子程序IT0 ORG 1000H;主程序首地址START:MOV R1,#0;秒计数器清0 MOV R2,#0;分计数器清0 MOV R3,#0;时计数器清0 MOV R4,#0;500S计数器清0 MOV R5,#0;100ms计数器清0 MOV TMOD,#02H;置T0定时器方式2 MOV TL0,#06

26、H;置T0定时初值500S MOV TH0,#06H;用于自动恢复定时初值 SETB TR0;启动T0WAIT:LCALL DIR;显示时钟时分秒并等待中断 SJMP WAIT;循环显示 ORG 0200H;T0中断服务程序首地址IT0:MOV TH0,#3CH;重置T0初值50mS MOV TL0,#0B0H;DJNZ R7,GORET;判500mS到否?CPL P1.7;500mS 到,输出取反 MOV R7,#0AH;恢复50mS计数器初值GORET:RETI;,ORG2000H;T0中断服务子程序首地址IT0:INCR4;500S计数器计数 CJNER4,#200,IT01;判100m

27、s满否?IT01:JCIT06;未满100ms,转返回 MOV R4,#0;满100ms,500S计数器清0 INC R5;100ms计数器计数 CJNE R5,#10,IT02;判1s满否?IT02:JCIT06;未满1s,转返回 MOV R5,#0;满1s,100ms计数器清0 INCR1;秒计数器加1 CJNE R1,#60,IT03;判60秒满否?IT03:JCIT06;未满60秒,转返回 MOVR1,#0;满60秒,秒计数器清0 INCR2;分计数器加1 CJNER2,#60,IT04;判60分满否?IT04:JCIT06;未满60分,转返回 MOVR2,#0;满60分,分计数器清0

28、 INCR3;时计数器加1 CJNER3,#24,IT05;判24小时满否?IT05:JCIT06;未满24小时,转返回 MOVR3,#0;满24小时,时计数器清0IT06:RETI;返回,解:利用定时/计数器T0扩展成外中断时须有两个条件:一是外部触发脉冲从P3.4输入(下降沿有效);二是将定时/计数器设置成计数临界状态,即定时初值为FFH,再来一个脉冲即能溢出触发中断。,【例】因外中断INT0、INT1已被占用,试利用定时/计数器T0扩展成外中断。,编程如下:ORG 0000H;复位地址 LJMP START;复位,转初始化程序START ORG 000BH;T0中断入口地址 LJMP IT0;转T0中断服务子程序IT0 ORG 1000H;初始化程序首地址START:MOV SP,#60H;置堆栈 MOV TMOD,#06H;置T0计数器方式2 MOV TH0,#0FFH;置T0初值 MOV TL0,#0FFH;SETB PT0;置T0为高优先级 MOV IE,#0FFH;全部开中 SETB TR0;T0启动 SJMP MAIN;转主程序,并等待T0中断 ORG 2000H;T0中断服务子程序首地址IT0:;T0中断服务子程序 RETI;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号