疑惑…单片机进入中断后不能执行调延时程序?中断服务程序里已写延时程序…

疑惑…单片机进入中断后不能执行调延时程序?中断服务程序里已写延时程序…,第1张

通常在中断程序中是不调用延时子程序的,这样会增加中断处理时间,如果有其它低级中断了,就会延误响应中断了。所以,中断子程序中不要写调用延时子程序,中断子程序也不要写得过长,处理过多的任务,要尽快处理后及时返回,如果中断一次有很多任务需要执行完全,可以在中断子程序中设置一个标志位,在主程序中查这个标志位,当标志为1时,就在主程序中完成这些任务,这样就不会影响其它中断源的中断,也不会使中断产生混乱。

但不知,你这提问是想帮你写程序昵,还是帮你分析中断程序的写法。

哥实在不知道你说的是什么意思。我就按我想的写吧

好久都没有写51了,原谅里面的一些小错误,你自己再动动脑就行了!希望能帮到你,以后互相交流

#include<reg52.h>

void init()

{

TMOD=0x01

TH0=(65536-50000)/256

TL0=(65536-50000)%256

EA=1

ET0=1

TR0=1

}

void main()

{

Init()

while(1)

{

if(aa==20)//当延时一秒时,进入程序

{

P1^1=1 //自己随便接个灯,灯亮

aa=0 //清0

TR0=1 //重新打开定时器

}

}

}

void timer0() interrupt 1//这是中断程序,延时50毫秒,

{

TH0=(65536-50000)/256

TL0=(65536-50000)%256

aa++

}

当然要算上

执行过的指令消耗的指令周期都要考虑的,包括int也应该算上

不过如果循环的次数很多的话,由于int和reti只执行一次,这样相对于循环过程的话,这两条指令消耗的指令周期就可以忽略不计了(如果把1000000加上1的话,其实根本没有什么变化)但如果是短时间的延时的话,还是应该考虑的(1加上1的话,变化是很大的,是原来的2倍!)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11727229.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存