;Program AT89C51 Untuk Simulasi Antrian Loket

;Data Display 1 = 30h
;Data Display 2 = 31h
;Data Display 3 = 32h
;Data Display 4 = 33h

Start:
        Ljmp Init

        Org 23h

        Jnb Ri,$
        Clr Ri
        Mov A,Sbuf

        Cjne A,#FFh,Next_Input
        Mov R0,#30h
        Reti

Next_Input:
        Mov @R0,A
        Inc R0
        Reti

Init:
        Mov IE,#90h
        Mov PCon,#80h
        Mov TMod,#20h                   ; T1 8-bit auto re-load
        Mov Th1,#FFh             
        Mov SCon,#50h                   ; Baud rate = 57600 bps 
        Setb Tr1
        Clr Ri
        Clr Ti
        Mov 30h,#00h
        Mov 31h,#00h
        Mov 32h,#00h

        
Set_1:
        Jnb P1.0,Pass_1
        Clr Ie.7
        Clr Ti
        Mov Sbuf,#11h
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Acall Long_Display
        Sjmp Set_1

Pass_1:
        Jnb P1.1,Set_2
        Clr Ie.7
        Clr Ti
        Mov Sbuf,#10h
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Acall Long_Display
        Sjmp Set_1

Set_2:
        Jnb P1.2,Pass_2
        Clr Ie.7
        Clr Ti
        Mov Sbuf,#21h
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Acall Long_Display
        Sjmp Set_1

Pass_2:
        Jnb P1.3,Set_3
        Clr Ie.7
        Clr Ti
        Mov Sbuf,#20h
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Acall Long_Display
        Sjmp Set_1

Set_3:
        Jnb P1.4,Pass_3
        Clr Ie.7
        Clr Ti
        Mov Sbuf,#31h
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Acall Long_Display
        Sjmp Set_1

Pass_3:
        Jnb P1.5,Set_4
        Clr Ie.7
        Clr Ti
        Mov Sbuf,#30h
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Acall Long_Display
        Sjmp Set_1

Set_4:
        Jnb P1.6,Pass_4
        Clr Ie.7
        Clr Ti
        Mov Sbuf,#41h
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Acall Long_Display
        Ljmp Set_1

Pass_4:
        Jnb P1.7,No_Key
        Clr Ie.7
        Clr Ti
        Mov Sbuf,#40h
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Acall Long_Display
        Ljmp Set_1

No_Key:
        Acall Display
        Ljmp Set_1

Long_Display:
        Mov R7,#7Fh

Long_Display_1:
        Mov R6,#01h

Long_Display_2:
        Acall Display
        Djnz R6,Long_Display_2
        Djnz R7,Long_Display_1
        Ret

Display:
        Mov A,30h
        Mov B,#0Ah
        Div AB
        Mov P0,A
        Acall Delay
        Mov A,B
        Orl A,#10h
        Mov P0,A
        Acall Delay
        Mov A,31h
        Mov B,#0Ah
        Div AB
        Orl A,#20h
        Mov P0,A
        Acall Delay
        Mov A,B
        Orl A,#30h
        Mov P0,A
        Acall Delay
        Mov A,32h
        Mov B,#0Ah
        Div AB
        Orl A,#40h
        Mov P0,A
        Acall Delay
        Mov A,B
        Orl A,#50h
        Mov P0,A
        Acall Delay
        Mov A,33h
        Mov B,#0Ah
        Div AB
        Orl A,#60h
        Mov P0,A
        Acall Delay
        Mov A,B
        Orl A,#70h
        Mov P0,A
        Acall Delay

Delay:
        Mov R5,#FFh
        Djnz R5,$
        Ret
