Atmel mikrodenetleyicilerle ilgili örnek kodlar yazmaya devam ediyoruz. Bir önceki yazımızda saklayıcıların bitlerini test etmiştik. Bu yazımızda PORTD’ye bağladığımız butonları saklayıcı kullanmadan test edeceğiz. Bu sayede program akışını değiştirip mikrodenetleyicinin istediğimiz işlemleri yapmasını sağlayacağız.
Öncelikle kullanacağımız elemanları listeleyelim.
- 1 adet ATtiny2313 mikrodenetleyici
- 2 adet 330 Ω direnç
- 3 adet 4.7 kΩ direnç
- 3 adet buton
- 2 adet LED
Önemli Notlar:
Mikrodenetleyicinin dahili RC osilatörünü kullanacağımız için ayrıca bir osilatör kullanmamıza gerek yoktur.
Programlamayı yaparken Atmel Studio’yu kullanacağız.
Devre Şeması:
Butonlarımız soldan sağa sırasıyla RESET, PD0, PD1 olarak sıralanmıştır. PDO’a basıldığında PB0’a, PD1’e basıldığında PB1’e bağlı LED yanacaktır. Butonlardan el çekildiğinde ilgili LED’ler sönecektir.


Assembly Kodu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | ;AVR Örnekleri : Portların Bitlerini Test Etmek ;Tarih:07/09/2017 ;Tekno Beyinler www.teknobeyinler.com ;************DÜZENLEME SATIRI************** .include "tn2313def.inc" .def gecici=r16 .cseg .org 0 rjmp reset reset: ldi gecici,0x00 out ddrd,gecici ldi gecici,0xff ; out ddrb,gecici ldi gecici,0x7f ;Pull-up özelliğini out portd,gecici;etkin hale getir. ;************PROGRAM BAŞLANGICI************ basla: sbic pind,0 //Birinci butona basıldı mı? rjmp buton2 //Değilse birinci butonu kontrol et. sbi portb,0 //İlk ledi yak. rjmp basla buton2: sbic pind,1 //Birinci butona basıldı mı? rjmp buton1_1 sbi portb,1 //İlk ledi yak. rjmp basla buton1_1: sbis pind,0 //Birinci butondan el çekildi mi? rjmp buton2_1 cbi portb,0 //İlk ledi söndür buton2_1: sbis pind,1 //İkinci butondan el çekildi mi? rjmp basla cbi portb,1 //İlk ledi yak. rjmp basla |
Kullanılan Yeni Komutların Tanımları:
- SBIC (Skip If Bit in I/O Register Cleared) : I/O saklayıcısında belirlenen bit “0” ise komut atla
- SBIS (Skip If Bit in I/O Register Set): I/O saklayıcısında belirlenen bit “1” ise komut atla