看了大师关于定时器的使用方法,感觉有很多不明白的地方向大家请教。
原帖,https://bbs.21ic.com/forum.php?mo ... p;page=1#pid1984243
原来的程序
void Time0Isr(void) interrupt 1
{
TH0 = 0xfc ; //定时器重新赋初值
TL0 = 0x66 ;
g_bSystemTime1Ms = 1 ; //1MS时标标志位置位
}
void LedStateChange(void)
{
if(g_bSystemTime1Ms) //系统1MS时标到
{
g_bSystemTime1Ms = 0 ;
g_u16LedTimeCount++ ; //LED计数器加一
if(g_u16LedTimeCount >= 500) //计数达到500,即500MS到了,改变LED的状态。
{
g_u16LedTimeCount = 0 ;
g_u8LedState = ! g_u8LedState ;
}
}
}
如果我现在要用1602液晶,其中有延时程序
{ XXXXXXXXX //执行X动作
//加延时2MS
if(g_bSystemTime1Ms) //系统1MS时标到 //假如g_bSystemTime1Ms系统1MS没到,是不是中间就没延时了,执行X动作就直接执行Y了,为了保证有2MS的延时函数应该怎么修改呢?
{
g_bSystemTime1Ms = 0 ;
g_u16LedTimeCount++ ; //LED计数器加一
if(g_u16LedTimeCount >= 2) //计数达到2,即2MS到了
{
g_u16LedTimeCount = 0 ;
// g_u8LedState = ! g_u8LedState ; //这句不要
}
}
YYYYYYYYYYYYYYY //执行Y动作
}
1怎样把定时器延时函数写成一个类以前delay(2)的形式使之可以方便调用呢?
2如果使用的定时器溢出中断来形成的定时函数,那么在使用其他中断(比如ADC中断)在时间上应该注意什么,防止两个中断抢时间(比如在执行ADC中断的时候,定时器中断又到了,又去执行定时器了)?
|