fpganedir.com'da ara

fpganedir mail

 * Giriş

 * C Yazılımı

 * Yeni Proje Oluşturma

  * ISIS'de Simülasyon

PROJENİN C YAZILIM KODU

Örneğimizde kullanacağımız LED ve anahtarların kontrolü için GPIO yapısını kullanacağız. Örneğimizin yazılım koduna başlamadan önce projemizde kullanacağımız GPIO yapısına kısaca bir göz atalım.

GPIO (Genel Amaçlı Giriş/Çıkışlar)

GPIO kontrolü için 5 adet GPIO kontrol register’ı kullanılır. Bunlar PINSEL, IODIR, IOSET, IOCLR ve IOPIN

PINSEL

Mikrodenetleyicilerde genel olarak pinler 1'den fazla işlevi gerçekleştirebilecek şekilde tasarlanır. Birden fazla işleve sahip pinlerde pinlerin hangi işlevi yapacağı konfigürasyon register'ı tarafından tayin edilir.

Örneğimizde kullandığımız LPC2104 cihazının içerisinde PINSEL0 ve PINSEL1 adında iki adet konfigürasyon register'ı bulunur. Detaylı bilgi için LPC2104 cihazının datasheet'ine bakabilirsiniz.

IODIR

GIO yönünü kontrol eden register’dır. Bu resister GPIO'u giriş (0) veya çıkış(1) olarak ayarlamak için kullanılır. Çıkış olarak ayarlanan pinlerin varsayılan değerleri 0 (Low)’dur.

Aşağıdaki kod Mikrodenetleyicinin P 0.8 pinini giriş olarak ayarlamak için kullanılır

IODIR0|= (1<<8);

Aşağıdaki kod Mikrodenetleyicinin P 0.8 pinini giriş olarak ayarlamak için kullanılır

IODIR0 &= ~(1<<8);

Eğer birden fazla pini aynı anda çıkış veya giriş olarak ayarlamak istiyorsak aşağıdaki kodları kullanabiliriz.

// Mikrodenetleyicinin P0.9, P0.10 ve P0.11  pinlerini çıkış olarak ayarlar
IODIR0 |= (1<<9) | (1<< 10) |(1<<11);

// Mikrodenetleyicinin P0.0, P0.1, P0.2 ve P0,3  pinlerini çıkış olarak ayarlar
IODIR0 |= 0x0000000F;

IOSET ve IOCLR

Bu register'lar IODIR ile çıkış olarak tanımlanan pinlere değer atamak için kullanılır. IOSET çıkış pinini 1, IOCLR ise çıkış pinini 0 yapmak için kullanılır.

// Mikrodenetleyicinin P0.10 ile P0.11 pinlerine "0" değerini gönder.
IOCLR1 |= (1 << 10) | (1 << 11);

// Mikrodenetleyicinin P0.10 ile P0.11 pinlerine "1" değerini gönder.
IOSET1 |= (1 << 10) | (1 << 11);

IOPIN

IOPIN register, yönü ister giriş ister çıkış olsun Pin bloğundaki bütün GPIO'ların mevcut durumlarını okumak için kullanılır.

// Mikrodenetleyinin P0.5 pinin değerini oku

int buton;
button= (IOPIN0 >> 5 ) &1 ;

GPIO yapısına kısaca bir göz attıktan projenin C yazılım kodunu yazmaya başlayabiliriz.

C Yazılım Kodu

Projemizin C yazılım kodu aşağıdaki gibidir.

#include <LPC21xx.h>

// Mikrodenetleyinin P0.0 ile P0.1 pinlerini LED'lerin kontrolü için kullan

#define LED1 (1)
#define LED2 (1<<1)

// Mikrodenetleyinin P0.10 ile P0.11 pinlerini anahtarlarin kontrolü için kullan

#define ANAHTAR1 (1<<10)
#define ANAHTAR2 (1<<11)

// Anahtarlarin durumunu gösteren iki degisken tanımla

int anahtar_durum1, anahtar_durum2;

int main(void)
{
//Bütün pinleri GPIO olarak ayarla
PINSEL0 = 0;
PINSEL1 = 0;

// Mikrodenetleyinin P0.0 ile P0.1 pinlerinini çıkış olarak ayarla
IODIR0 |= (LED1 | LED2);

// Mikrodenetleyinin P0.10 ile P0.11 pinlerini giris olarak ayarla
IODIR0&= ~(ANAHTAR1 | ANAHTAR2) ;

while(1)
{

//Anahtarların durumlarını oku
anahtar_durum1 = (IOPIN0 >> 10) &1;
anahtar_durum2 = (IOPIN0 >> 11) &1;

if (anahtar_durum1==1) //anahtar#1 basılı ise
{
        IOSET0 |= LED1;//LED1 yak
}
else //anahtar 1 basılı değil ise
{
      IOCLR0 |= LED1;//LED1 söndür
}

if (anahtar_durum2==1) //anahtar 2 basili ise
{
     IOSET0 |= LED2;//LED2 yak
}
else //anahtar 2 basılı değil ise
{
    IOCLR0 |= LED2;//LED2 söndür
}
}

return 0;

}

Anasayfa | Fpga | VHDL | VHDL Sözlüğü | Embedded Sistem | Android | Sayısal Tasarım | Simulasyon | PCB | Örnekler | Forum | İletişim
Copyright © 2010-2013 FPGAnedir. All Rights Reserved.