Atmel Mikrodenetleyicilerde Ledleri Yakmak

Daha önce yayınladığımız Atmel Mikrodenetleyici Nedir? ve AVR Mikrodenetleyicilerde Gecikme Hesabı yazılarıyla Atmel mikrodenetleyicilere giriş yapmıştık. Bundan sonra Atmel mikrodenetleyicilerin programlanması hakkında yazılar yazacağız. Bu yazımızda PORTB’ye bağlı ledlerin birer aralıkla yakılmasını sağlayan programı yazacağız. Bu programlamayı hem AVR Assembly diliyle hem de C diliyle yapacağız.

Öncelikle kullanacağımız ekipmanları listeleyelim.

  • 1 adet ATtiny2313 mikrodenetleyici
  • 8 adet 330 Ω direnç
  • 1 adet 4.7 kΩ direnç
  • 1 adet buton
  • 8 adet LED

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. Bu derleyici hem Assembly hem de C dilinde program oluşturmaya imkan vermektedir.

DEVRE ŞEMASI:

ASSEMBLY KODU:

;Atmel Mikrodenetleyicilerde PORTB'ye Bağlı Ledleri Yakmak 
;Tarih:27/08/2017
;Tekno Beyinler www.teknobeyinler.com

;************DÜZENLEME SATIRI**************

.cseg ;Bu komut code segmentin başlamasını sağlar

.org 0
 rjmp reset ;Program enerji geldiğinde RESET etiketine gider.

reset:
 ldi r16,0xff ;R16 saklayıcısına 11111111 verisini yükle
 out ddrb,r16 ;R16 saklayıcısını DDRB'ye yükleyerek 
              ;PORTB'yi çıkış olarak belirledik.

;************PROGRAM BAŞLANGICI************

basla:
 ldi r16,0b10101010 ;R16 saklayıcısına veri yükle
 out portb,r16 ;R16 saklayıcısındaki veriyi PORTB'ye yükle
loop:
 rjmp loop ;Loop etiketine giderek döngüde kal.

C KODU:

/*
 * Atmel Mikrodenetleyicilerde PORTB'ye Bağlı Ledleri Yakmak
 * Tarih:27/08/2017
 * Tekno Beyinler www.teknobeyinler.com
 */

#include <avr/io.h>

int main(void)
{
 DDRB=0xFF; //PORTB'yi çıkış olarak belirle.
 while (1) 
 {
 PORTB=0b10101010; //PORTB'ye 10101010 verisini yükle.
 }
 return 0;
}

SONUÇ:

Kodun hatasız yazılması halinde LED’lerin birer aralıklı şekilde yanması gerekir. Gelecek yazılarda görüşmek üzere.

Saygılarımızla,

 

 

 

 

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.