Tuesday, December 4, 2007
#include
void InterruptHandlerHigh(void); // High priority interrupt service routine
#pragma code InterruptVectorHigh = 0x08 // High priority interrupt vector
void InterruptVectorHigh(void){
_asm
goto InterruptHandlerHigh // Jump to interrupt routine
_endasm
}
#pragma code
// High priority interrupt routine
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh()
{
int sec;
if (INTCONbits.INT0IF==1) // Check INT0 flag
{
TMR0H=0x0B;
TMR0L=0xDC;
T0CON=0b10000011;
sec=0;
PORTBbits.RB1=0;
PORTBbits.RB2=1;
PORTBbits.RB3=0;
INTCONbits.INT0IF = 0; // Clear interrupt flag
}
else if (INTCONbits.TMR0IF==1) // Check TMR0 flag
{
TMR0H=0x0B;
TMR0L=0xDC;
sec++;
if(sec==3)
{
PORTBbits.RB1=1;
PORTBbits.RB2=0;
PORTBbits.RB3=0;
}
else if(sec==13)
{
PORTBbits.RB1=0;
PORTBbits.RB2=0;
PORTBbits.RB3=1;
}
INTCONbits.TMR0IF = 0;
}
}
void main()
{
INTCONbits.GIE = 0;
ADCON1 = 0x0F; // Set Port A & E as digital I/O
TRISB = 0b11110001;
PORTBbits.RB3=1;
PORTBbits.RB2=0;
PORTBbits.RB1=0;
RCONbits.IPEN=1;
INTCONbits.TMR0IF=0;
INTCONbits.TMR0IE=1;
INTCON2bits.INTEDG2=1; // raising edge
INTCONbits.INT0IF = 0;
INTCONbits.INT0IE = 1;
INTCONbits.GIEH = 1;
INTCONbits.GIEL = 1;
while(1);
}Labels: school work
?2:17 PM