关于定时中断的问题
多用几个i++,k++。m++。
使用定时器T0和T1可以实现2个定时
如果两个定时不够用,该怎么做呢?
用一个全局变量,第一次进中断,先关中断,来个if全局变量判断,在if{}里面设置项要的时间,最后在开。
理论上是可以的
定时器中断的时候,设置多个参数不就可以了吗?
比如 每次中断 x y z 都+1
x 100的时候,一个操作,然后清零
y 125的时候,一个操作,然后清零
z 300的时候,一个操作,然后清零
这样不就3个了?
这样子的话,y=125的时候如何保证,x=100的时候不动作?
现在的情况不就是100 125 150的时候动作吗?
而且由于用的是3个变量,根本不会相互影响,因为每个中断函数里,进行什么操作,每个参数是否归0,还是变成多少,都可以在中断函数里进行区分。
只需要在中断函数里对每个变量进行判断,根据判断结果进行操作就行了。
比如,现在有个要求,LED1每100个中断变化一次,LED2每125个,LED3每150个,初始化时x y z都为0,每个中断函数里都+1,每次进中断,判断x?=100,y?=125,z?=150,如果是,相应的LED=~LED,然后相应的参数归0,不就可以了?
void timer0(void)interrupt 1 using 1
{
count0++;
if(count0==20)
{
count0=0;
n++;
if(n==2)
{
p16=1;
}
else if(n==4)
{
n=0;p16=0;TR0=0;
}
}
else
{TH0=0x4c;TL0=0x00;}
}
我用这种方法可以对一个按键两段定时,如果再加一个按键的话就不知道如何弄了
你这种方法是可以的,呵呵,非常感谢!
baozhongh,厉害,赞一下
现在还有个问题,比如按键1对应X,按键2对应Y,按键3对应Z,到按下按键1,X快到100的时候比如90,按下按键2,这样子的话,按键2的延时就只有35就没有125了。
我晕,你不是要x y z独立吗,y只管自己,每到125就清0,别的怎么样跟它没有关系的
基本方法就是这样,具体问题要具体处理啊,不过,中断函数里都可以判断区分的,逻辑关系想明白了,把各个情况都考虑一下,看看程序的逻辑关系符合不符合就行啦