
uart_isr_explicit:
    push  ACC
    jnb   RI,transmit
receive:
    clr   RI           ;explicitly clear RI
    mov   a,SBUF
    ...                ;store it where you like it
transmit:
    jnb   TI,uart_isr_end
    clr   TI           ;explicitly clear TI
    ...                ;get next byte in a
    mov   SBUF,a
uart_isr_end:
    pop   ACC
    reti

uart_isr_jbc:
    push  ACC
    jbc   RI,receive   ;test and clear RI
    jbc   TI,transmit  ;test and clear TI
    sjmp  uart_isr_end
receive:
    mov   a,SBUF
    ...                ;store it where you like it
    jbc   TI,transmit  ;still have to do this
    sjmp  uart_isr_end
transmit:
    ...                ;get next byte in a
    mov   SBUF,a
uart_isr_end:
    pop   ACC
    reti

uart_isr_auto:
    push  ACC
    jnb   RI,transmit
receive:
    mov   a,SBUF       ;auto-clear RI
    ...                ;store it where you like it
transmit:
    jnb   TI,uart_isr_end
    ...                ;get next byte in a
    mov   SBUF,a       ;auto-clear TI
uart_isr_end:
    pop   ACC
    reti
