“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);
}
}
==================================================
==================================================
// 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);
==================================================
==================================================
// 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;
}
}
// 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 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
==================================================
==================================================
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