如何调用中断延时程序,要用C语言实现如何做呢?比如调用两次

如何调用中断延时程序,要用C语言实现如何做呢?比如调用两次,第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++

}

一般来说,延时有两种方法,一种是短时等待,一种是定时继续

短时等待一般叫延时,就是简单地用循环计算使CPU停一会再执行下条语句,但这种延时会让CPU把时间浪费在无意义的循环上,如果延时时间过长,对整个系统的效率会有影响;循环延时还有不太精确的问题,难以精确地控制整个延时过程执行的时间。

利用系统提供的定时器或实时时钟硬件设备,配合中断程序设计可以实现中断延时,在中断中进行时间计数,到达时间点时可启动进一步 *** 作,没到时,cpu可以堵塞当前程序运行(就是当前程序释放运行权,并等待标志再恢复运行),其他的程序(线程)就可以在这个程序等待时得到运行了。这也是多任务系统的基础。

举例来说,假设要设计两个窗口同时动画,一个窗口40ms重新绘制一次,另一个窗口80ms重新绘制一次,那么定时中断程序会每隔40ms给A窗口发送更新的消息,80ms给B窗口发送更新消息,这两个窗口只需要设计在接收到更新消息时重绘,然后进入等待消息的状态即可。这样在你看起来,两个窗口都在动,不会因为一个窗口在延时而导致影响另一个的刷新。

返回的时候和软中断一样,在执行的过程中遇到硬件中断源的话,保存现场,执行完硬中断再回到打断的地方,但在返回之前和软中断不一样

软中断要返回的时候用一条iret指令就行了,但硬件中断在返回之前还要通知中断控制芯片硬中断已经结束,具体用以下两条指令实现:

mov al, 20h 8259

out 20h, al end of interrupt

如果不在iret之前添上这两条指令的话,硬中断是不会返回的


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

原文地址:https://54852.com/yw/12189702.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存