标题:
51单片机定时器延迟按键的奇怪问题
[打印本页]
作者:
forest415
时间:
2024-1-19 20:33
标题:
51单片机定时器延迟按键的奇怪问题
下面的程序是对的没有错误,有一个疑惑:
在定时器中断子程序中我把 if(flagkey==0){ 改成 if(flagkey==1) 就不正常,这是什么原因呀,正常不是应该就等于1吗?在检定按键程序里
if(p01 == 0){
flagkey=1;
TR0 = 1;//这里才是要进中断的地方呀为什么就不正常呢
}
else{
flagkey=0; //为什么这个正常
}
单片机源程序如下:
/*------------定时器----------------*/
void Timer0Init(void) //10Ms
{
TMOD = 0x01;
TH0 = 0x0D8;
TL0 = 0x0F0;
EA = 1;
ET0 = 1;
//TR0 = 1;
}
/*------------检察按键----------------*/
void anjian(void)
{
if(p01 == 0){// 检测按键是否按下
flagkey=1;
TR0 = 1;//按键按下开始计时,溢出后中断
}
else{
flagkey=0;
}
}
/*------------主程序----------------*/
void main()
{
Timer0Init(); //定时器初始化
while(1)
{
anjian(); //检察按键
}
}
/*------------定时器中断子程序----------------*/
void Timer0Interrupt(void) interrupt 1{
if(flagkey==0){ //改成if(flagkey==0){程序就有问题if(flagkey==0){
flagkey=999;
Timer0Init_count ++;
if(Timer0Init_count>5){
TR0 = 0;//关定时器
TH0 = 0x0D8;//赋初值
TL0 = 0x0F0;
P10 = ~P10;
}}
}
复制代码
作者:
tyrl800
时间:
2024-1-20 08:28
程序不完整
作者:
Graves
时间:
2024-1-20 09:16
试下改成if(flagkey==1)时,按按键久一点什么效果
作者:
cocolala
时间:
2024-1-20 10:14
1、软件IO口判断是否为1取决于硬件电路。
2、你需要把硬件电路按键检测部分上下图,脱离硬件的软件设计是危险的。
作者:
597329015
时间:
2024-1-20 11:02
根据你提供的代码,在定时器中断子程序中,你将 if(flagkey==0) 改为了 if(flagkey==1)。这导致程序出现问题的原因是,flagkey 的初始值为0,当按键按下时,会将 flagkey 设置为1,然后开启定时器。而在定时器中断子程序中,你判断 flagkey 是否为0,如果不为0,则执行相应的操作。
因此,当你将 if(flagkey==0) 改为了 if(flagkey==1) 时,定时器中断子程序只有在 flagkey 的值为1时才会执行相应的操作。但是根据你提供的代码逻辑,在按键按下后,会将 flagkey 设置为1,并开启定时器,所以此时 flagkey 的值应该是1。
因此,将 if(flagkey==0) 改为 if(flagkey==1) 会导致定时器中断子程序无法执行相应的操作,从而导致程序异常。你可以将 if(flagkey==0) 改回来,以恢复正常运行的状态。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1