51单片机定时器中断程序采用外部中断tiao执行完中断程序几十秒才返回主程序

51单片机中,正在执行定时器中断程序时,定时器是否还在计数? [问题点数:20分,结帖人double_wjl]

就例如下面的一个例子:

如果我让定时器T0,50ms中断一次,但是我在中断函数里面加上了软件延时1000ms,当正在执行中断函数的时候,计数器还会计数吗?在计数满的话,还会申请中断吗?为什么?

所谓单片机是将处理器和定时器,AD等外设集成到一起的一个东西,外设通过处理器初始化,但是外设可以撇开处理器独立运转,中断服务由处理器处理,定时器的TAR计数器由定时器独立处理,因此定时器计数不会因为中断服务的延时而停止计数。

定时器定时产生中断,但是,中断长生后,会有个中断标志置位,你需要清除这个标志才会产生新的中断

这个要看定时器工作模式

执行中断函数时定时器不会计数,这时候只会处理中断服务程序,主函数的世界相当于时间静止了,等中断函数处理完后会回到主函数这时由于你之前已经把定时器打开,并没有关闭,因此定时器会继续计数,但在你程序中使用的是  定时器0中断,方式是“16位定时器”,如果你不在中断服务程序中给定时器重装初值的话,定时器此时会从零开始计数,如要保证每次都是50毫秒,你应在中断程序中给定时器重装初值

这个要看定时器工作模式

定时器TAR不会管你定时器工作模式的,一旦开启就会循环计数。

学习了,我觉的中断延时了,定时器还是会计数的。这个要做实验的。

还在计数,与定时器工作模式无关

产生定时器中断时,定时器已经溢出,结束了计数。当你在定时器的中断服务例程中延时的时候,定时器是等待状态。

执行中断函数时定时器不会计数,这时候只会处理中断服务程序,主函数的世界相当于时间静止了,等中断函数处理完后会回到主函数这时由于你之前已经把定时器打开,并没有关闭,因此定时器会继续计数,但在你程序中使用的是  定时器0中断,方式是“16位定时器”,如果你不在中断服务程序中给定时器重装初值的话,定时器此时会从零开始计数,如要保证每次都是50毫秒,你应在中断程序中给定时器重装初值

51定时器方式中断的使用:

5.中断服务程序:就是定时时间到,你要处理的事务。

        

计数不停。除非TRx=0.

匿名用户不能发表回复!

51单片机中断中断就是cup正在工作的时候,突然外部来了某一请求,要求cpu转去处理请求的事件,当事情做完之后cup再回来继续它的工作。这一过程称为中断 。

单片机中断响应可以分为以下几个步骤:
1、停止主程序运行。当前指令执行完后立即终止现行程序的运行;
2、保护断点。把程序计数器PC 的当前值压入堆栈,保存终止的地址(即断点地址),以便从中断服务程序返回时能继续执行该程序;
4、执行中断处理程序;
5、中断返回。执行完中断处理程序后,就从中断处返回到主程序,继续往下执行。
中断技术不仅解决了快速主机与慢速I/O设备的数据传送问题,而且还具有如下优点:
分时操作:CPU可以分时为多个I/O设备服务,提高了计算机的利用率;
实时响应:CPU能够及时处理应用的随机事件,系统的实时性大大增强;
可靠性高:CPU具有处理设备故障及掉电等突发性事件能力,从而使系统可靠性提高。

2.51单片机中断详解


上图是80C51单片机中断系统的结构,从图中可以看到80C51的中断系统有5个中断源(补充:8052有 6个) ,分别是: 外部中断0/1(P3.2,P3.3),内部中断(定时计数器中断)0/1(P3.4,P3.5),串口中断(这一节先不讨论)
先介绍几个和中断相关的寄存器:

:定时器T1溢出标志,

,TF1也是中断请求源,当CPU响应T1中断时由硬件清零。

:定时器T0溢出标志,可由程序查询和清零,TF0也是中断请求源,当CPU响应T0中断时由硬件清零。

:T1充许计数控制位,为1时充许T1计数(定时)。

:T0充许计数控制位,为1时充许T0计数(定时)。

:外部中断1请示源(INT1,P3.3)标志。IE1=1,外部中断1正在向CPU请求中断,当CPU响应该中断时由硬件清“0”。

:外部中断源1触发方式控制位。为1设置为底电平触发,为0设置为下降沿触发。

:外部中断0请示源(INT0,P3.2)标志。IE0=1,外部中断1正在向CPU请求中断,当CPU响应该中断时由硬件清“0”。

:外部中断源0触发方式控制位。为1设置为底电平触发,为0设置为下降沿触发。

高四位是控制内部中断(定时计数器)的,底四位是控制外部中断的,从中断结构图可以知道,外部中断有两种触发方式,IT0或者IT1为外部中断源触发方式控制位,此位为1设置为电平触发,为0设置为下降沿触发。TF0,TF1,IE0,IE1这四个位都是中断标志位,不需要设置的。

顾名思义,中断允许寄存器就是控制中断是否打开,注意EA总中断,使用任何中断这个位都要置一,当EA=0时,所有中断都将关闭。


80C51单片机有两个中断优先级,即可实现二级中断服务嵌套。51单片机中自然的优先级为:
从中断系统结构图中可以看到,中断优先级分为两级,每一级都是按照自然优先级排列,这样说应该可以理解吧。IP这个寄存器默认值为xx000000b,所有的中断都处在同一级,它就按照自然优先级进行响应。假设我们想人为的把串口的优先级设置为最高,那我们就可以在IP寄存器的PS位写一,这样,串口就被设置为更高一级,它的优先级是最高的。

这样,和单片机外部中断的几个寄存器都讲完了,定时器和串口的中断会分开阐述的。这里重点理解外部中断。

  上面讲中断过程中我们知道,那5个过程都是由计算机自动完成的,与我们无关,我们的工作只是在这5 个入口地址处存放有中断处理的程序,那么怎么具体写中断服务程序呢?


x=0 是外部中断0;
x=1 是定时器中断0;
x=2 是外部中断1;
x=3 是定时器中断1;
x=4 是串行口中断;
y只能取以下值,一般我们是不用后面的using的
y=0 是第0组寄存器;
y=1 是第1组寄存器;
y=2 是第2组寄存器;
y=3 是第3组寄存器;

实现一个外部中断的步骤:
1.设置外部中断源触发方式控制位,为1设置为电平触发。

 IT0=1; //1.设置外部中断源触发方式控制位,为1设置为电平触发。
 

外部中断主要靠外部事件来触发,具有随机性,你靠软件指令来触发,有什么意义?

还不如不用中断,直接跳转到你想要运行的程序

至于你的方法管用不管用,你可以自己试一试,别人不会这么做

外部中断优先级高,我要做一个暂停。

我要回帖

更多关于 51单片机定时器中断程序 的文章

 

随机推荐