再次重新启动。
用C语言实现的,先要定义好定时器的初值,不管你使用多大的晶振,使用51单片机,一般都是12分频出来,也就可以得出一个机器周期,机器周期=12/n(n指晶振频率),假设你要定时的时间为M,那么定闹历时的初值为:M/机器周期=初值;
TH0=(65536-初值)%256;
TL0=(65536-初值)/256;
将(65536-初值)所得的值化成16进制,其高位就是TH0的值,低位为TL0的值,例如用12M晶振做1ms定时计算如下:
机器周期=12/12*10^6=1us(微秒)
定时初值=(1*10^-3)/(1*10^-6)=1000
所以:TH0=(65536-1000)%256;
TL0=(65536-1000)/256;
将65536-1000=64536化为16进制为:0xFC18,TH0=0xFC,TL0=0X18
定好初值后要延迟一链弯碧秒就定一个延时参数,这里使用1000就行了(棚举定时为1ms)中断程序为:timer0() interrupt 1 // 1ms延时(12.0MHz)
结构很规矩,这个程序。首先单片机上电复位,运行死循环前面的程序(,你这里就是init_timer() // 应该叫初始化定时器,才合适,让定时器按照你需要的定时长度工作,或叫产生中断 )
接下来单片机主程序就是一直在死循环了。我们的主要任务一般在这里处理。
中断缺歼,就是在处理一些特殊任务,比如按键,或定时处理的程序,或外部一个不知道什么时间发生的任务,或通信任务等等。你在主循环的时候,无论在什么时候,中断请求来了(可以理解为需要处理比较紧急任务,优先处理的任务),就会暂停主循环,进入对应中断服务程序。运伏晌冲行完,在回主循环的暂停地方,继续执行死循环的任务。
定时器中断,就是每过一定时间,运行一下中断服务程序。常用来计时和产生脉冲信号。
初始化定时器,就是给定时器的寄存器,设置工作模式,时钟源,溢出的计数值。设置好了,定时器就能根据每个时谨渣钟源的频率,进行计数,直至溢出,然后产生一个中断请求。如果不饿能自动加载计数初值的定时器,在中断处理函数(服务函数)必须手动加载初值。
1、中断是一个很高明的办法,没有中断时只会顺序执行主程岁悔序中的语句。2、定时器有自己的时钟尘雀携,打开定时器后,一边顺序执行主程序的语句时,一边定时器在计时。当计到设定的值后,需要产生派伏中断,然后暂停主程序语句,转到中断程序中执行的命令。执行完命令后返回到主程序的顺序语句中。然后知道下一次中断来临,再次产生中断。
3、要让其能产生中断,就必须开中断。这就像一个控制开关,不把开关打开,灯怎么会亮。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)