《C的中断系统及定时计数器资料实用.pptx》由会员分享,可在线阅读,更多相关《C的中断系统及定时计数器资料实用.pptx(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023/3/2315.1 80C51单片机的中断系统单片机的中断系统5.1.1 80C51中断系统的结构 CPU进行工作A时发生了事件B,请求CPU马上处理 CPU暂时中断当前工作A,转去处理事件B 事件B处理完后,回到工作A被中断的地方继续处理A工作 中断的概念 中断源 中断请求 中断服务 中断返回 中断系统中断的优点 利用率高 实时性强 可靠性好 第1页/共42页2023/3/232 80C51中断系统的结构5个中断源、2个优先级第2页/共42页2023/3/233 中断源5.1.2 80C51的中断源外部中断0(INT0)外部中断1(INT1)T0溢出中断(TF0)T1溢出中断(TF1
2、)串行口中断(RI或TI)第3页/共42页2023/3/234 触发方式设置及中断标志 76543210TCONTF1TR1TF0TR0IE1IT1IE0IT0字节地址:字节地址:88H 电平方式(ITx=0),INTx引脚低电平时IEx=1,响应中断后IEx不自动清0(INTx引脚状态)。边沿方式(ITx=1),INTx引脚负跳变时IEx=1,响应中断后IEx自动清0。外部中断标志IE1、IE0(用IEx表示)第4页/共42页2023/3/235两种触发方式比较:电平方式时,INTx低电平必须保持到响应时,否则就会漏掉;在中断服务结束前,INTx低电平必须撤除,否则中断返回之后将再次产生中断
3、。例,8255的中断请求线在接受读或写操作后即被复位,因此以其去请求电平触发方式的中断比较方便。边沿方式时,采样到有效下降沿后,在IEx中将锁存一个1。若CPU暂时不能响应,申请标志也不会丢失,直到响应时才清0。例,ADC0809的转换结束信号EOC为正脉冲,经反相后就可以作为80C51的INTx信号。第5页/共42页2023/3/236 溢出中断标志TF1、TF0(用TFx表示)溢出中断请求标志TFx,Tx启动后就开始由初值进行加1计数,直至最高位产生溢出使TFx=1向CPU请求中断。CPU响应中断后TFx自动清0。SCON的中断标志76543210SCONTIRI字节地址:字节地址:98H
4、RI:串口接收中断标志,响应中断时不能自动清除 TI:串口发送中断标志,响应中断时不能自动清除 第6页/共42页2023/3/2375.1.3 80C51中断的控制 中断允许控制中断源的开放和屏蔽由IE控制(1,开放;0,禁止)76543210IEEAESET1EX1ET0EX0字节地址:字节地址:A8H EX0:外中断0允许 ET0:T0中断允许 EX1:外中断1允许 ET1:T1中断允许 ES :串口中断允许 EA:CPU中断允许 第7页/共42页2023/3/238 中断优先级控制中断优先级由IP控制(1,高级;0,低级)76543210IPPSPT1PX1PT0PX0字节地址:字节地址
5、:B8H PX0:外中断0优先级 PT0:T0中断优先级 PX1:外中断1优先级 PT1:T1中断优先级 PS :串口中断优先级同一优先级的自然顺序:自高至低:INT0、TO、INT1、T1、串口。第8页/共42页2023/3/239 中断优先级遵循的原则几个中断同时申请,先响应高级的中断 正进行的中断服务,同级或低级中断不能对其中断,但可以被高级中断所中断。为此,中断系统内设有对应高、低2个优先级状态触发器(用户不能寻址)。状态触发器的复位由中断返回指令RETI控制。第9页/共42页2023/3/23105.2 80C51单片机中断处理过程5.2.1 中断响应条件和时间 中断响应条件有中断请
6、求 相应的中断允许位为1CPU开中断(即EA=1)遇下面情况之一将不被响应(此间中断条件失效,中断丢失)正在处理同级或高级中断 当前查询周期不是所执行指令的最后一个机器周期 正在执行RETI或访问IE或IP 的指令 第10页/共42页2023/3/2311 中断响应时间中断响应至少需要3个完整的机器周期(38个)!受阻时要附加35个机器周期(无同级或高级中断正进行)查询周期不是当前指令的最后机器周期(如MUL,+3)查询周期恰逢RETI类指令(且后跟MUL指令+5)第11页/共42页2023/3/23125.2.2 中断响应过程 CPU响应中断过程将相应优先级状态触发器置1(阻断后来同级或低级
7、中断)执行硬件LCALL指令(PC入栈,中断服务程序入口址送PC)执行中断服务程序 编写中断服务程序注意中断服务程序入口存放指令LJMP或AJMP现场保护与现场恢复第12页/共42页2023/3/23135.2.3 中断返回 中断服务程序最后指令必须是RETI,其功能:将断点从堆栈弹送PC,CPU从原断点继续执行 将相应优先级状态触发器清0,恢复原来工作状态 注意不能用RET代替RETI 中断服务程序中PUSH和POP必须成对使用第13页/共42页2023/3/23145.2.4 中断程序举例【例5-1】单外部中断源示例 ORG 0000HSTART:LJMP MAIN ORG 0003H L
8、JMP INTO ORG 0030H MAIN:CLR IT0 ;电平 SETB EA SETB EX0 MOV DPTR,#1000H 主程序:第14页/共42页2023/3/2315中断服务程序:ORG 0200HINT0:PUSH PSW PUSH ACC CLR P3.0 ;由P3.0输出0 NOP NOP SETB P3.0 MOV P1,#0FFH;置P1口为输入 MOV A,P1 ;输入数据 MOVX DPTR,A ;存入数据存储器 INC DPTR ;修改数据指针,指向下一个单元 POP ACC ;恢复现场 POP PSW RETI 第15页/共42页2023/3/2316【例
9、5-2】多外部中断源示例 中断服务程序:ORG 0003H LJMP INSE0 ORG 0013H LJMP INSE1 INSE0:PUSH PSW;XI0中断服务 PUSH ACC POP ACC POP PSW RETI (转下页)第16页/共42页2023/3/2317INSE1:PUSH PSW (接上页)PUSH ACC JB P1.0,DV1;P1.0为1,转XI1中断服务程序 JB P1.1,DV2;P1.1为1,转XI2中断服务程序 JB P1.2,DV3;P1.2为1,转XI3中断服务程序 JB P1.3,DV4;P1.3为1,转XI4中断服务程序INRET:POP AC
10、C POP PSW RETI DV1:;XI1中断服务程序 AJMP INRET DV4:;XI4中断服务程序 AJMP INRET 第17页/共42页2023/3/23185.3 80C51单片机的定时单片机的定时/计数器计数器定时/计数器的结构基本型:T0,定时、计数。T1,定时、计数、串口波特率发生器。增强型:增加了T2。见5.3.4节。5.3.1 定时/计数器的结构和工作原理 TH1、TL1TH0、TL0TCONTMOD第18页/共42页2023/3/2319定时/计数器的工作原理实质是16位加1计数器定时器模式时,是对内部机器周期计数。计数值乘以机器周期就是定时时间 计数器模式时,是
11、对外部事件计数。脉冲由T0(P3.4)或T1(P3.5)引脚输入。注意:(若计数值为N,计数初值为X)溢出信号使TF0或TF1置1,并发出中断请求,16位时有:N=65536-X,或X=65536-N12MHz晶振时,计数频率低于0.5MHz 第19页/共42页2023/3/23205.3.2 定时/计数器的控制工作方式寄存器TMOD 76543210TMODGATEC/TM1M0GATEC/TM1M0字节地址:字节地址:89HGATE:门控位。GATE0时,只要TRx为1,就可启动计数器工作;GATA1时,定时器的启动还要加上INTx引脚为高电平这一条件。C/T:模式选择位。清0为定时模式,
12、置1为计数方式。M1M0:工作方式设置位。可设置四种工作方式(见下页)。第20页/共42页2023/3/2321M1M0M1M0工作方式工作方式说说 明明0000方式方式0 01313位定时位定时/计数器计数器0101方式方式1 11616位定时位定时/计数器计数器1010方式方式2 28 8位自动重装定时位自动重装定时/计数器计数器1111方式方式3 3T0T0分成两个独立的分成两个独立的8 8位定时位定时/计数器;计数器;T1T1此方式停止计数此方式停止计数注意:TMOD不能进行位寻址 第21页/共42页2023/3/2322控制寄存器TCON 76543210TCONTF1TR1TF0T
13、R0字节地址:字节地址:88HTFx:Tx溢出标志位。响应中断后TFx有硬件自动清0。用软件设置TFx可产生同硬件置1或清0同样的效果。TRx:Tx运行控制位。置1时开始工作;清0时停止工作。TRx要由软件置1或清0(即启动与停止要由软件控制)。第22页/共42页2023/3/23235.3.3 定时/计数器的工作方式T0有方式0、1、2、3;T1有方式0、1、2。以T0为例说明。方式0:13位方式 第23页/共42页2023/3/2324 C/T=1时,则为计数模式,有:X=213-N=8192-N C/T=0时,则为定时模式,有:X=213-N=8192-N,N=t/Tcy【例5-3】若计
14、数个数N为2,求计数初值。公式法计算:X81922=8190=1FFEH 求补法计算:对0 0000 0000 0010B取反加1为:1 1111 1111 1110B(1FFEH)初值计算:公式法 求补法:X=对N求补第24页/共42页2023/3/2325门控位作用当GATE=0时仅由TR0控制与门的开启。与门输出1时,控制开关接通,计数开始;当GATE=1时与门的开启由INT0和TR0共同控制。这种方式可以用来测量INT0引脚上正脉冲的宽度。注意:方式0的计数初值高8位和低5位确定麻烦,实际应用中常由16位的方式1取代。第25页/共42页2023/3/2326方式1:16位方式 X=21
15、6-N=65536-N 计数范围:165536 计数初值要分成2个字节分别送入TH0、TL0第26页/共42页2023/3/2327【例5-4】若要求定时器T0工作于方式1,定时时间为1ms,当晶振为6 MHz时,求送入TH0和TL0的计数初值各为多少?应怎样送入TH0和TL0?由于晶振为6 MHz,所以机器周期Tcy为2S,因此:N=t/Tcy=110-3/210-6500X216-N65536-50065036FE0CH 也可以利用以下2条指令完成:MOV TL0,#(65536-500)MOD 256;余数为计数初值的低字节 MOV TH0,#(65536-500)/256 ;商为计数初
16、值的高字节用传送指令分别将FEH送入TH0中,0CH送入TL0中即可。第27页/共42页2023/3/2328方式2:8位自动重装方式 X=28-N=256-N 计数范围:1256 特别适合与脉冲信号发生器第28页/共42页2023/3/2329方式3:(仅T0有此方式,T1的方式3将停止计数)TL0进行8位定时/计数 TH0进行8位定时(T1方式2时,可出借TR1、TF1)第29页/共42页2023/3/23305.3.4 定时/计数器用于外部中断扩展例:用T0扩展一个外部中断源。将T0设置为计数器方式,按方式2工作,TH0、TL0的初值均为0FFH,T0允许中断,CPU开放中断。其初始化程
17、序如下:MOV TMOD,#06H ;置T0为计数器方式2 MOV TL0,#0FFH ;置计数初值 MOV TH0,#0FFH SETB TR0 ;启动T0工作 SETB EA ;CPU开中断 SETB ET0 ;允许T0中断 T0外部引脚上出现一个下降沿信号时,TL0计数加1,产生溢出,将TF0置1,向CPU发出中断请求 第30页/共42页2023/3/23315.3.5 定时/计数器应用举例初始化程序应完成:对TMOD赋值,以确定T0和T1的工作方式;求初值,并写入TH0、TL0或TH1、TL1;中断方式时,要对IE赋值,开放中断;使TR0或TR1置位,启动定时/计数器工作。第31页/共
18、42页2023/3/2332计数应用【例5-5】有一包装流水线,产品每计数24瓶时发出一个包装控制信号。试编写程序完成这一计数任务。用T0完成计数,用P1.0发出控制信号。确定方式字:T0在计数的方式2时:M1M0=10,GATE=0,C/T=1方式控制字为06H 求计数初值X:N=24X=256-24=232=E8H应将E8H送入TH0和TL0中 第32页/共42页2023/3/2333 ORG 0000H LJMP MAIN ORG 000BH LJMP DVT0 ORG 0100HMAIN:MOV TMOD,#06H ;置T0计数方式2 MOV TH0,#0E8H;装入计数初值 MOV
19、TL0,#0E8H SETB ET0 ;T0开中断 SETB EA ;CPU开中断 SETB TR0 ;启动T0 SJMP$;等待中断DVT0:SETB P1.0 NOP NOP CLR P1.0 RETI END主程序 中断服务程序 第33页/共42页2023/3/2334定时应用 定时时间较小时(小于65ms)。晶振为12 MHz时,Tcy为1S。可直接采用方式1完成定时任务。【例5-6】利用定时/计数器T0的方式1,产生10ms的定时,并使P1.0引脚上输出周期为20ms的方波,采用中断方式,设系统的晶振频率为12 MHz。确定方式字:T0在定时的方式1时:M1M0=01,GATE=0,
20、C/T=0方式控制字为01H 求计数初值X:Tcy为1S N=10ms/1S=10 000X=65536-10000=D8F0H应将D8送TH0,F0H送TL0 第34页/共42页2023/3/2335 ORG 0000H LJMP MAIN ORG 000BH LJMP DVT0 ORG 0100HMAIN:MOV TMOD,#01H ;置T0方式1 MOV TH0,#0D8H;装入计数初值 MOV TL0,#0F0H SETB ET0 ;T0开中断 SETB EA ;CPU开中断 SETB TR0 ;启动T0 SJMP$;等待中断DVT0:CPL P1.0 MOV TH0,#0D8H MO
21、V TL0,#0F0H RETI END主程序 中断服务程序 第35页/共42页2023/3/2336采用软件查询方式完成的源程序如下:ORG 0000H LJMP MAIN ;跳转到主程序 ORG 0100H ;主程序 MAIN:MOV TMOD,#01H ;置T0工作于方式1 LOOP:MOV TH0,#0D8H ;装入计数初值 MOV TL0,#0F0H SETB TR0 ;启动定时器T0 JNB TF0,$;TF0=0,查询等待 CLR TF0 ;清TF0 CPL P1.0 ;P1.0取反输出 SJMP LOOP END第36页/共42页2023/3/2337 定时时间较大时(大于65
22、ms)。实现方法:一是采用1个定时器定时一定的间隔(如20ms),然后用软件进行计数;二是采用2个定时器级联,其中一个定时器用来产生周期信号(如20ms为周期),然后将该信号送入另一个计数器的外部脉冲输入端进行脉冲计数。【例5-7】编写程序,实现用定时/计数器T0定时,使P1.7引脚输出周期为2s的方波。设系统的晶振频率为12MHz。确定方式字:T0在定时的方式1时:M1M0=01,GATE=0,C/T=0方式控制字为01H 求计数初值X:Tcy为1S N=20ms/1S=20 000X=65536-20000=4E20H应将4E送TH0,20H送TL0 采用定时20ms,然后再计数50次的方
23、法实现 第37页/共42页2023/3/2338 ORG 0000H LJMP MAIN ORG 000BH LJMP DVT0 ORG 0030HMAIN:MOV TMOD,#01H;置T0方式1 MOV TH0,#4EH;装入计数初值 MOV TL0,#20H;首次计数值 MOV R7,#50 ;计数50次 SETB ET0 ;T0开中断 SETB EA ;CPU开中断 SETB TR0 ;启动T0 SJMP$;等待中断DVT0:DJNZ R7,NT0 MOV R7,#50 CPL P1.7 NT0:MOV TH0,#4EH MOV TL0,#20H SETB TR0 RETI END主程
24、序 中断服务程序 第38页/共42页2023/3/2339门控位的应用【例5-8】测量INT0引脚上出现的正脉冲宽度,并将结果(以机器周期的形式)存放在30H和31H两个单元中。将T0设置为方式1的定时方式,且GATE=1,计数器初值为0,将TR0置1。INT0引脚上出现高电平时,加1计数器开始对机器周期计数。INT0引脚上信号变为低电平时,停止计数 然后读出TH0、TL0的值 第39页/共42页2023/3/2340 ORG 0000H AJMP MAIN ORG 0200H MAIN:MOV TMOD,#09H;置T0为定时器方式1,GATE=1 MOV TH0,#00H ;置计数初值 MOV TL0,#00H MOV R0,#31H ;置地址指针初值(指向低字节)L1:JB P3.2,L1 ;高电平等待 SETB TR0 ;当INT0由高变低时使TR0=1,准备好 L2:JNB P3.2,L2 ;等待INT0变高 L3:JB P3.2,L3 ;已变高,启动定时,直到INT0变低 CLR TR0 ;INT0由高变低,停止定时 MOV R0,TL0 ;存结果 DEC R0 MOV R0,TH0 SJMP$END第40页/共42页第41页/共42页2023/3/2342感谢您的欣赏!第42页/共42页