AVR Örnekleri : Saklayıcıların Bitlerini Test Etmek

Atmel mikrodenetleyicilerle ilgili örnek kodlar yazmaya devam ediyoruz. Bir önceki yazımızda IN komutu kullanarak bir porttaki verileri okumuştuk. Bu yazımızda PORTD’ye bağladığımız butonlardan okuduğumuz verileri saklayıcılara yükleyip saklayıcıların ilgili bitlerini 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
  • 8 adet 330 Ω direnç
  • 9 adet 4.7 kΩ direnç
  • 9 adet buton
  • 8 adet LED

ÖNEMLİ 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 ŞEMASI:

PROGRAM TANIMI:

Butonlar sağdan sola PD0, PD1, ………, PD6 olarak sıralanmıştır. PORTB’nin ilk biti en sağdaki LED’e bağlıdır. Programa göre PD0 butonuna basıldığında PB0’a bağlı LED’in sönmesi sağlanacaktır.

Kullanıcının PD0’a bağlı butona basmadığı andaki durum.
Kullanıcının PD0’a bağlı butona bastığı andaki durum.

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
;AVR Örnekleri : Saklayıcıların Bitlerini Test Etmek
;Tarih:30/08/2017
;Tekno Beyinler www.teknobeyinler.com
 
;************DÜZENLEME SATIRI**************
 
.include "tn2313def.inc" 
.def gecici=r16 
.def saklayici=r17 
.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:
	ldi gecici,0xff
	out portb,gecici
kontrol:
	in saklayici,pind 
	sbrc saklayici,0
	rjmp kontrol
	ldi gecici,0b11111110
	out portb,gecici
 
kontrol_1:	
	in saklayici,pind
	sbrs saklayici,0
	rjmp kontrol_1 
	rjmp basla

Programın çalışma sistemini maddelerle açıklayalım.

  • Düzenleme satırlarında .include komutuyla mikrodenetleyicimizi derleyiciye tanıttık.
  • .def komutuyla R16 ve R17 saklayıcılarımızı isimlendirdik.
  • RESET etiketi altındaki kısımda giriş – çıkışlarımızı belirledik. Pull – up özelliğini aktif hale getirdik. Bu konu hakkındaki anlatımları önceki yazılarımızda bulabilirsiniz.
  • BASLA etiketiyle birlikte yapılması gereken işlemleri komutlar yardımıyla yazmaya başladık. İlk olarak PORTB’ye GECICI saklayıcısı yardımıyla 0xFF verisini yükleyerek bütün çıkışları Set yaptık.
  • KONTROL etiketinde IN komutuyla PORTD’deki buton verilerini okuyup SAKLAYICI’ya yükledik ve SBRC komutuyla SAKLAYICI’nın ilk bitinin “0” olup olmadığını kontrol ettik. (SBRC komutu yazı sonunda detaylı anlatılacaktır.) Eğer ilgili bit “0” değilse program KONTROL etiketine giderek kullanıcının butona basmasını beklemiştir. Koşul sağlandığında program devam ederek PB0 a bağlı LED’i söndürmüştür.
  • Daha sonra program KONTROL_1 etiketinde butondan elin çekilip çekilmediğini kontrol etmiştir. Eğer el çekilmemişse program KONTROL_1 etiketinde döngüye girerek kullanıcının elini butondan çekmesini beklemiştir. İşlem tamamlandıktan sonra RJMP komutuyla program tekrarlanması için BASLA etiketine gönderilmiştir.

EKLER :

KOMUTLARIN TANIMLARI 

  • SBRC (Skip Bit in Register Cleared) : Saklayıcı içerisindeki tanımlanan bit “0” ise komut atla
  • SBRS (Skip Bit in Register Sleared) : Saklayıcı içerisindeki tanımlanan bit “1” ise komut atla

Bir sonraki yazımızda saklayıcılarla uğraşmadan direkt I/O pinlerini test edeceğiz. Yararlı olması dileğiyle

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.