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