Witam, mam problem z poniższym programem, program nie działa zgodnie z oczekiwaniami, mianowicie jako znacznik flagę posługuję się diodą LED na pinie PC6.
Podprogram ma za zadanie zareagować na przycisk/-i bądź (nie dodawałem zabezpieczeń przed drganiem styków bo to nie jest istotą problemu) poprzez zmianę stanu diody PC6. Wyekstrahowałem nie zbędne linie. O ile jeśli zmiana toggle jest zapisana w ciele funkcji readKeyboard wszystko działa. Ale jeśli zmiana ma nastąpić w main.c na skutek zwrócenia wartości przez return funkcji to program nie działa zgodnie z oczekiwaniami. Nie mam głowy, co zrobiłem źle, ślęczę już nad tym sporo czasu. Może zrobiłem jakiś szkolny błąd.
do preparowania HEX używam AVR-Eclipse 2.3.4
Podprogram ma za zadanie zareagować na przycisk/-i bądź (nie dodawałem zabezpieczeń przed drganiem styków bo to nie jest istotą problemu) poprzez zmianę stanu diody PC6. Wyekstrahowałem nie zbędne linie. O ile jeśli zmiana toggle jest zapisana w ciele funkcji readKeyboard wszystko działa. Ale jeśli zmiana ma nastąpić w main.c na skutek zwrócenia wartości przez return funkcji to program nie działa zgodnie z oczekiwaniami. Nie mam głowy, co zrobiłem źle, ślęczę już nad tym sporo czasu. Może zrobiłem jakiś szkolny błąd.
#include <avr/io.h>
#include <util/delay.h>
uint8_t readKeyboard();
int main(void)
{
DDRA=0xff;
DDRC|=(1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3)|(1<<PC6);
DDRC&=~((1<<PC5)&(1<<PC4));
PORTC|= (1<<PC5)|(1<<PC4);
PORTC&=~((1<<PC0)&(1<<PC1)&(1<<PC2)&(1<<PC3)&(1<<PC6));
PORTA = 0xff;
uint8_t key;
while(1)
{
key = readKeyboard();
if (key==0)
{
// PORTC^=(1<<PC6); //tu nie działa
}
if (key==1)
{
// PORTC^=(1<<PC6); //tu nie działa
}
if (key==2)
{
}
}
}
uint8_t readKeyboard()
{
#define KEY1 (1<<PC4)
#define KEY2 (1<<PC5)
if (!(PINC&KEY1))
{
PORTC^=(1<<PC6); //tu działa
return 0;
}
if (!(PINC&KEY2))
{
PORTC^=(1<<PC6); //tu działa
return 1;
}
return 2;
}
do preparowania HEX używam AVR-Eclipse 2.3.4
