Odczyt klawiatury matryca 4/4 z portu B, port D pin 7 dioda LED w celach kontrolnych. Poniższy kod napisany jest w WinAvr. Co w nim jest nie tak ?
Chodzi o to, że kompiluje się prawidłowo, ładuje się przez AVRStudio do AM128 i śledząc jego wykonanie widzę, że na wyjścia matrycy wystawia zera tak jak powinien a na wejściach po wciśnięciu klawisza pojawiają się zera, problem polega na tym, iż instrukcje IF nie są wykonywane. Nie rozumiem dlaczego. Może coś przeoczyłem :/ ??
DDRD|=1<<7;PORTD|=1<<7;/*Zapal LED*/
/*Program Główny*/
DDRB|=1<<0;PORTB|=1<<0;/*wyjście w stanie 1*/
DDRB|=1<<1;PORTB|=1<<1;/*wyjście w stanie 1*/
DDRB|=1<<2;PORTB|=1<<2;/*wyjście w stanie 1*/
DDRB|=1<<3;PORTB|=1<<3;/*wyjście w stanie 1*/
DDRB&=~(1<<4);PORTB|=1<<4;/*wejście w stanie Podciągnięcia*/
DDRB&=~(1<<5);PORTB|=1<<5;/*wejście w stanie Podciągnięcia*/
DDRB&=~(1<<6);PORTB|=1<<6;/*wejście w stanie Podciągnięcia*/
DDRB&=~(1<<7);PORTB|=1<<7;/*wejście w stanie Podciągnięcia*/
PORTD|=1<<7;/*Zapal LED*/
for(;
{
PORTD|=1<<7;/*Zapal LED*/
DDRB|=1<<bit;PORTB&=~(1<<bit);/*wyjście w stanie 0*/
if (PINB4==0)
{PORTD&=~(1<<7);}/*Zgaś LED*/
if (PINB5==0)
{PORTD&=~(1<<7);}/*Zgaś LED*/
if (PINB6==0)
{PORTD|=1<<7;}/*Zapal LED*/
if (PINB7==0)
{PORTD|=1<<7;}/*Zapal LED*/
DDRB|=1<<bit;PORTB|=1<<bit;/*wyjście w stanie 1*/
PORTD&=~(1<<7);/*Zgaś LED*/
bit++;
if (bit==4)
{bit=0;}
}
return(0);
Chodzi o to, że kompiluje się prawidłowo, ładuje się przez AVRStudio do AM128 i śledząc jego wykonanie widzę, że na wyjścia matrycy wystawia zera tak jak powinien a na wejściach po wciśnięciu klawisza pojawiają się zera, problem polega na tym, iż instrukcje IF nie są wykonywane. Nie rozumiem dlaczego. Może coś przeoczyłem :/ ??
DDRD|=1<<7;PORTD|=1<<7;/*Zapal LED*/
/*Program Główny*/
DDRB|=1<<0;PORTB|=1<<0;/*wyjście w stanie 1*/
DDRB|=1<<1;PORTB|=1<<1;/*wyjście w stanie 1*/
DDRB|=1<<2;PORTB|=1<<2;/*wyjście w stanie 1*/
DDRB|=1<<3;PORTB|=1<<3;/*wyjście w stanie 1*/
DDRB&=~(1<<4);PORTB|=1<<4;/*wejście w stanie Podciągnięcia*/
DDRB&=~(1<<5);PORTB|=1<<5;/*wejście w stanie Podciągnięcia*/
DDRB&=~(1<<6);PORTB|=1<<6;/*wejście w stanie Podciągnięcia*/
DDRB&=~(1<<7);PORTB|=1<<7;/*wejście w stanie Podciągnięcia*/
PORTD|=1<<7;/*Zapal LED*/
for(;
{
PORTD|=1<<7;/*Zapal LED*/
DDRB|=1<<bit;PORTB&=~(1<<bit);/*wyjście w stanie 0*/
if (PINB4==0)
{PORTD&=~(1<<7);}/*Zgaś LED*/
if (PINB5==0)
{PORTD&=~(1<<7);}/*Zgaś LED*/
if (PINB6==0)
{PORTD|=1<<7;}/*Zapal LED*/
if (PINB7==0)
{PORTD|=1<<7;}/*Zapal LED*/
DDRB|=1<<bit;PORTB|=1<<bit;/*wyjście w stanie 1*/
PORTD&=~(1<<7);/*Zgaś LED*/
bit++;
if (bit==4)
{bit=0;}
}
return(0);