Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PIC Programlama ve CCS-C

Onur K.
January 03, 2009

PIC Programlama ve CCS-C

PIC programlamaya C dili ile giriş yapan ve IDE olarakda CCS-C'yi anlatan bir sunum.

Onur K.

January 03, 2009
Tweet

More Decks by Onur K.

Other Decks in Programming

Transcript

  1. Mikrodenetleyicileri Tanıyalım • PIC mikrodenetleyicileri Micro Chip firması tarafından üretildi.

    PIC Programmable Interface Controller Programmable Intelligent Computer
  2. Neden Tercih Edilir ? • Uygun fiyat • Düşük güç

    gereksinimi • Kolay bulunma • Ücretli yada ücretsiz bir çok geliştirme yazılımına sahip • Yaygın kullanım • Bir çok örnek uygulama ve doküman
  3. Mikrodenetleyicilerin Genel Özellikleri • Aynı anda işlenebilecek bit veri sayısına

    göre PICler: 32-bit PIC ailesi 32MX340 32MX440 32MX460 16-Bit PIC ailesi PIC24F PIC24N dsPIC30F dsPIC33F 8-Bit PIC ailesi PIC10 PIC12 PIC14 PIC16 PIC18 rfPIC
  4. Mikrodenetleyicilerin Genel Özellikleri • RISC (Reduced Instruction Set Computer) –

    Komut seti indirgenmiş işlemci mimarisi • MIPS (Mega Instruction Per Second) – Bir işlemcinin 1 saniyede işlediği komut sayısını milyon cinsinden gösteren birim. • 1 MIPS = 1 milyon komut/saniye • 8-bit işlemci ailesinden olan 16F serisi 5 MIPS’lik işlem kapasitesine sahiptir. Yine 8-bitlik 18F serisi ise 10 MIPS’lik işlem kapasitesindedir.
  5. Mikrodenetleyicilerin Genel Özellikleri • RAM (Random Access Memory) – Okunup

    yazılabilen bellek türü • ROM (Read Only Memory) – Sadece okunabilen bellek türü • EEPROM (Electrically Erasable Programmable Read Only Memory) – Elektriksel olarak silinebilen programlanabilir ROM
  6. Mikrodenetleyicilerin Genel Özellikleri • PIC ailelerin kodlanmasında kullanılan bazı harflerin

    anlamları: Flash Denetleyici •Defalarca programlanabilir F OTP (One Time Programmable) •Bir kez programlanabilir C Low Voltage •Düşük voltajlarda da çalışabilir L
  7. Mikrodenetleyici Bileşenleri • Program hafızası – Yazılan programların yüklendiği bölümdür.

    – Kapasitesi 0.5 Kbyte – 256 Kbyte aralığındadır. • RAM – Geçici değişkenlerin saklandığı bölümdür. – Besleme kesildiğinde silinir. – Kapasitesi 16 byte – 32 byte aralığındadır.
  8. Mikrodenetleyici Bileşenleri • EEPROM – Besleme kesilsede verileri saklar. –

    PIC programlanırken yada PIC kodu yardımıyla veri yazılabilir. – Tüm modellerde bulunmaya bilir. – Kapasitesi en fazla 4096 Kbyte’dır.
  9. Mikrodenetleyici Bileşenleri • Portlar – 8 bacaklı PIC’lerde GPIO[i], diğer

    PIC’lerde ise PORTA[i], PORTB[i] şeklinde adlandırılan, donanımlardan bilgi girişi yada donanımlara bilgi çıkışı sağlarlar. (i = 1,2 ...) • CCP (Capture Compare PWM) – PWM sinyalini oluşturmak, karşılaştırmak veya ölçmek amaçıyla kullanılan port türüdür.
  10. Mikrodenetleyici Bileşenleri • ADC (Analog Digital Converter) – Analog voltaj

    sinyalini PIC türünün hassasiyeti oranında (8 bit, 10 bit gibi) dijital değerlere çeviren port türüdür. • 10 bit’lik ADC en fazla 210 = 1024 değer ile bir analog sinyali örnekleyebilir, bu özelliğine ADC’nin çözünürlüğü denir. • Karşılaştırıcı – İki analog voltaj sinyalini karşılaştırıp durumlarına göre çıkış elde edilmek üzere kullanılan port türüdür.
  11. Mikrodenetleyici Bileşenleri • SPI (Serial Peripheral Interface) – Seri donanım

    arabirimi az sayıda port ile sağlanan bir seri iletişim modülüdür. • Verilen 8 bit uzunluğunda senkronize olarak alınır ve gönderilir. Bazı PIC’ler tarafından desteklenir. • I2C (Inter Integrated Circuit) – Veri alma ve gönderme hızının önemli olmadığı, – Kullanılacak port sayısının önemli olduğu durumlarda kullanılan seri haberleşme protokolüdür.
  12. Mikrodenetleyici Bileşenleri • CAN (Controller Area Network) – Ana bilgisayara

    gereksinimi olmadan PIC ve diğer donanımlar arasında haberleşmeyi sağlar. – Özellikle otomotiv uygulamaları için geliştirilmiştir. • USART (Universal Synchoronous Asynchoronous Receiver-Transmitter) – Verileri paralel ya da seri biçimde aktarmak için kullanılan modüldür.
  13. Mikrodenetleyici Bileşenleri • Zamanlayıcılar – Ayarlandıklarında belirli değerler arasında sayar

    ve bitiminde başa döner – En fazla değerlerinde kesme oluşturabilirler. • Timer0 → 8 bit; 28 = 256; [0,255] • Timer1 → 16 bit; 216 = 65536; [0,65535] • Watch Dog Timer – PIC programının istenmeyen bir şekilde kilitlenmesini durumunda programı sıfırlamak üzere kullanılır.
  14. Mikrodenetleyici Bileşenleri • Kesmeler – Donanım kaynaklı sinyaller sonuçunda normal

    çalışan programı durdurup ilgili kesme fonksiyonunun çalıştırmasıdır. – Öncelikli fonksiyonlardır. – PIC modeline göre kesme türleri ve sayısı değişiklik gösterir.
  15. Mikrodenetleyici Bileşenleri • Konfigürasyon bitleri – PIC’in donanımsal ve yazılımsal

    olarak başlangıç ayarlarını bildiren bilgileri içerir. – 14 bitlik bu bilgi PIC programlanırken yada PIC programı içerisinden tanımlanabilir.
  16. Mikrodenetleyici Bileşenleri • Osilatör – PIC programını işlemek için ihtiyaç

    duyulan sinyaldir. Bu sinyale clock (saat) sinyali denir. – Saat sinyalini osilatör portlarına kurulan devre üzerinden alır. Osilatör Tipleri LP (Low Power) •Düşük güçlü kristal osilatör XT (Crystal) •Kristal osilatör HS (High Speed) •Yüksek hızlı kristal osilatör RC (Resistor- Capacitor) •Direnç-Kondansatör osilatör
  17. Mikrodenetleyiciler için Yazılımlar Ücretsiz Devre tasarım ve simülasyon KTechLab GPSIM

    PIC Derleyici SDCC PIC16 ve PIC18 ailesi için C derleyici JAL PIC için Pascal benzeri derleyicisi Ücretli Devre tasarım ve simülasyon Proteus MultiSim PIC Derleyici CCS-C MPLAB
  18. CCS-C Derleyicisini Tanıyalım • Custom Computer Services firmasının ürünüdür. •

    Standart C dili özelliklerini, CCS-C tarafından hazırlanmış dahili kütüphaneleri ve hazır kodları içerir. IDE (Integrated Development Environment) Program yazma Derleme Hata ayıklama
  19. CCS-C Derleyicisini Tanıyalım • Derleyici yaklaşık olarak 325 adet PIC

    ürününü desteklemektedir. – www.ccsinfo.com/devices.php?page=devices • Farklı OPCODE uzunluğundaki işlemler için farklı derleyiciler bulunur. – OPeration CODE; gerçekleştirilecek işlemleri belirten makine dili komut parçalarıdır.
  20. CCS-C Derleyicisini Tanıyalım CCS-C Derleyicisi PCB: 12 bit opcode, Baseline

    PCM: 14 bit opcode, Midrange PCH: 16 bit opcode (PIC18 ailesi) PCD: 16 bit opcode (PIC24 ve dsPIC ailesi)
  21. Temel C Programlama Dil Bilgisi #include <stdio.h> main() { printf(“Merhaba

    Dünya !”); } Bir direktif komutu, başlık bilgisi eklenmiştir. Programlarının ana fonksiyonudur. Program buradan başlar.
  22. Temel C Programlama Dil Bilgisi • Fonksiyon başlangıç, direktif satır

    sonları ve kontrol yapıları haricinde her satır sonu “;” ile bitirilmelidir. • Program içinde “//” ile başlayan yazılar ve “/* */” karakterleri arasında yazılan her şey derleyici tarafından açıklama olarak algılanır.
  23. Temel C Programlama Dil Bilgisi • Değişkenlere isim verirken dikkat

    edilmelidir; – int değişken; // yanlış kullanım – int degisken; – int 0degisken; // yanlış kullanım – int degisken0; • Değişken isimlerinde Türkçe karakter bulunmamalıdır. • Harf yada “_” ile başlamalıdır.
  24. Temel C Programlama Dil Bilgisi • Değişken isimleri arasında boşluk

    bırakılmamalıdır. • C dilinin anahtar kelimeleri; if, while, else, for değiştirilerek kullanılabilir. Örneğin if1, _for • CCS-C derleyicisi ön tanımlı olarak büyük küçük harf ayrımında bulunmaz.
  25. Temel C Programlama Dil Bilgisi • C dilinde işlem önceliği;

    • Önceliği aynı olan işlemlerde, soldaki işlem uygulanır. – int sonuc = a+b/c*d; // b, c’ye bölünür, d ile çarpılıp a ile toplanır. Parantez içerisi Çarpma Bölme Toplama Çıkarma
  26. Temel C Programlama Dil Bilgisi • İşaretli değişken tipleri “signed”

    ile tanımlanır. – signed int x = -7; Alabileceği Değerler Veri tipi Uzunluk İşaretli İşaretsiz int1 boolean 1 bit 1 veya 0 int8 int 1 byte -128, ... , 127 0, ... , 255 int16 long 2 byte -32768, ... , 32767 0, ... , 65535 int32 4 byte -2147483648, ... , 2147483647 0, ... , 4294967295 float32 float 4 byte -1.5 x 1045 , ... , 3.4 x1038 char 1 byte - 0, ... , 255
  27. Temel C Programlama Dil Bilgisi • Diziler, aynı tipteki bilgilerin

    oluşturduğu veri bütünüdür. – <tür> <isim> [<boyut>]; – int sayi[5] = {1,2,3,4,5}; – char bilgi[3] = {‘d’,’e’,’u’}; – char bilgi[] = {“deu”}; • Dizi indisleri 0 dan başlar. • Boyut verilmezse, dizinin eleman sayısına göre otomatik olarak ayarlanır. Veri gösterimi Açıklama 25 Ondalıklı sayı 031 Sekizlik sayı 0x19 Onaltılık sayı 0b00011001 İkilik sayı ‘t’ Karakter ifade
  28. Temel C Programlama Dil Bilgisi • Yapı (struct) yardımıyla kendi

    türümüzü tanımlayabiliriz. • Değişkenlerine kısmen yada tamamen ulaşabiliriz. – struct motor{ int devir; int guc; boolean durum; };
  29. Temel C Programlama Dil Bilgisi • Tanımlamak ve kullanmak; –

    struct motor onMotor; // Yapımızı tanımlıyoruz. – onMotor = 0; // Tüm değerleri sıfırladık. – onMotor.devir = 50; // Devir bilgisine değer atadık. • Fonksiyonlar ile alt programlar oluşturabiliriz. – <çıkış değer türü> <isim> (<tür> <değişken>, ...) – float inch2mm (int i) { return i * 25.4; }
  30. Temel C programlama dil bilgisi Operatör Açıklama + Toplama -

    Çıkarma * Çarpma / Bölme % Modül > Büyük < Küçük <= Küçük eşit >= Büyük eşit == Eşit Operatör Açıklama != Eşit değil && Mantıksal Ve || Mantıksal Veya ! Mantıksal Değil ~ Değil (bit tabanında) << Sola öteleme (bit tabanında) >> Sağa öteleme (bit tabanında) & Ve (bit tabanında) ^ Özel Veya (bit tabanında) | Veya (bit tabanında)
  31. Temel C Programlama Dil Bilgisi • Bit tabanlı operatörlere örnekler;

    – x = 0b11010010; y = 0b10011001 (153) – x & y = 0b10010000 – x | y = 0b11011011 – x ^ y = 0b01001011 (karşılıklı değerler aynı ise 0, değilse 1 ) – x << 2 = 0b01001000 (soldan bit kaybeder) – y >> 1 = 0b01001100 (sağdan bit kaybeder) (76) • Sağa kaydırmak, sayıyı 2n’e bölmek demektir.
  32. Temel C Programlama Dil Bilgisi • if – else if

    – else • swicth – case Program Akış Kontrol • while • do – while • for • goto – label Döngüler
  33. Temel C Programlama Dil Bilgisi • Koşulu doğru olan kontrol

    yapısının işlemi gerçekleşir. • Hiç bir koşul sağlanmaz ise “else” işlemi gerçekleştirilir. if(<koşul>) { <işlem> } else if(<koşul>) { <işlem> } else { <işlem> }
  34. Temel C Programlama Dil Bilgisi • “switch”de tanımlanan değerin durumlarını

    adım adım kontrol eder, uyan durumun işleminin yapar. switch(<değer>) { case <durum>: <işlem> break; ... default: <işlem> break; } • Genelde çok fazla durum içermeyecek kontrol yapılarında terçih edilir. Örneğin menü kontrol kod bloğunda.
  35. Temel C Programlama Dil Bilgisi • “while” döngüsünün koşulu doğru

    olduğu sürece işlemi gerçekleştirir. • “do – while” döngüsünde işlem en az bir kez gerçekleştirilir. while(<koşul>) { <işlem> } do { <işlem> } while(<koşul>);
  36. Temel C Programlama Dil Bilgisi • Koşul doğru olduğu sürece

    “for” döngüsü içindeki işlem gerçekleştirilir. • Genelde sayma işlemlerinde çok kullanılır. for(<başlangıç değeri>;<koşul>;<artış miktarı>) { <işlem> }
  37. Temel C Programlama Dil Bilgisi • Etiketlenen satıra “goto” ile

    koşulsuz atlamakta kullanılır. <etiket>: <işlem> ... goto <etiket>; while(true){ output_a(0b00000001); sol: if (bit_test(PORTA,7)) goto sag; delay_ms(500); PORTB<<=1; goto sol; sag: if (bit_test(PORTA,0)) goto sol; delay_ms(500); PORTA>>=1; goto sag; }
  38. Ön İşlemci Fonksiyonları • #FUSES : Kullanılan mikrodenetleyicinin konfigürasyon bitlerini

    ayarlar. Konfigurasyon Kodu Açıklaması LP (Low Power) Düşük frekanslı kristal XT Kristal osilatör, ≤ 4 MHz HS (High Speed) Kristal osilatör, > 4 MHz RC (Resistor Capacitor) Direnç-kondansatör osilatör [NO]WDT Watch Dog Timer açık [kapalı] [NO]LVP (Low Voltage Programming) Normalde MCLR pininde 13V gereksede, bu mod ile 5V olması yeterlidir. [kapalı] [NO]CPD (Code Protected Data) EEPROM belleği kod koruması açık [kapalı]
  39. Ön İşlemci Fonksiyonları • #INT_X : Kesmeleri tanımlamak için kullanılır.

    – #priority ile kesmelerin önceliği belirlenebilir. Kesme fonksiyonu Açıklama #INT_RB, #INT_RC B yada C portunun 4-7 pinlerinde değişiklik olunca #INT_EXT[i] Dış kesme (i = 1,2, ...) #INT_TIMER[j] Zamanlayıcı (j = 0,1,2, ...) #INT_RDA RS232’den veri alınınca #INT_EEPROM EEPROM yazma işlemi bitince
  40. Ön İşlemci Fonksiyonları • #USE_DELAY() : gecikme (delay) fonksiyonunu kullanabilmek

    için gereklidir. – #use_delay(clock=4000000) // 4MHz – #use_delay(clock=20000000,restart_wdt) • // 20MHz’lik osilatör frekansı ve WDT kullanımı varsa gecikme (delay) Fonksiyonları delay_ms(X) • X = 0, ... , 65535 delay_us(X) • X = 0, ... , 65535 delay_cycles(X) • X = 1, ... , 255
  41. Ön İşlemci Fonksiyonları – delay_cycles() fonksiyonu verilen “instruction time” kadar

    gecikme sağlar. – instruction time = 4 / saat frekansı • 4MHz → IT = 4 / 4000000 = 0.000001 sn = 1 us • 20MHz → IT = 4 / 20000000 = 0.0000002 sn = 200 ns • #use_standart_io(<port>) : Program içinde pin’in durumu giriş olarak kullanıldıysa, pin giriş olur; çıkış olarak kullanıldıysa ise çıkış olucaktır. – Ön tanımlı olarak kullanılır. – Başka bir Giriş/Çıkış direktifine kadar geçerliliğini korur.
  42. Ön İşlemci Fonksiyonları • #use_fixed_io(X_outputs=<pin>) : Standart giriş/çıkış direktifinin ayarlanabilir

    halidir. • #use_fast_io(<port>) : Mutlaka “tris” komutlarıyla port’a ait pinlerin Giriş/Çıkış ayarları yapılmalıdır. – Başka bir Giriş/Çıkış direktifine kadar geçerliliğini korur.
  43. Port Giriş/Çıkış İşlemleri • Portların kullanım tipini, durumlarını, bilgilerini okumak

    için kullanılan işlemlerdir. Kullanım Tipi set_tris_X get_tris_X Çıkış output_X output_bit output_high output_low Giriş input_X input
  44. Port Giriş/Çıkış İşlemleri Çıkış • Led • Buzzer • Motor

    Giriş • Düğme • Sensör • Encoder 0 1 Mikrodenetleyicilerde, ilgili portlara ait pinler giriş ve/veya çıkış olarak tanımlanmalıdır.
  45. Port Giriş/Çıkış İşlemleri • set_tris_X(<değer>) : ilgili port’un pinlerini giriş

    veya çıkış durumunu tanımlar. – set_tris_a(0x01); – set_tris_c(0b11110000); • get_tris_X() : ilgili porta ait “tris” bilgisi okunur. – portBilgi = get_tris_a();
  46. Port Giriş/Çıkış İşlemleri • output_X(<değer>) : ilgili porta bilgi yazmakta

    kullanılır. – output_b(216); // İkilik sistemde 11011000 • output_bit(<pin>,<değer>) : ilgili pin’in değeri değiştirilebilir. – output_bit(pin_B1,0); // B portunun 1’inci pinin durumu giriş yapıldı.
  47. Port Giriş/Çıkış İşlemleri • output_high(<pin>) : istenilen pin’i giriş (1)

    yapmak için kullanılır. – output_high(pin_A2); • output_low(<pin>) : istenilen pin’i çıkış (0) yapmak için kullanılır. – output_low(pin_C3);
  48. Port Giriş/Çıkış İşlemleri • input_X() : istenilen giriş portu tümüyle

    okunup, 8 bitlik bir değişkene aktarılır. – int veri = input_a(); • input(<pin>) : istenilen pin’in durum bilgisini boolean ya da int1 olarak verir. – if(input(pin_B1)) { output_low(pin_A3) ; }
  49. Bit/Byte İşlemleri • Bit seviyesindeki işlemleri kolaylaştırmak için hazırlanmış komutlardır.

    • bit_set(<değişken>,<bit>) : değişkenin istenilen bit değeri “1” olarak değiştirilir. – int a = 5; bit_set(a,1); – 5 = 0b00000101 → 0b00000111 = 7 • bit_clear(<değişken>,<bit>) : değişkenin istenilen bit değeri “0” olarak değiştirilir.
  50. Bit/Byte İşlemleri • bit_test(<değişken>,<bit>) : değişkenin istenilen bit değeri okunur.

    Değer 1 veya 0 olarak döndürülür. • swap(<değişken>) : değişkenin düşük dörtlü bitleriyle, yüksek dörtlü bitleri yer değiştirir. – int a=0b00110101 → swap(a) → 01010011 Yüksek Düşük
  51. Temel Donanımsal Bilgiler • Bir mikroişlemcinin çalıştırılması için; • Elektriksel

    bağlantılar, • MCLR pin bağlantısı, • Osilatör seçimi ve bağlantısı, • Mikroişlemcinin programlanması temel olarak gereklidir.
  52. Temel Donanımsal Bilgiler • Mikrodenetleyiciler genelde 2.5V-5V arası beslemeye ihtiyaç

    duyar. • Adaptörler ve diğer donanımlar genelde 9V- 12V arasında olduğundan, 7805 gibi regülatör elemanlarıyla besleme 5V’a sabitlenir. • Tüm devre elemanlarının toprakları ortak olmalıdır.
  53. Temel Donanımsal Bilgiler • MCLR (Master Clear) high, yani “1”

    yapıldığında mikrodenetleyici çalışır. • “#fuse” direktifi ve “NOMCLR” komutu kullanılarak bu özellik devre dışı bırakılır. – İlgili pin giriş portu olarak kullanılabilir.
  54. Temel Donanımsal Bilgiler • Mikrodenetleyicinin ihtiyacı olan saat sinyali, OSC1

    ve OSC2 pinlerine bağlı kristal tarafından yada dahili RC osilatör tarafından sağlanır. – #fuse direktifine INTRC kodu ile dahili osilatör kullanılabilir. – INTRC_IO kodu ile dahili osilatör kullanımı yanında osilatör için ayrılan pinler giriş/çıkış pinleri olarak kullanılabilir.
  55. Temel Donanımsal Bilgiler • Her bir giriş/çıkış pininden en fazla

    25mA çekilebilir. • Kullanılmayacak pinler çıkış olarak ayarlanmalıdır.
  56. Donanım Bağlantıları • Düğme : iki şekilde bağlanabilir. – d1

    basıldığında RA2 giriş pinine “0” bilgisi girer. – d2 basıldığında RB2 giriş pinine “1” bilgisi girer
  57. Donanım Bağlantıları • LED (Light Emitting Diode) : üzerinden akım

    geçirildiğinde ışık veren devre elemanıdır. – İleri Akım (Forward Current) : Genelde 20 mA’dir. – İleri Voltaj (Forward Voltage) : Üzerinden geçen akıma göre üzerindeki ileri yönde gerilim düşüm miktarı – Ters Voltaj (Reverse Voltage) : Ters bağlandığında tölere edebileceği gerilim seviyesi
  58. Donanım Bağlantıları • LED’ler mutlaka ön bir direnç ile kullanılmalıdır.

    – RLED = (Vkaynak - VF ) / IF – Kaynak gerilimimiz PIC kullandığımız için genelde 5V’dur. Renk İleri Voltaj İleri Akım Kırmızı 2.0 V 30 mA Yeşil 2.2 V 25 mA Mavi 4.5 V 30 mA R mA x V V R kıırmız LED 100 10 30 2 5 ) ( 3    
  59. Donanım Bağlantıları – L1’i yakmak için RB0 pin çıkışı “0”,

    söndürmek için “1” yapılır. – L2’i yakmak için RB1 pin çıkışı “1”, söndürmek için “0” yapılır.
  60. Donanım Bağlantıları • Transistör : yarı iletken malzemeden yapılmış genelde

    anahtarlama için kullanılan elektronik bir devre elemanıdır. – Az enerji tüketirler. Düşük gerilimde çalışabilirler. – Çok uzun çalışma ömürlerine sahiptirler.
  61. Donanım Bağlantıları • Transistörler esas olarak bipolar transistörler ve unipolar

    transistörler olarak iki kısma ayrılırlar. • Bipolar transistörler de PNP ve NPN olarak iki tiptir.
  62. Donanım Bağlantıları • Röle : üzerinden akım geçirildiğinde elektromanyetik olarak

    çalışan elektriksel bir anahtardır. – Transistörler ile benzer görevleri olsada, üzerlerinden çok daha yüksek akım geçirebilirler ve direnç ile birlikte kullanımı zorunlu değildir. 1 – 2 bacakları besleme ve toprak olarak bağlanır. 3 – 4 bacakları kumanda edilecek devreye bağlanır.
  63. Genel Bir Örnek #include <16F628A.h> #use delay(clock=4000000) #fuses XT,MCLR,NOPROTECT,NOWDT,NOPUT,NOLVP, NOCPD,NOBROWNOUT

    void main(void) { set_tris_a(0b00001001); //A0,A3 giriş diğerleri çıkış set_tris_b(0b00000000); //B portu komple çıkış output_low(PIN_B7); output_high(PIN_B6); output_high(PIN_B2); //Röle çekilsin delay_ms(2000); // 2 sn’lik gecikme output_low(PIN_B2); //Röle bıraksın while(true) // Sonsuz döngü { if(input(PIN_A0) == 0 ) //Düğme 1 basılı mı? { output_high(PIN_B7); // LEDi yak while(input(PIN_A0)==0); // Butonun bırakılmasını bekle output_low(PIN_B7); // Ledi söndür delay_ms(25); } if(input(PIN_A3) == 1 ) //Düğme 2 basılı mı? { while(input(PIN_A3)==1); //Butonun bırakılmasını bekle output_toggle(PIN_B6); //Led'in durumuu değiştir } } }