Anda di halaman 1dari 23

P1.

7
Tampila
n
0
1
2
3
4
5
6
7
8
9
A
a
b
c
d
e
F
9
h
i
J
L
n
o
P
q
r
S
t
u
y
Z

P1.
6

P1.
5

P1.
4

P1.
3

P1.
2

P1.
1

P1.
0

A
0
1
0
0
1

B
0
0
0
0
0

C
0
0
1
0
0

D
0
1
0
0
1

E
0
1
0
1
1

F
0
1
1
1
0

G
1
1
0
0
0

DP
1
1
1
1
1

0
0
0
0
0
0
0
0

1
1
0
0
0
0
0
0

0
0
0
0
0
0
0
0

0
0
1
0
0
0
1
0

1
0
1
0
1
1
0
0

0
0
1
0
0
0
0
1

0
0
1
0
0
0
0
0

1
1
1
1
1
0
1
1

1
1
0
0
0

1
0
0
1
0

1
0
1
1
0

0
0
0
1
0

0
0
0
0
1

1
1
0
0
0

0
0
0
0
0

1
1
1
1
0

1
1
1

1
0
1

1
0
1

1
0
0

0
1
0

0
1
0

1
1
1

1
1
1

1
0
0
0
0

1
0
0
1
1

0
1
0
1
0

0
1
1
1
0

0
0
1
0
1

1
0
0
0
0

0
0
0
1
0

1
1
1
1
0

1
1
0

1
0
0

0
0
1

0
0
0

0
1
0

1
0
1

1
0
0

1
1
0

Hex
a
03h
9Fh
25h
0Dh
99h
49h
41h
1Fh
01h
09h
08h
11h
05h
0C1
h
0E5
h
85h
21h
71h
08h
0D1
h
0F3
h
8Fh
E3h
0D5
h
0C5
h
31h
19h
73h
48h
0E1
h
0C7
h
89h
24h

Belajar dasar : Menyimpan file


Bjb_1.asm
Org 0h
End
Di Top view simulator, klik file, external modul setting, pilih LED
Port 1 dicontreng semua, dan pilih warna LED merah atau hijau
Pilih menu View, External module, pilih LED
Ketik baris program berikut di MIDE-51
Org 0h
Mov P1,#00001111B
End
Ket: data 00001111B
Huruf B menandai bahwa data tsb adalah bilangan biner
Jika diubah dalam bentuk hexa, maka datanya menjadi
#0Fh
Masuk ke TVS, kemudian buka file .hex dimana file sebelumnya disimpan
Jika sudah, pilih menu RUN, kemudian Go
Edit kembali program di MIDE51 dan ketik program berikut ini
Org 0h
CLR P1.0
clr
P1.2
cLR
P1.4
End
Coba RUN di TVS
Ubah program berikut menjadi program yang prosedural dengan menggunakan
Subroutine
Org 0h
Mulai:
Call
Jmp

NyalaLED
Mulai

CLR
clr
cLR
Ret

P1.0

;Jump to label Mulai

NyalaLED:
P1.2
P1.4
;Return

End
Ubah kembali program di atas setelah di RUN ti TVS
Org 0h
Mulai:
Call
Jmp

Mulai

NyalaLED2
;Jump to label Mulai

NyalaLED:
CLR
clr
cLR
Ret

P1.0
P1.2
P1.4
;Return

NyalaLED2:
CLR
P1.7
clr
P1.6
cLR
P1.5
Ret
;Return
End
Di TVS, pilih menu RUN, kemudian Stop Execution, baru pilih, Reset CPU,
kemudian pilih file program yang dijalankan, kemudian kembali pilih menu RUN,
Go.
Ketik kembali program berikut ini
Org 0h
Mulai:
Call
NyalaLED2
Call
jeda
Call
Matikan_semua_LED
Call
jeda
Jmp
Mulai
;Jump to label Mulai
NyalaLED:
CLR
P1.0
clr P1.2
cLR
P1.4
Ret ;Return
NyalaLED2:
CLR
P1.7
clr P1.6
cLR
P1.5
Ret ;Return
Matikan_semua_LED:
Mov
P1,#11111111B
Ret
;=============================================
Jeda:
;Sub routine/procedure
Mov
R0,#255
Mov
R1,#255
Mov
R2,#10
jeda1:
DJNZ
R0,jeda1 ;Decrease R0 & Jump to Label jeda1
;if not equaL to zero
jeda2:
DJNZ
R1,jeda1 ;Decrease R0 & Jump to Label jeda1
jeda3:
DJNZ
R2,jeda1 ;Decrease R0 & Jump to Label jeda1
ret
;return
End
Buatlah program dalam bahasa assembly yang terdiri atas:
a. Sebuah display Sevent Segment
b. Sebuah buah tombol dengan tipe Toggle (P3.0 )
Ketentuannya adalah:
1. Jika P3.0 bernilai nol (0) maka tampilkan huruf a b c d pada display
2. Jika P3.0 bernilai satu (1) maka tampilkan huruf 1 2 3 4 5 pada display
Jawaban :
start:
JB

P3.0,tidakSamaNol

call
tampil_1
jmp
sudahCek
tidakSamaNol:
call tampil_2
sudahcek:
Jmp
Start
;=================================
tampil_1:
Mov P1,#05h
call delay
mov P1,#0C1h
call delay
mov P1,#0E5h
call delay
Mov P1,#85h
call delay
Ret
;=================================
tampil_2:
Mov P1,#9Fh
call delay
mov P1,#25h
call delay
mov P1,#0Dh
call delay
mov P1,#99h
call delay
Ret
;=================================
Delay:
mov R0,#255
mov R1,#255
mov R2,#19
kurangi_1:
DJNZ R0,kurangi_1
kurangi_2:
DJNZ R1,kurangi_1
kurangi_3:
DJNZ R2,kurangi_1
ret
End
sampel 4 counter 2 toggle anda bodo
;Buatlah program dalam bahasa assembly yang terdiri atas:
;a.Sebuah display Sevent Segment
;b.Sebuah buah tombol dengan tipe Toggle (P3.0 )
;Ketentuannya adalah:
;1.Jika P3.0 bernilai nol (0) maka tampilkan huruf 'a' 'b' 'c' 'd' pada display
;2.Jika P3.0 bernilai satu (1) maka tampilkan huruf '1' '2' '3' '4' '5' pada display
Start:
JB
P3.0,tidakSamaNol
JB
P3.1,tidakSamaNol
call
tampil_1
jmp
sudahCek

tidakSamaNol:
call
tampil_2
sudahCek:
Jmp
Start
;=================================
tampil_1:
mov P0,#05h
mov P1,#0D5h
mov P2,#85h
mov P3,#05h
call delay
mov P0,#0C1h
mov P1,#0C5h
mov P2,#85h
mov P3,#0C5h
call delay
mov P0,#0D1h
mov P1,#05h
mov P2,#0D1h
mov P3,#05h
call delay
mov P0,#0D1h
mov P1,#21h
mov P2,#0D1h
mov P3,#21h
call delay
Ret

;=================================
tampil_2:
mov P0,#9Fh
mov P1,#25h
mov P2,#1Fh
mov P3,#1Fh
call delay
mov P0,#9Fh
mov P1,#25h
mov P2,#1Fh
mov P3,#41h
call delay
mov P0,#9Fh
mov P1,#9Fh
mov P2,#99h
mov P3,#9Fh
call delay
mov P0,#9Fh
mov P1,#9Fh
mov P2,#1Fh
mov P3,#03h
call delay

Ret
;=================================
delay:
Mov R0,#255
;Register0 diberi data FFh atau 255 desimal
Mov R1,#255
;Register1 diberi data 255 desimal
Mov R2,#50
;Register2 diberi data 185 desimal
delay1:
;label delay1
DJNZ R0,delay1
;Decrease R0 and Jump to delay1 if not equal zero
delay2:
;label delay2
DJNZ R1,delay1
;Decrease R1 and Jump to delay1 if not equal zero
delay3:
;label delay2
DJNZ R2,delay1
;Decrease R2 and Jump to delay1 if not equal zero
ret
end

org 0h
;inisialisasi/deklarasi
Mov R3,#0 ;memberi data awal ke Register R3=0 desimal
Awal_program:
Mov P1,#03h ;mematikan disp 7 segment
JB P3.4,Awal_program ;jump to Label Awal_program
;if bit P3.7 is set = 1 (Satu)
call Cek_variabel
Jmp Awal_program
Cek_variabel:
CJNE R3,#0,Cek_berikutnya
call Tampilan_1
Mov R3,#1
Jmp sudah_dicek
Cek_berikutnya:
CJNE R3,#1,sudah_dicek
call Tampilan_2
Mov R3,#0
sudah_dicek:
ret
;==================================================
Tampilan_1:
Mov P1,#03h ;tampilan huruf P
call delay
Mov P1,#11111111B ;mematikan disp 7 segment
call delay
ret
;=============================================
Tampilan_2:
Mov P1,#9Fh
call delay
Mov P1,#11111111B ;mematikan disp 7 segment
call delay
ret
;=============================================
delay:
;Sub routine/procedure
Mov R0,#255
Mov R1,#255
Mov R2,#10
jeda1:
DJNZ R0,jeda1 ;Decrease R0 & Jump to Label jeda1
;if not equaL to zero
jeda2:
DJNZ R1,jeda1 ;Decrease R0 & Jump to Label jeda1
jeda3:
DJNZ R2,jeda1 ;Decrease R0 & Jump to Label jeda1
ret
;return
;=============================================
end

org 0h ; Program untuk membuat tampilan secara multipleks pada 4 display 7 segment
disp_0
disp_1
disp_2
disp_3

bit P3.0 ; jika diberi data = 0 maka disp paling kiri yang dinyalakan
bit P3.1
bit P3.2
bit P3.3 ; jika diberi data = 0 maka disp paling kanan yang dinyalakan

Awal_program:
clr disp_0
; pilih disp paling kiri (P3.0)
;clr P3.0
; pilih disp paling kiri (P3.0)
;mov P3,#11111110B ; pilih disp paling kiri (P3.0)
call Tampilan_1 ; tampilkan data huruf P pada Port_1
call delay
; delay
setb disp_0
; matikan disp paling kiri (P3.0)
;mov P3,#11111111B ; matikan disp paling kiri atau semua disp
clr
call
call
setb

disp_1
; pilih disp kedua dari kiri (P3.1)
Tampilan_2 ; tampilkan data angka 1? pada Port_1
delay
; delay
disp_1
; matikan disp kedua dari kiri (P3.1)

clr
call
call
setb

disp_2
; pilih disp ketiga dari kiri (P3.2)
Tampilan_3 ; tampilkan data angka 8? pada Port_1
delay
; delay
disp_2
; matikan disp ketiga dari kiri (P3.2)

clr disp_3
; pilih disp keempat dari kiri (P3.3)
call Tampilan_4 ; tampilkan data angka 9? pada Port_1
call delay
; delay
setb disp_3
; matikan disp keempat/paling kanan (P3.3)
Jmp Awal_program
;=====================================================
Cek_variabel:
CJNE R3,#0,Cek_berikutnya
call Tampilan_1
Mov
R3,#1
Jmp
sudah_dicek
Cek_berikutnya:
CJNE R3,#1,Cek_berikutnya2
call Tampilan_2
Mov
R3,#2
Jmp
sudah_dicek
Cek_berikutnya2:
CJNE R3,#2,Cek_berikutnya3
call Tampilan_3
Mov
R3,#3
Jmp
sudah_dicek
Cek_berikutnya3:
CJNE R3,#3,sudah_dicek
call Tampilan_4
Mov
R3,#0
sudah_dicek:
ret
;==================================================

Tampilan_1:
Mov P1,#11100000B ;tampilan huruf P
;call delay
;call delay
ret
;=============================================
Tampilan_2:
Mov P1,#77H
;call delay
;call delay
ret
;=============================================
Tampilan_3:
Mov P1,#20H
;call delay
;call delay
ret
;=============================================
Tampilan_4:
Mov P1,#21H
;call delay
;call delay
ret
;=============================================
delay:
;Sub routine/procedure
Mov R0,#255
Mov R1,#255
Mov R2,#20
jeda1:
DJNZ R0,jeda1 ;Decrease R0 & Jump to Label jeda1
;if not equaL to zero
jeda2:
DJNZ R1,jeda1 ;Decrease R0 & Jump to Label jeda1
jeda3:
DJNZ R2,jeda1 ;Decrease R0 & Jump to Label jeda1
ret
;return
;=============================================
end

;Program menampilkan angka pada 4 disp 7 Segment


;10 Desember 2013
;Armada Yogi CR
;3101 0902 1277
;meskipun 4 disp, tapi yang berhasil cuma 3 digit. menurut saya utk membuat 4 display yg sebenarnya
sangat susah a.k.a ga tw caranya
;Hal itu karena keterbatasan data angka nol dan counter.
;idealnya menurut saya utk dpt 4 digit, nilai counter yg diperlukan adalah (R0,R1,R2,R3) dan data
angka nol adalah (R4,R5,R6,R7)
;tapi R0 dan R1 sudah jadi milik delay dan tidak bisa diubah.
;CMIIW
Inisialisasi:
mov R2,#0
mov R3,#0
mov R4,#0
mov R5,#03h
mov R6,#03h
mov R7,#03h

;counter ratusan
;counter puluhan
;counter satuan
;Data angka Nol
;Data angka Nol
;Data angka Nol

Mulai:
call BeriData
call ScanDisplay
call cekPuluhan
call cekRatusan
inc R4
jmp Mulai

;increment R4
;R4=R4+1

;=============================================================
BeriData:
cekR4_1:
CJNE R4,#1,cekR4_2
mov R5,#9Fh
jmp sudahCekR4
cekR4_2:
CJNE R4,#2,cekR4_3
mov R5,#25h
jmp sudahCekR4
cekR4_3:
CJNE R4,#3,cekR4_4
mov R5,#0Dh
jmp sudahCekR4
cekR4_4:
CJNE R4,#4,cekR4_5
mov R5,#99h
jmp sudahCekR4

;R5 memori untuk disp satuan


;0Dh,99h,49h,41h,1Fh,01h,09h
;R5 memori untuk disp satuan
;99h,49h,41h,1Fh,01h,09h
;R5 memori untuk disp satuan
;49h,41h,1Fh,01h,09h
;R5 memori untuk disp satuan

cekR4_5:
CJNE R4,#5,cekR4_6 ;41h,1Fh,01h,09h
mov R5,#49h
;R5 memori untuk disp satuan
jmp sudahCekR4
cekR4_6:
CJNE R4,#6,cekR4_7 ;1Fh,01h,09h
mov R5,#41h
;R5 memori untuk disp satuan
jmp sudahCekR4
cekR4_7:
CJNE R4,#7,cekR4_8 ;01h,09h
mov R5,#1Fh
;R5 memori untuk disp satuan
jmp sudahCekR4
cekR4_8:
CJNE R4,#8,cekR4_9 ;09h
mov R5,#01h
;R5 memori untuk disp satuan
jmp sudahCekR4
cekR4_9:
CJNE R4,#9,sudahCekR4
mov R5,#09h
;R5 memori untuk disp satuan
mov R4,#0
;Reset kembali R4
inc R3
;Naikkan nilai R3
sudahCekR4:
Ret
;kembali ke pemanggil
;===========================================================
cekPuluhan:
cekR3_1:
CJNE R3,#1,cekR3_2
mov R6,#9Fh
jmp sudahCekR3
cekR3_2:
CJNE R3,#2,cekR3_3
mov R6,#25h
jmp sudahCekR3
cekR3_3:
CJNE R3,#3,cekR3_4
mov R6,#0Dh
jmp sudahCekR3
cekR3_4:
CJNE R3,#4,cekR3_5
mov R6,#99h
jmp sudahCekR3
cekR3_5:
CJNE R3,#5,cekR3_6
mov R6,#49h
jmp sudahCekR3
cekR3_6:
CJNE R3,#6,cekR3_7
mov R6,#41h
jmp sudahCekR3
cekR3_7:
CJNE R3,#7,cekR3_8
mov R6,#1Fh
jmp sudahCekR3
cekR3_8:

;R6 memori untuk disp puluhan

;R6 memori untuk disp puluhan

;R6 memori untuk disp puluhan

;R6 memori untuk disp puluhan

;R6 memori untuk disp puluhan

;R6 memori untuk disp puluhan

;R6 memori untuk disp puluhan

CJNE R3,#8,cekR3_9
mov R6,#01h
;R6 memori untuk disp puluhan
jmp sudahCekR3
cekR3_9:
CJNE R3,#9,sudahCekR3
mov R6,#09h
;R6 memori untuk disp puluhan
mov R3,#0
;R6 memori untuk disp puluhan
inc R2
sudahCekR3:
Ret
;kembali ke pemanggil
;=============================================================
cekRatusan:
cekR2_1:
CJNE R2,#1,cekR2_2
mov R7,#9Fh
;R7 memori untuk disp ratusan
jmp sudahCekR2
cekR2_2:
CJNE R2,#2,cekR2_3
mov R7,#25h
;R7 memori untuk disp ratusan
jmp sudahCekR2
cekR2_3:
CJNE R2,#3,cekR2_4
mov R7,#0Dh
;R7 memori untuk disp ratusan
jmp sudahCekR2
cekR2_4:
CJNE R2,#4,cekR2_5
mov R7,#99h
;R7 memori untuk disp ratusan
jmp sudahCekR2
cekR2_5:
CJNE R2,#5,cekR2_6
mov R7,#49h
;R7 memori untuk disp ratusan
jmp sudahCekR2
cekR2_6:
CJNE R2,#6,cekR2_7
mov R7,#41h
;R7 memori untuk disp ratusan
jmp sudahCekR2
cekR2_7:
CJNE R2,#7,cekR2_8
mov R7,#1Fh
;R7 memori untuk disp ratusan
jmp sudahCekR2
cekR2_8:
CJNE R2,#8,cekR2_9
mov R7,#01h
;R7 memori untuk disp ratusan
jmp sudahCekR2
cekR2_9:
CJNE R2,#9,sudahCekR2
mov R7,#09h
;R7 memori untuk disp ratusan
mov R4,#09h
sudahCekR2:
Ret

;kembali ke pemanggil

;=============================================================
ScanDisplay:
mov P3,R4
;Copykan data R4 ke 3 ;<--------masalahnya disini (andai R4 adalah data nol
bukan nilai counter)
call delaynya ;Delay sebentar
; sebenarnya bisa diakali dengan menjadikan mov
P3,R4 jadi mov P3,R5.
mov P2,R5
call delaynya

;Copykan data R5 ke P2
;Delay sebentar

mov P1,R6
call delaynya

;Copykan data R6 ke P1
;Delay sebentar

mov P0,R7
call delaynya

;Copykan data R7 ke P0
;Delay sebentar

Ret
;kembali ke pemanggil
;==================================================
delaynya:
Mov R0,#255
Mov R1,#255
biar cepet selesainya:v
delaynya1:
DJNZ R0,delaynya1
delaynya2:
DJNZ R1,delaynya1
ret
end

;Register0 diberi data FFh atau 255 desimal


;Register1 diberi data 255 desimal //dikurangi aja angkanya
;label delay1
;Decrease R0 and Jump to delay1 if not equal zero
;label delay2
;Decrease R1 and Jump to delay1 if not equal zero

org 0h
tombol_momentary bit P3.7 ; tombol_momentary sesuai soal tipe A
Mov R3,#0
; memberi data awal ke Register R3=0 desimal
Program_Utama:
call
Cek_kondisi_tombol_P32_dan_P34
jmp
Program_Utama
;======================================
Cek_kondisi_tombol_P32_dan_P34:
Mov A,P3
cek_kondisi_I:
CJNE A,#11101011B,cek_kondisi_II
call
kondisi_tombol_P32_dan_P34_pertama
jmp
No_Kombinasi
cek_kondisi_II:
CJNE A,#11101111B,cek_kondisi_III
call
kondisi_tombol_P32_dan_P34_kedua
jmp
No_Kombinasi
cek_kondisi_III:
CJNE A,#11111011B,cek_kondisi_IV
call
kondisi_tombol_P32_dan_P34_ketiga
jmp
No_Kombinasi
cek_kondisi_IV:
CJNE A,#11111111B,No_Kombinasi
call
kondisi_tombol_P32_dan_P34_keempat
jmp
No_Kombinasi
No_Kombinasi:
call
matikandislay7segment
Ret
;=======================================
kondisi_tombol_P32_dan_P34_pertama:
Kond_Pertama_a:
JB
tombol_momentary,No_Tomb_momentary_pertama ;cek penekanan tomb
p3.7
call
Tampilan_nOL
No_Tomb_momentary_pertama:
Ret
;=======================================
kondisi_tombol_P32_dan_P34_kedua:
JB
P3.7,sudah_dicek
Kond_Kedua_a:
CJNE R3,#0,Kond_Kedua_b
call Tampilan_4_digit_nama
Mov R3,#1
jmp sudah_dicek
Kond_Kedua_b:
CJNE R3,#1,Kond_Kedua_c
call Tampilan_4_digit_NIM
Mov R3,#2
jmp sudah_dicek
Kond_Kedua_c:
CJNE R3,#2,sudah_dicek
call Tampilan_tanggal_hari_ini

Mov R3,#0
jmp sudah_dicek
sudah_dicek:
call
matikandislay7segment
Ret
;=======================================
kondisi_tombol_P32_dan_P34_ketiga:
Kond_ketiga_a:
JB
tombol_momentary,No_Tomb_momentary_ketiga ;cek penekanan tomb p3.7
call
Tampilan_angka_985124018
No_Tomb_momentary_ketiga:
Ret
;=======================================
kondisi_tombol_P32_dan_P34_keempat:
Kond_keempat_a:
JB
tombol_momentary,No_Tomb_momentary_keempat ;cek penekanan tomb
p3.7
call
Tampilan_assenbLy
No_Tomb_momentary_keempat:
Ret
;=======================================
matikandislay7segment:
MOV P1, #11111111B
ret
;=======================================
Tampilan_NoL:
; diisi sesuai permintaan pada soal, ini hanya contoh
MOV P1, #60h
call
delay
Ret
;=======================================
Tampilan_4_digit_nama:
; diisi sesuai permintaan pada soal, ini hanya contoh
MOV P1, #38h
call
delay
Ret
;=======================================
Tampilan_4_digit_NIM:
; diisi sesuai permintaan pada soal, ini hanya contoh
MOV P1, #0AAh
call
delay
Ret
;
========================================================================
=========
Tampilan_tanggal_hari_ini:
; diisi sesuai permintaan pada soal, ini hanya contoh
MOV P1, #34h
call
delay
Ret
;
========================================================================
=========
Tampilan_angka_985124018:
; diisi sesuai permintaan pada soal, ini hanya contoh

MOV P1, #0A8h


call
delay
Ret
;=======================================
Tampilan_assenbLy:
; diisi sesuai permintaan pada soal, ini hanya contoh
MOV P1, #0E8h
call
delay
Ret
;
========================================================================
=========
delay:
Mov R0,#255
;Register0 diberi data FFh atau 255 desimal
Mov R1,#255
;Register1 diberi data 255 desimal
Mov R2,#13
;Register2 diberi data 185 desimal
delay1:
;label delay1
DJNZ R0,delay1
;Decrease R0 and Jump to delay1 if not equal zero
delay2:
;label delay2
DJNZ R1,delay1
;Decrease R1 and Jump to delay1 if not equal zero
delay3:
;label delay2
DJNZ R2,delay1
;Decrease R2 and Jump to delay1 if not equal zero
ret
;return/keluar dari subroutine delay
;======================================
end

SOAL UAS
org 0h
tombol_momentary bit P3.7 ; tombol_momentary sesuai soal tipe A
Mov R3,#0
; memberi data awal ke Register R3=0 desimal
Program_Utama:
call
Cek_kondisi_tombol_P32_dan_P34
jmp
Program_Utama
;======================================
Cek_kondisi_tombol_P32_dan_P34:
Mov A,P3
cek_kondisi_I:
CJNE A,#11101011B,cek_kondisi_II
call
kondisi_tombol_P32_dan_P34_pertama
jmp
No_Kombinasi
cek_kondisi_II:
CJNE A,#11101111B,cek_kondisi_III
call
kondisi_tombol_P32_dan_P34_kedua
jmp
No_Kombinasi
cek_kondisi_III:
CJNE A,#11111011B,cek_kondisi_IV
call
kondisi_tombol_P32_dan_P34_ketiga
jmp
No_Kombinasi
cek_kondisi_IV:
CJNE A,#11111111B,No_Kombinasi
call
kondisi_tombol_P32_dan_P34_keempat
jmp
No_Kombinasi
No_Kombinasi:
call
matikandislay7segment
Ret
;=======================================
kondisi_tombol_P32_dan_P34_pertama:
Kond_Pertama_a:
JB
tombol_momentary,No_Tomb_momentary_pertama ;cek penekanan tomb
p3.7
call
Tampilan_nOL
No_Tomb_momentary_pertama:
Ret
;=======================================
kondisi_tombol_P32_dan_P34_kedua:
JB
P3.7,sudah_dicek
Kond_Kedua_a:
CJNE R3,#0,Kond_Kedua_b
call Tampilan_4_digit_nama
Mov R3,#1
jmp sudah_dicek
Kond_Kedua_b:
CJNE R3,#1,Kond_Kedua_c
call Tampilan_4_digit_NIM
Mov R3,#2
jmp sudah_dicek
Kond_Kedua_c:
CJNE R3,#2,sudah_dicek

call Tampilan_tanggal_hari_ini
Mov R3,#0
jmp sudah_dicek
sudah_dicek:
call
matikandislay7segment
Ret
;=======================================
kondisi_tombol_P32_dan_P34_ketiga:
Kond_ketiga_a:
JB
tombol_momentary,No_Tomb_momentary_ketiga ;cek penekanan tomb p3.7
call
Tampilan_angka_985124018
No_Tomb_momentary_ketiga:
Ret
;=======================================
kondisi_tombol_P32_dan_P34_keempat:
Kond_keempat_a:
JB
tombol_momentary,No_Tomb_momentary_keempat ;cek penekanan tomb
p3.7
call
Tampilan_assenbLy
No_Tomb_momentary_keempat:
Ret
;=======================================
matikandislay7segment:
MOV P1, #11111111B
ret
;=======================================
Tampilan_NoL:
; diisi sesuai permintaan pada soal, ini hanya contoh
MOV P1, #0D5h
call
delay
MOV P1, #03h
call
delay
MOV P1, #0F3h
call
delay
Ret
;=======================================
Tampilan_4_digit_nama:
; diisi sesuai permintaan pada soal, ini hanya contoh
MOV P1, #0D5h
call
delay
MOV P1, #05h
call
delay
MOV P1, #85h
call
delay
MOV P1, #05h
call
delay
Ret
;=======================================
Tampilan_4_digit_NIM:
; diisi sesuai permintaan pada soal, ini hanya contoh
MOV P1, #9Fh
call
delay

MOV P1, #25h


call
delay
MOV P1, #1Fh
call
delay
MOV P1, #1Fh
call
delay
Ret
;
========================================================================
=========
Tampilan_tanggal_hari_ini:
; diisi sesuai permintaan pada soal, ini hanya contoh
MOV P1, #9Fh
call
delay
MOV P1, #1Fh
call
delay
MOV P1, #25h
call
delay
MOV P1, #25h
call
delay
Ret
;
========================================================================
=========
Tampilan_angka_985124018:
; diisi sesuai permintaan pada soal, ini hanya contoh
MOV P1, #09h
call
delay
MOV P1, #01h
call
delay
MOV P1, #49h
call
delay
MOV P1, #9Fh
call
delay
MOV P1, #25h
call
delay
MOV P1, #99h
call
delay
MOV P1, #03h
call
delay
MOV P1, #9Fh
call
delay
MOV P1, #01h
call
delay
Ret
;=======================================
Tampilan_assenbLy:
; diisi sesuai permintaan pada soal, ini hanya contoh
MOV P1, #05h
call
delay
MOV P1, #48h

call
delay
MOV P1, #48h
call
delay
MOV P1, #21h
call
delay
MOV P1, #0D5h
call
delay
MOV P1, #0C1h
call
delay
MOV P1, #0D5h
call
delay
MOV P1, #89h
call
delay
Ret
;
========================================================================
=========
delay:
Mov R0,#255
;Register0 diberi data FFh atau 255 desimal
Mov R1,#255
;Register1 diberi data 255 desimal
Mov R2,#19
;Register2 diberi data 185 desimal
delay1:
;label delay1
DJNZ R0,delay1
;Decrease R0 and Jump to delay1 if not equal zero
delay2:
;label delay2
DJNZ R1,delay1
;Decrease R1 and Jump to delay1 if not equal zero
delay3:
;label delay2
DJNZ R2,delay1
;Decrease R2 and Jump to delay1 if not equal zero
ret
;return/keluar dari subroutine delay
;======================================
end

Posisi tombol/keyboard tipe Toggle


Reaksi LED
Port P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0
1
1
0
1
0
1
1
0 Nyala semua
1
1
0
1
1
1
1
0 Mati semua
LED
P1.0 s.d
P1.3
1
1
1
1
0
1
1
0 Mati,
dan
sisanya
menyala

0
1
1
1
1
1
1
1

1
0
1
1
1
1
1
1

1
1
0
1
1
1
1
1

1
1
1
0
1
1
1
1

1
1
1
1
0
1
1
1

1
1
1
1
1
0
1
1

1
1
1
1
1
1
0
1

1
1
1
1
1
1
1
0

A
a
b
c
d
e
F
9
h
i
J
L
n
o
P
q
r
S
t
u
y
Z

;pake database
Org 0h
;tombol_7
bit

P3.7

Program_Utama:
;call
bacatombol
;call
matikandislay7segment
;JNB P3.7,Program_Utama
call
Nyala_ganjil
call
Nyala_ganjil2
jmp
Program_Utama
;======================================
matikandislay7segment:
MOV P1, #11111111B
ret
;=======================================
Nyala_0sd9:
Mov R7,#10
Mov DPTR,#DataNumerik_0sd9
Data_0sd9:
CLR A
Movc A,@A+DPTR
Mov P1,A
Inc
DPTR
Acall delay
DJNZ R7,Data_0sd9
Ret
;======================================
Nyala_9sd0:
Mov R7,#10
Mov DPTR,#DataNumerik_9sd0
Data_9sd0:
CLR A
Movc A,@A+DPTR
Mov P1,A
Inc
DPTR
Acall delay
DJNZ R7,Data_9sd0
Ret
;======================================
Nyala_ganjil:
Mov R7,#5
Mov DPTR,#DataNumerikGanjil
Data_ganjil:
CLR
Movc
Mov
Inc
Acall
DJNZ

A
A,@A+DPTR
P1,A
DPTR
delay
R7,Data_ganjil

Ret
;======================================
Nyala_ganjil2:
Mov R7,#5
Mov DPTR,#DataNumerikGanjil
Data_ganjil2:
CLR A
Movc A,@A+DPTR
Mov P3,A
Inc
DPTR
Acall delay
DJNZ R7,Data_ganjil2
Ret
;==============================================
Nyala_genap:
Mov R7,#4
Mov DPTR,#DataNumerikGenap
Data_genap:
CLR
Movc
Mov
Inc
Acall
DJNZ
Ret

A
A,@A+DPTR
P1,A
DPTR
delay
R7,Data_genap

;==============================================
delay:
Mov R0,#255
;Register0 diberi data FFh atau 255 desimal
Mov R1,#255
;Register1 diberi data 255 desimal
Mov R2,#19
;Register2 diberi data 185 desimal
delay1:
;label delay1
DJNZ R0,delay1
;Decrease R0 and Jump to delay1 if not equal zero
delay2:
;label delay2
DJNZ R1,delay1
;Decrease R1 and Jump to delay1 if not equal zero
delay3:
;label delay2
DJNZ R2,delay1
;Decrease R2 and Jump to delay1 if not equal zero
ret
;return/keluar dari subroutine delay
;======================================
DataNumerik_0sd9:
DB 22h,77h,0A4h,25h,71h,29h,28h,67h,20h,21h
DataNumerik_9sd0:
DB 21h,20h,67h,28h,29h,71h,25h,0A4h,77h,22h
DataNumerikGanjil:
DB 77h,25h,29h,67h,21h
DataNumerikGenap:
DB 0A4h,71h,28h,20h
end

Anda mungkin juga menyukai