* Rangkaian dan Program Aplikasi Menghidupkan LED Melalui Kanal Paralel
; LAMPU FLIP-FLOP PADA PORT 1
;
;
ORG 0H ;PROGRAM DITEMPATKAN PADA LOKASI 0000H
;
MULAI : MOV P1,#00001111B ;LED P1.4 S/D P1.7 NYALA(HEKSA= #0FH)
ACALL DELAY ;LAKUKAN PENUNDAAN SESAAT (SUB. DELAY)
MOV P1,#11110000B ;LED P1.0 S/D P1.3 NYALA (HEKSA= #0F0H)
ACALL DELAY ;LAKUKAN PENUNDAAN SESAAT (SUB. DELAY)
SJMP MULAI ;ULANGI DARI AWAL
;
; -SUBRUTIN DELAY
;
; SUBRUTIN INI HANYA SEKEDAR MELAKUKAN PENUNDAAN SESAAT
; DENGAN CARA MENGULANGI PROSES (PENGURANGAN ISI REGISTER)
; HINGGA DICAPAI SUATU KONDISI TERTENTU
;
;
DELAY : MOV R0,#5H ;ISI REGISTER R0 DENGAN 5 (5x ULANG)
DELAY1 : MOV R1,#0FFH ;ISI REGISTER R1 DENGAN 255 (255x ULANG)
DELAY2 : MOV R2,#0 ;ISI REGISTER R2 DENGAN 0 (256x ULANG)
DJNZ R2,$ ;R2=R2-1, JIKA R2 BELUM 0 ULANGI LAGI
DJNZ R1,DELAY2 ;R1=R1-1, JIKA R1 BELUM 0 ULANGI DELAY 2
DJNZ R0,DELAY1 ;R0=R0-1, JIKA RO BELUM 0 ULANGI DELAY 1
RET ;KEMBALI KE PEMANGGIL SUBRUTIN DELAY
END
* Rangkaian Aplikasi Penggerak 7-Segment
; MENGHIDUPKAN DISPLAY LED 7 SEGMENT UNTUK MENAMPILKAN ANGKA 0 S/D 9
; CARA 1 : DATA LANGSUNG DIKELUARKAN KE PORT YANG BERSANGKUTAN
;
;---
ORG 0H
;
MULAI:
MOV P0,#0C0H ;KELUARKAN KODE ANGKA 0 PORT 0
ACALL DELAY
MOV P0,#0f9H ;KELUARKAN KODE ANGKA 1 PORT 0
ACALL DELAY
MOV P0,#0a4H ;KELUARKAN KODE ANGKA 2 PORT 0
ACALL DELAY
MOV P0,#0B0H ;KELUARKAN KODE ANGKA 3 PORT 0
ACALL DELAY
MOV P0,#99H ;KELUARKAN KODE ANGKA 4 PORT 0
ACALL DELAY
MOV P0,#92H ;KELUARKAN KODE ANGKA 5 PORT 0
ACALL DELAY
MOV P0,#82H ;KELUARKAN KODE ANGKA 6 PORT 0
ACALL DELAY
MOV P0,#0F8H ;KELUARKAN KODE ANGKA 7 PORT 0
ACALL DELAY
MOV P0,#80H ;KELUARKAN KODE ANGKA 8 PORT 0
ACALL DELAY
MOV P0,#90H ;KELUARKAN KODE ANGKA 9 PORT 0
ACALL DELAY
SJMP MULAI ;MULAI LAGI DARI AWAL
;
;-SUBRUTIN DELAY
;
; SUBRUTIN INI HANYA SEKEDAR MELAKUKAN PENUNDAAN SESAAT
; DENGAN CARA MENGULANGI PROSES (PENGURANGAN ISI REGISTER) HINGGA
; DICAPAI SUATU KONDISI TERTENTU
;
;---
DELAY: MOV R0,#2 ; ISI REGISTRI R0 DENGAN 2 (2X ULANG)
DELAY1: MOV R1,#0FFH ; ISI REGISTRI R1 DENGAN FF (255X ULANG)
DELAY2: MOV R2,#0 ; ISI REGISTRI R2 DENGAN 0 (256X ULANG)
DJNZ R2,$
DJNZ R1,DELAY2
DJNZ R0,DELAY1
RET
END
* Rangkaian Aplikasi Untuk Masukan atau Keluaran Penggerak LED
; SIMUASI PENEKANAN TOMBOL PD P3.0 UNTUK MENGHIDUPKAN
; DAN P3.1 UNTUK MEMATIKAN LED PADA PORT 1
;
;---
ORG 0H
;
MULAI:
MOV A,P3 ;BACA PORT 3 DAN SIMPAN ISINYA KE AKUMULATOR
CJNE A,#0FEH,TERUS ;APAKAH ISI AKUMULATOR =11111110B (P3.0 DITEKAN) TIDAK! LOMPAT KE TERUS
MOV P1,#0 ;YA! HIDUPKAN LAMPU LED DI PORT 1
SJMP MULAI ;ULANGI LAGI DARI AWAL (MULAI)
TERUS:
CJNE A,#0FDH,MULAI ;APAKAH ISI AKUMULATOR =11111101B (P3.1 DITEKAN) TIDAK! LOMPAT KE AWAL (MULAI)
MOV P1,#0FFH ;YA! MATIKAN LAMPU LED DI PORT 1
SJMP MULAI ;ULANGI LAGI DARI AWAL (MULAI)
END
* Rangkaian dan Program Aplikasi Masukan atau Keluaran Penggerak Penampil 7-Segment
; PENEKANAN TOMBOL PADA P3 DAN HASIL PENEKANAN
; DITAMPILKAN PADA DISPLAY 7 SEGMENT DI PORT 0
;
;---
ORG 0H
;
MULAI:
MOV A,P3 ;BACA ISI STATUS TOMBOL PADA PORT 3 KE AKUMULATOR
CJNE A,#0FEH,BANDING1 ;APAKAH P3.0 DITEKAN?
;TIDAK, CEK LAGI KE BANDING 1
MOV P0,#0F9H ;YA, KELUARKAN KODE ANGKA 1 7SEGMEN KE PORT 0
SJMP MULAI ;ULANGI LAGI DARI MULAI
BANDING1:
CJNE A,#0FDH,BANDING2 ;APAKAH P3.1 DITEKAN?
;TIDAK, CEK LAGI KE BANDING 2
MOV P0,#0A4H ;YA, KELUARKAN KODE ANGKA 2 7SEGMEN KE PORT 0
SJMP MULAI ;ULANGI LAGI DARI MULAI
BANDING2:
CJNE A,#0FBH,BANDING3 ;APAKAH P3.2 DITEKAN?
;TIDAK, CEK LAGI KE BANDING 3
MOV P0,#0B0H ;YA, KELUARKAN KODE ANGKA 3 7SEGMEN KE PORT 0
SJMP MULAI ;ULANGI LAGI DARI MULAI
BANDING3:
CJNE A,#0F7H,BANDING4 ;APAKAH P3.3 DITEKAN?
;TIDAK, CEK LAGI KE BANDING 4
MOV P0,#99H ;YA, KELUARKAN KODE ANGKA 4 7SEGMEN KE PORT 0
SJMP MULAI ;ULANGI LAGI DARI MULAI
BANDING4:
CJNE A,#0EFH,BANDING5 ;APAKAH P3.4 DITEKAN?
;TIDAK, CEK LAGI KE BANDING 5
MOV P0,#92H ;YA, KELUARKAN KODE ANGKA 5 7SEGMEN KE PORT 0
SJMP MULAI ;ULANGI LAGI DARI MULAI
BANDING5:
CJNE A,#0DFH,BANDING6 ;APAKAH P3.5 DITEKAN?
;TIDAK, CEK LAGI KE BANDING 6
MOV P0,#82H ;YA, KELUARKAN KODE ANGKA 6 7SEGMEN KE PORT 0
SJMP MULAI ;ULANGI LAGI DARI MULAI
BANDING6:
CJNE A,#0BFH,BANDING7 ;APAKAH P3.6 DITEKAN?
;TIDAK, CEK LAGI KE BANDING 7
MOV P0,#0F8H ;YA, KELUARKAN KODE ANGKA 7 7SEGMEN KE PORT 0
SJMP MULAI ;ULANGI LAGI DARI MULAI
BANDING7:
CJNE A,#07FH,MULAI ;APAKAH P3.7 DITEKAN?
;TIDAK, CEK LAGI KE BANDING 8
MOV P0,#80H ;YA, KELUARKAN KODE ANGKA 8 7SEGMEN KE PORT 0
SJMP MULAI ;ULANGI LAGI DARI MULAI
;
END
* Rangkaian dan Program Aplikasi Tombol Tekan Matriks dan Penampil 7-Segment
; PROGRAM UNTUK MEMBACA TOMBOL YANG DISUSUN SECARA MATRIK,
; MASUKAN KE TOMBOL PADA PORT 3, KELUARAN DIBACA PADA PORT 2, DAN
; HASIL DITAMPILKAN PADA 7 SEG DI PORT 0
;
;---
ORG 0H
;
MULAI:
MOV P2,#0FEH ;BUAT P2.0=0
JB P3.7,KEY1 ;APAKAH TOMBOL 'C' DITEKAN?
;TIDAK, CEK TOMBOL LAIN DI KEY1
MOV P0,#0AAH ;YA, KELUARKAN KODE HURUF 'C' KE PORT 0
SJMP MULAI ;ULANGI LAGI DARI MULAI
KEY1:
JB P3.6,KEY2 ;APAKAH TOMBOL 'B' DITEKAN?
;TIDAK, CEK TOMBOL LAIN DI KEY2
MOV P0,#38H ;YA, KELUARKAN KODE HURUF 'B' KE PORT 0
SJMP MULAI ;ULANGI LAGI DARI MULAI
KEY2:
JB P3.5,KEY3 ;APAKAH TOMBOL 'A' DITEKAN?
;TIDAK, CEK TOMBOL LAIN DI KEY3
MOV P0,#60H ;YA, KELUARKAN KODE HURUF 'A' KE PORT 0
SJMP MULAI ;ULANGI LAGI DARI MULAI
KEY3:
JB P3.4,KEY4 ;APAKAH TOMBOL '0' DITEKAN?
;TIDAK, CEK TOMBOL LAIN DI KEY4
MOV P0,#22H ;YA, KELUARKAN KODE HURUF 'A' KE PORT 0
SJMP MULAI ;ULANGI LAGI DARI MULAI
KEY4:
JB P3.3,KEY5 ;APAKAH TOMBOL F4 DITEKAN?
;TIDAK, CEK TOMBOL LAIN DI KEY5
MOV P0,#70H ;YA, KELUARKAN KODE HURUF '' KE PORT 0
SJMP MULAI ;ULANGI LAGI DARI MULAI
KEY5:
MOV P2,#0FDH ;BUAT P2.1=0
JB P3.7,KEY6
MOV P0,#34H
SJMP MULAI
KEY6:
JB P3.6,KEY7
MOV P0,#25H
SJMP MULAI
KEY7:
JB P3.5,KEY8
MOV P0,#0A4H
SJMP MULAI
KEY8:
JB P3.4,KEY9
MOV P0,#77H
SJMP MULAI
KEY9:
JB P3.3,KEY10
MOV P0,#22H
SJMP MULAI
KEY10:
MOV P2,#0FBH ;BUAT P2.2=0 (UNTUK BACA TOMBOL 4,5,6,K,F2)
JB P3.7,KEY11
MOV P0,#0A8H
SJMP MULAI
KEY11:
JB P3.6,KEY12
MOV P0,#28H
SJMP MULAI
KEY12:
JB P3.5,KEY13
MOV P0,#29H
SJMP MULAI
KEY13:
JB P3.4,KEY14
MOV P0,#71H
LJMP MULAI
KEY14:
JB P3.3,KEY15
MOV P0,#22H
LJMP MULAI
KEY15:
MOV P2,#0F7H ;BUAT P2.3=0
JB P3.7,KEY16
MOV P0,#0E8H
LJMP MULAI
KEY16:
JB P3.6,KEY17
MOV P0,#21H
LJMP MULAI
KEY17:
JB P3.5,KEY18
MOV P0,#20H
LJMP MULAI
KEY18:
JB P3.4,KEY19
MOV P0,#57H
LJMP MULAI
KEY19:
JB P3.3,KEY20
MOV P0,#0E0H
KEY20:
LJMP MULAI ;ULANGI LAGI DARI MULAI
END
* Rangkaian dan Program 8x7-Segment
; PROGRAM UNTUK MENGHIDUPKAN TAMPILAN 8 X 7SEG
; UNTUK MENAMPILKAN TULISAN -ELINS--
;
;---
ORG 0H
;
MULAI:
MOV DPTR,#ELINS ;ISI DATA POINTER DENGAN ALAMAT DATA "-ELINS--"
MOV R6,#08H ;R6=8=JUMLAH DIGIT 7 SEGMENT
MOV R1,#7FH ;R1=UNTUK COMMON
ULANG:
CLR A ;ISI AKUMULATOR DG 0
MOVC A,@A+DPTR ;PINDAHKAN DATA KE N KE A
INC DPTR ;DPTR MENUNJUK KE DATA BERIKUTNYA
MOV P0,A ;KELUARKAN DATA KE A KE PORT 0
MOV A,R1 ;KIRIMKAN DATA COMMON KE
MOV P1,A ;PORT 1 MELALUI AKUMULATOR
RR A ;PUTAR DESER KE KANAN PER BIT ISI AKUMULATOR
MOV R1,A ;KEMBALI ISI R1
;
MOV R2,#0FFH ;LAKUKAN PENUNDAAN
DELAY:
DJNZ R2,DELAY ;SESAAT (ULANG 255X)
MOV P0,#0FFH ;BUAT P0 BERLOGIKA 1
DJNZ R6,ULANG ;ULANGI SAMPAI 8X
JMP MULAI ;ULANGI LAGI DARI AWAL
;---
; DATA AREA
;---
ELINS:
;
; '-' 'E' 'L' 'I' 'N' 'S' '-' '-'
;
DB 0FDH,0A0H,0BAH,77H,62H,29H,0FDH,0FDH
END
* Rangkaian dan Program Aplikasi Menyalakan/Mematikan LED
; PROGRAM MENYALAKAN/MEMATIKAN LED SETELAH PENEKANAN TOMBOL
; PADA P1,4 SEBANYAK 5 KALI DENGAN MENGGUANAKAN TIMER
;
; -------------------------------------------------------------------
;
CACAH EQU -5 ; CACAH = 5
ORG 0H
;
MOV TMOD,#0Eh ; GUNAKAN TIMER 0 MODE 8 BIT ISI-ULANG OTOMATIS
LAGI:
MOV TH0,#CACAH ; ISI THO DENGAN #CACAH
MOV TL0,#CACAH ; ISI TL0 DENGAN # CACAH
SETB TR0 ; AKTIFKAN TIMER 0
CEK:
JNB TF0,$ ; TUNGGU HINGGA MELIMPAH
CLR P1.0 ; HIDUPKAN P1.0 SETELAH 5 KALI
; PENEKANAN TOMBOL PADA T0 (P1.4)
CLR TF0 ; BERSIHKAN FLAG LIMPAHAN TIMER 0 SECARA MANUAL
CEK1:
JNB TF0,$ ; TUNGGU HINGGA OVER FLOW
SETB P1.0 ; MATIKAN P1.0 SETELAH 5 KALI
; PENEKANAN TOMBOL PADA T0 (P1.4)
CLR TF0 ; BERSIHKAN FLAG LIMPAHAN TIMER 0 SEARA MANUAL
SJMP CEK ; ULANGI LAGI DARI AWAL
END
* Rangkaian dan Program Membunyikan Speaker
; PROGRAM MEMBUNYIKAN SPEAKER DENGAN FREKUENSI 500 H
;
; ------------------------------------------------------------------------------
;
ASIK EQU -1000 ; NILAI INI ULANG 1000
ORG 0H
;
MOV TMOD,#01H ; MENGGUNAKAN TIMER 0 MODE 16 BIT (OOOO OOO1)
KALANG:
MOV TH0,#HIGH ASIK ; SIAPKAN NIALI ISIS ULANG PADA 2-SIKLUS
MOV TL0,#LOW ASIK ; TH0 DAN TL0 (TIMER 0) 2-SIKLUS
SETB TR0 ; HIDUPKAN TIMER 0
TUNGGU:
JNB TF0, TUNGGU ; TUNGGU HINGGA MELIMPAH
CLR TR0 ; HENTIKAN TIMER 0 1-SIKLUS
CLR TF0 ; NON-KAN FLAG OVERFLOW 1-SIKLUS
CPL P1.0 ; 'TOGGLE' PADA P1.0 1-SIKLUS
SJMP KALANG ; ULANGI LAGI DARI AWAL 2-SIKLUS
END
* Rangkaian dan Program Alarm dan Lampu Flip-Flop
; ALARM DAN LAMPU FLIP-FLOP DENGAN SELANG WAKTU MENGGUNAKAN
; INTRUPSI TIMER 1 SPEAKER DIPASANG PADA P1.0 SEDANGKAN
; LAMPU FLIP-FLOP (LED) DIPASANG PADA PORT 0 BIT 1,2,4 DAN 5
;
;-----------------------------------------------------------------------------------
ORG 0H
;
LJMP MULAI
ORG 1BH ; ALAMAT UNTUK INTERUPSI TIMER 1
LJMP TIMER_1 ; KARENA SUBRUTIN INI PANJANG PINDAHKAN
; KE LAIN TEMPAT DENGAN LJMP
;-----------------------------------------------------------------------------------
; SUB RUTIN DELAY PENDEK DELAY
;-----------------------------------------------------------------------------------
DELAY:
MOV R6,#0
DELAY1:
NOP ; 1 SIKLUS
DJNZ R6,DELAY1 ; 2 SIKLUS
RET
;
;-----------------------------------------------------------------------------------
; SUB RUTIN DELAY PANJANG LDELAY
;-----------------------------------------------------------------------------------
LDELAY:
MOV R7,#0
LD1: ACALL DELAY
ACALL DELAY
DJNZ R7,LD1 ; ULANGI SEBANYAK 256x
RET
;
;-----------------------------------------------------------------------------------
; SUBRUTIN INTERUPSI TIMER 1
; PENGHASIL PULSA PADA PORT 1 BIT KE 0
;-----------------------------------------------------------------------------------
TIMER_1:
CLR TR1 ; HENTIKAN TIMER 1
CJNE R0,#0,TONE1 ; APAKAH STATUS KELUARAN (R0) = LOW
SETB P1.0 ; YA! BUAT P.1 BERLOGIKA 1
MOV R0,#1 ; UBAH STATUS KELUARAN HIGH -> 1
SJMP TONE2 ; BUNYIKAN NADA 750/500 HZ
TONE1:
CLR P1.0 ; TIDAK! BUAT P1.0 BERLOGIKA 0
MOV R0,#0 ; UBAH STATUS KELUARAN -> LOW
;
TONE2:
CJNE R1,#0,TONE3 ; APAKAH POLA PENYALAAN MODE-1?
MOV TL1,#LOW (-655) ; YA! TONE 750 HZ = PULSA PER 655 UD
MOV TH1,#HIGH (-655)
SJMP TONE4
TONE3:
MOV TL1,#LOW (-1000) ; TIDAK! TONE 500 HZ = PULSA ER 1000 UD
MOV TH1,#HIGH (-1000)
TONE4:
SETB TR1 ; HIDUPKAN TIMER-1
RETI
;-----------------------------------------------------------------------------------
; AWAL DARI PROGRAM
;-----------------------------------------------------------------------------------
MULAI:
CLR A ; NOLKAN AKUMULATOR
MOV IE,A ; MATIKAN SEMUA INTERUPSI
SETB IE.7 ; AKTIFKAN INTERUPSI GLOBAL
SETB IE.3 ; AKTIFKAN INTERUPSI TIMER 1
MOV TCON,A ; BERSIHKAN TCON
MOV TMOD,#11H ; MODE TIMER 16 BIT
SETB TR1 ; JALANKAN TIMER 1
;
TUNGGU:
MOV R1,#0 ; R1 SEBAGAI TANDA UNTUK TONE 750 HZ
SETB P1.6
SETB P1.7
CLR P1.4
CLR P1.5
LCALL LDELAY
MOV R1,#1 ; R1 SEBAGAI TANDA UNTUK TONE 500 HZ
SETB P1.4
SETB P1.5
CLR P1.6
CLR P1.7
LCALL LDELAY
SJMP TUNGGU ; ULANGI TERUS MENERUS
;
END
* Rangkaian dan Program Aplikasi Komunikasi Serial Menggunakan Komputer
; SEMUA MENGGUNAKAN INTERUPSI, TIDAK ADA PROGRAM UTAMA,
; KECUALI INISIALISASI BAUD RATE DAN INTERUPSI
; PROGRAM AKAN MENERIMA KARAKTER (HURUF), KEMUDIAN MENGIRIM -
; KANNYA KEMBALI KE PENGIRIM BERUPA HURUF BESAR (KODE ASCII - 32)
; KRISTAL DIGUNAKAN 11. 0592 MHZ
;
;----------------------------------------------------------------------------
ORG 00H
;
SJMP MAIN ; LOMPAT KE PROGRAM UTAMA
;----------------------------------------------------------------------------
; ISI VEKTOR INTERUPSI PORT SERIAL DENGAN RLI
;
ORG 23H ; LOKASI VEKTRO INTERUPSI PORT SERIAL
SJMP SERINT ; KARENA PANJANG LOMPAT KE SERINT
;----------------------------------------------------------------------------
;
ORG 030H ; PROGRAM UTAMA MULAI DI SINI
MAIN:
MOV TMOD,#20H ; TIMER 1 MODE 2 (8-BIT, ISI ULANG OTOMATIS)
MOV TH1,#0F4H ; 2400 BAUD RATE
MOV SCON,#50H ; MODE SERIAL 8-BIT UART
SETB TR1 ; JALANKAN TIMER 1
MOV R0,#60H ; PENUNJUK TAMPILAN
MOV SP,#10H ; DEFINISIKAN LOKASI STACK
;----------------------------------------------------------------------------
;INISIALISASI INTERUPSI
;
SETB ES
SETB EA
;----------------------------------------------------------------------------
; INTERUPSI SEKARANG AKTIF
;
DEAD: SJMP DEAD ; PERULANGAN TERUS MENERUS
;----------------------------------------------------------------------------
; PENANGANAN INTERUPSI
; SAAT PENGGUNA MENEKAN SUATU TOMBOL DI KOMPUTER, PROGRAM TERMINAL
; AKAN MENGIRIMKAN KARAKTER TOMBOL TSB. KE MCS-51 MELALUI KANAL SERIAL
;----------------------------------------------------------------------------
SERINT: ; PERIKSA APA YANG MENYEBABKAN INTERUPSI
;
JB RI,RCV_CH ; APAKAN RI=1 (DATA DITERIMA)?
; YA! ADA KARAKTER DI SBUF LOMPAT KE RCV_CH
RETI
;----------------------------------------------------------------------------
; PENANGANAN INTERUPSI PENERIMAAN
;----------------------------------------------------------------------------
RCV_CH:
PUSH PSW ; SIMPAN REGISTER-REGISTER PENTING (ACC DAN PSW)
PUSH ACC
MOV A,SBUF ; BACA KARAKTER YANG DITERIMA
CLR RI ; KOSONGKAN RI (AGAR BISA TERIMA DATA LAGI)
SUBB A,#32 ; KONVERSI KE HURUF BESAR (ASCII-32)
MOV SBUF,A ; KIRIMKAN KEMBALI
;
EXIT:
POP ACC ; AMBIL ACC KEMBALI (DARI STACK)
POP PSW ; DAN JUGA PSW
RETI
END
Untuk mengunduh rangkaian dan programnya, klik disini.
Tidak ada komentar:
Posting Komentar