无法从atmega128 C代码中找到错误

时间:2015-09-12 08:06:42

标签: c timer atmel atmelstudio

这是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;
}

1 个答案:

答案 0 :(得分:1)

x中的值永远不会在main()中发生变化。

你想要

while((x=button_check(x))==0)