#include<reg52h>
#include uahar unsigned char
#include uint undigned int
ucahr cont;
void init()
{
TH0=(65536-50000)/256; //赋初值
TL0=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器中断
TR0=1;//开启定时器0
}
void main()
{
init();//调用初始化子程序
}
void timer0() interrupt 2 //定时程序
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cont++;
if(cont==10)
{
cont=0;
此处是你需要 *** 作的数据,比如你要发光二级管亮灭, 或者数加减!!!
}
}
所谓中断,就是可以打断正常运行的程序,这个程序也可以是正在运行的延时程序,除非程序中主动禁止
定时器中断
,总会到时响应中断,即打断正在运行的程序,去调用
中断服务程序
,结束中断服务程序后,再在断点
恢复现场
继续运行,就好像没有调用过中断服务程序一样。由于中断服务程序打断了delay,因此delay程序实际上延时是原先没有中断程序时多延时
一点时间
(因为延时期间被中断插入执行了若干次服务程序,增加了
运行时间
)
一般单片机在c语言中很难得到精确的延时,所以一般对时间要求高的都用计时器中断来做了。如果时间要求不严格可以用for循环来做,你可以实际测试一下,把时间延时到大概一秒左右,然后烧进单片机里运行,比如一个灯亮灯灭的程序,看着灯计数,同时用秒表计时,几个几十次后取平均值就能知道大概时间了。
以上就是关于单片机500ms延时器程序(中断方式)全部的内容,包括:单片机500ms延时器程序(中断方式)、单片机C语言编程问题:延时函数运行中能否响应中断、单片机c语言的延时程序500ms等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)