You can only have 1 ON INTERRUPT handler on a 16F.
In that handler, you can monitor the different Flags associated with the different interrupts and then execute the appropriate routine.
In your case, you want TMR0 and the USART, so you need to watch for TMR0IF and RCIF.
Most people only check for the flag, but I also like to make sure the Interrupt source is Enabled too, by checking TMR0IE and RCIE. That way it will stil work according to plan when you disable/enable interrupts at random.
For your suedo code, it might look like this...
Code:
DEFINE OSC 4
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_BAUD 9600
DEFINE HSER_CLROERR 1
PEIE VAR INTCON.6
RCIE VAR PIE1.5
RCIF VAR PIR1.5
T0IE VAR INTCON.5
T0IF VAR INTCON.2
OPTION_REG = %00000110 ' Prescaler = 128, RB pull-ups on
PEIE = 1 ' enable Peripheral interrupts
T0IE = 1 ' enable TMR0 interrupts
RCIE = 1 ' enable USART RX interrupts
On INTERRUPT GoTo IntHandler
Loop:
........
........
........
Goto Loop
Disable
;___________________________________
IntHandler:
IF RCIE and RCIF then USART_RX
IF T0IE and T0IF then TMR0_OVR
HIGH PORTB.0 ; indicate "Unchecked Interrupt"
Resume
;___________________________________
TMR0_OVR:
.......
.......
T0IF = 0 'Clear Timer0 flag
Resume
;___________________________________
USART_RX:
.......
.......
Dummy = RCREG ' Clear USART Flag by reading USART data
Resume
HTH,
Bookmarks