无法从 atmega128 C 代码中找到错误
Can't find error from atmega128 C code
这是 ATMEGA 128 微控制器中的 3 位定时器代码。如果你按下连接到端口 D 的按钮,定时器将启动。但是,如果您按住它一会儿,计时器将重置。在 proteus 模拟中,我按下按钮后,微控制器仅计数为 1。从那以后什么都没有发生(显示仍然是“001”)
#define F_CPU 4000000UL
#include<avr/io.h>
#include<avr/delay.h>
int x;
int button_check(int x)
{ DDRD = 0x00;
if(PIND==0xFF)
{
_delay_ms(200);
if(PIND==0xFF)
{ x=1;}
else
{ x=0;}
}
else
{ x=x;}
return x;
}
int main(void)
{
int a,b,c;
DDRA = 0xFF;
DDRB = 0xFF;
DDRC = 0xFF;
x=1;
while(1)
{
a=0;
b=0;
c=0;
while(button_check(x)==0) //starting condition
{ _delay_ms(200);
if(a==9)
{ a=0;
if(b==9)
{ b=0;
if(c==9)
{ c=0;}
else
{ c=c+1;}
}
else
{ b=b+1;}
}
else
{ a=a+1;}
PORTA = a;
PORTB = b;
PORTC = c;
}
}
return 0;
}
x 的值在 main() 中永远不会改变。
你想要
while((x=button_check(x))==0)
这是 ATMEGA 128 微控制器中的 3 位定时器代码。如果你按下连接到端口 D 的按钮,定时器将启动。但是,如果您按住它一会儿,计时器将重置。在 proteus 模拟中,我按下按钮后,微控制器仅计数为 1。从那以后什么都没有发生(显示仍然是“001”)
#define F_CPU 4000000UL
#include<avr/io.h>
#include<avr/delay.h>
int x;
int button_check(int x)
{ DDRD = 0x00;
if(PIND==0xFF)
{
_delay_ms(200);
if(PIND==0xFF)
{ x=1;}
else
{ x=0;}
}
else
{ x=x;}
return x;
}
int main(void)
{
int a,b,c;
DDRA = 0xFF;
DDRB = 0xFF;
DDRC = 0xFF;
x=1;
while(1)
{
a=0;
b=0;
c=0;
while(button_check(x)==0) //starting condition
{ _delay_ms(200);
if(a==9)
{ a=0;
if(b==9)
{ b=0;
if(c==9)
{ c=0;}
else
{ c=c+1;}
}
else
{ b=b+1;}
}
else
{ a=a+1;}
PORTA = a;
PORTB = b;
PORTC = c;
}
}
return 0;
}
x 的值在 main() 中永远不会改变。
你想要
while((x=button_check(x))==0)