标题:
单片机定时器延时哪里不对?
[打印本页]
作者:
hjx5548
时间:
2021-9-26 19:52
标题:
单片机定时器延时哪里不对?
unsigned long SysTick;
void Timer0Init(void) //20毫秒@12.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xE0; //设置定时初始值
TH0 = 0xB1; //设置定时初始值
// TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
}
timer0() interrupt 1
{
TL0 = 0xE0; //设置定时初始值
TH0 = 0xB1; //设置定时初始值
SysTick++;
}
void Delay_20ms(unsigned int var)
{
unsigned long i;
i = SysTick;
while(SysTick-i < var)
{
SysTick=0;
;
}
}
void main()
{
shui=0;re=1;
Timer0Init();
while(1)
{
if(key1==0)
{
Delay_20ms(5);
shui=0;
// delay(2000);
Delay_20ms(5);
re=1;
}
else
{
Delay_20ms(500);
shui=1;
//delay(2000);
Delay_20ms(50);
re=0;
}
}
}
作者:
lkc8210
时间:
2021-9-26 22:57
while(SysTick-i < var)
{
SysTick=0; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;
}
作者:
yzwzfyz
时间:
2021-9-27 10:45
while(SysTick-i < var)
{
SysTick=0;
;
}
这个函数何,进去后SysTick被清0,还能出来吗?
作者:
npn
时间:
2021-9-27 11:18
8位单片机下,中断和main被调用的函数,同时读写int/long/float等全局变量会出错(bit/char除外)。
16位int全局变量,高8位已经赋值进去,此时触发中断,中断内操作该变量的值,中断返回后再去赋值低8位,导致问题出现,并且编译器也发现不了。
作者:
tcc8266
时间:
2021-9-27 11:48
while(SysTick-i < var) { SysTick=0; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ; }
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1