Jika pada kesempatan sebelumnya saya bahas tentang animasi LED menggunakan ASsembly dan C, maka kali ini kita akan belajar tentang konsep masukan menggunakan pushbutton, dalam dunia aplikasi, masukan digital ini bisa berasal dari berbagai macam sensor.
Rangkaian yang kita gunakan mirip dengan animasi LED, hanya saja sekarang kita tambahkan 2 buah pushbutton yang dihubungkan ke PORTD.0 dan PORTD.1, perhatikan Gambar 1.
Gambar 1
Selanjutnya kita buat programnya dengan diagram alir yang ditunjukkan pada Gambar 2.
Gambar 2
Program selengkapnya sebagai berikut:
;======================================================================= ;program aplikasi pushbutton dan animasi LED ;http://agfi.staff.ugm.ac.id ;======================================================================= .nolist .include "m32def.inc" .list ;-----------inisialisasi konstanta dan register--------------------------------- .equ led=0b10000000 ;variabel LED sebagai data .def temp=r16 .def delay1=r17 .def delay2=r18 .def delay3=r19 ;--- deklarasi segmen untuk kode/program ----------- .cseg .org 0000 ;awal kode program pada alama 0x0000 ; menyiapkan alamat SP - Stack Pointer ---------------- ; harus dituliskan sebagai inisialisasi SP pada RCALL ldi temp,low(ramend) out spl,temp ldi temp,high(ramend) out sph,temp ;-----------inisialisasi port----------------------------------------------- ldi temp,0b11111111 ;inisialisasi untuk pin di out ddrb,temp ;PORTB sebagai luaran semua clr temp ;inisialisasi untuk pin di out ddrd,temp ;PORTD sebagai masukan semua ser temp ;inisialisasi untuk pin di out portd,temp ;PORTD agar aktif semua internal pull-up-nya ldi temp,led ;persiapan data untuk animasi LED kanan: out portb,temp ;keluarkan melalui PORTB sbis pind,0 ;cek apakah pind,0 HIGH rjmp kiri ;YA! lompat ke label kiri rcall tunda ;TIDAK! ror temp ;putar satu bit ke kanan rjmp kanan ;lagi! kiri: out portb,temp ;keluarkan melalui OPRTB sbis pind,1 ;cek apakah pind,1 HIGH rjmp kanan ;YA! lompat ke label kanan rcall tunda ;TIDAK! rol temp ;putar satu bit ke kiri rjmp kiri ;lagi! ; ============================= ; delay loop generator ; 2000000 cycles: ; ----------------------------- ; delaying 1999998 cycles: tunda: ldi R17, $12 WGLOOP0: ldi R18, $BC WGLOOP1: ldi R19, $C4 WGLOOP2: dec R19 brne WGLOOP2 dec R18 brne WGLOOP1 dec R17 brne WGLOOP0 ; ----------------------------- ; delaying 2 cycles: nop nop ret ; ============================= .exit ;akhir program
Penjelasan:
- Untuk penjelasan tentang inisialisasi stack dan rutin tundaan silahkan lihat artikel lain-nya;
- Perhatikan blok inisialisasi PORT, untuk menentukan apakah suatu PORT digunakan sebagai luaran atau masukan digunakan register DDRx, dengan x diisi A, B, C atau D menyesuaikan dengan penggunaan port yang digunakan. Dalam kasus ini digunakan DDRB dan DDRD, masing-masing untuk PORTB dan PORTD. Logika ‘1′ untuk luaran, logika ‘0′ untuk masukan.
- Sekali lagi penulisan ke DDRx tidak bisa dilakukan langsung, artinya Anda tidak bisa memberikan instruksi, misalnya, ‘out ddrd,0b00000000′ yang mengakibatkan adanya kesalahan saat kompilasi. Gak percaya? Ya silahkan dicoba sendiri…
- Selanjutnya label ‘KANAN‘ dan ‘KIRI‘ digunakan untuk melakukan animasi LED sesuai dengan pushbutton yang ditekan. Pada label KANAN, diawali dengan mengeluarkan data TEMP ke PORTB, kemudian diikuti dengan instruksi SBIS yang merupakan instruksi “Skip if Bit in I/O Register is Set“, artinya abaikan instruksi berikutnya jika bit yang diperiksa bernilai HIGH atau berlogika ‘1′. Karena yang diperiksa adalah PORTD.0, dan konfigurasinya adalah aktif rendah (ditekan berarti HIGH), sehingga jika tidak ditekan (dalam kondisi 1′ atau SET), maka instruksi RJMP KIRI akan diabaikan, dan program melanjutkan ke penundaan sesaat (RCALL TUNDA), melakukan rotasi bit ke kanan pada TEMP (ROR TEMP) dan mengulang lagi (RJMP KANAN).
- Hal di atas berlaku juga untuk label KIRI, demikian seterusnya.
- Semoga bermanfaat silahkan berdiskusi melalui tanya jawab di bagian komentar, terima kasih.
- Ingin private dengan saya untuk Belajar Mikrokontroler AVR ATMega32 menggunakan bahasa BASIC? Silahkan cermati informasinya disini.
Tags: atmega32, atmel, avr, Mikrokontroler, pushbutton
March 25th, 2010 at 8:09 pm
Pak Agfi,Mau tanya…klo kita pake AVR dengan kristal 12MHZ, trus kita pengen menghasilkan frekuensi ultrasonik.bagaimana cara ngitung periode dan frekuensinya di program??(pake Bascom untuk memmrogram)
adakah buzzer atau speaker jenis tertentu untuk menghasilkan ultrasonik??klo ada, apa jenis speaker tao buzzernya??
makasih Pak….
March 26th, 2010 at 7:11 am
ada ditoko elektronik banyak rp40.000 kalo tahun 2005.
wah lihat aja di datasheetnya. ada kok cara itung itungan timer. atau kalo pengen mudah download avr timer calculator. banyak di google.
March 9th, 2011 at 4:23 pm
Pak bukankah bila konfigurasinya aktif rendah, ditekan berarti LOW ?
Kristalnya berapa Mhz ?
March 10th, 2011 at 7:30 am
@willy:
betul… kristalnya 7,3728MHz
October 17th, 2013 at 12:48 am
kalau menggunakan aplikas avr itu gimana yak
March 26th, 2018 at 9:20 am
ternyata bisa juga ya dibikin seperti ini
April 18th, 2018 at 10:07 am
woah keren pak
May 16th, 2018 at 2:10 pm
thank you for sharing it’s so helpful
December 8th, 2018 at 11:55 pm
its good thing to share, thank you.
December 29th, 2018 at 9:39 am
How do i get more information about this?
January 27th, 2019 at 1:36 pm
Rejekibet.Online Adalah Agen Situs Betting Dalam 1 UserID Dapat Bermain Semua Jenis Taruhan Permainan, Sportbooks, Togel Online, Poker & Domino , Live Casino, Tangkas Online, Slot Online, DLL.
May 21st, 2019 at 6:16 am
Fakta fakta inilah yang mendasari adanya Idn Poker online,dan banyak diantara kita yang tidak atau jarang mengetahuinya
May 22nd, 2019 at 4:20 am
bandar ceme terpercaya yang hanya dapat kalian temukan di pionpoker.com dengan tingkatan keamanan super ini
May 23rd, 2019 at 11:54 am
Hello, I will bookmark your weblog because your blog is very good and useful for me to visit. thank you
July 12th, 2019 at 3:26 pm
Very complete script, very helpful, thanks!
August 19th, 2019 at 7:26 pm
Hi there, just became aware of your blog through Google, and found that it’s really informative
March 19th, 2020 at 2:29 am
Prediksi Togel Hongkong yang paling dicari karena selalu tepat angka-angkanya.