laporan praktikum mikroprosesor
DESCRIPTION
LAPORAN PRAKTIKUM MIKROPROSESOR adalah sebuah resume yang berisi laporan-laporan yang berhubungan dengan mata kuliah mikroprosessor atau mikrokontrollerTRANSCRIPT
1
LAPORAN PRAKTIKUM SISTEM MIKROPROSESOR Nama : Asep Syarif Hidayat NIM : 2405308004
MODUL I
Program Latihan 1
1. ORG 0000H ; Program ditempatkan di alamat 0000h
MOV P0,#10010011b ; led di P0 yaitu L3,L4,L6 dan L7 nyala
JMP $
END
Pada program Ini L3,L4,L6 dan L7 Menyala berarti disini Logik 1 menjadikan Led Menyala 2. ORG 0000H ; Program ditempatkan di alamat 0000h
MOV SP,#10H ; register SP diset pada alamat 10h
MOV A,#10010011b ; Isi accumulator dengan alamat 10010011
MOV 10H,A ; isi Stack pointer dg nilai yang ada di
Accumulator yaitu 10010011
POP P0 ; ambil data yg ada di stack
JMP $ Pointer
END
Pada program ini nyala led sama yaitu 10010011b 3 ORG 0000H ; Program ditempatkan di alamat 0000h
POP P0
JMP $
END
Pada program ini Led Nyala semua Perintah POP adalah perintah yang Berfungsi untuk mengambil data dari stack Pointer
4 REG_TUNDA1 EQU 30h
REG_TUNDA2 EQU 31h
ORG 0000H ; Program disimpan dialamat 0000h
MOV P0,#10010011b ; P0 diisi dengan alamat 10010011
PUSH P0 ; Data di disimpan di P0
CALL DELAY ; panggil Sub rutin delay
CALL DELAY
CALL DELAY
CALL DELAY
MOV P0,#0FFh ; isi P0 dengan Nilai 0FFh
CALL DELAY ; panggil subrutin delay
CALL DELAY
POP P0 ; ambil data dari P0
JMP $
;
;SUBRUTIN DELAY 1/4 DETIK
DELAY: MOV REG_TUNDA1,#250
TD: MOV REG_TUNDA2,#250
ULANG: NOP
NOP
DJNZ REG_TUNDA2,ULANG
DJNZ REG_TUNDA1,TD
RET
END
Pada saat led menyala pada logik 10010011 led menyala selama 1 detik dan ketika led mati atau pada logik 11111111b (0FFh) led matinya sekitar ½ detik.
5 REG_TUNDA1 EQU 30h
REG_TUNDA2 EQU 31h
ORG 0000H ; Program disimpan Di 0000h
MOV P0,#10010011b ; P0 diisi dengan 10010011b
PUSH P0 ; simpan data di P0
CALL DELAY ; Panggil Sub rutin delay
CALL DELAY
CALL DELAY
CALL DELAY
2
MOV P0,#0FFh ; isi P0 dengan 0FFh
CALL DELAY ; Panggil; subrutin delay
CALL DELAY
MOV P0,#7FH ; isi P0 dengan 07Fh
POP P0 ; Ambil data dari P0
JMP $
;
;SUBRUTIN DELAY 1/4 DETIK
DELAY: MOV REG_TUNDA1,#250
TD: MOV REG_TUNDA2,#250
ULANG: NOP
NOP
DJNZ REG_TUNDA2,ULANG
DJNZ REG_TUNDA1,TD
RET
END
Pada program 4 dan program 5 Nyala led sama Perintah POP berfungsi untuk mengambil data dari register Perintah PUSH Berfungsi untuk menyimpan data ke register
6 REG_TUNDA1 EQU 30h
REG_TUNDA2 EQU 31h
ORG 0000H ; Program disimpan Di 0000h
MOV A,#7AH ; isi Accumulator dengan Alamat 7Ah
(01111010) L8,L3 dan L1 Nyala
MOV P0,A ; isi P0 dg nilai Yg ada di Accumulator
MOV B,#05H ; isi Register B dg Nilai 05h
(00000101b)L8,L7,L6,L5,L4 dan L2 nyala
PUSH P0 ; simpan data di P0
CALL DELAY ; Panggil Subrutin Delay
CALL DELAY
CALL DELAY
XCH A,B ; tukar Data di Accumulator dengan data
Yang ada Di Register B
MOV P0,A ; tampilkan nilai Accumulator yang Baru
Di P0
JMP $
;
;SUBRUTIN DELAY 1/4 DETIK
DELAY: MOV REG_TUNDA1,#250
TD: MOV REG_TUNDA2,#250
ULANG: NOP
NOP
DJNZ REG_TUNDA2,ULANG
DJNZ REG_TUNDA1,TD
RET
END
Nyala led yang pertama adalah pada logic 01111010 (07Ah) lalu ketika register B diisi dengan logic 000000101(05h) setelah ada perintah XCH A,B maka Nilai di Accumulator di ganti dengan nilai yang ada di register B.
3
MODUL II
1 ORG 00H ; program ditempatkan dialamat 00h
LAT1: MOV P0,#0FH ; isi P0 dg nilai 0Fh (00001111b)
; L5, L6, L7 dan L8 nyala led lainya mati
JMP $
end
ORG 00H ; program ditempatkan dialamat 00h
LAT1.2: MOV P0,#0F0H ; isi P0 dg nilai 0f0h (11110000b)
; L1,L2,L3 dan L4 nyala nyala led lainya mati
JMP $,
end
ORG 00H ; program ditempatkan dialamat 00h
LAT1.3: MOV P0,#21H ; isi P0 dg nilai 21h (000100001b)
; L2, L3, L4, L5 L7 dan L8 nyala
JMP $
End
Pada listing program diatas nyala led terjadi karena led diberi ”logik 0” Rangkaian hardware display lednya ( dg konfigurasi common Anode) ditunjukan oleh gambar berikut ini :
2 ORG 00H ; program ditempatkan dialamat 00h
LAT2: MOV P0,P2 ; isi P0 dengan nilai dari P2
JMP LAT2 ; kembali ke label lat2
end
Ketika Dip Sw1, Sw 2 dan 3 di on-kan maka L1, L2, L3 nyala Ketika Dip Sw6 dan Sw 8 di on-kan maka L6 dan L8 Nyala Ketika Dip Sw1, Sw 2 dan Sw 5 dan Sw 7 di on-kan maka L1. L2 dan L5, L7 Nyala
Display yang terjadi tergantung dari pemberian nilai logik pada Port 2 (dg meng On-kan Switch)
4
Gambar rangkaian Dip Switch :
3 ORG 00H ; program ditempatkan dialamat 00h
LAT3: MOV A,P2 ; isi accumulator dg nilai yg ada di P2
SWAP A ; tukar nibel accumulator
MOV P0,A ; isi P0 dg nilai Accumulator
JMP LAT3 ; lompat ke label LAT3
end
ketika dip switch 1, 2, dan 3 di on-kan led yang menyala adalah L5, L6, dan L7 ketika dip switch 6 dan 8 di on-kan led yang menyala adalah L2 dan L4
ketika dip switch 1, 2, 5 dan 7 di on-kan led yang menyala adalah L1, L3, L5 dan L6 Posisi penekanan Dip Switch sama tetapi nyala Led berbeda karena pada Program diatasnya tidak memakai perintah Swap. Perintah Swap A adalah perintah untuk menukar nibel dari accumulator
4 ORG 00H ; program ditempatkan dialamat 00h LAT4: MOV A,P2 ; isi accumulator dg nilai yg ada di P2
CPL A ; Complementkan (NOT) nilai Accumulator
MOV P0,A ; isi P0 dg nilai Accumulator
JMP LAT4 ; lompat ke label LAT4
End
Ketika dip switch 1, 2, dan 3 di on-kan led yang menyala adalah L4,L5, L6, L7, L8
(00000111b) Ketika dip switch 6 dan 8 di on-kan led yang menyala adalah L1, L2, L3, L4 ,L5 , L7 (10100000b) Ketika dip switch 1, 2, 5 dan 7 di on-kan led yang menyala adalah L3, L4, L6 dan L8
(01010011b) Posisi penekanan Dip Switch sama tetapi nyala Led berbeda karena pada Program diatasnya tidak memakai perintah CPL. Perintah CPL A adalah perintah untuk Menotkan(sbg Inverter) accumulator
5 ORG 00H ; program ditempatkan dialamat 00h
LAT5: MOV A,P2 ; isi accumulator dg nilai yg ada di P2
CLR A ; nolkan nilai Accumulator
MOV P0,A ; isi P0 dg nilai Accumulator
JMP LAT5 ; lompat ke label LAT5
end
Ketika dip switch 1, 2, dan 3 di on-kan led yang menyala adalah semua led (00000000b) Ketika dip switch 6 dan 8 di on-kan led yang menyala adalah semua led (00000000b) Ketika dip switch 1, 2, 5 dan 7 di on-kan led yang menyala adalah semua led (00000000b) Posisi penekanan Dip Switch sama tetapi nyala Led berbeda karena pada Program diatasnya tidak memakai perintah CLR. Perintah CLR A adalah perintah untuk Membersihkan nilai Accumulator
6 ORG 00H ; program ditempatkan dialamat 00h
LAT6: MOV A,P2 ; isi accumulator dg nilai yg ada di P2
5
RL A ; Geser ke kiri nilai yang ada di accumulator
MOV P0,A ; isi P0 dg nilai accumulator
JMP LAT6 ; lompat ke label LAT6
end
Ketika dip switch 1, 2, dan 3 di on-kan led yang menyala adalah L2,L3, L4 (11110001) Ketika dip switch 6 dan 8 di on-kan led yang menyala adalah L1, L7 (10111110)
Ketika dip switch 1, 2, 5 dan 7 di on-kan led yang menyala adalah L2, L3, l6, L8 (01011001) Posisi penekanan Dip Switch sama tetapi nyala Led berbeda karena pada Program diatasnya Tidak memakai perintah RL (Rotate Left). Perintah RL A adalah perintah untuk Memutar ke kiri isi accumulator
7 ORG 00H ; program ditempatkan dialamat 00h
LAT7: MOV A,P2 ; isi accumulator dg nilai yg ada di P2
RR A ; Geser ke kiri nilai yang ada di accumulator
MOV P0,A ; isi P0 dg nilai accumulator
JMP LAT7 ; lompat ke label LAT7
end
Ketika dip switch 1, 2, dan 3 di on-kan led yang menyala adalah L1,L2, L8 (01111100) Ketika dip switch 6 dan 8 di on-kan led yang menyala adalah L5, L7 (10101111)
Ketika dip switch 1, 2, 5 dan 7 di on-kan led yang menyala adalah L1, L4, L6 dan L8 (01010110) Posisi penekanan Dip Switch sama tetapi nyala Led berbeda karena pada Program diatasnya Tidak memakai perintah RR (Rotate Right). Perintah RR A adalah perintah untuk Memutar ke kanan isi accumulator
6
MODUL III
LATIHAN 1 L1 EQU 80h ; L1 = alamat 80h (P0.0)
L2 EQU 81h ; L2 = alamat 81h (P0.1)
L3 EQU 82h ; L3 = alamat 82h (P0.2)
L4 EQU 83h ; L4 = alamat 80h (P0.3)
L5 EQU 84h ; L5 = alamat 80h (P0.4)
L6 EQU 85h ; L6 = alamat 80h (P0.5)
L7 EQU 86h ; L7 = alamat 80h (P0.6)
L8 EQU 87h ; L8 = alamat 80h (P0.7)
;
ORG 00H ; Program ditempatkan di alamat 0000h
MULAI: MOV P0,#0FFH : isi P0 dengan nilai FFh
CLR L1 : bersihkan L1
CLR L5 : bersihkan L5
JMP $ : lompat
END
Pada program diatas L1 dan L5 Nyala yang lainya padam LATIHAN 2 L1 EQU 80h ; L1 = alamat 80h (P0.0)
L2 EQU 81h ; L2 = alamat 81h (P0.1)
L3 EQU 82h ; L3 = alamat 82h (P0.2)
L4 EQU 83h ; L4 = alamat 80h (P0.3)
L5 EQU 84h ; L5 = alamat 80h (P0.4)
L6 EQU 85h ; L6 = alamat 80h (P0.5)
L7 EQU 86h ; L7 = alamat 80h (P0.6)
L8 EQU 87h ; L8 = alamat 80h (P0.7)
;
ORG 00H ; Program ditempatkan di alamat 0000h
MULAI: MOV P0,#00H ; isi P0 dengan nilai 00h
SETB L1 ; beri L1 logic 1
SETB L5 ; beri l5 logic 1
JMP $ ; lompat
END
Pada Program Diatas L1 Dan L5 Padam yang lainnya nyala LATIHAN 3 ORG 00H ; Program ditempatkan di alamat 0000h
MULAI: MOV P0,#10101010B ; isi P0 dengan nilai 10101010b
JMP $ ; lompat
END
Pada Program Diatas L1,L3,L5,L7 nyala yang lainya padam L1 EQU 80H
L2 EQU 81H
L3 EQU 82H
L4 EQU 83H
L5 EQU 84H
L6 EQU 85H
L7 EQU 86H
L8 EQU 87H
ORG 00H
STAR: MOV P0,#00H
SETB L2
SETB L4
SETB L6
SETB L8
JMP $
END
LATIHAN 4 ORG 00H ; Program ditempatkan di alamat 0000h
MULAI: MOV P0,#00100100B ; isi p0 dengan nilai 00100100b
JMP $ ; lompat
END
Pada Program Diatas L3,L6 padam yang lainya nyala
7
L1 EQU 80H
L2 EQU 81H
L3 EQU 82H
L4 EQU 83H
L5 EQU 84H
L6 EQU 85H
L7 EQU 86H
L8 EQU 87H
ORG 00H
STAR: MOV P0,#00H
SETB L3
SETB L6
JMP $
END
LATIHAN 5 ORG 00H ; Program ditempatkan di alamat 0000h
LAT5: MOV P0,P2 ; isi P0 dengan nilai dari p2
JMP LAT5 ; lompat
END
Saat Sw1 On L1 Nyala yang lainnya Padam Saat Sw6 On L6 Nyala yang lainnya Padam
LATIHAN 6 L1 EQU 80h ; L1 = alamat 80h (P0.0)
L2 EQU 81h ; L2 = alamat 81h (P0.1)
L3 EQU 82h ; L3 = alamat 82h (P0.2)
L4 EQU 83h ; L4 = alamat 80h (P0.3)
L5 EQU 84h ; L5 = alamat 80h (P0.4)
L6 EQU 85h ; L6 = alamat 80h (P0.5)
L7 EQU 86h ; L7 = alamat 80h (P0.6)
L8 EQU 87h ; L8 = alamat 80h (P0.7)
;
;dip switcth tersambung dg register P2 (bit addresible) dan alamat setiap bitnya
adalah
SW1 EQU A0H ; SW1 = alamat A0h (P2.0)
SW2 EQU A1H ; SW2 = alamat A1h (P2.1)
SW3 EQU A2H ; SW3 = alamat A2h (P2.2)
SW4 EQU A3H ; SW4 = alamat A3h (P2.3)
SW5 EQU A4H ; SW5 = alamat A4h (P2.4)
SW6 EQU A5H ; SW6 = alamat A5h (P2.5)
SW7 EQU A6H ; SW7 = alamat A6h (P2.6)
SW8 EQU A7H ; SW8 = alamat A7h (P2.7)
;
ORG 00H ; Program ditempatkan di alamat 0000h
STAR: MOV P0,#0FFH ; isi P0 dengan nilai FFh
JNB SW1,L1NYALA ; apakah SW1 ditekan/tidak jika ya lompat ke
; L1 Nyala
SETB L1 ; beri logic 1 pada L1
JMP STAR ; lompat ke label star
L1NYALA: CLR L1 ; bersihkan L1
JMP STAR ; lompat ke label star
END
Saat Sw1 On L1 Nyala yang lainnya Padam LATIHAN 7 L1 EQU 80h ; L1 = alamat 80h (P0.0)
L2 EQU 81h ; L2 = alamat 81h (P0.1)
L3 EQU 82h ; L3 = alamat 82h (P0.2)
L4 EQU 83h ; L4 = alamat 80h (P0.3)
L5 EQU 84h ; L5 = alamat 80h (P0.4)
L6 EQU 85h ; L6 = alamat 80h (P0.5)
L7 EQU 86h ; L7 = alamat 80h (P0.6)
L8 EQU 87h ; L8 = alamat 80h (P0.7)
;
;dip switcth tersambung dg register P2 (bit addresible) dan alamat setiap bitnya
adalah
SW1 EQU A0H ; SW1 = alamat A0h (P2.0)
SW2 EQU A1H ; SW2 = alamat A1h (P2.1)
8
SW3 EQU A2H ; SW3 = alamat A2h (P2.2)
SW4 EQU A3H ; SW4 = alamat A3h (P2.3)
SW5 EQU A4H ; SW5 = alamat A4h (P2.4)
SW6 EQU A5H ; SW6 = alamat A5h (P2.5)
SW7 EQU A6H ; SW7 = alamat A6h (P2.6)
SW8 EQU A7H ; SW8 = alamat A7h (P2.7)
;
ORG 00H ; Program ditempatkan di alamat 0000h
STAR: MOV P0,#0FFH
JB SW6,L6PADAM ; Apakah SW6 ditekan/tidak jika tidak lompat ke
; L6 padam
CLR L6 ; bersihkan L6
JMP STAR ; lompat ke label star
L6PADAM: SETB L6 ; beri logic 1 L6
JMP STAR ; lompat ke label star
END
Saat Sw6 On L6 Nyala
LATIHAN 8.1 L1 EQU 80h ; L1 = alamat 80h (P0.0)
L2 EQU 81h ; L2 = alamat 81h (P0.1)
L3 EQU 82h ; L3 = alamat 82h (P0.2)
L4 EQU 83h ; L4 = alamat 80h (P0.3)
L5 EQU 84h ; L5 = alamat 80h (P0.4)
L6 EQU 85h ; L6 = alamat 80h (P0.5)
L7 EQU 86h ; L7 = alamat 80h (P0.6)
L8 EQU 87h ; L8 = alamat 80h (P0.7)
;
SW1 EQU A0H ; SW1 = alamat A0h (P2.0)
SW2 EQU A1H ; SW2 = alamat A1h (P2.1)
SW3 EQU A2H ; SW3 = alamat A2h (P2.2)
SW4 EQU A3H ; SW4 = alamat A3h (P2.3)
SW5 EQU A4H ; SW5 = alamat A4h (P2.4)
SW6 EQU A5H ; SW6 = alamat A5h (P2.5)
SW7 EQU A6H ; SW7 = alamat A6h (P2.6)
SW8 EQU A7H ; SW8 = alamat A7h (P2.7)
;
ORG 00H ; Program ditempatkan di alamat 0000h
MULAI: MOV P0,#0FFH ; isi P0 dengan nilai FFh
COBA1: JNB SW8,L8NYALA ; apakah SW8 ditekan/tidak jika ya lompat ke
; L8 Nyala
SETB L8 ; Beri logic 1 pada L8
JMP COBA2 ; lompat ke label coba2
L8NYALA: CLR L8 ; bersihkan L8
COBA2: JNB SW1,L1NYALA ; apakah SW1 ditekan/tidak jika ya lompat ke
; L1 Nyala
SETB L1 ; Bersihkan L1
JMP COBA1 ; Lompat Ke label Coba1
L1NYALA: CLR L1 ; Bersihkan L1
JMP COBA1 ; Lompat Ke label Coba1
END
Pada program diatas ketika SW1 dan SW8 On maka L1 dan L8 nyala yang lainnya padam L1 EQU 80H
L2 EQU 81H
L3 EQU 82H
L4 EQU 83H
L5 EQU 84H
L6 EQU 85H
L7 EQU 86H
L8 EQU 87H
SW1 EQU A0H
SW2 EQU A1H
SW3 EQU A2H
SW4 EQU A3H
SW5 EQU A4H
SW6 EQU A5H
SW7 EQU A6H
SW8 EQU A7H
ORG 00H
START: MOV P0,#0FFH
CEK1: JNB SW8,L8NYALA
SETB L8
9
JMP CEK2
L8NYALA: CLR L8
CEK2: JNB SW1,L1NYALA
SETB L1
JMP CEK1
L1NYALA: CLR L1
JMP CEK1
END
LATIHAN 8.2 L1 EQU 80h ; L1 = alamat 80h (P0.0)
L2 EQU 81h ; L2 = alamat 81h (P0.1)
L3 EQU 82h ; L3 = alamat 82h (P0.2)
L4 EQU 83h ; L4 = alamat 80h (P0.3)
L5 EQU 84h ; L5 = alamat 80h (P0.4)
L6 EQU 85h ; L6 = alamat 80h (P0.5)
L7 EQU 86h ; L7 = alamat 80h (P0.6)
L8 EQU 87h ; L8 = alamat 80h (P0.7)
;
SW1 EQU A0H ; SW1 = alamat A0h (P2.0)
SW2 EQU A1H ; SW2 = alamat A1h (P2.1)
SW3 EQU A2H ; SW3 = alamat A2h (P2.2)
SW4 EQU A3H ; SW4 = alamat A3h (P2.3)
SW5 EQU A4H ; SW5 = alamat A4h (P2.4)
SW6 EQU A5H ; SW6 = alamat A5h (P2.5)
SW7 EQU A6H ; SW7 = alamat A6h (P2.6)
SW8 EQU A7H ; SW8 = alamat A7h (P2.7)
;
ORG 00H ; Program ditempatkan di alamat 0000h
MULAI: MOV P0,#0FFH ; isi P0 dengan nilai FFh
COBA1: JNB SW1,LGANJILNYALA ; apakah SW1 ditekan/tidak jika ya lompat ke
; LganjilNyala
SETB L1 ; beri logic 1 pada L1
SETB L3 ; Beri Logic 1 pada L3
SETB L5 ; Beri Logic 1 pada L5
SETB L7 ; Beri Logic 1 pada L7
JMP COBA2
LGANJILNYALA:
CLR L1 ; Bersihkan L1
CLR L3 ; bersihkan L3
CLR L5 ; Bersihkan L5
CLR L7 ; Bersihkan L7
COBA2: JNB SW2,LGENAPNYALA ; apakah SW8 ditekan/tidak jika ya lompat ke
; L8 Nyala
SETB L2 ; beri logic 1 pada L2
SETB L4 ; Beri Logic 1 pada L4
SETB L6 ; Beri Logic 1 pada L6
SETB L8 ; Beri Logic 1 pada L8
JMP COBA1 ; lompat ke Label Coba1
LGENAPNYALA:CLR L2 ; Bersihkan L2
CLR L4 ; bersihkan L4
CLR L6 ; Bersihkan L6
CLR L8 ; Bersihkan L8
JMP COBA1 ; lompat ke Label Coba1
END
Pada program diatas ketika SW1 on maka Led dengan posisi ganjil menyala Pada program diatas ketika SW2 on maka Led dengan posisi genap menyala L1 EQU 80H
L2 EQU 81H
L3 EQU 82H
L4 EQU 83H
L5 EQU 84H
L6 EQU 85H
L7 EQU 86H
L8 EQU 87H
SW1 EQU A0H
SW2 EQU A1H
SW3 EQU A2H
SW4 EQU A3H
SW5 EQU A4H
SW6 EQU A5H
10
SW7 EQU A6H
SW8 EQU A7H
ORG 00H
START: MOV P0,#0FFH
CEK1: JNB SW2,L8NYALA
SETB L8
SETB L6
SETB L4
SETB L2
JMP CEK2
L8NYALA: CLR L8
CLR L6
CLR L4
CLR L2
CEK2: JNB SW1,L1NYALA
SETB L1
SETB L3
SETB L5
SETB L7
JMP CEK1
L1NYALA: CLR L1
CLR L3
CLR L5
CLR L7
JMP CEK1
END
11
MODUL IV
LATIHAN 1
1. Org 00h ; program ditempatkan dialamat 00h
Lat1.1:MOV p0,#0Fh ; Isi P0 dengan nilai 0Fh
JMP $ ; Lompat ditempat
END
2.
Org 00h ; program ditempatkan dialamat 00h
Lat1.2:MOV p0,#0F0h ; Isi P0 dengan nilai 0F0h
JMP $ ; Lompat ditempat
END
; Pada Program lat1.1 led yang menyala adalah L5-L8 yang lainnya padam
; Pada Program lat1.2 led yang menyala adalah L1-L4 yang lainnya padam
LATIHAN 2 Org 00h ; program ditempatkan dialamat 00h
lat2: mov p0,#0Fh ; Isi P0 dengan nilai 0Fh
lat21: mov p0,#0F0h ; isi P0 Dengan nilai 0F0h
lat22: mov p0,#0AAh ; isi P0 dengan nilai 0AAh
jmp lat2 ; lompat ke label lat2
end
pada program diatas yang terdisplay Adalah led nyala semua karena laju mikro sangat cepat sehingga
;yang terjadi hanya terdisplay adalah nyalanya semua Led padahal yang sebenarnya uP mengerjakan perintah dari tiga label program
LATIHAN 3 REG_TUNDA1 EQU 30H ; REG_TUNDA1 = alamat 30h
ORG 00H ; simpan Program di alamat 00h
LAT3: MOV P0,#0FH ; Isi P0 dengan nilai 0Fh
MOV REG_TUNDA1,#250 ; isi REG_TUNDA1 Dengan 250 (250x ulang)
ULANG: NOP ; No Operation
DJNZ REG_TUNDA1,ULANG ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi ulang
LAT31: MOV P0,#0F0H ; isi P0 Dengan nilai 0F0h
MOV REG_TUNDA1,#250 ; isi REG_TUNDA1 Dengan 250 (250x ulang)
ULANG1: NOP ; No Operation
DJNZ REG_TUNDA1,ULANG1 ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi
ulang1
LAT32: MOV P0,#0AAH ; isi P0 dengan nilai 0AAh
MOV REG_TUNDA1,#250 ; isi REG_TUNDA1 Dengan 250 (250x ulang)
ULANG2 NOP ; No Operation
DJNZ REG_TUNDA1,ULANG2 ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi
ulang2
JMP LAT3 ; lompat ke label lat3
END
Display Yang terlihat pada program diatas adalah 1 display yaitu led nyala semua ini terjadi karena subrutin delay sangat cepat
; LATIHAN 4 REG_TUNDA1 EQU 30H ; REG_TUNDA1 = alamat 30h
REG_TUNDA2 EQU 31H ; REG_TUNDA2 = alamat 31h
ORG 00H ; simpan Program di alamat 00h
LAT3: MOV P0,#0Fh ; Isi P0 dengan nilai 0Fh
MOV REG_TUNDA1,#250 ; isi REG_TUNDA1 Dengan 250 (250x ulang)
TD: MOV REG_TUNDA2,#250 ; isi REG_TUNDA2 Dengan 250 (250x ulang)
ULANG:NOP ; No Operation
NOP ; No Operation
DJNZ REG_TUNDA2,ULANG ; REG_TUNDA2=REG_TUNDA1-1, jika belum 0 ulangi ulang
DJNZ REG_TUNDA1,TD ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi TD
LAT31:MOV P0,#0F0h ; Isi P0 dengan nilai 0F0h
MOV REG_TUNDA1,#250 ; isi REG_TUNDA1 Dengan 250 (250x ulang)
TD1: MOV REG_TUNDA2,#250 ; isi REG_TUNDA1 Dengan 250 (250x ulang)
ULANG1:NOP ; No Operation
NOP ; No Operation
12
DJNZ REG_TUNDA2,ULANG1 ; REG_TUNDA2=REG_TUNDA1-1, jika belum 0 ulangi
ulang1
DJNZ REG_TUNDA1,TD1 ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi TD1
LAT32:MOV P0,#0AAh ; Isi P0 dengan nilai 0AAh
MOV REG_TUNDA1,#250 ; isi REG_TUNDA1 Dengan 250 (250x ulang)
TD2: MOV REG_TUNDA2,#250 ; isi REG_TUNDA2 Dengan 250 (250x ulang)
ULANG1:NOP ; No Operation
NOP ; No Operation
DJNZ REG_TUNDA2,ULANG2 ; REG_TUNDA2=REG_TUNDA1-1, jika belum 0 ulangi
ulang2
DJNZ REG_TUNDA1,TD2 ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi TD2
JMP LAT3 ; lompat ke label lat3
END
Pada program diatas yang terlihat adalah 3 display bedanya dengan latihan II dan III diatas adalah lamanya delay pada program ini delay agak lama jika dibandingkan dengan kedua program sebelumnya
LATIHAN 5
REG_TUNDA1 EQU 30H ; REG_TUNDA1 = alamat 30h
REG_TUNDA2 EQU 31H ; REG_TUNDA2 = alamat 31h
ORG 00H ; simpan Program di alamat 00h
LAT3: MOV P0,#0FEh ; Isi P0 dengan nilai 0FEh
MOV REG_TUNDA1,#250 ; isi REG_TUNDA1 Dengan 250 (250x ulang)
TD: MOV REG_TUNDA2,#250 ; isi REG_TUNDA2 Dengan 250 (250x ulang)
ULANG:NOP ; No Operation
NOP ; No Operation
DJNZ REG_TUNDA2,ULANG ; REG_TUNDA2=REG_TUNDA1-1, jika belum 0 ulangi ulang
DJNZ REG_TUNDA1,TD ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi TD
LAT31:MOV P0,#0FDh ; Isi P0 dengan nilai 0FDh
MOV REG_TUNDA1,#250 ; isi REG_TUNDA1 Dengan 250 (250x ulang)
TD1: MOV REG_TUNDA2,#250 ; isi REG_TUNDA2 Dengan 250 (250x ulang)
ULANG1:NOP ; No Operation
NOP ; No Operation
DJNZ REG_TUNDA2,ULANG1 ; REG_TUNDA2=REG_TUNDA1-1, jika belum 0 ulangi
ulang1
DJNZ REG_TUNDA1,TD1 ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi TD1
LAT32:MOV P0,#0FBh ; Isi P0 dengan nilai 0FBh
MOV REG_TUNDA1,#250 ; isi REG_TUNDA1 Dengan 250 (250x ulang)
TD2: MOV REG_TUNDA2,#250 ; isi REG_TUNDA1 Dengan 250 (250x ulang)
ULANG1:NOP ; No Operation
NOP ; No Operation
DJNZ REG_TUNDA2,ULANG2 ; REG_TUNDA2=REG_TUNDA1-1, jika belum 0 ulangi
ulang2
DJNZ REG_TUNDA1,TD2 ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi TD2
LAT33:MOV P0,#0F7h ; Isi P0 dengan nilai 0F7h
MOV REG_TUNDA1,#250 ; isi REG_TUNDA1 Dengan 250 (250x ulang)
TD3: MOV REG_TUNDA2,#250 ; isi REG_TUNDA2 Dengan 250 (250x ulang)
ULANG3:NOP ; No Operation
NOP ; No Operation
DJNZ REG_TUNDA2,ULANG3 ; REG_TUNDA2=REG_TUNDA1-1, jika belum 0 ulangi
ulang3
DJNZ REG_TUNDA1,TD3 ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi TD3
LAT34:MOV P0,#0EFh ; Isi P0 dengan nilai 0EFh
MOV REG_TUNDA1,#250 ; isi REG_TUNDA1 Dengan 250 (250x ulang)
TD4: MOV REG_TUNDA2,#250 ; isi REG_TUNDA2 Dengan 250 (250x ulang)
ULANG4:NOP ; No Operation
NOP ; No Operation
DJNZ REG_TUNDA2,ULANG4 ; REG_TUNDA2=REG_TUNDA1-1, jika belum 0 ulangi
ulang4
DJNZ REG_TUNDA1,TD4 ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi TD4
LAT35:MOV P0,#0DFh ; Isi P0 dengan nilai 0DFh
MOV REG_TUNDA1,#250 ; isi REG_TUNDA1 Dengan 250 (250x ulang)
TD5: MOV REG_TUNDA2,#250 ; isi REG_TUNDA2 Dengan 250 (250x ulang)
ULANG5:NOP ; No Operation
NOP ; No Operation
DJNZ REG_TUNDA2,ULANG5 ; REG_TUNDA2=REG_TUNDA1-1, jika belum 0 ulangi
ulang5
DJNZ REG_TUNDA1,TD5 ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi TD5
LAT36:MOV P0,#0BFh ; Isi P0 dengan nilai 0BFh
MOV REG_TUNDA1,#250 ; isi REG_TUNDA1 Dengan 250 (250x ulang)
TD6: MOV REG_TUNDA2,#250 ; isi REG_TUNDA2 Dengan 250 (250x ulang)
ULANG6:NOP ; No Operation
NOP ; No Operation
13
DJNZ REG_TUNDA2,ULANG6 ; REG_TUNDA2=REG_TUNDA1-1, jika belum 0 ulangi
ulang6
DJNZ REG_TUNDA1,TD6 ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi TD6
LAT37:MOV P0,#07Fh ; Isi P0 dengan nilai 07Fh
MOV REG_TUNDA1,#250 ; isi REG_TUNDA1 Dengan 250 (250x ulang)
TD7: MOV REG_TUNDA2,#250 ; isi REG_TUNDA2 Dengan 250 (250x ulang)
ULANG7:NOP ; No Operation
NOP ; No Operation
DJNZ REG_TUNDA2,ULANG7 ; REG_TUNDA2=REG_TUNDA1-1, jika belum 0 ulangi
ulang7
DJNZ REG_TUNDA1,TD7 ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi TD7
JMP LAT3
END
Pada program diatas led menyala berjalan dari L1 ke L8 dan kembali lagi ke L1 begitu seterusnya
LATIHAN 6 Perintah jump adalah perintah yang kita gunakan pada suatu rutin untuk lompat ke alur program lain
misalnya dari akhir program ke awal program atau dari tengah program ke akhir program.
LATIHAN 7 REG_TUNDA1 EQU 30H ; REG_TUNDA1 = alamat 30h
REG_TUNDA2 EQU 31H ; REG_TUNDA2 = alamat 31h
ORG 00H ; simpan Program di alamat 00h
LAT3: MOV P0,#0Fh ; isi P0 dengan nilai 0Fh
CALL DELAY ; panggil Subrutin Delay
LAT31: MOV P0,#0F0h ; isi P0 dengan nilai 0F0h
CALL DELAY ; Panggil Subrutin Delay
LAT32: MOV P0,#0AAh ; isi P0 dengan nilai 0AAh
CALL DELAY ; Panggil Subrutin Delay
JMP LAT3 ; Lompat ke label Lat3
;---------------------------------------------------------------------------------
-
; Sub rutin Delay
;---------------------------------------------------------------------------------
-
DELAY:MOV REG_TUNDA1,#250 ; isi REG_TUNDA1 Dengan 250 (250x ulang)
TD: MOV REG_TUNDA2,#250 ; isi REG_TUNDA2 Dengan 250 (250x ulang)
ULANG:NOP ; No Operation
NOP ; No Operation
DJNZ REG_TUNDA2,ULANG ; REG_TUNDA2=REG_TUNDA1-1, jika belum 0 ulangi ulang
DJNZ REG_TUNDA1,TD ; REG_TUNDA2=REG_TUNDA1-1, jika belum 0 ulangi TD
RET ; kembali dari subrutin ke program utama (pemanggil)
END
LATIHAN 8 REG_TUNDA1 EQU 30H ; REG_TUNDA1 = alamat 30h
REG_TUNDA2 EQU 31H ; REG_TUNDA2 = alamat 31h
ORG 00H ; simpan Program di alamat 00h
LAT8: MOV P0,#0FEh ; isi P0 dengan nilai 0FEh
CALL DELAY ; Panggil Subrutin Delay
LAT81: MOV P0,#0FDh ; isi P0 dengan nilai 0FDh
CALL DELAY ; Panggil Subrutin Delay
LAT82: MOV P0,#0FBh ; isi P0 dengan nilai 0FBh
CALL DELAY ; Panggil Subrutin Delay
LAT83: MOV P0,#0F7h ; isi P0 dengan nilai 0F7h
CALL DELAY ; Panggil Subrutin Delay
LAT84: MOV P0,#0EFh ; isi P0 dengan nilai 0EFh
CALL DELAY ; Panggil Subrutin Delay
LAT85: MOV P0,#0DFh ; isi P0 dengan nilai 0DFh
CALL DELAY ; Panggil Subrutin Delay
LAT86: MOV P0,#0BFh ; isi P0 dengan nilai 0BFh
CALL DELAY ; Panggil Subrutin Delay
LAT87: MOV P0,#07Fh ; isi P0 dengan nilai 07Fh
CALL DELAY ; Panggil Subrutin Delay
JMP LAT8
;---------------------------------------------------------------------------------
-
; Sub rutin Delay
14
;---------------------------------------------------------------------------------
-
DELAY:MOV REG_TUNDA1,#250 ; isi REG_TUNDA1 Dengan 250 (250x ulang)
TD: MOV REG_TUNDA2,#250 ; isi REG_TUNDA2 Dengan 250 (250x ulang)
ULANG:NOP ; No Operation
NOP ; No Operation
DJNZ REG_TUNDA2,ULANG ; REG_TUNDA2=REG_TUNDA1-1, jika belum 0 ulangi ulang
DJNZ REG_TUNDA1,TD ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi TD
RET ; kembali dari subrutin ke program utama (pemanggil)
END
Program diatas disederhanakan dari program latihan 5 yaitu dengan membuat subrutin delay.
REG_TUNDA1 EQU 30H
REG_TUNDA2 EQU 31H
ORG 00H
LAT8: MOV P0,#3FH
CALL DELAY
;
LAT81: MOV P0,#0CFH
CALL DELAY
;
LAT82: MOV P0,#0F3H
CALL DELAY
;
LAT83: MOV P0,#0FCH
CALL DELAY
JMP LAT8
;
;Sub_Rutinewaktu tunda 1/4 detik
;----------------------------------
DELAY: MOV REG_TUNDA1,#250
TD: MOV REG_TUNDA2,#250
ULANG: NOP
NOP
DJNZ REG_TUNDA2,ULANG
DJNZ REG_TUNDA1,TD
RET
;
END
LATIHAN 9 REG_TUNDA1 EQU 30H
REG_TUNDA2 EQU 31H
ORG 00H
LAT9: MOV P0,#81H
CALL DELAY
;
LAT91: MOV P0,#3CH
CALL DELAY
;
LAT92: MOV P0,#0C3H
CALL DELAY
;
LAT93: MOV P0,#00H
CALL DELAY
JMP LAT9
;
;Sub_Rutinewaktu tunda 1/4 detik
;----------------------------------
DELAY: MOV REG_TUNDA1,#250
TD: MOV REG_TUNDA2,#250
ULANG: NOP
NOP
DJNZ REG_TUNDA2,ULANG
DJNZ REG_TUNDA1,TD
RET
;
END
15
MODUL V
1. ORG 00H ; program ditempatkan dialamat 00h
MOV A,#0FH ; Isi P0 dengan nilai 0Fh
MOV P0,A ; isi p0 dengan nilai yang ada di akumulator
JMP $ ; Lompat
END ; Pada Program Diatas Led yang menyala adalah L5-L8 yang lainnya padam
2. ORG 00H ; Program ditempatkan dialamat 00h
MOV A,#0FH ; Isi P0 dengan nilai 0Fh
CPL A ; Complement Kan Akumulator
MOV P0,A ; Isi P0 dengan nilai dari Acumulator
JMP $ ; Lompat
END ;
Pada Program Diatas Led yang menyala adalah L1 s/dL4 yang lainnya padam Pada kedua program diatas terjadi beda display karena adanya perintah Komplemen yaitu menginverterkan Nilai
3 ORG 00H ; Program di tempatkan di alamat 00h
MOV A,#0FH ; Isi Acumulator dengan Nilai 0Fh
CPL A ; Complemenkan Akumulator
ANL A,#0AAH ; And kan nilai 0AAh dengan Nilai yang ada diacumulator (0Fh)
MOV P0,A ; Isi P0 dengan Nilai dari accumulator (hasil And)
JMP $ ; lompat
END
Display pada latihan di atas beda dengan display pada latihan 2 karena ada tambahan perintah untuk meng And kan
4 ORG 00H ; Program di tempatkan di alamat 00h
DIP: MOV A,P2 ; Isi Acumulator dengan Nilai dari P2
CPL A ; Complement Kan Akumulator
MOV P0,A ; Isi P0 dengan nilai dari akumulator
JMP DIP ; Lompat ke label DIP
END
Pada Program Diatas ketika SW1 dinyalakan maka L1 Mati begitu juga dengan SW dan led Yang lainnya
5. ORG 00H ; Program di tempatkan di alamat 00h
DIP: MOV A,P2 ; Isi Acumulator dengan Nilai dari P2
CPL A ; Complement Kan Akumulator
ANL A,#0FH ; And kan nilai dari P2 dengan Nilai yang ada diacumulator (0Fh)
CPL A ; Complement Kan Akumulator
MOV P0,A ; Isi P0 dengan nilai dari Akumulator
JMP DIP ; Lompat ke label DIP
END
Pada program diatas ketika SW di Onkan hanya pada SW1 s/d SW4 yang direspon Pada Kedua program Diatas ada perbedaan yaitu setelah akumulatro di Complemenkan lalu diberi perintah And dengan nilai 0Fh dan setelah Di and kan lalu dikomplemenkan Lagi.
6. ORG 00H ; Program di tempatkan di alamat 00h
MOV A,#0FH ; Isi Acumulator dengan Nilai 0Fh
CPL A ; Complement Kan Akumulator
ORL A,#0AAH ; Or kan nilai dari akumulator dengan nilai 0AAh
MOV P0,A ; Isi P0 dengan nilai dari P0
16
JMP $ ; Lompat
END
Pada Program Diatas yang menyala haya pada L1 dan L3
7 ORG 00H ; Program di tempatkan di alamat 00h
DIP: MOV A,P2 ; Isi A dengan Nilai dari P2
CPL A ; Complemenkan Acumulator
ORL A,#0FH ; Or kan Nilai di Acumulator dengan nilai dari 0Fh
CPL A ; Complemenkan Akumulator
MOV P0,A ; Isi P0 dengan nilai dari Acumulator
JMP DIP ; Lompat ke Label DIP
END
Pada program Ketika SW dionkan Hanya Pada SW5 s/d SW8 yang direspon yaitu oleh L5 s/d L8 Perbedaan display yang terjadi adalah karena perbedaan perintah antara di ANL dan Di ORL kan.
8 ORG 00H ; Program di tempatkan di alamat 00h
DIP: MOV A,P2 ; Isi A dengan Nilai dari P2
CPL A ; Complemenkan Acumulator
ANL A,#055H ; AND kan Nilai di Acumulator dengan nilai dari 055h
MOV P0,A ; Complemenkan Akumulator
JMP DIP ; Isi P0 dengan nilai dari Acumulator
END Lompat ke Label DIP
Pada program Diatas yang memblokir Saklar genap adalah Dengan dengan Menga AND kan Yang diberikan Dan Program Diatas Merupakan salah satu dari Implementasi Dari AND gate
9 ORG 00H ; Program di tempatkan di alamat 00h
DIP: MOV A,P2 ; Isi A dengan Nilai dari P2
CPL A ; Complemenkan Acumulator
ORL A,#0F7H ; OR kan Nilai di Acumulator dengan nilai dari 0F7h
CPL A ; Complemenkan Akumulator
MOV P0,A ; Isi P0 dengan nilai dari Acumulator
JMP DIP ; Lompat ke Label DIP
END
17
MODUL VI
Latihan 1 REG_TUNDA1 EQU 30H ; REG_TUNDA1 = alamat 30h
REG_TUNDA2 EQU 31H ; REG_TUNDA2 = alamat 31h
REG_TUNDA3 EQU 32H ; REG_TUNDA3 = alamat 32h
ORG 00H ; Program ditempatkan di alamat 00h
LAT1: MOV P0,#00h ; Isi P0 dengan nilai 00h
MOV A,P0 ; Isi A dengan nilai dari P0
ULANG: CALL DELAY ; Panggil delay
INC A ; Incrementkan Akumulator
MOV P0,A ; Isi P0 dengan nilai dari A
JMP ULANG ; lompat Ke label ulang
;WAKTU_TUNDA
DELAY: MOV REG_TUNDA1,#10 ; isi REG_TUNDA1 Dengan 10 (10x ulang)
TD: MOV REG_TUNDA2,#200 ; isi REG_TUNDA2 Dengan 200 (200x ulang)
TD1: MOV REG_TUNDA3,#250 ; isi REG_TUNDA3 Dengan 250 (250x ulang)
DJNZ REG_TUNDA3,$ ; REG_TUNDA3=REG_TUNDA1-1, jika belum 0 ulangi
DJNZ REG_TUNDA2,TD1 ; REG_TUNDA2=REG_TUNDA1-1, jika belum 0 ulangi TD1
DJNZ REG_TUNDA1,TD ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi TD
RET ; kembali dari subrutin ke program utama (pemanggil)
END
Pada Program Diatas adalah Program yang merupakan implementasi dari Perintah INC yang menambah 1 nilai acumulator display yang terjadi nyala LED Berurutan dari Nyala dengan Logic 00000000b, 00000001b,00000010b,000000011, begitu seterusnya sampai Led Mati Semua atau 11111111b.
Latihan 2 REG_TUNDA1 EQU 30H ; REG_TUNDA1 = alamat 30h
REG_TUNDA2 EQU 31H ; REG_TUNDA2 = alamat 31h
REG_TUNDA3 EQU 32H ; REG_TUNDA3 = alamat 32h
ORG 00H ; Tempatkan Program Dialamat 00h
LAT2: MOV P0,#0FFh ; Isi P0 dengan nilai 0FFh
MOV A,P0 ; Isi Akumulator dengan nilai dar P0
ULANG: CALL DELAY ; panggil Delay
DEC A ; Decremenkan Akumulator
MOV P0,A ; isi P0 dengan Nilai Dari akumulator
JMP ULANG ; lompat Ke label Ulang
;WAKTU_TUNDA
DELAY: MOV REG_TUNDA1,#10 ; isi REG_TUNDA1 Dengan 10 (10x ulang)
TD: MOV REG_TUNDA2,#200 ; isi REG_TUNDA2 Dengan 200 (200x ulang)
TD1: MOV REG_TUNDA3,#250 ; isi REG_TUNDA3 Dengan 250 (250x ulang)
DJNZ REG_TUNDA3,$ ; REG_TUNDA3=REG_TUNDA1-1, jika belum 0 ulangi
DJNZ REG_TUNDA2,TD1 ; REG_TUNDA2=REG_TUNDA1-1, jika belum 0 ulangi TD1
DJNZ REG_TUNDA1,TD ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi TD
RET ; kembali dari subrutin ke program utama (pemanggil)
END
Pada Program Diatas adalah Program yang merupakan implementasi dari Perintah DEC yang Mengurangi acumulator display yang terjadi nyala LED Berurutan dari Nyala dengan Logic 1111111b, 11111110b,11111101b,111111100b, begitu seterusnya sampai Led nyala Semua atau 00000000b. Beda Display yang terjadi Karena Adanya Perintah INC dan DEC.
Latihan 3 REG_TUNDA1 EQU 30H ; REG_TUNDA1 = alamat 30h
REG_TUNDA2 EQU 31H ; REG_TUNDA2 = alamat 31h
REG_TUNDA3 EQU 32H ; REG_TUNDA3 = alamat 32h
ORG 00H ; Program Disimpan di alamat 00H
LAT3: MOV P0,P2 ; Isi P0 dari P2
CALL DELAY ; Pangggil Delay
MOV A,P0 ; isi Acumulator Dengan Nilai Dari P0
CPL A ; Complemenkan Acumulator
INC A ; Tambah Nilai Akumulator
CPL A ; Complemenkan Akumulator
MOV P0,A ; isi P0 dengan Nilai Dari Acumulator
CALL DELAY ; panggil Delay
CALL DELAY ; panggil Delay
MOV P0,#0FFH ; Isi P0 dengan nilai 0FFh
CALL DELAY ; panggil Delay
JMP LAT3 ; Lompat Ke Lat3
;WAKTU_TUNDA
DELAY: MOV REG_TUNDA1,#10 ; isi REG_TUNDA1 Dengan 10 (10x ulang)
18
TD: MOV REG_TUNDA2,#200 ; isi REG_TUNDA2 Dengan 200 (200x ulang)
TD1: MOV REG_TUNDA3,#250 ; isi REG_TUNDA3 Dengan 250 (250x ulang)
DJNZ REG_TUNDA3,$ ; REG_TUNDA3=REG_TUNDA1-1, jika belum 0 ulangi
DJNZ REG_TUNDA2,TD1 ; REG_TUNDA2=REG_TUNDA1-1, jika belum 0 ulangi TD1
DJNZ REG_TUNDA1,TD ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi TD
RET ; kembali dari subrutin ke program utama (pemanggil)
END
Pada Program tersebut diatas yang terjadi adalah ketika SW1 On maka L1 & L2 nyala Bergantian Membentuk nilai 00000001b, 00000010b, 00000011b dan ketika SW2 di onkan juga kombinasi Yang terjadi adalah Display Pada nilai 0FCh, 0FBh dan 0FFh begitu juga dengan switch yang lainnya, Hal ini karena adanya perintah INC
Latihan 4 REG_TUNDA1 EQU 30H ; REG_TUNDA1 = alamat 30h
REG_TUNDA2 EQU 31H ; REG_TUNDA2 = alamat 31h
REG_TUNDA3 EQU 32H ; REG_TUNDA3 = alamat 32h
ORG 00H ; Program Disimpan di alamat 00H
LAT4: MOV P0,P2 ; Isi P0 dari P2
CALL DELAY ; Pangggil Delay
MOV A,P0 ; isi Acumulator Dengan Nilai Dari P0
CPL A ; Complemenkan Acumulator
DEC A ; Kurangi Nilai Akumulator
CPL A ; Complemenkan Akumulator
MOV P0,A ; isi P0 dengan Nilai Dari Acumulator
CALL DELAY ; panggil Delay
CALL DELAY ; panggil Delay
MOV P0,#0FFH ; Isi P0 dengan nilai 0FFh
CALL DELAY ; panggil Delay
JMP LAT4 ; Lompat Ke Lat4
;WAKTU_TUNDA
DELAY: MOV REG_TUNDA1,#10 ; isi REG_TUNDA1 Dengan 10 (10x ulang)
TD: MOV REG_TUNDA2,#200 ; isi REG_TUNDA2 Dengan 200 (200x ulang)
TD1: MOV REG_TUNDA3,#250 ; isi REG_TUNDA3 Dengan 250 (250x ulang)
DJNZ REG_TUNDA3,$ ; REG_TUNDA3=REG_TUNDA1-1, jika belum 0 ulangi
DJNZ REG_TUNDA2,TD1 ; REG_TUNDA2=REG_TUNDA1-1, jika belum 0 ulangi TD1
DJNZ REG_TUNDA1,TD ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi TD
RET ; kembali dari subrutin ke program utama (pemanggil)
END
Ketika SW tidak Di Onkan Led Menyala Pada Nilai 00h dan FFh, tapi Ketika SW1 Di onkan Led yang Menyala Adalah Pada nilai FEh dan FFh, dan Ketika Ditambah Dengan meng Onkan SW2 yang terjadi Adalah nyala pada Nilai FCh, FDh dan FFh, ketika Ditambah SW3 yang di Onkan Led Yang menyala Adalah Pada Nilai F8h, F9h dan FFh begitu seterusnya seseuai dengan Led SW yang Di Onkan.
Latihan 5 REG_TUNDA1 EQU 30H ; REG_TUNDA1 = alamat 30h
REG_TUNDA2 EQU 31H ; REG_TUNDA2 = alamat 31h
REG_TUNDA3 EQU 32H ; REG_TUNDA3 = alamat 32h
BILANGAN1 EQU 33H ; Bilangan1 = Alamat 33h
BILANGAN2 EQU 34H ; Bilangan2 = Alamat 34h
ORG 00H ; Program Disimpan di alamat 00H
LAT5: MOV P0,P2 ; Isi P0 dari P2
MOV A,P2 ; Isi A dari P2
CPL A ; Complemenkan Acumulator
MOV BILANGAN1,A ; Isi Blangan1 (=33h) dengan Nilai Dari Acumulator
CALL DELAY3 ; Panggil Dellay
MOV P0,P2 ; Isi P0 dari P2
MOV A,P2 ; isi Acumulator Dari P2
CPL A ; Complemenkan Acumulator
MOV BILANGAN2,A ; Isi Bilangan2 (34h) dari Acumulaor
CALL DELAY ; Panggil Delay
ADD A,BILANGAN1 ; tambah Acumulator dengan Nilai dari Bilangan1
CPL A ; Complemenkan Acumulator
MOV P0,A ; Isi P0 dengan Nilai dari Aumulator
CALL DELAY ; Panggil Delay
CALL DELAY ; Panggil Delay
MOV P0,#0FFH ; isi P0 dengan Nilai FFh
CALL DELAY3 ; panggil Delay3
CALL DELAY3 ; panggil Delay3
JMP LAT5 ; Lompat Ke lat5
;WAKTU_TUNDA
19
DELAY: MOV REG_TUNDA1,#10 ; isi REG_TUNDA1 Dengan 30 (30x ulang)
JUMP TD
DELAY3: MOV REG_TUNDA1,#30 ; isi REG_TUNDA1 Dengan 30 (30x ulang)
TD: MOV REG_TUNDA2,#200 ; isi REG_TUNDA2 Dengan 200 (200x ulang)
TD1: MOV REG_TUNDA3,#250 ; isi REG_TUNDA3 Dengan 250 (250x ulang)
DJNZ REG_TUNDA3,$ ; REG_TUNDA3=REG_TUNDA3-1, jika belum 0 ulangi
DJNZ REG_TUNDA2,TD1 ; REG_TUNDA2=REG_TUNDA2-1, jika belum 0 ulangi TD1
DJNZ REG_TUNDA1,TD ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi TD
RET ; kembali dari subrutin ke program utama (pemanggil)
END
Program Diatas adalah sebagai Implementasi Dari Fungsi Bil1 + bil2 = Hasil Pada Hasil Penekanan Pertama SW1 Di Onkan Dan Penekanan Kedua Tetap SW1 hasil yang terdisplay Adalah Pada nilai 00000010b, begitu juga Pada Percobaan kedua pada SW2 di Onkan dan penekanan Kedua SW2 Di Onkan hasil yang terdisplay adalah nilai 00000100b
Latihan 6 REG_TUNDA1 EQU 30H ; REG_TUNDA1 = alamat 30h
REG_TUNDA2 EQU 31H ; REG_TUNDA2 = alamat 31h
REG_TUNDA3 EQU 32H ; REG_TUNDA3 = alamat 32h
ORG 00H ; Program Disimpan di alamat 00H
LAT6: MOV P0,P2 ; Isi P0 dengan Nilai dari P2
MOV A,P2 ; isi Acumulator Dengan nilai dari P2
CPL A ; Complemenkan Acumulator
CALL DELAY ; panggil Delay
MOV P0,#0FEH ; Isi P0 dengan nilai 0FEh
MOV A,#0FEH ; isi Acumulator Dengan Nilai 0FEh
CPL A ; Complemenkan Acumulator
CALL DELAY ; panggil delay
MOV P0,#11110101B ; Isi P0 dengan Nilai 11110101b
CALL DELAY ; Panggil delay
ADD A,#10 ; tambahkan Acumulator Dengan nilai 10
CPL A ; Complemenkan Acumulator
MOV P0,A ; isi p0 dengan Nilai dari Acumulator
CALL DELAY3 ; panggil Delay
JMP LAT6 ; lompat Ke Lat6
;WAKTU_TUNDA
DELAY: MOV REG_TUNDA1,#10 ; isi REG_TUNDA1 Dengan 10 (10x ulang)
JMP TD ; lompat ke TD
DELAY3: MOV REG_TUNDA1,#30 ; isi REG_TUNDA1 Dengan 30 (30x ulang)
TD: MOV REG_TUNDA2,#200 ; isi REG_TUNDA2 Dengan 200 (200x ulang)
TD1: MOV REG_TUNDA3,#250 ; isi REG_TUNDA3 Dengan 10 (10x ulang)
DJNZ REG_TUNDA3,$ ; REG_TUNDA3=REG_TUNDA1-1, jika belum 0 ulang terus
DJNZ REG_TUNDA2,TD1 ; REG_TUNDA2=REG_TUNDA2-1, jika belum 0 ulangi
DJNZ REG_TUNDA1,TD ; REG_TUNDA1=REG_TUNDA1-1, jika belum 0 ulangi
RET
END
Program Diatas adalah sebagai Implementasi Dari Fungsi A-1 + 10 = Hasil Pada Hasil Penekanan Pertama SW2 Di ON-kan yang terdisplay pertama Adalah 00000010b dan Display kedua adalah 00000001b dan Display Ketiga adalah 00001010b dan Display yang ke 4 adalah 00001011b hal Itu berarti = 2-1+10=11