;sistem penghitung pulsa telepon dengan sistem serial
Start:
        Ljmp Init

        Org 23h
        Clr Ie.7

        Push Acc
        Jnb Ri,$
        Mov A,Sbuf
        Clr Ri

        Cjne A,#11h,Activate_2
        Clr P1.4
        Pop Acc
        Setb Ie.7
        Reti

Activate_2:
        Cjne A,#21h,Activate_3
        Clr P1.5
        Pop Acc
        Setb Ie.7
        Reti

Activate_3:
        Cjne A,#31h,Activate_4
        Clr P1.6
        Pop Acc
        Setb Ie.7
        Reti

Activate_4:
        Cjne A,#41h,Deactivate_1
        Clr P1.7
        Pop Acc
        Setb Ie.7
        Reti

Deactivate_1:
        Cjne A,#10h,Deactivate_2
        Setb P1.4
        Mov 20h,#00h
        Pop Acc
        Setb Ie.7
        Reti

Deactivate_2:
        Cjne A,#20h,Deactivate_3
        Setb P1.5
        Mov 21h,#00h
        Pop Acc
        Setb Ie.7
        Reti

Deactivate_3:
        Cjne A,#30h,Deactivate_4
        Setb P1.6
        Mov 22h,#00h
        Pop Acc
        Setb Ie.7
        Reti

Deactivate_4:
        Cjne A,#40h,Connected_1
        Setb P1.7
        Mov 23h,#00h
        Pop Acc
        Setb Ie.7
        Reti

Connected_1:
        Cjne A,#12h,Connected_2
        Setb 20h.7
        Pop Acc
        Setb Ie.7
        Reti

Connected_2:
        Cjne A,#22h,Connected_3
        Setb 21h.7
        Pop Acc
        Setb Ie.7
        Reti

Connected_3:
        Cjne A,#32h,Connected_4
        Setb 22h.7
        Pop Acc
        Setb Ie.7
        Reti

Connected_4:
        Cjne A,#42h,Back
        Setb 23h.7
Back:
        Pop Acc
        Setb Ie.7
        Reti

Init:
        Mov Ie,#90h
        Mov TMod,#20h                   ;Baud 56700 bps
        Mov Th1,#FFh                    ;11,0592 MHz*2^1/(12*32*(256-255))
        Mov SCon,#50h
        Setb Tr1
        Mov Pcon,#80h
                                        ;Line Status
                                        ;bit-0, 0/1 = Key Pressed/Released
                                        ;bit-1, 0/1 = Connected Pressed
                                        ;bit-2, 0/1 = Connected Released
                                        ;bit-3, 0/1 = Blocked
                                        ;bit-4, 0/1 = Disconnected Pressed


                                        ;Sending 15h = Call Progress
                                        ;Sending 16h = Disconnected
                                        ;Sending 17h = Reset

        Mov P1,#0Fh                     ;All line activated
        Mov 20h,#00h
        Mov 21h,#00h
        Mov 22h,#00h
        Mov 23h,#00h

Check_Hook_1:
        Setb P1.1
        Clr P1.0
        Jb P0.6,Check_STD_1
        Jb 20h.7,Disconnected_1
        Jnb 20h.0,Check_Hook_2
        Clr Ie.7
        Mov A,#17h
        Mov Sbuf,A
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Mov 20h,#00h
        Sjmp Check_Hook_2

Check_STD_1:
        Jb 20h.7,Check_Hook_2
        Jb 20h.1,Check_Key_Released_1
        Jnb P0.5,Check_Connected_1
        Setb 20h.0
        Setb 20h.1
        Mov A,P0
        Anl A,#0Fh
        Mov 24h,A
        Sjmp Check_Hook_2

Check_Key_Released_1:
        Jb P0.5,Check_Hook_2
        Clr 20h.1
        Mov A,24h
        Clr Ie.7
        Mov Sbuf,A
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Sjmp Check_Hook_2

Check_Connected_1:
        Jnb 20h.0,Check_Hook_2
        Jb P0.4,Clear_1
        Jb 20h.2,Check_Hook_2
        Setb 20h.2
        Clr Ie.7
        Mov A,#15h
        Mov Sbuf,A
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Sjmp Check_Hook_2

Clear_1:
        Clr 20h.2
        Sjmp Check_Hook_2

Disconnected_1:
        Mov 20h,#00h
        Mov A,#16h
        Clr Ie.7
        Mov Sbuf,A
	Jnb Ti,$
        Clr Ti
        Setb Ie.7

Check_Hook_2:
        Setb P1.0
        Clr P1.1
        Jb P0.6,Check_STD_2
        Jb 21h.7,Disconnected_2
        Jnb 21h.0,Check_Hook_3
        Clr Ie.7
        Mov A,#57h
        Mov Sbuf,A
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Mov 21h,#00h
        Sjmp Check_Hook_3

Check_STD_2:
        Jb 21h.7,Check_Hook_3
        Jb 21h.1,Check_Key_Released_2
        Jnb P0.5,Check_Connected_2
        Setb 21h.0
        Setb 21h.1
        Mov A,P0
        Anl A,#0Fh
        Orl A,#40h
        Mov 25h,A
        Sjmp Check_Hook_3

Check_Key_Released_2:
        Jb P0.5,Check_Hook_3
        Clr 21h.1
        Mov A,25h
        Clr Ie.7
        Mov Sbuf,A
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Sjmp Check_Hook_3

Check_Connected_2:
        Jnb 21h.0,Check_Hook_3
        Jb P0.4,Clear_2
        Jb 21h.2,Check_Hook_3
        Setb 21h.2
        Clr Ie.7
        Mov A,#55h
        Mov Sbuf,A
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Sjmp Check_Hook_3

Clear_2:
        Clr 21h.2
        Sjmp Check_Hook_3

Disconnected_2:
        Mov 21h,#00h
        Mov A,#56h
        Clr Ie.7
        Mov Sbuf,A
	Jnb Ti,$
        Clr Ti
        Setb Ie.7

Check_Hook_3:
        Setb P1.3
        Clr P1.2
        Jb P2.6,Check_STD_3
        Jb 22h.7,Disconnected_3
        Jnb 22h.0,Check_Hook_4
        Clr Ie.7
        Mov A,#97h
        Mov Sbuf,A
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Mov 22h,#00h
        Sjmp Check_Hook_4

Check_STD_3:
        Jb 22h.7,Check_Hook_4
        Jb 22h.1,Check_Key_Released_3
        Jnb P2.5,Check_Connected_3
        Setb 22h.0
        Setb 22h.1
        Mov A,P2
        Anl A,#0Fh
        Orl A,#80h
        Mov 26h,A
        Sjmp Check_Hook_4

Check_Key_Released_3:
        Jb P2.5,Check_Hook_4
        Clr 22h.1
        Mov A,26h
        Clr Ie.7
        Mov Sbuf,A
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Sjmp Check_Hook_4

Check_Connected_3:
        Jnb 22h.0,Check_Hook_4
        Jb P2.4,Clear_3
        Jb 22h.2,Check_Hook_4
        Setb 22h.2
        Clr Ie.7
        Mov A,#95h
        Mov Sbuf,A
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Sjmp Check_Hook_4

Clear_3:
        Clr 22h.2
        Sjmp Check_Hook_4

Disconnected_3:
        Mov 22h,#00h
        Mov A,#96h
        Clr Ie.7
        Mov Sbuf,A
	Jnb Ti,$
        Clr Ti
        Setb Ie.7


Check_Hook_4:
        Setb P1.2
        Clr P1.3
        Jb P2.6,Check_STD_4
        Jb 23h.7,Disconnected_4
        Jnb 23h.0,Check_Hook_5
        Clr Ie.7
        Mov A,#D7h
        Mov Sbuf,A
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Mov 23h,#00h
        Sjmp Check_Hook_5

Check_STD_4:
        Jb 23h.7,Check_Hook_5
        Jb 23h.1,Check_Key_Released_4
        Jnb P2.5,Check_Connected_4
        Setb 23h.0
        Setb 23h.1
        Mov A,P2
        Anl A,#0Fh
        Orl A,#C0h
        Mov 27h,A
        Sjmp Check_Hook_5

Check_Key_Released_4:
        Jb P2.5,Check_Hook_5
        Clr 23h.1
        Mov A,27h
        Clr Ie.7
        Mov Sbuf,A
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Sjmp Check_Hook_5

Check_Connected_4:
        Jnb 23h.0,Check_Hook_5
        Jb P2.4,Clear_4
        Jb 23h.2,Check_Hook_5
        Setb 23h.2
        Clr Ie.7
        Mov A,#D5h
        Mov Sbuf,A
        Jnb Ti,$
        Clr Ti
        Setb Ie.7
        Sjmp Check_Hook_5

Clear_4:
        Clr 23h.2
        Sjmp Check_Hook_5

Disconnected_4:
        Mov 23h,#00h
        Mov A,#D6h
        Clr Ie.7
        Mov Sbuf,A
	Jnb Ti,$
        Clr Ti
        Setb Ie.7


Check_Hook_5:
        Ajmp Check_Hook_1

