1 Ağustos 2015 Cumartesi

SDCC ile LCD Uygulaması-2 (16F877A) Ders11






lcdcalisma.c” dosyası
==================================================
// Durali Kiraz 2015
// PIC16F877A için hazırlanmıştır.


#include "ayarlar.h"
#include "bizim_lcd.h" // LCD kütüphanesi tanımlanıyor
#include "delay.h"




void main(void) // Ana fonksiyon alanı
{
  TRISB=0x00; // LCD'ye bağlı portlar çıkış yapılıyor
  TRISC=0x00;
  PORTB=0x00;
  PORTC=0x00;


  lcd_baslat(); // LCD ilk ayarları yapılıyor


  for(;;) //Sonsuz döngüye giriliyor
  {
     lcd_yaz(" DURALi KiRAZ"); // İlk satıra isim yazılıyor
     ms_delay(1000); // 1 sn bekle
     lcd_konumlanxy(2,1); // İkinci satıra geçiliyor
     lcd_yaz("1234567890"); // Rakamlar yazılıyor
     ms_delay(1000);
     lcd_ekranisil();
     ms_delay(500);
  }

}
==================================================


delay.h” dosyası
==================================================

// Durali Kiraz 2015
// PIC16F877A için hazırlanmıştır.


extern void ms_delay(unsigned short int);
extern void us_delay_20(unsigned short int);
==================================================


delay.c” dosyası
==================================================
// 16F877A için delay fonksiyonu tanımlaması
// Bu ms_bekle 168877a 4 Mhz frekansı için ayarlanmış bir fonksiyondur


typedef unsigned short int myint;


void ms_delay(myint milisaniye)
{
  myint i,j;
  for (i = 0; i < milisaniye; i++)
  {
   // Döngüde optimizasyon için bu asm komutu eklenmiştir.
     for (j=0; j < 46; j++)
        __asm nop __endasm;
  }
}


// Bu fonksiyon her döngüde 20 us (mikrosaniye) gecikme sağlar
void us_delay_20(myint usDegerx20)
{
  myint i;
  for (i = 0; i < usDegerx20; i++) //her döngü adımı yaklaşık 20 us
  {
  // Döngüde optimizasyon için bu asm komutu eklenmiştir.
     __asm nop __endasm;
  }
}
==================================================

Bu dosyaların dışında kalan ayarlar.h, bizim_lcd.h, bizim_lcd.c dosyalarını 10. dersten bakabilirsiniz. Yani bu üç dosyada değişiklik olmadı.

Bu dersimizde önceki lcd uygulamasında biraz değişiklik yaptık. Lcdcalisma.c isimli ana dosyamızda sonsuz for döngüsü içerisine iki ayrı satır yazıyı delay fonksiyonlarımızı da kullanarak basit bir efekt oluşturduk. Ancak önceki derste sadece lcd dosyalarında kullanılan delay fonksiyonlarımızın ayrı kod ve başlık dosyalarını oluşturmamız gerekti. Aksi takdirde ana dosyamızdaki kod içerisinde kullanmakta sıkıntı yaşanabilirdi. Bunun için delay fonksiyonlarını delay.c dosyasında, bunların tanımlarını da delay.h dosyasında oluşturduk. Ve bu fonksiyoları extern deyimiyle global fonksiyonlar ilan ettik. Bunun sonucunda da her kod sayfasında rahatlıkla kullanımını sağlamış olduk.

Bunun dışında ayrıca derleme sözdizimlerimizde birkaç ekleme yaptık. Sıra ile aşağıdaki satırları komut satırı (cmd) / konsol penceresinde uygulamamız gerekiyor. (ben ubuntuya göre yazdım).

==================================================

sdcc --use-non-free -mpic14 -p16f877a -I path/to/pic14/includes -c bizim_lcd.c
sdcc --use-non-free -mpic14 -p16f877a -I path/to/pic14/includes -c delay.c
sdcc --use-non-free -mpic14 -p16f877a -I path/to/pic14/includes -L path/to/pic14/libraries -Wl, lcdcalisma.c bizim_lcd.o delay.o
==================================================


(En alttaki satır tek satırdır. Sığmadığı için aşağıya kaymıştır.)

Bu derleme işlemlerinde ilk olarak 10.derste yaptığımız gibi lcd kütüphanemizin object dosyasını oluşturuyoruz. Bu işlemden sonra aynı şekilde delay fonksiyonlarımızın bulunduğu kütüphanemizin object dosyalarını da oluştururuz. Eğer daha çok eklememiz gereken kütüphanemiz varsa aynı adımı onlar için de yaparız. Son satırıda dikkat edecek olursa satırın en sonuna bu sefer ek olarak oluşturduğumuz delay.o object dosyasını da arada boşluk olacak şekilde komut satırına ekledik. (Buradaki parametrelerin açıklamalarını Ders10 da bulabilirsiniz.) Enter tuşu ile onayladığımızda

==================================================
message: using default linker script "/usr/share/gputils/lkr/16f877a.lkr"
==================================================

Mesajıyla derleme ve linker işlemlerini başarıyla yaptığını belirtir. Bu işlemler biraz külfetli gibi görünebilir ancak mantığını kavradığınızda çok kolaydır. Amatör kullanıcılar ve öğrenciler için binlerce lira derleyicilere para vermektense bu ücretsiz ve tamamen açık kaynak derleyici kullanmak için bence bu zahmete değer diye düşünüyorum. Başka bir derste görüşmek üzere hoşçakalım.


duralikiraz.blogspot.com
01 Ağustos 2015

Muvaffakiyet Allahtandır”

Hiç yorum yok:

Yorum Gönder