/******************************************************************** * FileName: Problem 3.c * Processor: PIC18F4520 * Compiler: MPLAB C18 v.3.06 * * Lab Exam Problem 3 - Winter 2008-2009 * * * Author Date Comment *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ // David Fisher Jan 26, 2009 /** Header Files **************************************************/ #include /** Configuration Bits *********************************************/ #pragma config OSC = EC // EC = External 4MHz Crystal for PICDEM board only #pragma config WDT = OFF #pragma config LVP = OFF #pragma config BOREN = OFF /** Define Constants Here ******************************************/ /** Local Function Prototypes **************************************/ void low_isr(void); void high_isr(void); /** Declare Interrupt Vector Sections ****************************/ #pragma code high_vector=0x08 void interrupt_at_high_vector(void) { _asm goto high_isr _endasm } #pragma code low_vector=0x18 void interrupt_at_low_vector(void) { _asm goto low_isr _endasm } /** Global Variables ***********************************************/ int buttonCount = 0; /******************************************************************* * Function: void main(void) ********************************************************************/ #pragma code void main (void) { ADCON1 = 0x0F; TRISB = 0xFF; // Turn on the RB0 interrupt INT0, falling edge, always high priority //OpenRB0INT( PORTB_CHANGE_INT_ON & FALLING_EDGE_INT & PORTB_PULLUPS_OFF); INTCONbits.INT0IE = 1; // Same thing using the SFR directly //INTCONbits.INT0IE = 1; INTCONbits.GIEH = 1; // Turn on High Priority interrupts //INTCONbits.GIE = 1; while (1) { // This area loops forever } } /***************************************************************** * Function: void high_isr(void) * Possible sources of interrupt - none * Overview: ******************************************************************/ #pragma interrupt high_isr void high_isr(void) { if(INTCONbits.INT0IF) // Interrupt 0, RB0 { INTCONbits.INT0IF = 0; buttonCount++; } } /****************************************************************** * Function: void low_isr(void) * Possible sources of interrupt - none * Overview: ********************************************************************/ #pragma interruptlow low_isr void low_isr(void) { // Add code here for the low priority Interrupt Service Routine (ISR) }