Jag har en ICD2 och när jag lägger in breakpoint där ReadButtonFlag sätts och stegar där ifrån så fungerar det. Skumt! Nån som vet vad jag gör fel? JAg har bara med avbrottsrutinen och main för att spara plats. Vill ni se nåt annat så säg bara till.
Kod: Markera allt
/***************************************************************************************
* Avbrottsrutin *
***************************************************************************************/
#pragma origin 4
extern interrupt isr (void)
{
clrwdt ();
char save_FSR;
int_save_registers //Spara viktiga register
save_FSR = FSR;
byte temp;
if(RBIF && RBIE) //Avbrott för knapptryck
{
ButtonDelay = DEBOUNCE_TIME; //Ladda knappstudstimern.
ButtonFlag = 1; //Flagga för knapptryckning.
temp = PORTB; //Läs PORTB för att nollställa missmatch-villkoret.
RBIF = 0; //Nollställ avbrottsflaggan.
RA1 = !RA1; //TEST TEST TEST TEST TEST TEST TEST TEST TEST !!!!!!!!!!!!!!!!
}
if(CCP1IF && CCP1IE) //Interrupt varje ms.
{
CCP1IF = 0; //Viktig! Annars genereras avbrott så fort den kommer ur avbrottsrutinen.
ms--; //Nollställs och disablas efter DCF
RA0 = !RA0; //10ms-TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST !!!!!!!!!!!!!!!!
if(ms <= 0)
{
ms = 1000;
sekund++;
if(sekund >= 60)
{
sekund = 0;
}
}
if(ButtonFlag)
{
ButtonDelay--;
if(ButtonDelay <= 0) //Har knappstudsdelayen räknat färdigt?
{
nop();
ButtonFlag = 0; //Nollställ knapptryckningen.
ReadButtonFlag = 1; //Ja, Flagga för läsning av tangentbordet.
RA1 = !RA1; //TEST TEST TEST TEST TEST TEST TEST TEST TEST !!!!!!!!!!!!!!!!
}
}
}
end:
FSR = save_FSR;
int_restore_registers //Hämta sparade register
}
/***************************************************************
* Main program starts here. (Also RESET entry point) *
**************************************************************/
void main (void)
{
GIE = 0;
vFirstInit(); //Initiera µP
UARTinit(); //Initiera UART
timer1init(); //Initiera Timer1
ms = 0x01; //Sätter ms till 1 för att sekund ska börja på 0.
sekund = 0;
PORTB = 0b00000000; //Aktrivera tangentbordet. Nollar egentligen bara RB0-RB3
temp1 = PORTB; //Sätt normalläge för tangentbordet.
ButtonFlag = 0;
ReadButtonFlag = 0;
RBIF = 0;
RBIE = 1;
TMR1ON = 1; //Starta timer1
PEIE = 1;
GIE = 1;
while(1) //Evighetsloop. Ligger och väntar på avbrott.
{
RA0 = !RA0; //TEST TEST TEST TEST TEST TEST TEST TEST TEST !!!!!!!!!!!!!!!!
if(ReadButtonFlag) //kollar flaggan för tangentbordsavkodning.
{
ReadKeyboard(); //Läs av tangentbordet.
// PWRDown(); //Sleep till nästa tangenttryck
}
}
}