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...HTH,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




Bookmarks