Saturday, 22 December 2012

Mikrokontroler AT89C51

Alat Penghitung Jumlah Pengunjung Perpustakan Yang Berbasis Mikrokontroler AT89C51

Abstrak

Alat penghitung jumlah pengunjung perpustakaan (APJPP) yang berbasis mikrokontroler dirancang  untuk mengetahui jumlah orang yang masuk, keluar dan berada di dalam ruangan perpustakaan diwaktu saya melanjutkan kuliah disalah satu  perguruan tingi swasta di jakarta. Data mengenai jumlah pengunjung tersebut akan dikirimkan kepada komputer pribadi untuk pengolahan data lebih lanjut dan disimpan dalam bentuk database.
Sepasang sensor digunakan masing – masing untuk pintu masuk dan pintu keluar perpustakaan. Sensor yang dipakai merupakan sensor cahaya yang menggunakan photo – dioda sebagai detector cahaya dan infrared emiting diode (IRED) sebagai sumber cahaya.sensor tersebut berfungsi untuk mendeteksi orang yang masuk dan keluar perpustakaan. Pada saat ada orang yang melalui pintu – pintu tersebut maka sensor akan mengirimkan sinyal pada mikrokontroler.
Mikrokontroler 89C51 akan mengolah sinyal yang masuk dari sensor dan menghasilkan data – data berupa data orang yang masuk, keluar dan berada di dalam ruangan perpustakaan. Data – data yang dihasilkan akan disimpan dalam memori atau internal random access memory (RAM). Data orang yang berada di dalam runangan perpustakaan akan ditampilan oleh tampilan seven segment.
Data mengenai orang yang masuk dan keluar kemudian dikirimkan melalui sarana komunikasi port parallel kepada komputer pribadi. Sebuah program yang telah dirancang khusus menggunakan Microsoft Visual Basic 6.0 (VB6) pada komputer pribadi akan mengolah data yang diterima. Data yang telah diolah akan disimpan kedalam bentuk database dengan format Microsoft Acces Database. Program tersebut juga akan dapat menampilakan data – data yang ada dalam bentuk grafik, sehingga mudah untuk dibaca dan dianalisa.
Sumber daya dari APJPP akan disuplai oleh sebuah rangkaian catu daya yang menghasilkan tegangan sebesar +5 volt dan arus maksimum sebesar 1 ampere. Pembahasan yang lebih lengkap mengenai APJPP akan dapat dibaca dalam laporan tugas akhir ini.

List Program Assembler
adata equ 20h
bdata equ 21h
cdata equ 22h
data equ 23h
db equ 24h
snluar bit P1.1
sndalam bit p1.2

org 0h ;Program dimulai dari alamat 0h
Initial: setb EA ;Non-aktifkan input untuk ekternal memori
mov TMOD,#00100001B ;set timer 0 as 16 bit counter
mov SCON,#01000010b ;set timer 1 as serialpot mode 1
mov TH1,#0FFh
mov PCON,#80h ;speed transfer 57.6KBps
setb TR1
mov P1,#0FFh ;Isi P1 dengan data 0h
mov P2,#0h ;Isi P2 dengan data 0h
mov P3,#0h
clr A ;Nol-kan Akumulator(simpanan sementara): A= 00h
mov db,#0h

start:
;==================================================================================================================================================
Masuk:
ceksnluar: jb snluar,ceksndalam ;Fungsi Lompat jika suatu bit=1
jnb snluar,$ ;Fungsi Lompat jika suatu bit=0
balik1: jnb sndalam,ceklanjut1 ;Fungsi Lompat jika suatu bit=0
jb snluar,balik1 ;Fungsi Lompat jika suatu bit=1
ajmp start ;fungsi lompat ke alamat, Artinya : Mengkodekan alamat tujuan sebagai konstanta 11 bit, panjang instruksinya 2 byte yang mengandung op-kode dan 3 bit alamat, sedangkan byte berikutnya mengandung 8 bit alamat rendah dari alamat tujuan.

ceklanjut1: acall delay250
jb sndalam,tambahin ;Fungsi Lompat jika suatu bit=1
ajmp ceklanjut1 ;fungsi lompat ke alamat, Artinya : Mengkodekan alamat tujuan sebagai konstanta 11 bit, panjang instruksinya 2 byte yang mengandung op-kode dan 3 bit alamat, sedangkan byte berikutnya mengandung 8 bit alamat rendah dari alamat tujuan.

;===============================================================================
Keluar:
ceksndalam: jb sndalam,ceksnluar ;Fungsi Lompat jika suatu bit=1
jnb sndalam,$ ;Fungsi Lompat jika suatu bit=0
balik2: jnb snluar,ceklanjut2 ;Fungsi Lompat jika suatu bit=0
jb sndalam,balik2 ;Fungsi Lompat jika suatu bit=1
ajmp start ;fungsi lompat ke alamat, Artinya : Mengkodekan alamat tujuan sebagai konstanta 11 bit, panjang instruksinya 2 byte yang mengandung op-kode dan 3 bit alamat, sedangkan byte berikutnya mengandung 8 bit alamat rendah dari alamat tujuan.

ceklanjut2: acall delay250
jb snluar,kurangin ;Fungsi Lompat jika suatu bit=1
ajmp ceklanjut2 ;fungsi lompat ke alamat, Artinya : Mengkodekan alamat tujuan sebagai konstanta 11 bit, panjang instruksinya 2 byte yang mengandung op-kode dan 3 bit alamat, sedangkan byte berikutnya mengandung 8 bit alamat rendah dari alamat tujuan.

;===============================================================================
Penjumlahan:
tambahin: mov A,db ;Artinya data yang ada dilokasi memori db = 24Hex disalin ke Akumulator A
inc A ;Artinya :A= A+1 (Akumulator adalah tempat penyimpanan sementara)
ajmp pros ;Artinya : Mengkodekan alamat tujuan sebagai konstanta 11 bit, panjang instruksinya 2 byte yang mengandung op-kode dan 3 bit alamat, sedangkan byte berikutnya mengandung 8 bit alamat rendah dari alamat tujuan.

kurangin: mov A,db ;Artinya data yang ada dilokasi memori db = 24Hex disalin ke Akumulator A
cjne A,#0h,kurangi ;Artinya Compere and Jump if not Equal :Bandingkan dan lompat jika tidak sama
ajmp start ;fungsi lompat ke alamat, Artinya : Mengkodekan alamat tujuan sebagai konstanta 11 bit, panjang instruksinya 2 byte yang mengandung op-kode dan 3 bit alamat, sedangkan byte berikutnya mengandung 8 bit alamat rendah dari alamat tujuan.
kurangi: dec A ;Artinya :A= A-1 (Akumulator adalah tempat penyimpanan sementara)
ajmp pros ;fungsi lompat ke alamat, Artinya : Mengkodekan alamat tujuan sebagai konstanta 11 bit, panjang instruksinya 2 byte yang mengandung op-kode dan 3 bit alamat, sedangkan byte berikutnya mengandung 8 bit alamat rendah dari alamat tujuan.

;===============================================================================
;Proses konversi Hexa ke desimal:
pros: mov db,A ;
mov data,db
anl A,#0Fh ;ANL Artinya Pengalamatan segera - immediate constanta) (and,or,Exor dan Not)
da A ;DA A (desimal Adjust) Artinya ditunjukan untuk operasi arimetika BCD. dalam aritmetika BCD, instuksi ADDD dan ADDC harus selalu diikuti dengan operasi DA A untuk memastikan hasilnya juga dalam format atau sistem bilangan BCD.
mov bdata,A
mov A,data ;Artinya data yang ada dilokasi memori data = 23Hex disalin ke Akumulator A / pengalamatan langsung.
Anl A,#0F0h ;ANL Artinya Pengalamatan segera - immediate constanta)
da A ;DA A (desimal Adjust) Artinya ditunjukan untuk operasi arimetika BCD.
cjne A,#0h,Masking ;Artinya Compere and Jump if not Equal :Bandingkan dan lompat jika tidak sama
da A ;DA A (desimal Adjust) Artinya ditunjukan untuk operasi arimetika BCD.
ajmp kalkul ;fungsi lompat ke alamat, Artinya : Mengkodekan alamat tujuan sebagai konstanta 11 bit, panjang instruksinya 2 byte yang mengandung op-kode dan 3 bit alamat, sedangkan byte berikutnya mengandung 8 bit alamat rendah dari alamat tujuan.
jumper: ajmp start ;fungsi lompat ke alamat, Artinya : Mengkodekan alamat tujuan sebagai konstanta 11 bit, panjang instruksinya 2 byte yang mengandung op-kode dan 3 bit alamat, sedangkan byte berikutnya mengandung 8 bit alamat rendah dari alamat tujuan.
Masking: mov adata,A
mov B,#010h ;Artinya data konstan yang merupakan data yang menyatu dengan instruksi, contoh instruksi tersebut mempunyai arti bahwa data konstannya, yaitu 010h, yang disalin ke - B sebagai bilangan hexadesimal.
div AB ;Operasi : A=int(A/B), B=Mod(A/B) ACC dan B sebagai pengalamatan:div digunakan untuk melakukan pembagian antara akumulator dengan data yang tersimpan dalam register B dan hasilnya yang 8-bit,disimpan dalam akumulator dan sisanya yang 8-bit juga, disimpan dalam register B (Menumpuk Data Lama).
mov B,#06h ;Artinya data konstan yang merupakan data yang menyatu dengan instruksi, contoh instruksi tersebut mempunyai arti bahwa data konstannya, yaitu 06h, yang disalin ke - B sebagai bilangan hexadesimal.
mul AB ;Operasi : B:A=BxA (Mul digunakan untuk melakukan perkalian antara akumulator dengan data yang tersimpan)
da A ;DA A (desimal Adjust) Artinya ditunjukan untuk operasi arimetika BCD.
mov cdata,A
mov A,adata ;Artinya data yang ada dilokasi memori adata = 20Hex disalin ke Akumulator A / pengalamatan langsung.
anl A,#70h ;ANL Artinya Pengalamatan segera - immediate constanta) (and,or,Exor dan Not)
cjne A,#0h,tl ;Artinya Compere and Jump if not Equal :Bandingkan dan lompat jika tidak sama
ajmp lanjut1 ;fungsi lompat ke alamat, Artinya : Mengkodekan alamat tujuan sebagai konstanta 11 bit, panjang instruksinya 2 byte yang mengandung op-kode dan 3 bit alamat, sedangkan byte berikutnya mengandung 8 bit alamat rendah dari alamat tujuan.
tl: cjne A,#10h,tt ;Artinya Compere and Jump if not Equal :Bandingkan dan lompat jika tidak sama
ajmp lanjut1 ;fungsi lompat ke alamat, Artinya : Mengkodekan alamat tujuan sebagai konstanta 11 bit, panjang instruksinya 2 byte yang mengandung op-kode dan 3 bit alamat, sedangkan byte berikutnya mengandung 8 bit alamat rendah dari alamat tujuan.
tt: cjne A,#20h,ts ;Artinya Compere and Jump if not Equal :Bandingkan dan lompat jika tidak sama
ajmp lanjut1 ;fungsi lompat ke alamat, Artinya : Mengkodekan alamat tujuan sebagai konstanta 11 bit, panjang instruksinya 2 byte yang mengandung op-kode dan 3 bit alamat, sedangkan byte berikutnya mengandung 8 bit alamat rendah dari alamat tujuan.
ts: mov A,cdata ;Artinya data yang ada dilokasi memori Cdata = 22Hex disalin ke Akumulator A
add A,#06h ;Artinya pengalamatan segera atau langsung - immediate constanta. (A=A+<Byte>),dengan nilai konstan yaitu 06H yang disalin ke - Akumulator A sebagai bilangan hexdesimal.
da A ;DA A (desimal Adjust) Artinya ditunjukan untuk operasi arimetika BCD.
mov cdata,A
mov A,adata ;Artinya data yang ada dilokasi memori adata = 20Hex disalin ke Akumulator A / Pengalamatan langsung.
cjne A,#60h,lanjut1 ;Artinya Compere and Jump if not Equal :Bandingkan dan lompat jika tidak sama
mov A,cdata
add A,#06h ;Artinya pengalamatan segera atau langsung - immediate constanta. (A=A+<Byte>) dengan nilai konstan 06H.
da A ;DA A (desimal Adjust) Artinya ditunjukan untuk operasi arimetika BCD.
mov cdata,A

lanjut1: mov A,adata ;Artinya data yang ada dilokasi memori adata = 20Hex disalin ke Akumulator A / Pengalamatan langsung.
add A,cdata ;Artinya pengalamatan segera atau langsung - immediate constanta. (A=A+<Byte>). diikuti dengan operasi DA A untuk memastikan format atau sistem bilangan BCD, dengan niali konstan 22H.
kalkul: addc A,bdata ;Artinya pengalamatan segera atau langsung - immediate constanta. (A=A+<Byte>)+C. diikuti dengan operasi DA A untuk memastikan format atau sistem bilangan BCD, dengan nilai konstan 23H.
out: da A ;DA A (desimal Adjust) Artinya ditunjukan untuk operasi arimetika BCD.
clr AC
mov adata,A
mov A,data ;Artinya data yang ada dilokasi memori data = 23Hex disalin ke Akumulator A
mov B,#64h ;Artinya data konstan yang merupakan data yang menyatu dengan instruksi, contoh instruksi tersebut mempunyai arti bahwa data konstannya, yaitu 64h, yang disalin ke - B sebagai bilangan hexadesimal.
div AB ;Operasi : A=int(A/B), B=Mod(A/B) ACC dan B sebagai pengalamatan:div digunakan untuk melakukan pembagian antara akumulator dengan data yang tersimpan dalam register B dan hasilnya yang 8-bit,disimpan dalam akumulator dan sisanya yang 8-bit juga, disimpan dalam register B (Menumpuk Data Lama).
mov A,adata ;Artinya data yang ada dilokasi memori adata = 20Hex disalin ke Akumulator A
mov P2,A ;Artinya isi A ke latch port 2 (juga ke pin P2) data yang ada dilokasi memori A = 20Hex disalin P2 pada Atmel 89C51.
mov P3,db
acall delay250
ajmp start ;fungsi lompat ke alamat, Artinya : Mengkodekan alamat tujuan sebagai konstanta 11 bit, panjang instruksinya 2 byte yang mengandung op-kode dan 3 bit alamat, sedangkan byte berikutnya mengandung 8 bit alamat rendah dari alamat tujuan.

delay100: mov R2,#10 ; delay(selang waktu)500mS
Sec10: mov TH0,#0DBh ; delay 10mS : dilokasi 8CH
mov TL0,#0FBh ; dilokasi 8AH
setb TR0
jnb TF0,$ ;Fungsi Lompat jika suatu bit=0
clr TF0
djnz R2,Sec10 ;Artinya turunkan dan lompat jika tidak nol
ret

delay500: mov R2,#50 ;Delay 500milidetik
Sec50: mov TH0,#0DBh
mov TL0,#0FBh
setb TR0
jnb TF0,$ ;Fungsi Lompat jika suatu bit=0
clr TF0
djnz R2,Sec50 ;Artinya turunkan dan lompat jika tidak nol
ret

delay1sec: mov R2,#100 ;Delay 1detik
Sec1: mov TH0,#0DBh
mov TL0,#0FBh
setb TR0
jnb TF0,$ ;Fungsi Lompat jika suatu bit=0
clr TF0
djnz R2,Sec1 ;Artinya turunkan dan lompat jika tidak nol
ret

delay250: mov R2,#25 ;Delay 250milidetik
Sec25: mov TH0,#0DBh
mov TL0,#0FBh
setb TR0
jnb TF0,$ ;Fungsi Lompat jika suatu bit=0
clr TF0
djnz R2,Sec25 ;Artinya turunkan dan lompat jika tidak nol
ret