AVR Örnekleri : Portların Bitlerini Test Etmek

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ı:

Program Tanımı:

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.

PD0’a bağlı butona basıldığında gerçekleşen durum
PD1’e bağlı butona basıldığında gerçekleşen 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
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

 

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.