标题:
51单片机定时器中断 定时问题求解
[打印本页]
作者:
喵咪zzz
时间:
2022-5-4 00:01
标题:
51单片机定时器中断 定时问题求解
现在正在做一个超声波距离报警,假设距离30cm范围内,每20min重新检测一次,大于30cm2min重新检测一次。还有一个其他的满足条件10min重新检测一次
但是!!!一直调不好时间。。。。请帮我看看这么写对吗?
单片机源程序如下:
void tmer1(void) interrupt 3
{
uchar num,num1,num2;
TH1 =0x3c;
TL1 =0xb0;
switch(flag_time)
{
case 1:
num++;
if(num == 20)// 20*50=1s
{
num =0;
num1++;
if(num1 == 60)//1min
{
num1 =0;
num2++;
if(num2 == 2)
{
num2 = 0;
LED6 =0;
}
}
}
break;
case 2:
num++;
if(num == 20)// 20*50=1s
{
num =0;
num1++;
if(num1 == 60)//1min
{
num1 =0;
num2++;
if(num2== 10)
{
num2 = 0;
LED7 = 0;
}
}
}
break;
case 3:
num++;
if(num == 20)// 20*50=1s
{
num =0;
num1++;
if(num1 == 60)//1min
{
num1 =0;
num2++;
if(num2 == 30)
{
num2 = 0;
LED8 =0;
}
}
}
break;
}
}
复制代码
作者:
188610329
时间:
2022-5-4 03:00
供参考
void tmer1(void) interrupt 3
{
static uchar num,num1,num2;
TH1 =0x3c;
TL1 =0xb0;
if(++num == 20)// 20*50=1s
{
num =0;
if(++num1 == 60)//1min
{
num1 =0;
num2++;
switch(flag_time)
{
case 1:
if(num2 == 2)
{
num2 = 0;
LED6 = 0;
}
break;
case 2:
if(num2== 10)
{
num2 = 0;
LED7 = 0;
}
break;
case 3:
if(num2 == 30)
{
num2 = 0;
LED7 = 1;
}
break;
default:
break;
}
}
}
}
复制代码
作者:
wulin
时间:
2022-5-4 06:46
局部变量num,num1,num2;要声明为静态static或改为全局变量。
void tmer1(void) interrupt 3
{
static uint num;
static uchar min;
TH1 =0x3c;
TL1 =0xb0;
if(++num >= 1200)// 60*0.05=1s
{
num=0;
min++;
}
switch(flag_time)
{
case 1: if(min== 2){LED6=0;LED7=1;LED8=1;min=0;}break;
case 2: if(min==10){LED6=1;LED7=0;LED8=1;min=0;}break;
case 3: if(min==20){LED6=1;LED7=1;LED8=0;min=0;}break;
}
}
复制代码
作者:
喵咪zzz
时间:
2022-5-4 11:11
wulin 发表于 2022-5-4 06:46
局部变量num,num1,num2;要声明为静态static或改为全局变量。
还是不行
,我想我的中断就没有执行。可以帮看一下程序吗
作者:
zhxiufan
时间:
2022-5-4 14:41
代码不全呀,是不是没有初始化定时器,中断打开了吗?定时器启动了吗?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1