Note : bagian yang dicoret mohon jangan dianggap serius.
Penjelasan Studi Kasus
Pada pratikum hari ini menggunakan aplikasi software ISIS Protheus 7 bajakan dan AVR Studio, dan kali ini kami akan membuat rangkaian 7-segment yang merespon terhadap input keypad.
TUJUAN :
– Mengenal perintah bit pada Mikrokontrol ATMEGA8535
– Mengaplikasikan perintah logika untuk pembacaan keypad
– Memahami penerapan perintah logika pada rangkaian sebenarnya
TEORI :
Jenis perintah pada mikroprosesor berdasarkan keterlibatan variabelnya ada 2 jenis yaitu perintah unary dan binary. Perintah unary adalah perintah yang hanya melibatkan 1 variabel, misalnya inc dan dec, serta sbi dan cbi. Perintah binary adalah perintah yang melibatkan 2 variabel contohnya add r23, r24. Menurut jenisnya, perintah yang mengakses sebuah port dapat bersifat simultan atau independen. Perintah simultan adalah perintah yang langsung mengakses 8 bit pada port secara bersamaan, sedangkan perintah independen hanya mengakses bit dari port secara parsial. Ilustrasi perintah simultan dan independen ditunjukkan pada gambar 1.
Perintah simultan langsung mengakses 8 bit secara bersamaan dan logika 0 atau 1 nya langsung dimuatkan dalam register perantara. Sedangkan perintah independen hanya mampu mengakses 1 bit saja sehingga memerlukan 4 kali perintah independen untuk men-setting 4 bit agar berlogika 1 seperti gambar 1 di atas. Perintah independen berguna pada saat sebuah bit ingin diubah kondisi logikanya tanpa harus mengganggu bit-bit yang lain. Kemampuan inilah yang tidak dimiliki oleh perintah simultan.
KAMUS PERINTAH INDEPENDEN:
Tabel 1. Daftar perintah independen AVR8535
Sintak | Keterangan | Contoh |
Sbi
Cbi |
Set bit
Men-set bit pada PORTX atau membuat logika 1
Meng-Clear bit pada PORTX atau membuat logika 0 |
sbi PORTA, 3
hasilnya : bit 3 pada PORTA berlogika 1
cbi PORTA, 7
hasilnya : bit 7 pada PORTC berlogika 0 |
Scanning Keypad
Keypad adalah tombol yang disusun membentuk matrik dan menggunakan teknik kolom-baris agar menghemat penggunaan jalur port mikrokontrol. Gambar 2 menunjukkan tampilan umum dari keypad telepon. Cara kerjanya adalah jika ada tombol ditekan, maka jalur kolom dengan jalur baris akan terhubung. Misalnya, pada kolom 1 berlogika high(‘1’) sedangkan kolom 2 dan 3 low(“0”), terus kemudian tombol 7 ditekan, maka baris C akan berlogika “1” karena mendapatkan sinyal high dari kolom 1. Dengan cara kerja yang sama, maka dapat dibuat algoritma untuk mengetahui tombol-tombol yang lain yang ditekan, misalnya jika kolom 3 berlogika high dan baris B berlogika high maka tombol “6” pasti sedang ditekan. Oleh karena itu, pemberian logika high ke jalur kolom harus secara bergantian dan pembacaan baris dapat dilakukan secara serentak.
Prosedur untuk scanning keypad dapat dituliskan sebagai berikut :
- Setting kolom 1 = high, kolom 2 dan 3 = low
- Baca baris, jika baris A = high, maka tombol yang ditekan adalah “1”
jika baris B = high, maka tombol yang ditekan adalah “4”
jika baris C = high, maka tombol yang ditekan adalah “7”
jika baris D = high, maka tombol yang ditekan adalah “*”
- Setting kolom 1 = low, kolom 2 = high dan 3 = low
- Baca baris, jika baris A = high, maka tombol yang ditekan adalah “2”
jika baris B = high, maka tombol yang ditekan adalah “5”
jika baris C = high, maka tombol yang ditekan adalah “8”
jika baris D = high, maka tombol yang ditekan adalah “0”
- Setting kolom 1 dan 2 = low dan 3 = high
- Baca baris, jika baris A = high, maka tombol yang ditekan adalah “3”
jika baris B = high, maka tombol yang ditekan adalah “6”
jika baris C = high, maka tombol yang ditekan adalah “9”
jika baris D = high, maka tombol yang ditekan adalah “#”
LANGKAH PERCOBAAN #1
- Buatlah skema rangkaian seperti gambar 3.
- Ketik dan build program #1.
- Isikan file .HEX yang sudah sukses di-assembler ke simulator
- Jalankan (Run the simulation) skema yang sudah anda buat dan cobalah menekan tombol 1 sampai 9. Bagaimana hasilnya ?
Program #1
.equ nol = 0xC0 .equ satu = 0xF9 .equ dua = 0xA4 .equ tiga = 0xB0 .equ empat = 0x99 .equ lima = 0x92 .equ enam = 0x82 .equ tujuh = 0xF8 .equ del = 0x80 .equ sem = 0x90 ;-----------------------------inisialisasi inisialisasi_port: ldi r16, 0xFF out DDRA, r16 ldi r16, 0xF0 out DDRD, r16 ;-------------------------akhir inisialisasi ldi r17, 0xFF out porta, r17 baca_input1: sbi portd,4 cbi portd,5 cbi portd,6 in r22, PIND andi r22, 0x0F cpi r22, 0x01 breq tombol_satu cpi r22, 0x02 breq tombol_empat cpi r22, 0x04 breq tombol_tujuh cpi r22, 0x08 breq tombol_bintang ;=======================kolom 2 baca_input2: cbi portd,4 sbi portd,5 cbi portd,6 in r21, PIND andi r21, 0x0F cpi r21, 0x01 breq tombol_dua cpi r21, 0x02 breq tombol_lima cpi r21, 0x04 breq tombol_delapan cpi r21, 0x08 breq tombol_nol ;=======================kolom 3 baca_input3: cbi portd,4 cbi portd,5 sbi portd,6 in r20, PIND andi r20, 0x0F cpi r20, 0x01 breq tombol_tiga cpi r20, 0x02 breq tombol_enam cpi r20, 0x04 breq tombol_sembilan cpi r20, 0x08 breq tombol_pagar rjmp baca_input1 ;=================== tombol_satu: ldi r17, 0xf9 out porta, r17 rjmp baca_input2 tombol_empat: ldi r17, 0x99 out porta, r17 rjmp baca_input2 tombol_tujuh: ldi r17, 0xf8 out porta, r17 rjmp baca_input2 tombol_bintang: ldi r17, 0x03 out porta, r17 rjmp baca_input2 ;==================== tombol_dua: ldi r17, dua out porta, r17 rjmp baca_input3 tombol_lima: ldi r17, lima out porta, r17 rjmp baca_input3 tombol_delapan: ldi r17, del out porta, r17 rjmp baca_input3 tombol_nol: ldi r17, nol out porta, r17 rjmp baca_input3 ;============================ tombol_tiga: ldi r17, tiga out porta, r17 rjmp baca_input1 tombol_enam: ldi r17, enam out porta, r17 rjmp baca_input1 tombol_sembilan: ldi r17, sem out porta, r17 rjmp baca_input1 tombol_pagar: ldi r17, 0x0C out porta, r17 rjmp baca_input1
TUGAS #1 :
Dengan menggunakan Gambar 1, modifikasilah Program #1 sehingga penekanan tombol dan tampilannya menjadi berbeda, seperti pada tabel 2 berikut :
Tombol Ditekan | Tampilan 7 segment |
1 | A |
2 | B |
3 | C |
4 | D |
5 | E |
6 | F |
7 | G |
8 | H |
9 | I |
0 | J |
Hasil coding :
.include A"C:\Program Files (x86)\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8535def.inc" .equ nol = 0xC0 .equ satu = 0xF9 .equ dua = 0xA4 .equ tiga = 0xB0 .equ empat = 0x99 .equ lima = 0x92 .equ enam = 0x82 .equ tujuh = 0xF8 .equ del = 0x80 .equ sem = 0x90 .equ A = 0b0001000 .equ B = 0b0000011 .equ C = 0b1000110 .equ D = 0b0100001 .equ E = 0b0000110 .equ F = 0b0001110 .equ G = 0b0000010 .equ H = 0b0001001 .equ I = 0b1111001 .equ J = 0b1110000 ;-----------------------------inisialisasi inisialisasi_port: ldi r16, 0xFF out DDRA, r16 ldi r16, 0xF0 out DDRD, r16 ;-------------------------akhir inisialisasi ldi r17, 0xFF out porta, r17 baca_input1: sbi portd,4 cbi portd,5 cbi portd,6 in r22, PIND andi r22, 0x0F cpi r22, 0x01 breq tombol_satu cpi r22, 0x02 breq tombol_empat cpi r22, 0x04 breq tombol_tujuh cpi r22, 0x08 breq tombol_bintang ;=======================kolom 2 baca_input2: cbi portd,4 sbi portd,5 cbi portd,6 in r21, PIND andi r21, 0x0F cpi r21, 0x01 breq tombol_dua cpi r21, 0x02 breq tombol_lima cpi r21, 0x04 breq tombol_delapan cpi r21, 0x08 breq tombol_nol ;=======================kolom 3 baca_input3: cbi portd,4 cbi portd,5 sbi portd,6 in r20, PIND andi r20, 0x0F cpi r20, 0x01 breq tombol_tiga cpi r20, 0x02 breq tombol_enam cpi r20, 0x04 breq tombol_sembilan cpi r20, 0x08 breq tombol_pagar rjmp baca_input1 ;=================== tombol_satu: ldi r17, A out porta, r17 rjmp baca_input2 tombol_empat: ldi r17, D out porta, r17 rjmp baca_input2 tombol_tujuh: ldi r17, G out porta, r17 rjmp baca_input2 tombol_bintang: ldi r17, J out porta, r17 rjmp baca_input2 ;==================== tombol_dua: ldi r17, B out porta, r17 rjmp baca_input3 tombol_lima: ldi r17, E out porta, r17 rjmp baca_input3 tombol_delapan: ldi r17, H out porta, r17 rjmp baca_input3 tombol_nol: ldi r17, nol out porta, r17 rjmp baca_input3 ;============================ tombol_tiga: ldi r17, C out porta, r17 rjmp baca_input1 tombol_enam: ldi r17, F out porta, r17 rjmp baca_input1 tombol_sembilan: ldi r17, I out porta, r17 rjmp baca_input1 tombol_pagar: ldi r17, 0x0C out porta, r17 rjmp baca_input1