CCS-C ile PIC Programlama, Dahili Giriş Çıkış Komutları ile PIC Portlarının Kullanımı

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. Yazı sonundaki PIC16F877 ile yapılmış olan ISIS Projesi ve örnek kodlar konuyu daha iyi anlamanıza yardımcı olacaktır.

Yazı İçeriği

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
ISIS ile yapılmış örnek proje ve kodlar

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çin

int 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.

input()

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çirir

output_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

ISIS PROJESI VE ÖRNEK KODLAR

Aşağıda resmi görülen isis projesinde denetleyici olarak PIC16F877 kullanıldı. 8 adet led PIC’in D portunda, 8′li Dip Switch B Portunda ve E portunda da 2 adet buton mevcut.


ISIS ÇİZİMİ İÇİN TIKLAYIN

Örnek Proje 1 – 8 Adet dip switch ile 8 Led’i ayrı ayrı kontroletme

Önce uzun yoldan yapalım

#include <16f877.h>   // 16f877 denetleyicisini kullanacağız
#use delay(clock=4000000)  // kristalimiz 4 mhz (delay fonksiyonu için)
#fuses XT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG // fuse ayarları

void main(void)
{
while(1)    // sonsuz döngü
{
if(input(PIN_B0) == 0)   // PIN B0 = 0 ise, yani Dip switch ON pozisyonundaysa
output_high(PIN_D0);    // PIN D0 = 1 olsun (LED YANAR)
else
output_low(PIN_D0);    // dip switch OFF pozisyonundaysa D0'a bağlı led söner

if(input(PIN_B1) == 0)
output_high(PIN_D1);
else
output_low(PIN_D1);

if(input(PIN_B2) == 0)
output_high(PIN_D2);
else
output_low(PIN_D2);

if(input(PIN_B3) == 0)
output_high(PIN_D3);
else
output_low(PIN_D3);

if(input(PIN_B4) == 0)
output_high(PIN_D4);
else
output_low(PIN_D4);

if(input(PIN_B5) == 0)
output_high(PIN_D5);
else
output_low(PIN_D5);

if(input(PIN_B6) == 0)
output_high(PIN_D6);
else
output_low(PIN_D6);

if(input(PIN_B7) == 0)
output_high(PIN_D7);
else
output_low(PIN_D7);

}
}

Aynı işi yapan daha kısa kod

#include <16f877.h>
#use delay(clock=4000000)
#fuses XT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG

void main(void)
{
while(1)
{
output_bit(PIN_D0,!input(PIN_B0));  // PIN B0 dan okunan değerin değilini D0'a aktar
output_bit(PIN_D1,!input(PIN_B1));
output_bit(PIN_D2,!input(PIN_B2));
output_bit(PIN_D3,!input(PIN_B3));
output_bit(PIN_D4,!input(PIN_B4));
output_bit(PIN_D5,!input(PIN_B5));
output_bit(PIN_D6,!input(PIN_B6));
output_bit(PIN_D7,!input(PIN_B7));
}
}

Aynı işi yapan çok daha kısa kod

#include <16f877.h>
#use delay(clock=4000000)
#fuses XT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG

void main(void)
{
while(1)
{
output_d(~input_b()); // sitchlerin değerini oku ve değilini Ledlere aktar
}
}

Örnek Proje 2 – 8 Adet ledli yürüyen ışık

Uzun Yol

#include <16f877.h>
#use delay(clock=4000000)
#fuses XT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG

void main(void)
{
output_d(0);
while(1)
{
output_low(PIN_D7);    // d7 deki led sönsün
output_high(PIN_D0); //  d0 daki led yansın
delay_ms(250);     // 250 ms beklesin program

output_low(PIN_D0);   // d0 daki led sönsün
output_high(PIN_D1); // d1 deki yansın
delay_ms(250);  // 250 ms beklesin program

output_low(PIN_D1);
output_high(PIN_D2);
delay_ms(250);

output_low(PIN_D2);
output_high(PIN_D3);
delay_ms(250);

output_low(PIN_D3);
output_high(PIN_D4);
delay_ms(250);

output_low(PIN_D4);
output_high(PIN_D5);
delay_ms(250);

output_low(PIN_D5);
output_high(PIN_D6);
delay_ms(250);

output_low(PIN_D6);
output_high(PIN_D7);
delay_ms(250);

}
}

Daha kısa yöntem

#include <16f877.h>
#use delay(clock=4000000)
#fuses XT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG

void main(void)
{
output_d(0);
while(1)
{

//bu kodda sekiz adet ön tnaımlı veri sırayla porta yazdırılarak
//ürüyen ışık oluşturuluyor
output_d(0x01);  // sadece 1. led yansın
delay_ms(250);

output_d(0x02); // sadece 2. led yansın
delay_ms(250);

output_d(0x04);  // sadece 3. led yansın
delay_ms(250);

output_d(0x08);
delay_ms(250);

output_d(0x10);
delay_ms(250);

output_d(0x20);
delay_ms(250);

output_d(0x40);
delay_ms(250);

output_d(0x80);
delay_ms(250);

}
}

Örnek Proje 3 – Switch’lerle Led kontrolü.

Devrede bulunan 2 adet switch’den birine basıldığında Led’lerin tamamını yakalım, diğerine basıldığında söndürelim.

#include <16f877.h>
#use delay(clock=4000000)
#fuses XT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG

#define ANAHTAR1 PIN_E0 // Derleyici ANAHTAR1 gördüğü yerlere PIN_E0 yerleştirir
#define ANAHTAR2 PIN_E1 // Derleyici ANAHTAR2 gördüğü yerlere PIN_E1 yerleştirir

void main(void)
{

while(1)
{
if(input(ANAHTAR1) == 0)  // anahtar1 basıldıysa
{
output_d(0xff);  // ledleri yak
}
if(input(ANAHTAR2) == 0)  // anahtar 2 basıldıysa
{
output_d(0x00);  // ledleri söndür
}

}
}

Örnek Proje 4 – Ledleri 0-255 arası saydıralım

#include <16f877.h>
#use delay(clock=4000000)
#fuses XT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG

void main(void)
{
int i;
while(1)
{

for(i=0;i<255;++i)
{
output_d(i);
delay_ms(100);
}
}
}

Çok daha creative örnekler vermek isterdim ama uzun bir mesai günü sonunda yazılan yazıdan ne hayır beklenir :) Artık siz hayal gücünüzü konuşturup kendi alıştırmalarınızı kendiniz yaparsınız.

Bir sonraki yazımızda görüşmek üzere herkese iyi hafta sonları diliyorum.

CCS-C ile PIC Programlama, Dahili Giriş Çıkış Komutları ile PIC Portlarının Kullanımı yazısı için 38 yorum yapıldı

  1. FxDev says:

    Uzun programları görünce ne oluyor demiştim =)
    Merak ettiğim ve anlamadığım bir konu olan kesemelere(interrupt) bir an önce geçmeni bekliyorum =/
    Gerçekten nedir ne işe yararlar ne okusam anlamadım =/

    Bir de bir sorum olucak;

    #fuses XT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG

    bunu kullanmamızın mantığını çözemedim?

  2. Fatih Erdem says:

    Güzel içerik olmuş hocam, elinize sağlık.

  3. Alper says:

    Detaylı ve güzel bir anlatım olmuş.

    Tebrikler

  4. admin says:

    @FxDev
    Kesmeler konusunu sıra gelecek belirli bir düzene göre gitmeye çalışıyorum.
    #fuses kullanımını da ayrıntılı olarak anlatacağım bir sonraki yazımda. Kısaca bahsedelim biraz. #fuse ile çipin ayarlarını yapmış oluyoruz.
    NOWDT = WatchDog timer kullanma
    XT = 4 mhz den küçük harici kristal kullanacağım
    NOPROTECT = Çipte kod koruması yok kod okunabilir
    daha detaylı olarak anlatacağım ama sonra :)

    Bu arada yürüyen ışık için yazdığın kod’ da çok güzel olmuş. Uzun yorumlar kara listeye alınıyor wordpress tarafından, spam olanları işaretlerken oda arada kaynadı yanlışlıkla. Birdaha yazarsan yayınlayalım burdan

    @Fatih Erdem,Alper
    Teşekürler..

  5. FxDev says:

    Hocam kodu yazdıktan sonra daha ilginç bir fikir çıktı aklımdan ve o kod

    http://rapidshare.com/files/130911946/CCS_C.rar.html

    üstteki linkteki olaya dönüştü =)
    Aslında oradan da sorularım var size, zamanı geldiğinde sorarım artık…
    Bu arada sıradaki konular neler?

  6. adventurer_gazi says:

    hocam paylaşım için teşekkürler, güzel br kaynak olmuş yeni başlayanlar için, emeğinize sağlık. teşekkürler. devamını bekliyoruz inşallah.

  7. adventurer_gazi says:

    hocam vir sorum olacak programların genelinde
    while(1) döngüsünü tanımlamışsıız. hep (1 ) tanımlamak zorundamıyız. o işin espirisini anlamadım da yardımcı olursanız sevinirim.

  8. admin says:

    @fxdev
    İyi gidiyorsun :) sıradaki konu bit/byte işlemleri için kullanılan dahili fonksitonlar + birkaç noktaya değineceğim.

    @adventurer_gazi
    while(1) {

    kodlar..
    ..

    }

    while ifadesinde parantez içerisindeki koşul doğru olduğu sürece { } içerisindeki kodlar çalıştırılır.

    while(1) şartı sürekli doğru olacağından sonsuz döngü oluşturmuş oluruz. Sonsuz döngü oluşturulumazsa çip main() {
    }
    fonksiyonunu işletip stop eder.

    CCS-C de cihaz dosyalarında
    #define TRUE 1
    #define FALSE 0
    tanımlamaları mevcut olduğu için. while(1) ve while(TRUE) aynıdır.

  9. FxDev says:

    @adventurer_gazi

    hocam ben genelde for’u daha çok sevdiğimden aynı işlemi

    for(;;)
    {

    kodlar

    }

    şeklinde de yapabilirsiniz…

  10. main()
    {
    dongu:
    kodlar()


    ..
    goto dongu;
    }
    Şeklindede yapılabilir ama. goto kullanımı pek hoş durmaz :)

  11. selahattin says:

    hocam hazır konu burdayken eğer 12 bit dijital data girdimiz olacaksa pic16f877 e nasıl yaparız ?
    yani heryerde örnekler 8 bit yani port taki maksimum i/o lar kadar veriliyor…tek seferde 12 bitlik bir data okumak istersek nasıl bir kod yazmamız gerekiyor acaba ?

  12. selahattin says:

    mesela port B nin tum pinlerini vede port A nın 4 pinini giriş olarak ayarla ve bunları tek decimal sayı olarak oku port D nin pinlerinden Lcd de göter gibi

    nasıl ifade ederiz ? Yardımcı olursanız çok makbule geçecek hiçbir yerde bulamadım .

  13. @selahattin
    12 bit datayı şöyle okuyabilirsin. Düşük öncelikli ilk sekiz bit B portunda, yüksek öncelikli 4 bit te C0…C4 Pinlerine bağlı. Bu durumda 12 bitlik bir değeri CCS-C de şöyle okuyabilirsin.

    int16 onikibit_deger;
    onikibit_deger = make16((input_c() & 0x0f), input_b());

    12 bit değer tanımlaması yapılamayacağından 16 bitlik değişkeninde 12 bit’in olmuş olur. make16() fonksiyonun açıklaması birazdan siteye ekleyeceğim yazıda mevcut.

    şöylede yapabilirsin

    int b,c;
    long deger;

    b = input_b();
    c = input_c() & 0x0f // ilk dört bit dışındakiler sıfırlanıyor
    deger = deger << 8;
    deger = deger & b;

    olmadı şöylede yaparsın
    struct oniki {

    int ilksekiz;
    int sondort: 4;
    };

    struct oniki veri;
    veri.ilksekiz = input_b();
    veri.sondort = input_c() & 0xf0

    Kolay Gelsin

  14. [...] CCS-C Dersleri Dahili Giriş Çıkış Komutları ile PIC Portlarının Kullanımı [...]

  15. selahattin says:

    Hocam sağolasın cok makbule gecti.tesekkurler :)

  16. Hasan Erdem Yantır says:

    Teşekkürler, çok sağolun.Yorumlar arasında da güzel şeyler yazılmış.Bu kadar kolay olacağını sanmıyordun PIC öğreniminin.

  17. Musa says:

    Gercekten cok makbule gecti. Emeğiniz için çok çok teşekkürler… Aradığım bilgileri edinmiş oldum. İyi çalışmalar…

  18. teknikim.com says:

    CCS-C Dersleri Dahili Giriş Çıkış Komutları ile PIC Portlarının Kullanımı…

    CCS C’de yer alan dahili giriş çıkış komutları ile pic portlarının nasıl kullanılacağı yazıda yer almakta. Portları giriş çıkış olarak ayarlamakta, bir porttan veri okumakta veya bir porta veri çıkışı vermekte kullanılan komut…

  19. Hüseyin DEMİRBİLEK says:

    Merhabalar 16F84A ile step motor surucusu yapmaya çalışıyorum herhangi bir pinden puls girişi oldugu surece PORTB’den normal adım bilgileri aksın puls girişi durdugu zaman da PORTB sıfır (0×00) olsun istiyorum bir çok deneme yapmama ragmen olmadı yardımcı olursanız memnum kalacagım teşekkurler

  20. Emrah AYDIN says:

    @hüseyin
    Pin A0′ bağlı bir buton olduğunu düşünürsek.
    if(!input(PIN_A0)) {
    motor surme kodları

    }
    else {
    output_b(0×00)
    }

    mantık bu şekilde olmalı.
    buton kullanımı ile ilgili şu yazıya da bir göz at istersen
    http://www.teknobakis.com/2008/09/24/ccs-c-dersleri-portlar-led-buton-ve-role-kullanimi/

  21. Hüseyin says:

    İyi geceler hocam yardımınız için teşekkurler şu an gecenin 04:00′ı işteyim
    önerdiginiz yöntemi mesaim bitince evde deneyecegim teşekkurler

  22. Tarık ACAR says:

    Hocam bitirme projemiz için 16f877 ile buzzer takip eden robot yapıyoruz 4mikrofon ve 4motor kullanıyoruz. 16f877 yi A/D converter olduğu için seçtik. Kafamızdaki algoritma kabaca şöyle; 4 pre-amfi kullanarak ses sinyalini picin analog girişlerine bağlıyoruz(A portu) ve picin A/D converterını kullanarak sayısal değerler elde etmek istiyoruz (mic1=***) sonra “if” kullanarak mic değerlerini kıyaslayıp (mic1,mic2,mic3,mic4). İstediğimiz pinlere output low ve high değerlerini gönderip motor kontrol devresiyel motorları 2 motor farklı 2 motor aynı yönde dönmek üzere arabanın buzzer dan çıkan sesi takip etmesini sağlamak istiyoruz. Bu şekilde devreyi orcad de çizdik, koduda yazmayı başladık ancak input tanımlarken “a” portunun ayrı ayrı her pinine deişken nasıl tanımlayabiliriz. Ve digital değere dönüşmüş datayı ayrı ayrı portlardan nasıl alabiliriz…

  23. hasan says:

    merhaba, bir sorum olacak
    while(1){
    output_d(1);
    delay_ms(250);
    output_d(2);
    delay_ms(250);…… kodu böyle yazınca çalısıyor ama
    bunu yazınca n=0;
    while(1){
    a=2^n;
    output_d(a);
    delay_ms(250);
    n++;
    } hata oluşuyor, nedenini söyleyebilir misiniz?

  24. Emrah AYDIN says:

    @hasan
    a=2^n demek a = 2 exor n manasına gelir, yanş “^” işareti bit düzeyinde exor (Exculisive Or – Özel veya) işlemi gerçekleştirir.

  25. hasan says:

    tmm teşekkürler, hatamı anladım :) ben onu üssü olarak biliyordum. Sorunu da i=i*2 olarak cözdüm.

  26. mejnun says:

    hocam saygılar bir sorum olacak asm ile yazmış oldugumuz programları scc c cevire bilirmiyiz bilgilendirirseniz sevinirim

  27. Emrah AYDIN says:

    Merhaba mejnun
    bildiğim kadarıyla öyle bir program yok, varsada pek verimli çalışacağını sanmıyorum. En iyisi bundan sonrakileri C ile yaz.. her ne kadar asm bilgisi gerekliysede bu işlerde en çok kullanılan C ‘dir

  28. [...] simule etmek için bir önceki yazımızda verdiğimiz proteus projesini [...]

  29. kadir says:

    Merhaba hocam 8 Adet ledli yürüyen ışık
    devresini uzun kodlu bölümünde neden ilk başka d7 deki ledi söndürdük ?

  30. Emrah AYDIN says:

    @kadir
    while döngüsünün en sonunda d7 yi yaktığımızı göreceksin, daha sonra 250ms gecikme var ve bundan sonra d7 söndürülmeli o yüzden while’in en başında o kod var. En alttaki 250ms gecikme süresinden sonra da d7′deki ledi söndürebilirdik ikisi de aynı kapıya çıkar.

  31. caner can says:

    arkadaslar #use standard_io(port) olacak t ile değil..#use_standart_io

  32. Ethem says:

    Merhaba,
    Yürüyen ışıkta şu programı kullanabilirmiyim.

    void main(void)
    {
    int x=1;
    while(1)
    {output_d(x)
    x=x*2
    }

  33. olric says:

    yardımcı olursanız cok sevinirim..

    kullanabilecegim random komutu tarzı bi komut var mı
    rastgele sayı üretebilecegim?

  34. olric says:

    tamam komutu buldum k.bakmayın

  35. Murat Erhan says:

    İyi akşamlar ben şunu soracaktım pice ben aynı anda veri girdirdiğimde bunu nasıl algılayağını bir türlü bulamadım input(0×03); dediğimde set_tris_a(0xff); de pin_a0 ve pin_a1′in
    if(input(0×03)){ /*doğrulayıp buraya girmesi lazım*/ }; bunu ben picde nasıl yapa bilirim? bir yardımcı olursanız çok sevinirim. Yani özün sözü aynı andaki veri girişini alglıyabilmesini istemekteyim :)

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>