Fastest Interrupt?
Code:'18F452 @ __CONFIG _CONFIG1H, _OSCS_OFF_1H & _HSPLL_OSC_1H @ __CONFIG _CONFIG2L, _BORV_45_2L & _BOR_ON_2L & _PWRT_ON_2L @ __CONFIG _CONFIG2H, _WDT_ON_2H @ __CONFIG _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L DEFINE OSC 40 ' REQUIRES PLL ' USE 10 MHz CRYSTAL & DECLARE: XTAL = 40 PAUSE 1000 'ALLOW POWER TO STABILIZE Clear LED VAR PortA.1 i VAR WORD wREAD_TR1 VAR WORD wWRITE_TR1 VAR WORD wWRITE_TR1 = 1000 ADCON1 = %00001111 'ALL_DIGITAL '******************** 'INTERRUPT REGISTER'S RCON.7 = 0 ' 0 DISABLES PRIORITY LEVELS ON INTERRUPTS (16F COMPATIBILITY) ' T1CON = %10000001 '%xx00xxx = 1:1 PRESCALE T1CON = %10110001 '%xx00xxx = 1:8 PRESCALE PIE1 = %00000001 'enable TMR1 overflow interrupt INTCON = %11000000 'enable global and peripheral interrupts '******************** TRISA.5 = 0 TRISA.4 = 1 TRISA.3 = 1 TRISA.2 = 0 TRISA.1 = 0 TRISA.0 = 0 TRISB=%00000000 TRISC=%00010000 ' xxx1xxxx MSSP SPI data in TRISD=%00000000 TRISE.2 = 1 TRISE.1 = 1 TRISE.0 = 1 ' Define interrupt handler DEFINE INTHAND myint GOTO MAIN '**** ASSEMBLY INTERRUPT ROUTINE **** Asm myint EndAsm 'SerOut2 PORTA.2,16416,["SET_PORT_INTERRUPT",13] TOGGLE LED TMR1H = wWRITE_TR1.HIGHBYTE TMR1L = wWRITE_TR1.LOWBYTE Asm bcf PIR1, 0 ; Clear interrupt flag retfie ; Return from interrupt EndAsm '**** END ASSEMBLY INTURRUPT ROUTINE **** MAIN: 'wWRITE_TR1 = 32000 wWRITE_TR1 = 500 FOR i = 1 TO 1000 PAUSE 1 NEXT REPEAT wREAD_TR1.LOWBYTE = TMR1L wREAD_TR1.HIGHBYTE = TMR1H UNTIL wREAD_TR1 < 50000 'TMR1 NON INTERFEARANCE WITH SEROUT2 SerOut2 PORTA.2,16416,["MAIN LOOP wREAD = ",DEC wREAD_TR1,13] ' 16416 = 19200 GOTO MAIN END




Bookmarks