Selasa, 31 Mei 2011

PLC


Op

org 0h
mulai:jnb p1.0,nyala1
      jnb p1.1,nyala2
      jnb p1.2,mati
      ret
nyala1:call mulai
       mov a,#0feh
puter: call mulai
       mov p0,a
       call delay
       rl a
       call mulai
       cjne a,#0feh,puter
       sjmp nyala1
nyala2:call mulai
       mov a,#7fh
puter1:call mulai
       mov p0,a
       call delay
       rr a
       call mulai
       cjne a,#7fh,nyala2
       sjmp nyala2
mati:call mulai
     mov p0,#0ffh
     call mulai
     sjmp mati
delay:mov r0,#0
delay1:mov r1,#0
delay2:mov r2,#01h
       djnz r2,$
       djnz r1,delay2
       djnz r2,delay1
       ret
       end;

jam digital

DSEG
org    20H

pencacah2:    DS    1
pencacah10:    DS    1
pencacah60:    DS    1
detik:        DS    1
detikpul:    DS    1
detiksat:    DS    1
menit:        DS    1
menitpul:    DS    1
menitsat:    DS    1
jam:        DS    1
jampul:        DS    1
jamsat:        DS    1
ROM        EQU    0
konstantawaktu    EQU    -50000

CSEG
ORG    ROM
LJMP    MULAI

org    ROM+3H
RETI

org    ROM+0BH
AJMP    detikinterrupt

org    ROM+13H
RETI

org    ROM+1BH
RETI

org    rom+23H
RETI

MULAI:
    MOV pencacah2,#2
    MOV pencacah10,#10
    MOV pencacah60,#60
    MOV detik,#0
    MOV menit,#0
    Mov jam,#0

Tampil:    acall perbaruitampilan

    MOV    TMOD,#01H
    MOV    TH0,#High konstantawaktu
    MOV    TL0,#Low konstantawaktu
    SETB    ET0
    SETB    EA
    SETB    TR0

Utama:
    acall perbaruitampilan
    MOV    p0,#0FFH
    MOV    p2,detikpul
    MOV    p0,#0FDH
    acall tunggusebentar
    MOV    p0,#0FFH
    MOV    p2,detiksat
    MOV    p0,#0FEH
    acall tunggusebentar
    acall perbaruitampilan
    MOV    p0,#0FFH
    MOV    p2,menitPul
    MOV    p0,#0FEH
    acall tunggusebentar
    MOV    p0,#0FFH
    MOV    p2,menitSat
    MOV    p0,#0FEH
    acall tunggusebentar
    MOV    p0,#0FFH
    MOV    p2,jamPul
    MOV    p0,#0FDH
    acall tunggusebentar
    MOV    p0,#0FFH
    MOV    p2,jamsat
    MOV    p0,#0FEH
    acall tunggusebentar
    JMP    Utama

tunggusebentar:
    MOV    R6,#3
tunggulagi:
    MOV    R7,#175
    DJNZ    R7,$
    DJNZ    R6,tunggulagi
    MOV    R6,#0FFH
    RET

detikinterrupt:
    push    PSW
    push    Acc
    MOV    TL0,#Low konstantawaktu
    MOV    TH0,#High konstantawaktu
    DJNZ    pencacah10,selesaiInterupsi
    MOV    pencacah10,#10

    DJNZ    pencacah2,selesaiInterupsi
    MOV    pencacah2,#2

    acall clok

selesaiInterupsi:
    pop    Acc
    pop    PSW
    RETI
clok:
satudetik:
    INC    detik
    MOV    A,detik
    CJNE    A,#60,selesai
    MOV    detik,#0

    INC    menit
    MOV    A,menit
    CJNE    A,#59,selesai
    MOV    detik,#0

selesai:
    RET
perbaruitampilan:
    MOV    R0,#detikpul

    MOV    A,menit
ruasduadigit:
    MOV    B,#10
    DIV    AB
    acall ruassatudigit
    MOV    A,B
ruassatudigit:
    MOV    @R0,A
    INC    R0

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

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