Dosen Pengampu:
Hendhi Hermawan
Disusun Oleh:
Shandy Syahrizal Azhar (2 D3 EA/1103141012)
B. Blok Diagram
V. Penjelasan Program
Pada program ini setiap variable digunakan sebagai penamaan, sehingga program akan
lebih mudah dipahami. Misal kita menuliskan MOV A, #DATACW.Itu artinya register A
diisikan dengan nilai DATACW, yaitu 2000H.
PORTA EQU 2000H ;input password
PORTB EQU 2001H ;LED arah motor
PORTC EQU 2002H ;input kendali
PORTCW EQU 2003H
DATACW EQU 90H
;(1001 000)
Pada tahap ini dilakukan inisisalisasi setiap port yang digunakan. Inisialisasi digunakan
untuk menunjukkan fungsi port sebagai input atau output. Port yang diinisialisasi adalah
PORTA, PORTB, PORTC.
ORG 4000H berarti program dimulai pada alamat 4000H. Sehingga bagian awal
inisialisasi berada pada alamat 4000H. Sedangkan ORG 4100H berarti program utama
berada pada alamat 4100H.
Pada MOV A, #DATACW, sebelum DATACW terdapat tanda #, berarti nilai dari
DATACW dipindah ke register A. Sedangkan pada MOVX @DPTR, A, karena sebelum
DPTR terdapat tanda @, berarti nilai A dipindah ke alamat yang ditunjukkan oleh register
DPTR. Penggunaan MOVX karena pengalamatan berhubungan dengan I/O, bukan hanya
internal CPU
Opcode PUSH yang berfungsi untuk member nilai awal pada proses penampilan rotasi
LED.
INITPPI: MOV A,#DATACW
MOV DPTR,#PORTCW
MOVX @DPTR,A
MOV A,#01H
PUSH ACC
Program counter akan melompat ke alamat yang ditunjukkan label jika memenuhi syarat.
Jika PORT1 bit 0 mendapat logika high, maka PC akan menuju label MULAI, jika tidak
PC menuju ke alamat selanjutnya. Pada alamat selanjutnya jika PORT1 bit 0 mendapat
logika low, maka PC menuju label MATI.
Opcode JB berfungsi mengambil nilai 1 pada SW_ON sehingga apabila bernilai 1
program akan lompat ke label MULAI
Opcode JNB berfungsi mengambil nilai 0 pada SW_ON sehingga apabila bernilai 0
program akan lompat ke label MATI
MAIN: JB P1.0,MULAI
JNB P1.0,MATI
PORT A dihubungkan dengan nilai register A, saat register A tidak bernilai 0CH program
akan lompat ke label MATI
Saat bernilai 0CH, akan lompat ke label MODEMOT1
MOTOR1: MOV DPTR,#PORTA
MOVX A,@DPTR
CJNE A,#0CH, MATI
SJMP MODEMOT1
PORT A dihubungkan dengan nilai register A, saat register A tidak bernilai 35H program
akan lompat ke label MATI
Saat bernilai 35H, akan lompat ke label MODEMOT2
MOTOR2: MOV DPTR,#PORTA
MOVX A,@DPTR
CJNE A,#35H, MATI
SJMP MODEMOT2
Pada label SATU, Saat Switch bit ke tiga bernilai 1 maka akan lompat ke MODE11. Saat
Switch bit ke tiga tidak bernilai 1 maka akan lompat ke MODE10
Pada label NOL, Saat Switch bit ke tiga bernilai 1 maka akan lompat ke MODE01. Saat
Switch bit ke tiga tidak bernilai 1 maka akan lompat ke MODE00
SATU: JB P1.3,MODE11
SJMP MODE10
NOL: JB P1.3,MODE01
SJMP MODE00
Pada label MODE11, pada PORT B diberi nilai 0FF dari register A. Sehingga LED nyala
semua.
Pada label MODE11, pada PORT C diberi nilai 0FF dari register A. Sehingga motor 1
mati.
Kemudian program akan kembali lompat ke label MAIN untuk melakukan looping
MODE11: MOV A, #0FFH
MOV DPTR,#PORTB
MOVX @DPTR,A
MOV A,#0FFH
MOV DPTR,#PORTC
MOVX @DPTR,A
JMP MAIN
Pada label MODE10, pada PORT B diberi nilai 01H dari register A yang tadi sudah
diinisialisasi. Sehingga LED menyala pada bit 1 kemudian digeserke kiri oleh opcode
RL.
Program terdapat tunda yang dipanggil dari label DELAY
Pada label MODE01, pada PORT C diberi nilai 02 dari register A. Sehingga motor 1
berputar berlawanan arah jarum jam
Kemudian program akan kembali lompat ke label MAIN untuk melakukan looping
MODE10: POP ACC
RL A
PUSH ACC
MOV DPTR, #PORTB
MOVX @DPTR, A
CALL DELAY
CALL DELAY
MOV A,#02H
MOV DPTR,#PORTC
MOVX @DPTR,A
LJMP MAIN
Pada label MODE01, pada PORT B diberi nilai 01H dari register A yang tadi sudah
diinisialisasi. Sehingga LED menyala pada bit 1 kemudian digeser ke kanan oleh opcode
RR.
Program terdapat tunda yang dipanggil dari label DELAY
Pada label MODE01, pada PORT C diberi nilai 01H dari register A. Sehingga motor 1
berputar searah jarum jam
Kemudian program akan kembali lompat ke label MAIN untuk melakukan looping
MODE01: POP ACC
RR A
PUSH ACC
MOV DPTR, #PORTB
MOVX @DPTR, A
CALL DELAY
CALL DELAY
MOV A,#01H
MOV DPTR,#PORTC
MOVX @DPTR,A
LJMP MAIN
Pada label MODE00, pada PORT B diberi nilai 00H dari register A. Sehingga LED mati
semua.
Pada label MODE00, pada PORT C diberi nilai 00H dari register A. Sehingga motor 1
mati.
Kemudian program akan kembali lompat ke label MAIN untuk melakukan looping
MODE00: MOV A, #0000H
MOV DPTR,#PORTB
MOVX @DPTR,A
MOV A,#0000H
MOV DPTR,#PORTC
MOVX @DPTR,A
Berikut ini merukapan label dari MATI yang berisi PORT B dan PORT C diberi nilai
00H sehinngga LED dan motor mati
MATI: MOV A,#00H
MOV DPTR, #PORTB
MOVX @DPTR,A
MOV A,#00H
MOV DPTR, #PORTC
MOVX @DPTR,A
LJMP MAIN
Pada label MODEMOT2 ini programnya hampir sama dengan MODEMOT 1, yang
membedakan hanya alamat pada motor yang terhubung pada PORT C
MODEMOT2: JB P1.2,SATU1
SJMP NOL0
SATU1: JB P1.3,MOD11
SJMP MOD10
NOL0: JB P1.3,MOD01
SJMP MOD00
MOD11: MOV A, #00FFH
MOV DPTR,#PORTB
MOVX @DPTR,A
MOV A,#00FFH
MOV DPTR,#PORTC
MOVX @DPTR,A
LJMP MAIN
MOD10: POP ACC
RL A
PUSH ACC
MOV DPTR, #PORTB
MOVX @DPTR, A
CALL DELAY
CALL DELAY
MOV A,#20H
MOV DPTR,#PORTC
MOVX @DPTR,A
LJMP MAIN
MOD01: POP ACC
RR A
PUSH ACC
MOV DPTR, #PORTB
MOVX @DPTR, A
CALL DELAY
CALL DELAY
MOV A,#10H
MOV DPTR,#PORTC
MOVX @DPTR,A
LJMP MAIN
MOD00: MOV A, #0000H
MOV DPTR,#PORTB
MOVX @DPTR,A
MOV A,#0000H
MOV DPTR,#PORTC
MOVX @DPTR,A
LJMP MAIN
Karena clock MCS-51 cukup cepat, maka kita perlu program delay untuk mengamati
perubahan output program. R2 dan R3 termasuk register bank. Penggunaan label DELAY
dan Dell memungkinkan delay dilakukan lebih lama, karena susunannya yang kaskade.
DELAY: MOV R2, #0FFH
DELL: MOV R3, #0FFH
DJNZ R3, $
DJNZ R2, DELL
RET
END
VI. Lampiran
A. Dokumentasi
;Alias
PORTA EQU 2000H
PORTB EQU 2001H
PORTC EQU 2002H
PORTCW EQU 2003H
DATACW EQU 90H
ORG 4000H
AJMP INITPPI
ORG 4100H
MAIN: JB P1.0,MULAI
MOV A, #00H
MOV DPTR,#PORTB
MOVX @DPTR,A
JNB P1.0,MATI
MULAI: JB P1.1,MOTOR2
JNB P1.1,MOTOR1
MODEMOT1: JB P1.2,SATU
SJMP NOL
SATU: JB P1.3,MODE11
SJMP MODE10
NOL: JB P1.3,MODE01
SJMP MODE00
MODEMOT2: JB P1.2,SATU1
SJMP NOL0
SATU1: JB P1.3,MOD11
SJMP MOD10
NOL0: JB P1.3,MOD01
SJMP MOD00