
    mov a, TX_BUF_HEAD    ;TX_BUF_HEAD is not changed in the ISR
    xrl a, TX_BUF_TAIL    ;this is an atomic read
    JZ TX_BUF_EMPTY_TEST
TX_BUF_NOT_EMPTY: 
    mov R0, TX_BUF_HEAD 
    mov @R0, TX_DB 
    inc TX_BUF_HEAD       ;this is an atomic increment
    anl TX_BUF_HEAD,#31   ;loop around
