第6章80C51的中断系统及定时计数器_第1页
第6章80C51的中断系统及定时计数器_第2页
第6章80C51的中断系统及定时计数器_第3页
第6章80C51的中断系统及定时计数器_第4页
第6章80C51的中断系统及定时计数器_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

2023/1/311第6章80C51的中断系统及定时/计数器80C51单片机的中断系统6.180C51单片机的中断处理过程6.280C51单片机的定时/计数器6.380C52的定时/计数器26.4与上对比,单片机中也有同样的问题。CPU正在执行原程序,突然,被意外事情打断,转去执行新程序。CPU执行新程序结束后,又回到原程序中继续执行。这样的过程就叫。中断

某同学正在教室写作业,忽然被人叫出去,回来后,继续写作业。这就是生活中中断的例子。

6.180C51单片机的中断系统2023/1/3136.180C51单片机的中断系统6.1.180C51中断系统的结构

CPU进行工作A时发生了事件B,请求CPU马上处理

CPU暂时中断当前工作A,转去处理事件B

事件B处理完后,回到工作A被中断的地方继续处理A工作

中断的概念中断源中断请求

中断服务中断返回中断系统中断的优点:

CPU利用率高

控制实时性强系统可靠性好中断举例中断源、中断允许控制、中断优先级处理、中断嵌套、中断响应过程中断和子程序调用的区别中断服务程序1中断服务程序2中断事件1中断事件

25.2MCS-51单片机的中断流程、中断嵌套

主程序单片机中断的应用举例例1假设某消防队坐落在道路的一边,正常情况下,交通红绿灯以30s的间隔轮流点亮,当有消防任务时,消防官兵只需要按一下设置在路边的消防紧急按钮,则道路交通灯就会变成红灯并持续10s时间,禁止其他车辆通行,使消防车可以顺利通过,用51单片机的中断可以实现上述功能。例2在工业应用场合经常利用中断电路来实现系统的故障显示。假设有四个终端设备和主控室相连接,主控室可以采用报警或指示灯等方式表示终端设备是否正常工作。当终端设备正常工作时,主控室指示灯灭,当终端设备工作异常时,主控室指示灯亮,用单片机中断电路可以实现。总结:单片机的中断能实现哪些功能?解决快速CPU和慢速外设之间的矛盾,使CPU和外设可以并行工作。具备故障处理能力,提高机器自身的可靠性。中断方式消除了CPU在查询方式中的等待现象,大大提高了CPU的工作效率。及时采集、实时控制。将现场采集的数据通过中断方式及时传送给CPU,经过处理后立即做出反应,实现现场控制。2023/1/319

80C51中断系统的结构5个中断源、2个优先级中断请求中断允许寄存器中断请求标志寄存器想要接听电话必须有两个条件:电话铃必须响;你听到铃声响。对于51单片机同样如此,光有中断源是不够的,还必须能够被接收到。51单片机采用设置中断请求标志寄存器TCON和串行口中断请求标志寄存器SCON。接收到则相应位置1。这样MCS-51单片机工作时,在每个机器周期中都会去查询中断标志寄存器,看哪位是1,如果某位是1,就说明其对应中断源有中断请求,并被单片机接受到。2023/1/3111

中断源

中断服务程序入口地址****6.1.280C51的中断源外部中断0(INT0)0003H外部中断1(INT1)0013HT0溢出中断(TF0)000BHT1溢出中断(TF1)001BH串行口中断(RI或TI)0023H2023/1/3112触发方式设置及中断标志电平方式(ITx=0),INTx引脚低电平时IEx=1,响应中断后IEx不自动清0(INTx引脚状态)。边沿方式(ITx=1),INTx引脚负跳变时IEx=1,响应中断后IEx自动清0。外部中断标志IE1、IE0(用IEx表示)2023/1/3113两种触发方式比较:

电平方式时,INTx低电平必须保持到响应时,否则就会漏掉;在中断服务结束前,INTx低电平必须撤除,否则中断返回之后将再次产生中断。

例,8255的中断请求在接受读或写操作后即被复位,因此以其去请求电平触发方式的中断比较方便。边沿方式时,采样到有效下降沿后,在IEx中将锁存一个1。若CPU暂时不能响应,申请标志也不会丢失,直到响应时才清0。

例,ADC0809的转换结束信号EOC为正脉冲,经反相后就可以作为80C51的INTx信号。2023/1/3114溢出中断标志TF1、TF0(用TFx表示)溢出中断请求标志TFx,Tx启动后就开始由初值进行加1计数,直至产生溢出使TFx=1向CPU请求中断。CPU响应中断后TFx自动清0。

SCON的中断标志RI:串口接收中断标志,响应中断时不能自动清除

TI:串口发送中断标志,响应中断时不能自动清除

MCS-51系列单片机中断源中断标志2023/1/31176.1.380C51中断的控制中断允许控制中断源的开放和屏蔽由IE控制(1,开放;0,禁止)EX0:外中断0允许ET0:T0中断允许

EX1:外中断1允许ET1:T1中断允许ES:串口中断允许

EA:CPU中断允许单片机复位时,IE各位清0,禁止所有中断***单片机复位时,TCON和SCON各位清0***中断的开放和禁止

2023/1/3119中断优先级控制中断优先级由IP控制(1,高级;0,低级)PX0:外中断0优先级

PT0:T0中断优先级PX1:外中断1优先级PT1:T1中断优先级PS:串口中断优先级同一优先级的自然顺序:自高至低:INT0、TO、INT1、T1、串口。

中断优先原则:(概括为四句话)1、低级不打断高级2、高级不睬低级3、同级不能打断4、同级、同时中断,事先约定。

2023/1/3121

中断优先级遵循的原则***几个中断同时申请,先响应高级的中断正进行的中断服务,同级或低级中断不能对其中断,但可以被高级中断所中断。

为此,中断系统内设有对应高、低2个优先级状态触发器(用户不能寻址)。状态触发器的复位由中断返回指令RETI控制。2023/1/31226.2

80C51单片机中断处理过程6.2.1中断响应条件和时间

中断响应条件****有中断请求

相应的中断允许位为1CPU开中断(即EA=1)

遇下面情况之一将不被响应(此间中断条件失效,中断丢失)

正在处理同级或高级中断

当前选择周期不是所执行指令的最后一个机器周期

正在执行RETI或访问IE或IP

的指令

2023/1/3123中断响应时间中断响应至少需要3个完整的机器周期(3~8个)!受阻时要附加3~5个机器周期(无同级或高级中断正进行)

排序周期不是指令的最后机器周期(如MUL,5个)排序周期恰逢RETI类指令(要再跟指令,若是MUL,8个)响应时间(1)最快响应时间以外部中断的电平触发为最快。从查询中断请求信号到中断服务程序需要三个机器周期:1个周期(查询)+2个周期(长调用LCALL)(2)最长响应时间

若当前指令是RET、RETI和IP、IE指令,紧接着下一条是乘除指令发生,则最长为8个周期:2个周期执行当前指令(其中含有1个周期查询)+4个周期乘除指令+2个周期长调用=8个周期。2023/1/31256.2.2中断响应过程

CPU响应中断过程将相应优先级状态触发器置1(阻断后来同级或低级中断)执行硬件LCALL指令(PC入栈,中断服务程序入口址送PC

)执行中断服务程序

编写中断服务程序注意中断服务程序入口存放指令LJMP或AJMP现场保护与现场恢复2023/1/31266.2.3中断返回中断服务程序最后指令必须是RETI,其功能:将断点从堆栈弹送PC,CPU从原断点继续执行将相应优先级状态触发器清0,恢复原来工作状态注意不能用RET代替RETI

中断服务程序中PUSH和POP必须成对使用2023/1/31276.2.4中断程序举例【例6-1】单外部中断源示例voidEx0()interrupt0{Flag=~Flag;}while(1){if(Flag==0)//左移{ScanNum=_crol_(ScanNum,1);P2=ScanNum;}else//右移{ScanNum=_cror_(ScanNum,1);P2=ScanNum;}DelayMs(500);}2023/1/3128【例6-2】如图所示,编写程序实现:系统上电后,数码管显示“P”。按下S0键则数码管进行加计数,S1键则数码管进行减计数。计数值显示在数码管上。voidEx0Isr()interrupt0{if(Flag0==0)Flag0=1;Flag1=0; }voidEx1Isr()interrupt2{ if(Flag1==0)Flag1=1;Flag0=0; }

2023/1/31296.380C51单片机的定时/计数器结构基本型:T0,定时、计数。T1,定时、计数、串口波特率发生器。增强型:增加了T2。见5.3.4节。6.3.1定时/计数器的结构和工作原理TH1、TL1TH0、TL0TCONTMOD2023/1/3130工作原理---实质是16位加1计数器定时器模式时,对内部机器周期计数。定时时间=计数值*机器周期计数器模式时,是对外部脉冲计数。脉冲由T0(P3.4)或T1(P3.5)引脚输入。

注意:(若计数值为N,计数初值为X)溢出信号使TF0或TF1置1,并发出中断请求,16位时有:X=65536-N12MHz晶振时,计数频率低于0.5MHz

2023/1/3131控制寄存器TCONTFx:Tx溢出标志位。响应中断后TFx有硬件自动清0。用软件设置TFx可产生同硬件置1或清0同样的效果。TRx:Tx运行控制位。置1时开始工作;清0时停止工作。TRx要由软件置1或清0(即启动与停止要由软件控制)。6.3.2定时/计数器的控制2023/1/3132工作方式寄存器TMODGATE:门控位。GATE=0时,只要TRx为1,就可启动计数器工作;GATA=1时,定时器的启动还要加上INTx引脚为高电平这一条件。

C/T:模式选择位。清0为定时模式,置1为计数方式。M1M0:工作方式设置位。可设置四种工作方式(见下页)。2023/1/3133门控位作用当GATE=0时仅由TR0控制与门的开启。与门输出1时,控制开关接通,计数开始;当GATE=1时与门的开启由INT0和TR0共同控制。这种方式可以用来测量INT0引脚上正脉冲的宽度。

2023/1/3134注意:TMOD不能进行位寻址

定时器的四种工作方式主要特点:方式0:13位定时器。TH0的8位+TL0的低5位方式1:16位定时器。TH0的8位+TL0的8位方式2:能重复置初始值的8位定时器。TL0和TH0必须赋相同的值。方式3:只适用于定时器0,T0被拆成两个独立的8位定时器TL0,TH0。其中:TL0与方式0、1相同,可定时或计数。用定时器T0的GATE、C/T、TR0、TF0、T0、和INT0控制。

TH0只可用作简单的内部定时功能。占用T1的控制位TF1、TR1和INT1,启动关闭仅受TR1控制。注意:方式0的计数初值高8位和低5位确定麻烦

,实际应用中常由16位的方式1取代。例如:设定时器T0为定时工作方式,要求用软件启动定时器T0工作,按方式1工作;定时器T1为计数工作方式,要求软件启动,工作方式为方式2。则根据TMOD各位的定义可知,其控制字为:即控制字为61H,其指令形式为:

MOVTMOD,#61H格式:D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M001100001定时器的初始值的计算对于不同的工作方式,计数器位数不同,故最大计数值M也不同:

方式0:M=213=8192

方式1:M=216=65536

方式2:M=28=256

方式3:定时器0分为2个8位计数器,每个M均为256。因为定时/计数器是作加1计数,并在计满溢出时产生中断,因此初值X的计算如下:

X=M–计数值

计算出来的结果X转换为16进制数后分别写入TL0(TL1)、TH0(TH1)。注意!方式0时初始值写入时,对于TL不用的高3位应填入0!2023/1/3138C/T=1时,则为计数模式,有:

X=213-N=8192-NC/T=0时,则为定时模式,有:

X=213-N=8192-N,N=t/Tcy【例5-3】若计数个数N为2,求计数初值。公式法计算:X=8192-2=8190=1FFEH求补法计算:对0000000000010B取反加1为:

1111111111110B(1FFEH)初值计算:公式法

求补法:X=对N求补2023/1/31396.3.3定时/计数器的工作方式T0有方式0、1、2、3;T1有方式0、1、2。以T0为例说明。方式0:13位方式

2023/1/3140方式1:16位方式

X=216-N=65536-N计数范围:1~65536

计数初值要分成2个字节分别送入TH0、TL02023/1/3141【例6-4】若要求定时器T0工作于方式1,定时时间为1ms,当晶振为6MHz时,求送入TH0和TL0的计数初值各为多少?应怎样送入TH0和TL0?由于晶振为6MHz,所以机器周期Tcy为2µS,因此:N=t/Tcy=1×10-3/2×10-6=500X=216-N=65536-500=65036=FE0CH也可以利用以下2条语句完成:

TH0=(65536-500)/256;商为计数初值的高字节

TL0=(65536-500)%256;余数为计数初值的低字节分别将FEH送入TH0中,0CH送入TL0中即可。2023/1/3142方式2:8位自动重装方式

X=28-N=256-N计数范围:1~256

特别适合与脉冲信号发生器2023/1/3143方式3:(仅T0有此方式,T1的方式3将停止计数)

TL0进行8位定时/计数TH0进行8位定时(T1方式2时,可出借TR1、TF1)在单片机的串行应用中,T1常作为串行口波特率发生器,此时可将T0设为方式3。用T1、工作方式0实现1秒延时函数,晶振频率为12MHz。解:方式0采用13位计数器,其最大定时时间为:8192×1s=8.192ms,因此,定时时间不可能选择50ms,可选择定时时间为5ms,再循环200次。定时时间为5ms,则计数值为5ms/1s=5000,T1的初值为:

X=M计数值=81925000=3192=C78H=0110001111000B13位计数器中TL1的高3位未用,填写0,TH1占高8位,所以,X的实际填写值应为:X=0110001100011000B=6318H举例1用T1方式0实现1秒延时函数如下:voiddelay1s(){unsignedchari;TMOD=0x00; //置T1为工作方式0

for(i=0;i<0xc8;i++)

{

//设置200次循环次数

TH1=0x63;

//设置定时器初值TL1=0x18;TR1=1; //启动T1while(!TF1);//查询计数是否溢出,即定时5ms时间到,TF1=1TF1=0;

//5ms定时时间到,将定时器溢出标志位TF1清零}}举例1用T1、工作方式2实现1秒延时,晶振频率为12MHz。解:因工作方式2是8位计数器,其最大定时时间为:256×1s=256s,为实现1秒延时,可选择定时时间为250s,再循环4000次。定时时间选定后,可确定计数值为250,则T1的初值为:

X=M计数值=256250=6=6H。采用T1方式2工作,因此,TMOD=0x20。举例2用定时器工作方式2实现的1秒延时函数如下:voiddelay1s(){unsignedinti;

//i取值为0~4000,故不能定义成unsignedcharTMOD=0x20; //设置T1为方式2TH1=6; //设置定时器初值,放在for循环之外TL1=6;

for(i=0;i<4000;i++)

{

//设置4000次循环次数

TR1=1; //启动T1

while(!TF1);

//查询是否溢出,即定时250s到,TF1=1

TF1=0; //250s定时到,将溢出标志位TF1清零}}举例22023/1/31486.3.4定时/计数器应用举例初始化程序应完成:对TMOD赋值,以确定T0和T1的工作方式;求初值,并写入TH0、TL0或TH1、TL1;中断方式时,要对IE赋值,开放中断;使TR0或TR1置位,启动定时/计数器工作。2023/1/3149计数应用【例6-3】有一包装流水线,产品每计数24瓶时发出一个包装控制信号。试编写程序完成这一计数任务。用T0完成计数,用P1.0发出控制信号。确定方式字:T0在计数的方式2时:M1M0=10,GATE=0,C/T=1方式控制字为06H

求计数初值X:N=24X=256-24=232=E8H应将E8H送入TH0和TL0中2023/1/3150while(1){if(Flag=

=1){Flag=0;P37=0;P0=SegCode[Counter];DelayMs(20);P37=1; }}主程序(部分)

中断服务程序

voidC0Isr(

)interrupt1{Flag=1;Counter++;if(Counter=

=13)Counter=0;}2023/1/3151定时应用定时时间较小时(小于70ms)。晶振为11.0592MHz时,Tcy为1.085µS。可直接采用方式1完成定时任务。

【例6-4】利用定时/计数器T0的方式1,产生10ms的定时,并使P2.7引脚上输出周期为20ms的方波,采用中断方式,设系统的晶振频率为11.0592MHz。确定方式字:T0在定时的方式1时:M1M0=01,GATE=0,C/T=0方式控制字为01H

求计数初值X:Tcy为1.085µSN=10ms/1.085µS=9216X=65536-9216=DC00H应将DC送TH0,00H送TL0

2023/1/3152voidmain(void){TMOD=0x01;TL0=0xDC;TH0=0x00;IE=0x82;TR0=1;while(1); }主程序

中断服务程序

voidT0Isr()interrupt1{P27=~P27;TL0=0xDC;TH0=0x00;}2023/1/3153定时时间较大时(大于70ms)。实现方法:一是采用1个定时器定时一定的间隔(如20ms),然后用软件进行计数;二是采用2个定时器级联,其中一个定时器用来产生周期信号(如20ms为周期),然后将该信号送入另一个计数器的外部脉冲输入端进行脉冲计数。

【例6-5】编写程序,实现用定时/计数器T0定时,使P2.7引脚输出周期为1s的方波。设系统的晶振频率为11.0592MHz。确定方式字:T0在定时的方式1时:M1M0=01,GATE=0,C/T=0方式控制字为01H

求计数初值X:Tcy为1µSN=20ms/12/11.0592=18432X=65536-18432=B800H应将B8送TH0,00H送TL0

采用定时20ms,然后再计数25次的方法实现2023/1/3154voidmain(void){TMOD=0x01; TL0=0x00;TH0=0xB8;IE=0x82;TR0=1;while(1); }voidT0Isr()interrupt1{staticucharCounter;Counter++;if(Counter==25){P27=~P27;Counter=0; } TL0=0x00;TH0=0xB8;}主程序

中断服务程序

2023/1/3155门控位的应用【例6-6】测量INT0引脚上出现的正脉冲宽度,并将结果(以机器周期的形式)存放在30H和31H两个单元中。将T0设置为方式1的定时方式,且GATE=1,计数器初值为0,将TR0置1。INT0引脚上出现高电平时,加1计数器开始对机器周期计数。INT0引脚上信号变为低电平时,停止计数然后读出TH0、TL0的值

单定时器产生多定时间隔(略)2023/1/3156while(1){TMOD=0x09;TL0=0;TH0=0;while(P32);TR0=1;while(!P32);while(P32);TR0=0;Low=TL0;High=TH0;}

主程序(部分)

6.480C52的定时/计数器T2T2矢量地址002BH;T2还

温馨提示

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

评论

0/150

提交评论