MAKALAH PERANCANGAN KEYPAD MESIN FOTOKOPI SISTEM MIKROPROSESOR
DISUSUN OLEH: RIZKY JANUAR (35501) NATHAN SITOHANG (36017)
JURUSAN TEKNIK ELEKTRO DAN TEKNOLOGI INFORMASI FAKULTAS TEKNIK UNIVERSITAS GADJAH MADA YOGYAKARTA 2010
TUGAS PERANCANGAN KEYPAD MESIN FOTOKOPI SISTEM MIKROPROSESOR
Program keypad fotocopy berikut ini diaplikasikan pada ATMEGA16, dengan kriteria sebagai berikut: Pin C bit 4 untuk memberikan input 10 lembar fotocopy. Pin C bit 5 untuk memberikan input 20 lembar fotocopy. Pin C bit 6 untuk memberikan input 40 lembar fotocopy (jumlah maksimum). Pin D bit 2 merupakan interupsi eksternal 0, yang apabila ditekan ,proses pengcopyan dihentikan Pind D bit 7 digunakan untuk melanjutkan proses fotocopy setelah mesin diinterupsi. Port A bit 7 untuk menyalakan LED 1 saat jumlah fotocopy mencapai 10 lembar. Port A bit 6 untuk menyalakan LED 2 saat jumlah fotocopy mencapai 20 lembar. Port A bit 5 untuk menyalakan LED 3saat jumlah fotocopy mencapai 30 lembar. Port A bit 4 untuk menyalakan LED 4 saat jumlah fotocopy mencapai 40 lembar. Port B untuk menyalakan layar BCD yang menunjukkan jumlah yang sudah tercopy.
.include "m16def.inc" .org 0x00 rjmp main .org 0x01 rjmp pause rjmp lanjut
org 0x0000 digunakan untuk memberitahu bahwa instruksi selanjutnya akan ditempatkan pada alamat 0000. Jadi, pada alamat 0000 akan ditempati oleh instruksi rjmp main. Instruksi ini memberi perintah untuk meloncat ke subrutin main. alamat 0001 ditempati oleh instruksi rjmp pause. Instruksi ini akan memberi perintah untuk meloncat ke subrutin pause.
main: ldi r16, low(ramend) out spl, r16 ldi r16, high(ramend) out sph, r16 kelima baris ini digunakan sebagai stack pointer SRAM.
ldi r20,0b01000000 out GICR,r20 sei R20 yang berisi bit seperti di atas, masing-masing digunakan sebagai untuk membuat intterrupt int0,sedangkan perintah sei untuk mengenablekannya.
awal1: ldi r16,255 out ddra,r16; porta output ldi r17,0 out ddrc,r17;portc input out ddrd,r17 out ddrb,r16 out pinc,r17 out portd,r16 Baris di atas digunakan untuk menentukan fungsi p in ATMEGA yakni sebagai input atau output.
awal: clr r16 out porta,r16 sbic pinc,4 rjmp kopi10 sbic pinc,5 rjmp kopi20 sbic pinc,6 rjmp kopi40 rjmp awal
Program di atas mengecek keadaan pin C bit 4, 5 dan 6 secara berurutan. Jika bit 4 pin C ditekan ( logic 0 ) maka program akan mengisi register dengan nilai 10 kemudian meloncat ke subrutin kopi10 untuk melakukan proses fotocopy. Tetapi, bila pin C bit 4 tidak ditekan maka program akan melanjutkan pengecekan terhadap bit 5 pin C. Jika bit ini ditekan maka program akan mengisi register dengan nilai 20 kemudian meloncat ke subrutin kopi20 untuk melakukan proses fotocopy. Dan seandainya tidak ditekan, maka program akan melanjutkan pengecekan terhadap bit 6 pin C. Seperti sebelumnya, jika bit ini ditekan maka program akan mengisi register dengan nilai 40 kemudian meloncat ke subrutin kopi40 untuk melakukan proses fotocopy. Jika tidak ditekan maka program akan kembali mengulang pengecekan terhadap bit 4 pin C.
kopi10: inc r16 out portb,r16 rcall waktu cpi r16,10 breq led1 rjmp kopi10 Program di atas merupakan proses pengcopyan 10 lembar.R16 akan diincrementkan hingga 10 desimal, sehingga melompat ke subrutin led1. Port B akan menghidupkan BCD,sesuai isi dari register R16. Pengcopyan akan dijalankan sesuai pewaktuan dari subrutin waktu.
kopi20: inc r16 out portb,r16 cpi r16,10 breq led2 rjmp kopi20 Program di atas merupakan proses pengcopyan 10 lembar pertama dari fotocopy 20. Proses ini berjalan setelah led2R16 akan diincrementkan hingga 10 desimal, sehingga melompat ke subrutin led2. Port B akan menghidupkan BCD,sesuai isi dari register R16. Pengcopyan akan dijalankan sesuai pewaktuan dari subrutin waktu.
kopi20b: inc r16 out portb,r16 cpi r16,20 breq led2b rjmp kopi20b Program di atas merupakan proses pengcopyan 11-20 lembar dari fotocopy 20.Proses ini berjalan setelah subrutin led2 dijalankan.R16 akan diincrementkan hingga 20 desimal. Port B akan menghidupkan BCD,sesuai isi dari register R16. Pengcopyan akan dijalankan sesuai pewaktuan dari subrutin waktu. Setelah itu akan kembali ke fungsi awal untuk pengecekan kembali.
kopi40: inc r16 out portb,r16 cpi r16,10 breq led3 rjmp kopi40
Program di atas merupakan proses pengcopyan 1-10 lembar dari fotocopy 40. R16 akan di-increment hingga 10 dan akan melompat ke subrutin led3.
kopi40b: inc r16 out portb,r16 cpi r16,20 breq led3b rjmp kopi40b Program diatas adalah lanjutan dari proses pengcopyan 40 lembar. Yakni dari 11 – 20 lembar. Proses ini berjalan setelah subrutin led 3 selesai dijalankan.
kopi40c: inc r16 out portb,r16
cpi r16,30 breq led3c rjmp kopi40c
Program diatas adalah lanjutan dari proses pengcopyan 40 lembar. Yakni dari 21 – 30 lembar. Proses ini berjalan setelah subrutin led 3b selesai dijalankan.
kopi40d: inc r16 out portb,r16 cpi r16,40 breq led4 rjmp kopi40d
Program diatas adalah lanjutan dari proses pengcopyan 40 lembar. Yakni dari 31 – 40 lembar. Proses ini berjalan setelah subrutin led 3c selesai dijalankan.
led1: ldi r17,1 out porta,r17 rcall waktu rjmp awal
Merupakan subrutin ketika r16 pada kopi10 telah mencapai 10 desimal. Dan akan menghidupkan led1 pada port a1. Kemudian akan kembali ke proses subrutin awal untuk melakukan pengecekan kembali.
led2: ldi r17,1 out porta,r17 rjmp kopi20b
Program diatas merupakan program untuk menghidupkan led pada port a1, yakni setelah pengcopyan mencapai 10 lembar pada kopi20. Kemudian akan dilanjutkan ke subrutin kopi20b.
led2b: ldi r17,3 out porta,r17 rjmp awal
Merupakan subrutin ketika r16 pada kopi20 telah mencapai 20 desimal. Dan akan menghidupkan led1 pada port a1 dan led2 pada porta2. Kemudian akan kembali ke proses subrutin awal untuk melakukan pengecekan kembali.
led3: ldi r17,1 out porta,r17 rjmp kopi40b
Program diatas merupakan program untuk menghidupkan led pada port a1, yakni setelah pengcopyan mencapai 10 lembar pada kopi40. Kemudian akan dilanjutkan ke subrutin kopi40b.
led3b: ldi r17,3 out porta,r17 rjmp kopi40c
Program diatas merupakan program untuk menghidupkan led pada port a1 dan led pada port a2, yakni setelah pengcopyan mencapai 20 lembar pada kopi40. Kemudian akan dilanjutkan ke subrutin kopi40b.
led3c: ldi r17,7 out porta,r17 rjmp kopi40d
Program diatas merupakan program untuk menghidupkan led pada port a1, led pada port a2, dan led pada port a3, yakni setelah pengcopyan mencapai 30 lembar pada kopi40. Kemudian akan dilanjutkan ke subrutin kopi40c.
led4: ldi r17,0x0f out porta,r17 rjmp awal
Merupakan subrutin ketika r16 pada kopi40 telah mencapai 40 desimal. Dan akan menghidupkan semua led. Kemudian akan kembali ke proses subrutin awal untuk melakukan pengecekan kembali.
waktu : ldi r21, 0x00 out TIMSK, r16 ldi r16, high(0xeae8) out TCNT1H, r16 ldi r16, low(0xeae8) out TCNT1L, r16 ldi r16, 0b00000101 out TCCR1B, r16
Pada program di atas overflow interupt dari Timer1 di-disable dengan memberikan logic 0 pada register TIMSK bit TOIE1. Overflow interupt di-disable agar program tidak meloncat ke vektor interupsi ketika terjadi overflow dan program dapat berjalan terus. Register Timer Interrupt Mask Register (TIMSK) digunakan untuk mengontrol interupsi yang valid dengan cara mengeset (memberi logic 1) pada bit-bit register tersebut.
ulangwaktu: in r16, TIFR sbrs r16, TOV1 rjmp ulangwaktu
ldi r16, 0b00000100 out TIFR, r16 ldi r16,0x00 out TCCR1B, r16 ret
Sambil menunggu overflow, program akan terus mengulang loop dari subrutin ulangwaktu. Ketika terjadi overflow, maka bit TOV1 (Timer/Counter 1 Overflow Flag) pada register TIFR ( Timer Interrupt Flag ) akan berlogic 1. Sebagaimana TIMSK, TIFR juga digunakan untuk mengontrol interupsi.
Keterangan: Frekunsi clock yang digunakan sebesar 11.0592 MHz. Presecaller yang digunakan 1024. Dimana timer tersebut bekerja selama 0.5 s. Maka sesuai rumus :
Diperoleh nilai TCNT dalam heksadesimal sebesar 0xeae8.
lanjut: sbic pind,7 rjmp lanjut reti
interupsi eksternal 0 dapat terjadi kapanpun. Ketika button pause pada pin D bit 2 ditekan maka program akan meloncat ke vektor interupsi kedua dengan alamat 0001 yang kemudian akan melakukan subrutin interupsi, yaitu subrutin lanjut. Program akan terus melakukan loop sampai pin D bit 7 ditekan. Ketika pin ini ditekan maka program akan keluar dari subrutin pelayanan interupsi dan kembali melanjutkan ke proses selanjutnya.