.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
; --------------------------------------------------------------------------------
; 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