Niedawno porzuciłem( tak na chwilkę ) mój kochany assembler i rozpocząłem przygodę z językiem C. Otóż problem wygląda następująco : Jest to wycięty fragment obsługi matrycy klawiszowe :
Kod: Zaznacz cały
SIGNAL (SIG_INTERRUPT0)
{
TimeDelay(30);
if(!NewKey)
{
NewKey = 1;
if(KEYB == 0b00001110){Key = 0;}
if(KEYB == 0b00001101){Key = 4;}
if(KEYB == 0b00001011){Key = 8;}
if(KEYB == 0b00000111){Key = 12;}
KEYSD = 0b00001111;
KEYSP = 0b11110000;
TimeDelay(15);
if(KEYB == 0b11100000){Key += 0;}
if(KEYB == 0b11010000){Key += 1;}
if(KEYB == 0b10110000){Key += 2;}
if(KEYB == 0b01110000){Key += 3;}
KEYSD = 0b11110000;
KEYSP = 0b00001111;
GIFR = 1<<INTF0;
TimeDelay(15);
}
else
{
TimeDelay(30);
// NewKey = 0;
}
}Teraz mistrzowie pytanie . Zbocze opadające wywołuje przerwanie, program wykonuje wszystko ładnie pięknie , wraca skąd "uciekł" , puszczamy klawisz mamy zbocze narastające przechodzimy do obsługi else'a i po nim program już nie wraca skąd wrócił . Teraz pytanie co jest nie tak ? SP jest w porządku.