//让发光管状态取反,达到程序目的。另外,定时50毫秒你要给th0和tl0赋给初值,因此
th0=(65536-45872)/256
//重新装载初值tl0=(65536-45872)%256才会有这两句,但定时50毫秒后,你的初值也会随之消失,因此才会在void
t0_time()这个函数中重新赋迅判初值。的确像你所说的初值是装满了开始执行中断,其实从你tmod=0x01
//设置定时器0位工作模式1(m1,m0位0,1)这句已经开始定时了,而赋初值是为了准确的定时50毫秒罢了。明白了没有?
(其实你可以这样理解,定时计数器就好比一个空的瓶子,当你给tmod=0x01时,水就开始一滴一滴的往瓶子你滴,当瓶子满了的时候,中断就发生了。假如从一个空的瓶子滴到满的瓶子定时是80毫秒的话,可你只需要定时50毫秒就够了,所以就要一开始往瓶子里倒水,使滴水的起点不是空瓶子,这就是赋初值的作用。当瓶子满了后,瓶子就会自动清空,重新从零开始。而第二次你再想定闷判时50毫秒,你就必须从新再往瓶子里倒水,这就是第二次赋初值的作用)
中断服务程序过长,可能会出现两种情况:1.运行时间过长,影响同优先极及低优先级的中断的响应,可能单片机就忙着处理中断去了,进而影响后台程序的运行;高优先级的中断在当前中断仿液则响应,会作压栈处理,堆栈空间需求量增大,严重的情况是堆栈备棚空间不够用,程序混乱。
2.中断内部函数嵌套过多,堆栈空间需求量增大,严重的情况是埋誉堆栈空间不够用,程序混乱。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)