Minggu, 05 Juni 2011

; ; Program untuk menampilkan tulisan secara bergeser

.ASM -------------------------------------------------------------------
; --------------------------------------------------------------------------------
; Pemakaian RAM     :
;    70h-77h   = data segment display / 70h = kiri
;    78h      = data common display
;    79h      = untuk delay display 1 common
;    7Ah      = untuk delay display 8 common
;     7Bh      = utk counter RAM to PORT display
;    7Ch      = utk counter buffer RAM display
;    7Dh      = jumlah text
;    7Eh      = pointer untuk tentukan DPTR   
; --------------------------------------------------------------------------------
        ORG       0H
;
        LJMP    MULAI
; --------------------------------------------------------------------------------
;subrutin untuk mengisi buffer RAM Display
; --------------------------------------------------------------------------------
ISI_BUFFER:
        MOV    7CH,#08H    ; Jumlah digit 7 segment
        MOV    R0,#70H
ULANG:
        MOV    A,7EH        ; Isi A dengan isi dari alamat 7Eh (data DPTR)
        MOVC    A,@A+DPTR    ; Pindahkan data ke n ke A
        MOV    @R0,A        ; Pindahkan isi A ke alamat yang ditunjuk R0
        INC    DPTR        ; Siapkan data berikutnya
        INC    R0        ; tambahkan isi R0 dengan 1
        DJNZ    7CH,ULANG       ; Ulangi sampai 8 kali (jml digit 7 segment)
        RET
; --------------------------------------------------------------------------------
;subrutin untuk menampilkan isi RAM buffer display ke 8 x 7 segment
; --------------------------------------------------------------------------------
DIS8SEG:
        MOV    7BH,#08H    ; Isi RAM 7Bh dg 8 = jumlah digit 7 segment
        MOV    R1,#70H        ; R1 = Alamat buffer display
        MOV    78H,#07FH    ; Isi memory 78h dg FEh = data Common display
ULANG2:
        MOV    A,@R1        ; pindahkan isi RAM yang ditunjuk oleh R1 ke A
        MOV    P0,A        ; Keluarkan data A ke port 0 (data segment)
        INC    R1             
        MOV    A,78H        ; Pindahkan isi RAM 78h ke A
        MOV    P1,A        ; Keluarkan data A ke port 1 (data common)
        RR    A       
        MOV    78H,A       
        LCALL    DELAY
        MOV    P0,#0FFH    ; matikan display sesaat (u/ menghindari
                    ; bayangan)
        MOV    P1,#0FFH
        DJNZ    7BH,ULANG2      ; Ulangi sampai 8 kali (jml digit 7 segment)
        RET
;
DELAY:        MOV    79H,#0E0H     ; Isi RAM 79h dengan 0E0 (hex)
DELAY1:        DJNZ    79H,DELAY1    ;
        RET            ; Kembali ke langkah setelah perintah Acall
                    ;
DISPLAY:
        MOV    7AH,#050H    ; Isi RAM 7Ah dengan 050 (hex)
DISPLAY1:
        LCALL    DIS8SEG       
        DJNZ    7AH,DISPLAY1   
        RET
MULAI:
                    ; teks keluar dari kanan ke kiri
        MOV    7EH,#1
        MOV    7DH,#8        ; RAM 7Dh diisi jumlah karakter yang akan
NEXTDATA:                ; di tampilkan
        MOV     DPTR,#ELINS    ; Isi DPTR dengan alamat dg label Awal
        LCALL    ISI_BUFFER   
        LCALL    DISPLAY       
        INC    7EH        ; RAM 7Eh untuk counter data berikutnya
        DJNZ    7DH,NEXTDATA    ; Ulangi sejumlah karakter yang diingikan
        LCALL    DISPLAY       
        LCALL    DISPLAY
        LCALL    DISPLAY
                    ; teks digeser masuk ke kiri
NEXTDATA2:
        DEC    7EH        ; RAM 7E untuk counter data berikutnya
        MOV    DPTR,#ELINS
        LCALL    ISI_BUFFER
        LCALL    DISPLAY   
        MOV    A,7EH
        CJNE    A,#0,NEXTDATA2
        LCALL    DISPLAY
        LCALL    DISPLAY
        LCALL    DISPLAY
        LJMP    MULAI
; --------------------------------------------------------------------------------
; DATA AREA
; --------------------------------------------------------------------------------
ELINS:    DB   0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
    DB   0FDH,0A0H,0BAH, 77H, 62H, 29H,0FDH,0FDH
;
    END

Tidak ada komentar:

Posting Komentar