标题:
帮忙看看为啥九齐IC的定时器没有生效?
[打印本页]
作者:
1481509156
时间:
2024-10-7 09:44
标题:
帮忙看看为啥九齐IC的定时器没有生效?
九齐IC实现按键长按电机工作,一分钟内按键松手就关闭电机,一分钟后按键不松手也关闭电机。以下是我的代码,目前没法实现定时一分钟电机关闭这个步骤,大佬们帮忙看下是哪里问题?定时器为啥没起作用?
void main(void)
{
Timer1_INIT();
while(1)
{
KEY1_INIT()
;
MOOE_OUT();
}
}
void
isr(
void
) __interrupt(
0
)
{
if
(INTFbits.T1IF)
{
LED_H2++
;
if
(LED_H2
>
=
4000
)
//1S
{
cnt_timer++
;
if
(cnt_timer
>
=
60
)
{
flag=
1
; //1分钟定时标志位
cnt_timer=
0
;
}
LED_H2=
0
;
}
INTF = (
unsigned
char
)~(C_INT_TMR1)
;
// Clear T1IF flag
}
if
(INTFbits.PABIF)
// 外部状态变化中断
{
INTFbits.PABIF =
0
;
// 清中断标志位
}
}
void
KEY1_INIT(
void
) //按键长按判断
{
if
(K1){K1_SDA=
0
;
K1_H1=
0
;
K1_CON=
0
;
LED_fflag=
0
;
}
if
(K2){K1_cnt=
0
;
}
if
(K1==
0
)
{
K1_SDA=
1
;
K1_H1++
;
if
(K1_H1
>
30
){K1_NUM=
2
;
}
if
(K1_H1
>
=
1000
){K1_NUM=
1
;
K1_CON=
1
;
}
}
if
(K1_NUM==
1
&&
K1_CON)
{
K1_H1=
1000
;
MOOE=
1
;
LED_fflag=
1
;
K1_cnt=
0
;
K1_NUM=
0
;
K1_CON=
1
;
}
}
void
Timer1_INIT(
void
) //定时器1配置
{
TMRH =
0
;
TMR1 =
250
;
T1CR1 =
0x02
;
T1CR2 = C_TMR1_ClkSrc_Inst | C_PS1_Div4
;
INTE = C_INT_TMR1 | C_INT_TMR0
;
}
void
MOOE_OUT(
void
)
{
if
(MOOE==
0
){M1=
0
;
L1=L2=
1
;
}
if
(MOOE==
1
)
{
if
(K1==
0
&&
K2==
0
&&
let_power==
0
) //let_power是电压的判断无需理会
{
CLRWDT()
;
M1=
1
; //打开电机
LED1=L1
;
LED2=L2
; //亮灯判断
if
(LED_fflag==
1
)
{
T1CR1=
0x03
; //开启定时器1
LED_H2=
0
; //计数器清零
if
(flag==
1
)
{
T1CR1=
0X02
; //关闭定时器1
// POWER=0;
M1=
0
; //关闭电机
MOOE=
0
;
L1=L2=
1
; //灭灯
flag=
0
;
}
LED_fflag=
0
;
}
}
else
{
M1=
0
;
T1CR1=
0X02
;
L1=L2=
1
;
MOOE=
0
;
}
}
}
作者:
飞云居士
时间:
2024-10-8 13:29
定时器中断标志位清除:你在中断服务程序中清除了 T1IF 标志位,但是你的代码中没有看到定时器溢出后重新启动定时器的代码。你需要确保在每次中断服务程序执行完毕后,定时器能够继续计数。
定时器溢出检测:你的代码中使用了 TMRH 和 TMR1 来设置定时器的初始值,但是没有看到检测定时器溢出的代码。通常,当定时器溢出时,需要重新设置定时器的初始值,以便它能够继续计数。
在你的 MOOE_OUT 函数中,你有一个 if 语句检查 MOOE 的状态,但是 MOOE 的值似乎并没有在其他地方被改变。这可能会导致电机永远不会关闭。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1