; Receive a 16-byte packet.

        MOV     R0,#RX_BUFFER   ; Point to the receive buffer
        MOV     R1,#16          ; Number of bytes to receive
        CLR     RI              ; Enable the receiver
        SETB    REN
RX_LOOP:
        JNB     RI,$            ; 2~ Wait for a byte to shift in
        CLR     RI              ; 1~
        MOV     @R0,SBUF        ; 2~ Buffer received byte
        INC     R0              ; 1~ Advance buffer pointer
        DJNZ    R1,RX_LOOP      ; 2~ If not done receiving, *** 8 cycles/byte
                                ;     ..loop for next byte.
                                ;    NOTE: Polling doesn't need REN cleared.
; Process the received packet.
;       ...
;       ...
;       ...

; Transmit a 16-byte packet.

        MOV     R0,#TX_BUFFER   ; Point to the transmit buffer
        MOV     R1,#16          ; Number of bytes to transmit
TX_LOOP:
        JNB     TI,$            ; 2~ Wait for a byte (if any) to shift out
        CLR     TI              ; 1~
        MOV     SBUF,@R0        ; 2~ Transmit a byte from the buffer
        INC     R0              ; 1~ Advance buffer pointer
        DJNZ    R1,TX_LOOP      ; 2~ If done transmitting, *** 8 cycles/byte
                                ;     ..loop for next byte.