autobaud:                       ; autobaud with timer 2
    MOV     T2CON,#00h
    jb      P3.0,$              ; wait for start bit
    jnb     P3.0,$              ; wait for data bit 0 'H'
    mov     TL2,#00h
    mov     TH2,#00h
    SETB    TR2                 ; start timer
    MOV     R0,#03h
auto_bit:
    jb      P3.0,$              ; wait for data bit 1/3/5 Low
    jnb     P3.0,$              ; wait for data bit 2/4/6 High
    djnz    R0,auto_bit
    jb      P3.0,$              ; wait for data bit 7 Low
    jnb     P3.0,$              ; wait for stop bit High
    clr     TR2                 ; stop timer