You are on page 1of 11

http://www.picproje.org/main/modules.php?

name=News&new_topic=2

(1-5 nolu makaleler)

CCS C ile Microchip PIC Programlama

eviren:

A. Uur nen

Not : C Programnda kullanlan Komutlar, ifadeler, hata ve uyar mesajlar ngilizce kullanlr ve deitirilemez. Bu kelimelerin Trke Anlamlarnn da bilinmesinde yarar vardr. Bu nedenle bu tr kelimelerin bilgisayar ve elektronik dilinde kullanlan yaklak Trke karlklar kelimelerin yannda parantez iinde verilmektedir.

indekiler:

Terminoloji Kod denenmesi C Kotlama Standartlar Esaslar

1- C nin Esaslar C Program yaps Bir C Programnn yap talar #pragma ifadesi main() ifadesi #include ifadesi printf Fonksiyonu Variables (deikenler) Constants (sabitler) Comments (Komutlar) Fonksiyonlar C Keywords 2- Deikenler Data Tipleri Variable Declaration (Deiken Deklere etme/Beyan etme) Variable Assignment (Deikene grev atama) Enumeration (Numaralama) Typedef (Tip tanmlama) Type Conversions (Tip evrimleri) 3- Fonksiyonlar Fonksiyonlar Fonksiyon Prototipleri Fonksiyon Argumanlarnn Kullanm Return Degerlerinde Fonksiyon Kullanm Klasik ve Modern Fonksiyon Beyanlar 4- Operators Aritmetik Oparatrler Relational (Bal Oparatrler) Logical (Mantk Oparatrleri) Bitwise (Bitwise Operatrleri) Increment and Decrement (eksiltme ve arttrma)

http://www.picproje.org/main/modules.php?name=News&new_topic=2
5- ncelikli Program Kontrol fadeleri If If-else ? for Loop while Loop do-while Loop Program Kontrol Ifadeleri Break Continue Null Return 6- Arrays / Strings (Gurup ve dizinler) Tek boyutlu Gruplar Dizinler ok boyutlu Gruplar Gruplarn Balatlmas Dizin Guruplar 7- aretciler aretci Esaslar aretciler ve Guruplar aretcinin Fonksiyonlara Geirilmesi 8- Yaplar / Birlikler Yap Esaslar Yap aretcileri Klfl Yaplar Birlik Esaslar Birlik aretcileri 9- PICmicro MCU Belirgin C Inputs / Outputs (Giriler / klar) C ve Assembler Karm leri seviye BIT Manipulasyonu Zamanlayclar A/D evrimi Data letiimi I2C Haberlemesi SPI Haberlemesi PWM LCD Srme Interrupts (Kesmeler) Include Libraries (lave Ktphaneleri) Ek Bilgiler

(1-5 nolu makaleler)

Tantm Terminoloji Kullanlan baz temel Terminoloji ile Balayalm. Microcontroller: Yazlmsz hi bir ie yaramayan plastik, metal ve saflatrlm kum yn. Fakat iine yazlm girince hemen hemen snrsz bir uygulama alan var demektir. I/O Giri veya k olarak yaplandrla bilen ve d dnyaya k salayan bir balant ucu. I/O microcontroller in bilgiyi okumas, kontrol etmesi ve iletiim kurabilmesi iin gereklidir. Software: Microcontroller in ala bilmesi iin gereken bilgi dir. kt veya uygulamann baarl olabilmesi iin Software (yazlm) hata ve kirlilikten uzak olmaldr. Software C, Pascal veya Assembler gibi eitli dillerde yazlabilir.

http://www.picproje.org/main/modules.php?name=News&new_topic=2

(1-5 nolu makaleler)

Hardware Microcontroller, hafza, ara yz, g kayna, Sinyal koullayc devreler ile almas ve d dnya ile alveri yapabilmesi iin kendisine balanan dier btn eleman paralardr. Bir baka bak as da almad zaman Hardware in pencereden dar utlanmasdr. Simulator: MPLAB geliim evresinin iine yerletirilmi. Kendi Simulator Microcontroller in i almasnn bir ksmna giri iin izin verir. Olaylarn ne zaman olacan biliyorsanz Simulator tasarmnz test etmenin iyi bir yoludur. Programn bir yerlerinde istenmeyen bir olay, tkanma, taknt meydana geliyorsa, Simulator n uyardn grrsnz. Simulator n full trace, step ve debug imknlar vardr. SIM ICE (SIM In Circuit Emulator) ise 16C5x geliimi iin dier bir rndr. ICE zelliklerinin bir ksmn veren bir hardware Simulator dr fakat bir baka zellii de fiyatdr. In Circuit Emulator (ICEPIC veya PICmicrocontrollerMCU MASTER) Microcontrollerin bulunduu yerdeki soket ile PC niz arasna balanan ok faydal bir ekipman parasdr. PC de yazlmn almasn salar fakat devre kitinin ucunda bir Microcontroller gibi gzkr. ICE programn iine girmenize, microcontroller iinde hangi olaylarn meydana geldiini ve d dnya ile nasl haberletiini izlemenize izin verir. Programlayc ICE nin yardm dokunmadan microcontrollerin almasn salayan hafza blmne program ykleyen birimdir. Farkl fiyat ve eitli ekil ve byklkte piyasaya karlar. Hem PICSTART PLUS hem de PROMATE II seri port a balanr. Source File (Kaynak Program) Assemblerin ve sizin anlayacanz dilde yazlan program. Microcontrollera yklenmeden nce kaynak dosya Microcontrollerin anlayabilecei bir ekilde ilenmelidir. Assembler / Compiler (Derleyici / Yorumlayc) Kaynak dosyay Object dosyaya eviren bir yazlm paketidir. Derleme (Assembly) ilemi esnasnda hatalar iaretlendike program hatalardan temizleyen (debugging) ve youn olarak kullanlan hata kontrol Derleyicinin (Assemblerin) iinde yaplandrlmtr. Microchip in kard MPASM btn PIC lerin kulland en son derleyici (assembler) programdr. Object File (Hedef Dosya) Bu dosya derleyici / yorumlayc tarafndan retilir ve grevini yerine getirmesini salamak zere programlayc, simulator veya ICE nin alglayaca bir biimdedir. Dosyann uzants assembler in (derleyicinin) verdii direktife gre *.obj veya *.hex eklindedir. List Dosyas Bu dosya Derleyici tarafndan retilir ve yan tarafnda yazdnz komut ve heksodesimal deerleri ile birlikte Kaynak dosyadan gelen tm talimatlar ierir. Yazlm iinde ne olup bittiini izleme ansnz kaynak dosya ya nazaran daha fazla olduu iin program hatalarnz temizlemeye alrken en fazla yararlanacanz dosyadr. Dosya uzants *.LST dir. Dier Dosyalar Hata dosyas (*.ERR) hatalar listeler fakat orijinlerini gstermezler. - .COD dosyas emulatr tarafndan kullanlr. Bugs (Hatalar) Program yazann yapt imla hatalar veya daha nce tantm yaplmayan, eksik verilen bilgilerdir. Bu hatalarn ou yorumlayc tarafndan bulunur ve *.LST dosyasnda gsterilir. Dier hatalar dene yanl metodu ile bulunup dzeltilmelidir. C Kotlama Standartlar Program yazmak ev inaa etmeye benzer - Eer temel salamsa, Kod dim dik dikili kalr. Temel zayfsa, kod bir noktadan krlp ker. Aadaki tavsiyeler C++ Standart dokmanndan alnmtr ve PIC e uygulanmtr.

http://www.picproje.org/main/modules.php?name=News&new_topic=2

(1-5 nolu makaleler)

Adlar - Adlar grevlerine uygun hale getirin. Adlar programlamann kalbidir bu nedenle ilevi ve kullanm amac ile uyumlu ad sein. Okuma kolayl iin Adlarda byk kk harfi kark kullann. rnek: ErrorCheck in okunuu ERRORCHECK in okunuundan daha kolaydr. n ekleri kk harflerle yazn. g Global gLog; r Reference rStatus(); s Static sValueIn; Braces{} (Parantezler) Parantezler veya Lleli parantezler geleneksel UNIX tarznda if (koul) { ...... } veya okunmas daha kolay olan if (koul) 16 { ...... } ounluun tercih ettii tarzda kullanlabilinir. Tab lar ve Kaydrmalar Tablar sayfa geniliini abuk tketecei iin tab yerine Space kullann. Yazlmn okunabilir olmas iin sadece gerekli hallerde satr kaydrn. Bir editrdeki tab kurulumu dier bir editre uymaz. - Cod u tanabilir yapn. Satr Uzunluu Monitr ve printerler de uyum salamas iin satr uzunluunu 78 de tutun. Else If Format Fazladan bir Else ifadesi ekleyin ki kullandnz if lerin kapsamna girmeyen dier koullar yakalaya bilin. if (koul) { } else if (koul) { } else { ..... /* yukardaki kapsamn dnda kalan baka koullar iin */ } Koul Format Yorumlaycnn msaade ettii yerde, Deimezi daima eitlik / eitsizlik karlatrmasnn sol tarafna yazn. Bir = ihmal edilirse yorumlayc hatay sizin iin bulur. Deeri de gze arpan bir yere koyar. if ( 6 == ErrorNum) . Btn deikenlere balatma (initialize) verin. 'Serbest veya rasgele koullar' nlemek iin tm deikenlere bilinen bir deer verin. int a=6, b=0;

http://www.picproje.org/main/modules.php?name=News&new_topic=2 Yorumlar (Aklamalar)

(1-5 nolu makaleler)

Yorumlar yazdnz hikyenin dier yarsn yaratr. Bugn iin programnzn nasl altn biliyorsunuz ama iki hafta veya iki sene sonra hatrlayacak msnz veya bir bakas programnz anlayabilecek mi? Daha ileri ilerin yaplmas gereken blgeleri temizlenmesi gereken hatalar iaretlemek iin veya ilerde yapacanz geniletmeleri iaretlemek iin yorumlarnz (aklama notlarnz) yazn. Temel Esaslar Tm bilgisayar programlarnn bir start (balama noktas) vardr. Microcontroller de balama noktas reset vektrdr. 14 bit ekirdei (PIC16c5xx ailesinde) 00h da reset olur. 12 bit ekirdei (PIC16C5x ve 12C50x) de ise hafzann en stnde 1FFh, 3FFh, 7FFh reset olur. Bir kere kullanlan programlarda biti noktas programn almasn stop ettii yerdir. Trafik k kontrol gibi dier programlar ise balama noktasna geri dnm yapar (loop back). Basic veya C gibi yksek seviyeli programlarda en ok kullanlan ilk programlama rnei bilgisayar ekranna "Merhaba Dnya" yazdrmaktr. Mhendislere PIC retirken benim kullandm basit program ise 'Butona bas - LED yansn' eklinde bir programdr. Derleyiciye bu aadaki gibi verilir: main btfss porta,switch ;Port A nn buton ucu basl ise bir satr atla goto main ;deilse baslncaya kadar dngde kal Lp1 bsf portb,led ;Port B nin led e bal ucunu set et (1 yap) btfsc porta,switch ; Port A nn buton ucu basl deil ise bir atla goto Lp1 ;baslysa serbest braklana kadar dngde kal bcf portb,led ;Ledi sndr goto main ;Baa dn (loop back to start) Bunu C de yazarsak main() { set_tris_b(0x00) while(true) { if (input(PIN_A0)) output_high(PIN_B0) else output_low(PIN_B0) } }

; // port b yi k yap ;//buton baslm test et ; //kapalysa ledi yak ; //aksa ledi sndr

Derlenince kod aadaki ekle girer: main() { set_tris_b(0x00); while(true) { if (input(PIN_A0)) output_high(PIN_B0); 000B BSF 06,0 else

0007 MOVLW 00 0008 TRIS 6 0009 BTFSS 05,0 000A GOTO 00D

http://www.picproje.org/main/modules.php?name=News&new_topic=2 000C GOTO 00E output_low(PIN_B0); 000D BCF 06,0 } 000E GOTO 009 }

(1-5 nolu makaleler)

Grdnz gibi derlenmi versiyon hafzada daha ok yer tutar - C de 14 Assembler da 9 . Bu kotlama iin iyi bir rnek deil, fakat programlar geniledike kot kullanmnda C o kadar etken olur. C Dilinin Temel Talar Bu blm de C programlama dilinin baz ana hatlarna ksaca gz atacaz. Ama takip eden ileriki blmlerdi anlayabilmeniz iin C nin temel bilgilerini vermektedir. Tartlacak konu balklar: Program Yaps C program elemanlar #pragma main #include directive printf fadesi Variables -deikenler Constants -deimezler Comments -yorumlar Functions -fonksiyonlar C keywords -C nin anahtar kelimeleri 1.1 C Programnn yaps Btn C programlar nilemci (directives) emirleri, beyanlar (declarations), tanmlamalar (definitions),terimleri (expressions), ifadeleri (statements) ve fonksiyonlar ierir. Bir nilemci emir (directive) program derlemek iin ilk adm olarak kendiliinden uyarlan bir komuttur. En sk kullanlan iki directive #define ve #include emirleridir. #define belirtilen bir tantmn yerine text yerletirir. #include ise dardaki yazl bir dosyay programa katmak zere programn iine alr. Beyan (Declaration) tantma Declaration programda kullanlan deiken ve fonksiyonlarn ad ve zelliklerini kurar. Global deikenler fonksiyonlarn dnda deklere edilirler ve deklarasyonun sonundan dosyann sonuna kadar gzkr haldedirler. Yerel bir deiken fonksiyonun iinde deklere edilir ve deklarasyonun sonundan dosyann sonuna kadar gzkr haldedirler. Definition (tanmlama) Definition bir deiken veya fonksiyonun ieriini yaplandrr. Ayn zamanda deiken ve fonksiyonlarn ihtiyac olan depolamann datmn da salarlar. Expression (Terim) Bir Terim tek bir deere yol veren altran ve alan n bileiminden oluur. Statement (ifade) Bir fade bir C programnda program icrasnn dzenini ve akn kontrol ederler.

http://www.picproje.org/main/modules.php?name=News&new_topic=2 Function

(1-5 nolu makaleler)

Fonksiyon belirgin bir grevi icra eden beyanlar, tanmlar, terimler ve ifadelerin toplamdr. Fonksiyon gurubu parantezlerle kapatlr. Fonksiyonlar C de klflanmaz. main Function Btn C programlarnda programn balad yerde main fonksiyonu bulunmaldr. Main fonksiyonunu iine alan parantezler programn balama ve bitme noktasn tanmlar. rnek: Genel C program yaps #include #define PI 3.142 float area; int square (int r); main() { int radius_squared; int radius = 3; radius_squared = square (radius); /* n ilemci emir (directive) */ /* standard C ba dosyasn dahil et */ /* global declaration */ /* prototype declaration */ /* main function n balangc */ /* yerel declaration */ /* declaration ve balatma */

/*Fonksiyona deer atama */ area = PI * radius_squared; /* assignment statement */ printf("Area is %6.4f square units ",area) ; & program */ square(int r) /* function head */ { int r_squared; /* declarations here are known */ /* only to square */ r_squared = r * r; return(r_squared); /* return value to calling statement */ }

http://www.picproje.org/main/modules.php?name=News&new_topic=2
1.2 C Programinin elemanlar

(1-5 nolu makaleler)

Btn C programlar ifadeler ve fonksiyonlar gibi gerekli elamanlar ihtiva eder. fadeler, gerek olarak ilemleri yapan program paralardr. Btn c programlarnda en az bir tane fonksiyon vardr. Fonksiyonlar her biri en az bir ifade tayan alt programlardr ve programlarn dier ksmlar tarafndan arlabilirler. Program yazarken satrba boluu, bo satrlar ve aklamalar programn okunabilirliini gelitirir. Sadece sizin ileriki bir tarihte program okuyup anlamanz deil ayn zamanda bakalarnn da program daha rahat okumasn salar. Aadaki rnek C programnn baz istenilen blmlerini gsterir.

#include /* My first C program */ main() { printf(Hello world!);

# include ifadesi yorumlaycya "studio.h" dosyasndaki kaynak kotlarn programa dahil etmesini bildirir. ".h" uzatmas header dosyas n simgeler. Header dosyas programda kullanlan standart ifadeler hakkndaki bilgileri tar. "Studio.h" dosyas pek ok standart giri/k fonksiyonlarnn balklarndan (header) oluur. Programinizda sadece standart ktphane fonksiyonlar ile ilgilenen "include" dosyalarn kullanmak gerekir. Aklamalarn banda ve sonunda " /* " iareti vardr. /* lk C programm */ aklamas gibi. Yeni stildeki ise aklama satrlar " // " iareti ile alp kapatlr. Yorumlayc aklamalar dikkate almadan atlar bu nedenle de aklamalarn alma hzna bir etkisi yoktur.

Btn C programlarnda Programn giri (balang) noktasn gsteren bir " main() " fonksiyonu bulunmaldr. Btn fonksiyonlarda FonksiyonAd() { fadelerden oluan kot blou } ekli kullanlr.

Bir fonksiyon iindeki ifadeler lleli parantezle alp kapanr ve birbiri ardna sra ile ileme girer Lleli parantezler { ve } C deki kot bloklarnn balad ve bittii yeri gsterir.

http://www.picproje.org/main/modules.php?name=News&new_topic=2
Ve sonuta tipik bir C ifadesi printf(Selem Millet!); eklindedir. Hemen hemen btn C ifadeleri bir noktal virglle (;) biter.

(1-5 nolu makaleler)

Noktal virgl satr ayrlmas veya satr sonu anlamnda deil ifadenin bittii ve bir sonraki ifade ile karmamas iin kullanlr. Bu nedenle ifadelerin satr iindeki yer al ekilleri ve saylarnda bir snrlama yoktur. hmal edilirse bir sonraki satrda hata iareti verir. If ifadesi bileik ifade olduu iin ; if bileik ifadenin sonunda kullanlr. if (A > B ) printf("A byk geldi"); 1.3 #pragma Pragma komutu derleme srasnda kullanlan PICmicroMUC yu veya retilen dosya formatn belirlemek gibi zel bir ilemi yapmas iin derleyiciye talimat verir. #pragma device PIC16C54 CCS C de "pragma" istee bagldr ve #device pic16c54 eklinde de yazlabilir 1.4 main() Her programda sadece bir kere grlen bir "main" fonksiyonu bulunmaldr. Takip eden parantezler iine bir ey yazlmaz. stege bal olarak bazen anlalsn diye parentazin iine void"=ihmal et" Kelimesi konarak parametresine gerek olmad aklanr. Main bir fonksiyon olarak snflandrldna gre takip eden btn kod lar Parantez veya lleli parantez { } iine alnr. main() { Program ktlesi } 1.5 #include

h uzants ile belirtilen header dosya, fonksiyonun hangi argumanlar kabul ettii veya belli bir PIC iin PICmicroMCU kaytlarnn nerede bulunduu gibi ktphane fonksiyonlar hakkndaki bilgileri tar. #include <16C54H> Derleyici bu bilgiyi tm hardware zellikleri ile kaynak programlar Bir araya balamak iin kullanr.

#include <16c71.h> #include #use rs232(baud=9600,xmit=PIN_B0,rcv=PIN_B1) main() {


printf("yazlm girin:"); while(TRUE) putc(toupper(getc())); }

http://www.picproje.org/main/modules.php?name=News&new_topic=2

(1-5 nolu makaleler)

PIN_B0 ve PIN_B1 tanmlar 16C71.h header dosyasnda bulunur. toupper fonksiyonu CTYPE.H dosyasndadr. Bu her iki header dosya da kullandnz fonksiyonlar hakknda gerekli bilgileri derleyicinin almas iin programda kullanlmaldr. Pek ok C derleyicisinin printf ve putc gibi I/O fonksiyonlar iin gereken header dosyalara da ihtiya duyar. Bunlar #use rs232 ile alnan PICmicrMCU iin dahili yaplandrlm fonksiyonlardr Ve ayrca bir header dosya istemez. Al parantezlet n ilemciye include dosyasnn yol tanm ile birlikte #include <udosya.h> hangi klasrn neresinde olduunu anlatr. ift trnak iinde verilen #include "budosya.h" include dosyasn allmakda olan klasrn iinde arar. nclude dosyasnn tamam . derleme srasnda kaynak dosyann iine alnr.

1.6 printf Funksionu Printf fonksiyonu programcya yazlabilir bilgi gndermesine imkan veren standart bir ktphane fonksiyonudur. Printf () ifadecinin genel format: printf("kontrol_metni", arguman_listesi); eklindedir. Kontrol_metni ift trnak iindedir. Trnak iinde btn karakterler kullanlabilir. Format belirticileri aran zel semboller % ile iaretlenir. Kontrol_metni, printf() fonksiyonunda daima bulunmaldr. Format metninde format belirtici yoksa arguman_listesi yazmaya da gerek yoktur. Arguman_listesi sabit ve deiken deerlerden oluabilir. Aadaki iki rnek, Bir sabit deer birde deiken kullanan printf() ifadesini gsterir. printf("Hello world!"); printf("Microchip is #%d!",1); Format belirtici (%d) grntlenen data (veri) tipine bamldr. Aadaki tablo C de kullanlan btn format belirticileri ve etkiledikleri data (veri) tiplerini gstermektedir.

Printf() Format Belirticiler: %c tek karakter %d iaretli decimal interger %f floating point (desimal notasyon - dahil edilmeli) %e floating point (exponential or scientific notasyon) %u iaretsiz desimal integer %x iaretsiz hexadeswimal integer (kk harf) %X iaretsiz hexadesimal integer (byk harf) %d, %u, %x ile kullanlan l n eki uzun integer i belirtir. NOT: Bit format dizini iinde % iaretinden sonra kullanlan 0 (sfr)

http://www.picproje.org/main/modules.php?name=News&new_topic=2

(1-5 nolu makaleler)

Eklenecek sfrlar yazmaya zorlar. Takip eden say yaz sahasnn geniliini belertir. printf("The Hex of decimal 12 is %02x ",12) ; printf("desimal 12 nin hex deeri = %02x ",12) Bunun kts: The Hex of decimal 12 is 0c ; desimal 12 nin hex deeri 0c dir. Escape Sequences yeni satr yatay tab carriage return f formfeed ' tek trnak " ift trnak backslash %% yzde iareti ? Soru iareti backspace null character v dikey tab xhhh Hex kot gir hhh format belirleme %[flags][genilik][.retilen deer], eklinde de yazlabilir. Bu nedenle bir nce verilen rnek satrdaki: printf("Alan %6.4f kare birimler n dir",alan); 4 desimal lk yer ile 6 lk genilikdeki bir saha iinde Alan deerini gsterecektir.

Geerli olarak printf k son tanmlanan RS232 portundan dar karsada sizin Kendi k fonksiyonunuzu tanmlayan bir eye ynlendirilebilir. rnek: void lcd_putc(char c) ;void=ihmal et { // Kot u k bire gir // LCD harfleri buraya } printf(lcd_putc, "deer %u", deerdir);

You might also like