Selasa, 31 Mei 2011

antrian

        DSEG
        ORG    20H
Nomor:        DS    1
Loket:        DS    1
Pencacah10:    DS    1
Pencacah2:    DS    1

RuasLoket:    DS    1
RuasUmum10:    DS    1
RuasUmum1:    DS    1
Ruas1pul:    DS    1
Ruas1sat:    DS    1
Ruas2pul:    DS    1
Ruas2sat:    DS    1

Tombol1        BIT    P3.0
Tombol2        BIT    P3.7
       
ROM        EQU    0
KonstantaWaktu    EQU    -50000


        CSEG
        ORG    ROM
        LJMP    Mulai

        ORG    ROM+3H
        RETI
   
        ORG    ROM+0BH
        AJMP    TimerInterrupt
   
        ORG    ROM+13H
        RETI
   
        ORG    ROM+1BH
        RETI
   
        ORG    ROM+23H
        RETI   

Mulai:
        MOV    Nomor,#0
        MOV    Loket,#1
        MOV    Pencacah2,#2
        MOV    Pencacah10,#10
        ACALL    Tampilanbaru1
        ACALL    Tampilanbaru2
       
        MOV    TMOD,#01H
        MOV    TH0,#High KonstantaWaktu
        MOV    TL0,#Low KonstantaWaktu
        SETB    ET0   
        SETB    EA    
        SETB    TR0

Utama:
        LCALL    Display
       
Sakelar1:    JB    Tombol1,Sakelar2
        INC    Nomor
Tekan1:        LCALL    Tampilanbaru1
        LCALL    Display
        JNB    Tombol1,Tekan1
        MOV    A,#99
        CJNE    A,Nomor,Sakelar2
        MOV    Nomor,#0

Sakelar2:    JB    Tombol2,Utama
        INC    Nomor
Tekan2:        LCALL    Tampilanbaru2
        LCALL    Display
        JNB    Tombol2,Tekan2
        MOV    A,#99
        CJNE    A,Nomor,Utama
        MOV    Nomor,#0
        LJMP    Utama
Display:
        MOV    P0,#0FFH
        MOV    P2,Ruas1pul
        MOV    P0,#11110111B
        ACALL    Tunggu
       
        MOV    P0,#0FFH
        MOV    P2,Ruas1sat
        MOV    P0,#11111011B
        ACALL    Tunggu

        MOV    P0,#0FFH
        MOV    P2,Ruas2pul
        MOV    P0,#11111101B
        ACALL    Tunggu

        MOV    P0,#0FFH
        MOV    P2,Ruas2sat
        MOV    P0,#11111110B
        ACALL    Tunggu

        MOV    P0,#0FFH
        MOV    P2,RuasLoket
        MOV    P0,#10111111B
        ACALL    Tunggu
   
        MOV    P0,#0FFH
        MOV    P2,RuasUmum10
        MOV    P0,#11011111B
        ACALL    Tunggu

        MOV    P0,#0FFH
        MOV    P2,RuasUmum1
        MOV    P0,#11101111B
        ACALL    Tunggu

        RET

Tunggu:        MOV    R6,#3
TungguLagi:    MOV    R7,#250
        DJNZ    R7,$
        DJNZ    R6,TungguLagi
        MOV    P0,#0FFH
        RET

TimerInterrupt:
        Push    PSW
        Push    Acc

        MOV    TL0,#Low KonstantaWaktu
        MOV    TH0,#High KonstantaWaktu
        DJNZ    Pencacah10,SelesaiInterupsi
        MOV    Pencacah10,#10       
        DJNZ    Pencacah2,SelesaiInterupsi
        MOV    Pencacah2,#2
       
        INC    Loket
        MOV    A,#3
        CJNE    A,Loket,Detik
        MOV    Loket,#1
Detik:
        ACALL    Umum

SelesaiInterupsi:
        Pop    Acc
        Pop    PSW
        RETI

Umum:       
        MOV    A,#1
        CJNE    A,Loket,Loket2
        MOV    RuasLoket,#0CFH
        MOV    A,Ruas1pul
        MOV    RuasUmum10,A
        MOV    A,Ruas1sat
        MOV    RuasUmum1,A
        JMP    Kembali
Loket2:       
        MOV    A,#2
        CJNE    A,Loket,Kembali
        MOV    RuasLoket,#092H
        MOV    A,Ruas2pul
        MOV    RuasUmum10,A
        MOV    A,Ruas2sat
        MOV    RuasUmum1,A

Kembali:   
        RET

Tampilanbaru1:
        MOV    R0,#Ruas1pul
        MOV    A,Nomor
        MOV    P1,A

Ruas2Digit:    MOV    B,#10
        DIV    AB
        ACALL    Ruas1Digit
        MOV    A,B
Ruas1Digit:    ACALL    JadikanRuas
        MOV    @R0,A
        INC    R0
        RET
Tampilanbaru2:
        MOV    R0,#Ruas2pul
        MOV    A,Nomor
        ADD    A,#128
        MOV    P1,A
        MOV     A,Nomor

RuasDuaDigit:    MOV    B,#10
        DIV    AB
        ACALL    RuasSatuDigit
        MOV    A,B
RuasSatuDigit:    ACALL    JadikanRuas
        MOV    @R0,A
        INC    R0
        RET

JadikanRuas:    INC    A
        MOVC    A,@A+PC
        RET
KombinasiRuas:
               ;-abcdefg
        DB    10000001B    ;0
        DB    11001111B    ;1
        DB    10010010B    ;2
        DB    10000110B    ;3
        DB    11001100B    ;4
        DB    10100100B    ;5
        DB    10100000B    ;6
        DB    10001111B    ;7
        DB    10000000B    ;8
        DB    10000100B    ;9
        END

2 komentar:

  1. maaf mas saya mau tanya ini programnya dalam bentuk ASM ya?
    untuk compile ke HEX nya gimana ya?
    waktu saya compile pake READS51 kok error ya
    mohon bantuannya mas
    makasih :D

    BalasHapus
  2. tuh program masih manual bin dasar
    ditulis di notpad dalam bentuk simpanan manual (dot asm)
    lalu dicompile pake CMD (command prompt)

    BalasHapus