"Enter"a basıp içeriğe geçin

MPLAB IDE ve Xc8 ile Merhaba Dünya

Merhaba sevgili ziyaretçiler. Bu yazımızın konusu Microchip firmasının 8-bit mikrodenetleyicileri için piyasaya sunduğu C derleyicisi olan xc8 üzerine olacak. Uygulamamızda denetleyici olarak Pic18f2550’yi kullanacağız. Bir mikrodenetleyici için program yazmaya geçmeden önce o denetleyicinin iç yapısı iyi incelenmelidir. Bunun için en bilindik ve geçerli yol ilgili denetleyicinin (bütün elektronik devre elemanlarının olduğu gibi) datasheetinden faydalanmaktır.

18F2550 Hakkında Herşey: Datasheet

Buradan denetleyicinin datasheetini indirip inceleyecek olursak 3. sayfada mikrodenetleyicinin genel özelliklerini görebiliriz. Mesela denetleyicinin USB haberleşmeye olanak sağladığını hemen buradan görebiliriz. USB haberleşmeye verdiği desteğin detayları ise hemen başlığın altında yer almakta. Güç yönetimi, osilatör yapısı, çevre giriş/çıkış arayüz desteği ile ilgili özet bilgileri de yine buradan görebiliriz. “Special Microcontroller Features (Özel mikrodenetleyici özellikleri)” başlığı altında ise denetleyicinin ayırıcı özelliklerine ait başlıklar yer almaktadır. Buradan mikrodenetleyicinin C derleyicisi için optimize edilmiş ilave komut setine sahip olduğunu görebiliriz.

Ayrıca 10,000 defa flashını; 100,000,000 defa da EEPROM’unu programlayabileceğimizi ve Flashına yazılan programı 40 yıldan uzun süre muhafaza edebildiğini de buradan görebiliriz. Diğer öne çıkan bir özelliği ise kesmeler için öncelik seviyeleri belirleyebiliyor olmamız (Bu hususa başka bir yazıda değineceğimden burada detaylara girmiyorum).

PIC18F2550'nin Özellikleri
PIC18F2550’nin Özellikleri

Denetleyicinin genel özelliklerinin hemen altında bulunan tablo ise aynı serideki denetleyicilerin hafıza, giriş/çıkış, gibi temel donanım özelliklerini gösterir. Tablonun PIC18F2550 satırında kullanacağımız denetleyicinin 32Kb program belleğine ve 2048 byte (2 Kb) RAM’e sahip olduğunu görebiliriz. Ayrıca kullanacağımız denetleyicinin 256 bayt da EEPROM belleği mevcut. Bunun yanında 24 adet G/Ç portu, 10 bit çözünürlüğe sahip 10 kanal A/D çevirici ve 2 adet PWM çıkışı olduğunu; ayrıca 1 adet SPI, 1 adet master I2C, 1 adet de EAUSART haberleşme kanalının mevcut olduğunu ve 2 adet karşılaştırıcı, 1 adet 8-bit, 3 adet de 16-bit timer biriminin olduğunu datasheetten görebiliriz. Denetleyici için geliştireceğimiz gömülü yazılımı bu donanım özelliklerini göz önüne alarak geliştirmeliyiz. Mesela Pic18f2550 için geliştirilecek yazılımın hex kodu 32kb’ı geçemez. Geçtiği takdirde kod, denetleyicinin program belleğine sığmayacağından programı denetleyiciye yükleyemeyiz.

PIC18F2550 Pin Yapısı
PIC18F2550 Pin Yapısı

MPLAB IDE ve XC Derleyicisi

Microchip firması denetleyicilerine program yazmak ve derlemek için MPLAB IDE‘si ve XC8 derleyicisi kullanılır. XC8 derleyicisini komut satırından da kullanabilirsiniz ancak XC derleyicilerini komut satırından kullanmak oldukça zahmetli ve konumuz kapsamı dışında olduğundan bu hususa değinmeyeceğiz. MPLAB IDE ve XC derleyicileri linux, mac veya windows işletim sistemi ortamında çalışabilmektedir. Yazılım geliştiricilere geniş geliştirme olanakları sunduğundan Entegre Geliştirme Ortamı (Integrated Development Envirenment – IDE) olarak adlandırılır. MPLAB IDE güncel sürümlerinde açık kaynaklı bir geliştirme ortamı olan Netbeans IDE temel alınarak geliştirilmiştir.

XC derleyicileri tüm Microchip PIC mikrodenetleyicileri için kullanılabilen genel amaçlı derleyicilerdir. Önceden PIC mikrodenetleyicileri için MPLAB C ve Hi-Tech C derleyicileri kullanılıyordu. Ancak Microchip firması artık geliştiricilere bu derleyiciler yerine XC derleyicilerinin kullanılmasını önermekte ve bu derleyicilere güncelleme desteği vermektedir.

Microchip, XC derleyicilerini 3 gruba ayırmıştır. Bunlar:

  • XC8: PIC 10/12/16/18 serisi (8-bit) denetleyiciler için derleme yapılır.
  • XC16: PIC 24 serisi (16-bit) denetleyiciler ya da dsPIC dijital sinyal işleyiciler için derleme yapılır.
  • XC32: PIC 32 serisi (32-bit) denetleyiciler için derleme yapılır.

Biz bu yazıya PIC10/12/16/18 serisi 8-bit denetleyiciler için derleme yapılan XC8 derleyicisi ile devam edeceğiz.

MPLAB IDE ile Yeni Proje Oluşturma

Aşağıdaki resimde ana pencersi görülen MPLAB IDE geliştiriciye, kod yazma, derleme, hata ayıklama ve mikrodenetleyiciyi programlama için birçok araç sunmaktadır.

  • MPLAB IDE ile yeni bir projeye başlamak için aşağıdaki resimde görüldüğü gibi toolbardan “Yeni Proje” butonunu, “Ctrl+Shift+N” tuş kombinasyonunu ya da “File->New Project…” menüsünü kullanabilirsiniz.
MPLAB IDE ile Yeni Proje Oluşturma ve Varolan Bir Projeyi Açma
MPLAB IDE ile Yeni Proje Oluşturma ve Varolan Bir Projeyi Açma
  • Yukarıdaki işlem adımıyla yeni projeye başlama komutu verildikten sonra aşağıdaki ekran alıntısında görülen “New Project” pencersi açılacaktır. Pencerede iki adet liste bulunmaktadır. Soldaki listede (Categories) proje kategorileri, sağdaki listede (Projects) ise proje türleri görülmektedir.
Yeni Proje Oluşturma Ekranı
Yeni Proje Oluşturma Ekranı
  • Sağdaki “Projects” listesinden “Standalone Project” seçilir ve “Next” butonuna tıklanır.
  • Ardından aşağıdaki resimde görülen “Select Device” (Denetleyici Tercihi) ekranı gelecektir. Bu pencerede MPLAB IDE’ye hangi PIC Mikrodenetleyicisi için geliştirme yapacağımızı belirteceğiz. Böylece IDE kendisini bu denetleyiciye göre düzenleyecektir.
Mikrodenetleyici Tercihi Ekranı
Mikrodenetleyici Tercihi Ekranı
  • Biz PIC18F2550 mikrodenetleyicisi için geliştirme yapacağımızdan “Family” (denetleyici ailesi) açılır listesinden “Advanced 8-bit MCUs (PIC18)” seçeneğini seçeceğiz.
  • Denetleyici ailesini seçtikten sonra “Device” açılır listesi bu seçime uygun şekilde tüm PIC18 serisi deneyleyicileri içerecek şekilde doldurulacaktır. Bu listeden “PIC18F2550” seçeneğini seçiyoruz (açılır listenin yazarak tamamlama özelliği de kullanılabilir).
  • Ardından “Next” tuşuna tıklayarak “Select Tool” ekranına geliyoruz. Bu ekranda derleme sonucu elde edeceğimiz (çalıştırılabilir) hex dosyasını mikrodenetleyiciye yüklemek/hata ayıklamak için kullanacağımız programlayıcı donanımı ya da simülatör yazılımları görebiliriz.
  • “Select Tool” ekranında ağaç yapısı şeklinde bir liste bulunmaktadır. Burada 3 farklı kategori mevcut. Bu kategorilerden “Hardware Tools” (Donanım Araçları) kategorisi altında MPLAB IDE’nin desteklediği programlayıcı donanımlar bulunmaktadır. Elinizdeki donanıma göre seçim yapabilir (ben Pickit3 kullanıyorum) ya da “Simulator” seçeneğini seçerek herhangi bir programlayıcı kullanmadan, mikrodenetleyici donanımını simüle eden yazılımsal ortamda, hata ayıklama işlemini gerçekleştirebilirsiniz (donanım performansı ve yeterliliğini beklemeyin). Ben bu yazı boyunca programlayıcı olarak ExpKits adlı firmadan edindiğim “Pickit3” adlı programlayıcıyı kullanacağımdan “Pickit3” seçeneğini seçtim. Programlayıcı seçimini yaptıktan sonra yine “Next” butonuna tıklıyoruz.
Programlayıcı Donanımı Tercih Ekranı
Programlayıcı Donanımı Tercih Ekranı
  • Sonraki ekran “Select Compiler” derleyici tercihi ekranımız. Bu ekranda geliştirdiğimiz programı derlemek için kullanacağımız derleyici tercihini yapacağız. Listede daha önce yüklemiş olduğunuz bütün derleyiciler görüntülenecektir. Yazının da amacına uygun olarak ben burada “XC8” tercihini yaptım. Ekran görüntüsünde 1.34 versiyonunu kullandığım görülüyor ancak bu yazının hazırlandığı sıralarda XC8 için 1.35, XC16 için 1.25, XC32 için 1.40 versiyonları indirilebilir durumda. Derleyici tercihimizi yaptıktan sonra “Next” butonuna tıklıyoruz.
  • Gelen “Select Project Name and Folder” ekranında projenin isim ve yolunu belirtiyoruz.
  • “Project Name” alanına proje için bir isim giriyoruz. Ben isim olarak “ilk_proje” veriyorum. Siz de kendinize göre bir isim belirleyebilir ya da benim verdiğim ismi kullanabilirsiniz.
  • “Project Location” alanında projenin nereye kaydedileceğini belirtiyoruz. Ben projenin, kullanıcı klasörümün içerisinde daha önceden MPLAB IDE’nin kendisi tarafından oluşturulan “MPLABXProjects” klasörünün altına kaydedeceğimi belirttim.
  • “Project Folder” alanı kullanıcı tarafından değiştirilemeyen pasif bir alandır. Bu alan projenin tam yolunu gösterir.
  • Eğer “Use project location as the project folder” seçeneği seçilirse proje konumu olarak sadece “Project Location” esas alınır. Proje adıyla klasör oluşturulmaz.
  • “Encoding” açılır listesi karakter kodlamasıyla ilgili tercihler sunar. Program yazarken türkçe karakterler kullanılmak isteniyorsa (sadece kaynak kod ve açıklama alanlarında, donanımda özel karakter kullanımı için ayrı bir çalışma gerekir) bu açılır listeden “ISO-8859-9” tercih edilmelidir.
  • Evet proje ile ilgili tüm tercihlerimizi belirttik. Artık “Finish” butonuna tıklayarak kodlamaya geçebiliriz.

Kaynak Dosyası Nerede?

E peki bisürü şey yaptık bi proje başlatmak için ama karşımıza gele gele boş bir ekran geldi. Kod editörü nerede?!

Proje oluşturulduktan sonra MPLAB IDE'nin durumu
Proje oluşturulduktan sonra MPLAB IDE’nin sol tarafındaki proje ağacında proje yapısı görünür. MPLAB IDE Varsayılan olarak yeni proje oluşturulduğunda kendisi kaynak dosya oluşturmaz.

Durun hemen kızmayın. Burada MPLAB IDE kod yazmaya nereden başlanacağı kararını bize bırakıyor. Yani PIC Assembler tarafından ya da XC derleyici tarafından başlamak bizim kararımız. Biz XC8 derleyicisi ile PIC18F2550 mikrodenetleyicisi için program geliştireceğimizden C kaynak kodu oluşturacağız. Bunun için:

  • Öncelikle toolbardan “New File” butonuna tıklayarak yeni dosya oluşturmak istediğimizi belirtiyoruz.
Yeni Dosya
Yeni dosya oluşturmak için toolbardan “New File” butonuna tıklanır.
  • Karşımıza “New File” penceresi gelecektir. Bu pencerede öncelikle en üstteki “Project” açılır listesinden bu dosyayı hangi proje için oluşturacağımızı seçiyoruz.
Yeni Dosya Ekleme Penceresi
Yeni Dosya Ekleme (New File) Penceresi
  • Hemen bu açılır listenin altında “Categories” ve “File Types” listelerini göreceksiniz. “Categories” listesinden oluşturacağımız dosyanın hangi kategoriye girdiğini seçeceğiz. Burada “C” ve “C++” seçenekleri sizi yanıltmasın. Bunlar normal bir C/C++ dosyası için şablon sunar. Oysa biz XC derleyicisine uygun bir şablon istiyoruz. Bu yüzden “Microchip Embedded” kategorisi altındaki “XC8 Compiler” alt kategorisini seçmemiz gerekiyor. Bu seçimi yaptıktan sonra sağ taraftaki “File Types” listesinin güncellendiğini göreceksiniz.
  • “File Types” listesinde bize sunulan 3 seçenek mevcut. “main.c” olan seçenek PIC10/12/16 serisi denetleyiciler için olan kaynak dosya şablonundan kaynak dosya oluşturur. Oysa biz PIC18 serisi üzerinde çalışacağız. Bu yüzden listeden “main18.c” seçeneğini seçiyoruz ve “Next” butonuna tıklıyoruz.
  • Burada karşımıza dosyaya bir isim ve kayıt yolu vermemizi bekleyen “Name and Location” ekranı geldi. “File Name” alanına kaynak dosyamız için vereceğimiz ismi giriyoruz. Ben “main” olarak verdim. Siz isteğinize göre farklı bir isim de verebilirsiniz. “Extension” ile dosyanın uzantısının dolayısıyla türünün ne olacağını belirtiyoruz. Kaynak dosyamız bir C kaynak dosyası olacağından bu tercihi de varsayılan olan “c” olarak bırakıyorum.
  • “Folder” alanında ise dosyanın nereye kaydedileceğini “Browse…” butonu ile gösterebiliriz. Varsayılan konuma kaydedilmesi için boş bırakmak yeterli.
Yeni oluşturulacak dosya için ismi ve yolunun belirlendiği ekran
Yeni oluşturulacak dosya için ismi ve yolunun belirlendiği (Name and Location) ekran
  • Bütün işlemleri doğru yaptıysak geriye “Finish” butonuna tıklayıp pencereyi kapatmak ve kaynak dosyamızın oluşmasını beklemek kalıyor.
Yeni Kaynak Dosyası Projeye Eklendi
Yeni kaynak dosyası eklendiğinde hemen kod editöründe açılacaktır.
  • Eğer oluşturduğunuz kaynak dosyanın proje dizinindeki konumunu değiştirmek, mesela kök dizinden “Source Files” mantıksal dizini altına almak isterseniz, tek yapmanız gereken dosyayı sol taraftaki proje dizin ağacında farenin sol tuşuyla sürükleyip “Source Files” klasörü altına bırakmak. Dosya fiziksel olarak bu konuma taşınmayacak ancak proje dizin ağacında bu mantıksal klasör altında görünecek ve daha düzenli bir yapı elde edeceksiniz.
main.c kaynak dosyası "Source Files" mantıksal dizini altına taşındıktan sonra...
main.c kaynak dosyası “Source Files” mantıksal dizini altına taşındıktan sonra. Burada fiziksel bir taşıma değil daha düzenli bir görünüm açısından mantıksal bir taşıma söz konusudur.

Hadi Kodlayalım

Bu yazı kapsamında geliştireceğimiz uygulama ile gömülü dünyaya merhaba anlamına gelen led yak söndür uygulaması yapacağız. Bunu aşağıdaki sıralı adımlar yoluyla gerçekleştireceğiz:

  • Öncelikle <xc.h> dosyasını, eğer yoksa, kaynak dosyamızın tepesine #include <xc.h> yazarak kaynak dosyamıza dahil ediyoruz.
  • #pragma config direktifini kullanarak konfigürasyon bitlerini ayarlıyoruz. Bunu ayrı bir “config.h” dosyasında ayarlamak daha makul bir tercih olacaktır.
  • I/O portlarının veri yönlendirme registerlarını (TRISx veya DDRx registerları) ayarlıyoruz (Portlar giriş mi olacak çıkış mı).

Konfigürasyon Bitlerini Nasıl Ayarlayacağız?

Konfigürasyon bitlerini kendimiz tek tek #pragma config direktifleriyle ayarlayacağımız gibi (zahmetli bir yoldur), MPLAB IDE’nin nimetlerini de kullanabiliriz. Ben bu yolu tercih edeceğim.

Konfigürasyon Bitlerini ayarlamak için MPLAB IDE’si içinde bulunan “Configuration Bits” aracı kullanılır. Konfigürasyon Bitleri aracını açmak için MPLAB IDE’nin “Window” menüsü altında bulunan “PIC Memory Views” alt menüsü altındaki “Configuration Bits” menü seçeneği seçilir.

Konfigürasyon Bitleri Menüsü
Konfigürasyon Bitleri ayar ekranını açmayı sağlayan menü seçeneği

Kod editörünün hemen altında üzerinde çalıştığımız mikrodenetleyicinin konfigürasyon bitlerinin tamamının bulunduğu bir araç penceresi açılacaktır. Bu bizim Konfigürasyon Bitleri aracımızdır.

Konfigürasyon Bitleri Aracı
Konfigürasyon Bitlerini ayarlamak için kullanılan araç.

Bu araçtaki konfigürsayon bitleri listesiden uygun tercihleri yaptıktan sonra “Generate Source Code to Output” butonuna tıklayarak konfigürasyon bitlerinin ayarlandığı kaynak kodun oluşturulmasını sağlayalım.

Konfigürasyon Bitleri Kaynak Kodları
Konfigürasyon Bitleri Aracı ile oluşturulmuş olan konfigürasyon kaynak kodları. Görüldüğü üzere tamamen #pragma config direktiflerinden oluşmakta.

Artık geriye araç oluşturulan bu kaynak kodları kopyalayıp oluşturacağımız “config.h” kaynak dosyası içine yapıştırmak kaldı. Kaynak dosyası oluşturma mevzusunu yukarıda anlatıldığı şekilde uyguluyoruz ancak bu sefer dosya türü kategorisi (Categories) listesinden “C”yi ve dosya tipi (File Types) listesinden “C Header File” seçiyoruz ve dosya ismi (File Name) olarak “config.h” veriyoruz. Aşağıdaki resimde bu şekilde oluşturmuş olduğum “config.h” dosyasının ekran görüntüsü görülmekte.

Oluşturulan config.h Dosyası
Oluşturulan config.h Dosyası

Tabi bir de bu “config.h” dosyasını “main.c” dosyamıza dahil etmemiz gerekiyor. Bunun için de “main.h” dosyamızın tepesine (#include <xc.h> bildiriminin altına) #include “config.h” yazalım. 

Ve artık kodlarımızı yazmaya hazırız.

PIC18 Giriş/Çıkış Ayarları

Mikrodenetleyicilerin giriş/çıkış pinleri bu pinlerle ilişkili registerler vasıtasıyla kontrol edilir. PIC mikrodenetleyicilerinin pinlerini kontrol etmek için de 3 register kullanılmaktadır. Bunlar:

  • TRISx – Bu register ile bir pinin Giriş mi Çıkış mı olduğunu belirtiyoruz.
  • LATx – Her pine ait tampon registeridir.
  • PORTx – Bir pinin değerini high (+5v) veya low (0v) yapmak için kullanılır.

(Burada x: A, B, C, … portlarını göstermektedir)

LAT registeri hakkında biraz açıklama yapmak yerinde olacaktır. Bir PIC mikrodenetleyicisini LAT registerini kullanmadan da programlayabilirsiniz ancak en azından bu registerin ne işe yaradığını bilmek meydana gelebilecek sorunlara ya da alternatif çözümlere ışık tutması açısından faydalı olacaktır. Eğer LAT registerinin içerisine bir değer yazarsanız bu değeri doğrudan pine yazmış olursunuz ancak eğer bir pini LAT registerinden okursanız okuyacağınız değer pindeki gerilim değil registerin içindeki tampon değer olacaktır. Bu yüzden bu registeri kullanırken dikkatli olmanız gerekir. LAT registerinin aksine PORT registeri bitlerine yazılan değer doğrudan ilgili pinlere gerilim olarak verilir ve pinlerdeki gerilim değeri doğrudan PORT registerinden bit değeri olarak okunur. Bu konuda daha detaylı bilgi için PIC18F2550 datasheetine bakabilirsiniz.

TRIS Bitlerini ayarlamak için;

  • 1 = Input (Giriş, 1’i Input’ın I’sına benzetebiliriz): TRIS Registeri içinde ilgili biti 1 yaptığımızda PORT registerinde bu bite karşılık gelen pin “giriş” olur.
  • 0 = Output (Çıkış, 0’ı Output’un O’suna benzetebiliriz): TRIS Registeri içinde ilgili biti 0 yaptığımızda PORT registerinde bu bite karşılık gelen pin “çıkış” olur.

Port pinlerinin yönlerini 3 farklı yöntemle ayarlayabiliriz. Birincisi TRIS yazmacına doğrudan yazarak, ikincisi maskeleme yaparak, üçüncüsü de bitlere doğrudan erişerek. Şimdi bunların nasıl yapıldığını örneklerle görelim:

1. Yöntem:TRIS Yazmacına Doğrudan Yazarak

Açıkçası bu yöntem çok tavsiye edilen ve tercih edilen bir yöntem değil ancak bazı durumlarda gerekli olabileceğinden üzerinden geçelim. Bu yöntemde ilgili TRIS yazmacına yazılan değer tüm bitleri değiştiğinden dikkatli olmak gerekir. Örneğin siz sadece ilk 3 biti değiştirmek istersiniz ancak yaptığınız işlem diğer 5 biti de değiştirir.

// B Portunun tüm pinlerini çıkış (LOW) yapalım
TRISB = 0x00;
// veya
TRISB = 0b00000000;

// B Portunun tüm pinlerini giriş (HIGH) yapalım
TRISB = 0xFF;
// veya
TRISB = 0b11111111;

// B Portunun düşük sıralı 3 bitini çıkış (LOW) yapalım
TRISB = 0xF8;
// veya
TRISB = 0b11111000;

// B Portunun 1. ve 3. pinlerini giriş diğer tüm pinleri çıkış yapalım
TRISB = 0b00001010;
// veya 
TRISB = 0x0A;

Görüleceği üzere bu yöntemde TRIS yazmacına yapılan tüm atamalarda yazmacın tüm bitleri etkilenmektedir. Dolayısıyla dikkatli olunması gereken bir yöntemdir.

2. Yöntem: Maskeleme Metodu

Bu yöntem gömülü yazılım geliştirirken tercih edilen bir yöntemdir. Bir yazmaç içindeki belirli bitleri, diğer bitleri etkilemeden, değiştirmenin kolay bir yolu olarak kabul edilir. Bit maskeleme konusu ile ilgili detaylı bilgi için ilgili yazımı okuyabilirsiniz.

// B portunun diğer pinlerinin durumunu korurken, düşük sıralı (ilk üç) pinini çıkış yapar.
TRISB &= (0b11111000);
// B portunun diğer pinlerinin durumunu korurken, düşük sıralı (ilk üç) pinini giriş yapar.
TRISB |= (0b00000111);

3. Yöntem: Öntanımlı Bit Alanlarını Kullanarak

Bu yöntem en kolay ve en güvenli olanıdır. Ancak, yalnızca PIC mikrodenetleyicilerde kullanılan ve diğer mikrodenetleyicilerde yaygın olmayan bir uygulamadır. XC8’i kullandığımız sürece, bu ön tanımlı yapıları kullanmak geliştirme, hata ayıklama, taşınabilirlik, okunabilirlik vb. hemen hemen her konuda epey kolaylık sağlayacaktır.

// B Portunun 0, 1. ve 2. pinlerini çıkış yapalım.
TRISBbits.TRISB0 = 0;
TRISBbits.TRISB1 = 0;
TRISBbits.TRISB2 = 0;
// veya şu şekilde de kullanılabilir
TRISB0 = 0;
TRISB1 = 0;
TRISB2 = 0;

PORT Bitlerinin değerini değiştirmek için;

  • 1 = İlgili pini High (+5v) yapar.
  • 0 = İlgili pini Low (0v) yapar.

Evet. Hızlı bir şekilde ayarları yaptıktan sonra biraz da kodlama yapalım.

#include <xc.h>
#include "config.h"

void main(void) {
 TRISBbits.RB0 = 0;
 while(1) //burada sonsuz dongu basliyor
 {
  PORTBbits.RB0 = 1; //PORTB'nin RB0 Pinini high yap
  PORTBbits.RB0 = 0; //PORTB'nin RB0 Pinini low yap
 }
}

Program çok hızlı çalıştı ve hiçbir fark göremediniz değil mi? Çünkü burada her komut arasında, 4 Mhz’lik (4000000 Hz) bir kristal ile bile, bir komut saykılı için geçen süre kabaca T=1/4000000 yani T=25us olmakta (Bu değerin en kaba hali yani yaklaşık 1ms’de bile fark edilmeyecektir). Bu da haliyle pinin durumları arasındaki farkı gözümüzün algılayamaması anlamına geliyor.

Peki ne yapmalı? Eğer pinin durumları arasındaki farkı görmek isterseniz durumlar arasına biraz gecikme eklemeniz gerekiyor. Bunun için aşağıdaki örneği inceleyelim.

#define _XTAL_FREQ 8000000 //delay mettotlarini kullanabilmek için gerekli (zorunlu)

#include <xc.h>
#include "config.h"

int i = 0;
void Delay1Second(void);

void main(void) {

 TRISBbits.RB0 = 0;

 while(1) //sonsuz
 {
  PORTBbits.RB0 = 1; //RBO pinini = high
  Delay1Second();    //1sn Bekle
  PORTBbits.RB0 = 0; //RB0 pinini = low
  Delay1Second();    //1sn Bekle
 }
}

void Delay1Second()
{
 for(i=0;i<100;i++)  //1 sn gecikme icin. 100x10ms = 1000ms = 1sn
 __delay_ms(10);
}

8 Yorum

  1. Suat ASLAN Suat ASLAN

    Pylaşımınız için çok teşekkür ederim çok işime yaradı

    • rica ederim ben teşekkür ederim ziyaretiniz için. yeni makaleler için lütfen blogumu ziyaret ediniz.

  2. BURAK BAYIR BURAK BAYIR

    HARUN BEY XC8 DE YENİYİM. PIC16F877A İÇİN PORTA DİJİTAL VE ANALOG KULLANIMINI NASIL YAPIYORUZ. YARDIM EDERMİSİNİZ. TEŞŞEKKÜRLER.

    • yakın zamanda bu sorunuza cevap olacak geniş bir yazı yazacağım. takipte kalın..

  3. BURAK BAYIR BURAK BAYIR

    BİRDE XC8 DERLEYİCİSİNİN LİSANS GEREKTİRMEYEN EĞİTİM VERSİYONUNUN KISITLAMALARI NELERDİR. ÖRNEĞİN HEX KODU BÜYÜKLÜĞÜNÜMÜ KISITLIYOLAR TAM OLARAK NEDİR. YOKSA GÜVENEREK ZAMAN AYIRABİLİRMİYİZ HER HANGİ BİR KISITLAMA YOKMU BİLGİNİZ VARSA YARDIMCI OLURSANIZ SEVİNİRİM. TEŞEKKÜRLER.

    • xc8 derleyicilerinin ücretsiz sürümlerinde hex kodu büyüklüğünden ziyade kod optimizasyon kısıtı mevcuttur. yani derleyici kodu derlerken optimize etmez dolayısıyla tam sürüm xc8 derleyicide tam optimizasyonla derlediğinizde atıyorum 15-20 kb olacak kod boyutu, ücretsiz xc8 derleyici ile optimizasyonsuz derlediğinizde 30-40 kb’a kadar çıkacaktır. bu da haliyle mcu tercihinize yansıyacaktır. bu olay başıma tcpip stack kullanımı sırasında gelmişti ve çok can sıkıcı bir durum. xc8in ücretsiz sürümünün optimizasyon haricinde bir kısıtı yoktur hafıza boyutu ile ilgili bir sıkıntınız yoksa rahatlıkla kullanabilirsiniz. ayrıca tam optimizasyonu ücretsiz sürümde bir ay kadar kullanma imkanınız da var.

  4. Hüseyin Kaderoğlu Hüseyin Kaderoğlu

    Önce, elinize sağlık, demek isterim.
    Amatör manada elektronikle uğraşıyorum.
    Son zamanlarda “pic programlama” konusuna takıldım.
    XC8 dikkatimi çekti. Vereceğiniz bilgilerden azami ölçüde faydalanmayı düşünüyorum ve sizin yazılarınızı takip edeceğim. Faydalı olacağı kanaatindeyim. Bir “bilgi kırıntısına” bile ihtiyaç duyduğumuz bu günlerde, böyle bir bilgiye ulaşmak benim için ve bir çok insan için çok kıymetli olacak diye düşünüyorum. Elinize sağlık, kolay gelsin.

Harun Çetin için bir yanıt yazın Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir