定时器中断

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定时器中断相关的知识,希望对你有一定的参考价值。

我在程序中设置中断时间为10ms,在中断中执行一段程序,如果中断中执行的这段程序的时间超过10ms,或者接近10ms,会出现什么情况??是不是产生了死机现象,就是还没有退出中断后又进入了中断??
另外,在中断中执行的程序时间占中断时间的比例是多少好呢??
不知道我的理解是否正确??请大家帮忙详细解释一下,谢谢!!
void main()

TMOD=0x01;// 定时器0,工作在模式1方式
TR0=1;
ET0=1;
EA=1;
while(1)
;

void timer0() interrupt 1 using 0 // 定时器0中断

TH0 = (65535-10000)/256; // 10ms
TL0 = (65535-10000)%256;

调用子函数部分;

我想问的是:如果“调用子函数部分”程序执行时间大于10ms,会出现什么情况?另外,“调用子函数部分”程序的执行时间是否只要小于10ms程序就可以正常运行呢??“调用子函数部分”的执行时间是否是越短越好呢??

你中断服务程序有10MS? 你是不是加了延时啊 要不就是你写的代码很长,
你的定时器是设成带重装的吗
如果带 你进入中断服务程序后先暂停定时器 结束中断前再打开
如果不带 你就把重新赋值的语句写到结束中断前

中断时间是10MS 是指从定时器开始计时到中断响应为止,并不是从中断响应到中断结束
参考技术A 应该不会出现你说的还没出中断又入中断的情况!因为中断发生后,CPU会停止当前运行的所有工作而去执行中断程序,等中断结束后又从断点处执行!就是当中断没执行完的话,定时器的中断标志一直是置1的状态~定时器不会计时!
我也不很肯定,明天我测下再告诉你吧~~

关于在51定时器中断语句中关闭中断的问题

最近在看51的一个程序,发现一个程序不太明白,个人没见过这样的中断,中断程序如下:

void timer0_IT(void) interrupt1 /*定时器0中断*/


TR0=0;

TH0=0x00; /*init values*/

TL0=0x00;

TR0=1; /*timer0 run*/

timer0_counter++;

if(timer0_counter>25)


//ET=0;

Uploading_Data=0;

Mdata=1;

timer0_counter=0;





现在不明白的是,当定时器溢出的时候在这里面关闭定时器中断会马上停止这个中断吗?TR0=0后面的程序还执行不执行?先TR0=0后TR0=1有什么作用?

当定时器溢出的时候,中断标志位TF0置1,cpu会产生中断,接着程序跳转去执行中断服务程序void timer0_IT(void) interrupt1,同时中断标志位TF0自动置0,cpu不会再产生中断,接着执行void timer0_IT(void) interrupt1函数里面的语句,直到定时器再次溢出才会产生中断。

在执行中断服务程序时要关闭定时器,防止溢出,执行完后再打开定时器,让其溢出产生中断。
参考技术A TR0=0后面的程序还可以执行

以上是关于定时器中断的主要内容,如果未能解决你的问题,请参考以下文章

关于定时器中断怎么理解?

关于在51定时器中断语句中关闭中断的问题

51单片机定时器中断

请问单片机定时器中断是怎么样的过程啊

进入定时器中断函数后,定时器数据还在工作吗?

标准库定时器及中断