13 Nisan 2021 Salı

Ccs compiler giriş ve çıkış fonksiyonları

 Bu yazımızda CCS-C derleyicisinin dahili giriş / çıkış fonksiyonlarını anlatacağız.

Bildiğiniz gibi PIC’ler giriş/çıkış (I/O) portlarına sahipler. Bu portların sayısı PIC modeline göre değişiklik göstermektedir. CCS-C’nin dahili fonksiyonlarını kullanarak bu portlara kolayca erişebilirsiniz. Şimdi sırasıyla bu fonksiyonların ne işe yaradıklarını tek tek anlatalım ve örnekler verelim.

set_tris_x()
get_tris_x()
input_x()
output_x()
input()
input_state()
output_bit()
output_high()
output_low()
output_toggle()
output_float()
output_drive()
port_x_pullups
#use_standart_io
#use_fixed_io
#use_fast_io

set_tris_x()
Bu fonksiyon istenilen PORT’a ait PIN’lerin giriş olarak mı yoksa çıkış olarak mı kullanılacağını belirtmek için kullanılır. Örneğin bir buton bağladığınız PIN giriş, bir led kullandığınız port ise çıkış olarak ayarlanmalıdır.
Örnek kullanım:
set_tris_a(0x01); // A0 input, geri kalan pinler output olarak ayarlanır. 0x01 binary = 0000 0001
Yukarıdaki örnekte de gördüğünüz gibi çıkış yapılacak pinler için “0” giriş yapılacak pinler için “1” değeri veriliyor
set_tris_c(0xf0); // C0,C1,C2,C3 çıkış C4,C5,C6,C7 giriş olsun. 0xf0 binary = 1111 0000

get_tris_x()
Bu fonksiyon ilgili porta ait TRIS ayarının okunmasını sağlar.
Örnek:
int x;
set_tris_a(0x05);
x = get_tris_a(); // x = 5 olur

input_x()
Bu fonksiyon PORT’ların değerini okumak için kullanılır. input_a() A PORT’unun değerini geri döndürür, input_b() B PORT’unun değerini döndürür vb.
Örnek:
B portunun 8 adet pinine bağlı 8'li bir dip-switch olduğunu düşünelim. Bu switch’lerin değerini tek seferde okumak içinint switch;
set_tris_b(0xff); // B portunun tüm pinleri giriş olacak
switch = input_b(); // B portunu oku değeri switch değişkenine aktar.

output_x()
Bu fonksiyon PORT’lara veri yazma imkanı verir.
Örnek:
output_a(0x05); // A PORT'una 0x05 hex değerini yaz;
output_d(216); // D PORT'una decimal 216 değerini yaz.
Bu fonksiyon herhangi bir porta ait bir PIN’in durumunu verir (1 veya 0).
Örnek:BOOLEAN b0_durumu;
if(intput(PIN_A0)) // Pin A0 “1” ise
if(input(PIN_C5) == 0) // Pin C5 “0” ise
B0_durumu = input(PIN_B0); // B0 1 ise b0_durumu = 1; 0 ise b0_durumu = 0 olur
input_state()
Bu fonksiyon tıpkı input() fonksiyonu gibidir, aradaki tek far input_state() fonksiyonunun o pine ait tris ayarlarına dokunmamasıdır.
output_bit()
Bu fonksiyon istenilen PIN’e istenilen değerin atanmasını sağlar.
Örnek:
output_bit(PIN_B0,1); // PIN B0 = 1
output_bit(PIN_D7,0); // PIN D7 = 0;
output_high()
Bu fonksiyon istenilen PIN’i High yani “1” yapmak için kullanılır
Örnek:
output_high(PIN_B0); // PIN B0 = 1
output_high(PIN_C7); // PIN C7 = 1
output_low()
Bu fonksiyon istenilen PIN’i Low yani “0” yapmak için kullanılır
Örnek:
output_low(PIN_B0); // PIN B0 = 0
output_low(PIN_C7); // PIN C7 = 0
output_toggle()
Bu fonksiyon parametre olarak verilen PIN’in durumunu toggle yapmak için kullanılır. PIN 1 ise 0, 0 ise 1 yapılır
Örnek:
output_high(PIN_E0); // E0 = 1
output_toggle(PIN_E0); // E0 = 0 olur çünkü önceki değeri 1 idi
output_float()
Bu fonksiyon verilen PIN için TRIS ayarını “1” yani giriş olarak ayarlar.output_float(PIN_B0); // PIN B0 girişe ayarlanıyor
i2c gibi beslemeye pull-up yapılmış haberleşme sistemlerinde kullanılır.
output_drive()
Bu fonksiyon ise parametre olarak verilen PIN’i çıkış moduna geçiriroutput_drive(PIN_C0); // PIN C0 çıkışa ayarlanıyor
port_x_pullups()
PIC Mikro denetleyicilerinin her modelinde olmasa da bazı modellerindeki bazı PORT’larda pull-up özelliği vardır, istenildiği takdirde komut ile bu pull-up direncleri devreye sokulabilir. İşte bu ayarı açıp kapatmak için bu fonksiyonu kullanabilirsiniz.port_b_pullups(TRUE); // portb pull-up dirençleri devrede.
port_b_pullups(FALSE); // portb pull-up dirençleri devrede.
Böylece CCS-C derleyicisinin temel giriş çıkış fonksiyonlarını öğrenmiş olduk. Konuyla alakalı olduğu için bir kaç önişlemci direktifini de bu yazımızda anlatacağız.

#use_standart_io
Bu direktif verildiğinide , yani kod içerisinde kullanıldığında, belirtilen PORT’a ait giriş çıkış işlemleri yapılırken her defasında PORT’un TRIS ayarlarıda yapılır. Program içerisinde set_tris_x() foksiyonunu kullanmanız gerekmez.
#use_standart_io(A) // A portunda otomatik TRIS ayarları kullanılacak
#use_standart_io(B) // B portunda otomatik tris ayarları kullanıacak
Bu direktif Derleyicinin fazla kod üretmesine neden olur.
#use_fixed_io
standart_io’nun biraz daha gelişmişi diyebiliriz. Pinlerin durumunu belirtirsiniz. Kod içerisinde TRIS ayarlaması yapmanıza gerek yoktur ve standart_io dan daha az kod üeretir.
#use fixed_io(a_outputs=PIN_A2, PIN_A3) // A2 ve A3 Çıkış
#use_fast_io
Bu direktif verildiğinde ise derleyici TRIS ayarlarına karışmaz, giriş çıkış komutlarında TRIS ayarlaması yapmayacağı için çok daha az kod üretir. Bu direktifi verdiğinizde set_tris_x() fonksiyonunu kullanarak TRIS ayarlamalarını sizin yapmanız gerekir.
#use_fast_io(A) // A portu giriş çıkış komutları TRIS ayarı üretmeyecek.

Hiç yorum yok:

Yorum Gönder

Her yorum bilgidir. Araştırmaya devam...