You are on page 1of 62

1

indekiler
1. Mikroilemciler ve Mikrodenetleyiciler
Mikroilemciler le Mikrodenetleyiciler Arasndaki Yapsal Farkllklar.
Mikroilemcilerde Kullanlan Temel Yardmc Devreler

2. CCS PIC C Derleyici Programnn zellikleri
CCS Programnn Kurulmas
CCS Programnn Kullanm
3. C Dili ve CCS Temel Esaslar
Sabitler
Operatrler
Veri Tipleri (Deikenler)
Fonksiyonlar
Kontrol ve Dngler
Diziler
aretiler (Pointer)
Structure

4. Uygulamalar
Led Diyod Uygulamalar
7 Segment Display Uygulamalar
Rle Uygulamalar
LCD Uygulamalar
Seri letiim
ADC Uygulamalar
Motor Kontrol Uygulamalar
Dotmatrix Display Uygulamalar
Timer ve Interrupt Uygulamalar
EEPROM Uygulamalar
I2C Uygulamalar

5. Projeler
Hesap Makinesi
RF modl ile Cihaz Kontrol
LCD Termometre ve Saat
Kayan Yaz
Melodili Zil









2









2. CCS PIC C Derleyici Programnn zellikleri
CCS PIC mikrodenetleyicileri iin kullanlan bir C derleyicisidir. Program yazm editrnde C
dilinde yazlan komutlar derlendiinde HEX dosyann yannda LST ve ERR dosyalar da
retilir. LST Dosya ierisinde C kodlaryla birlikte ASM komutlar da vardr. Bu dosya ierisine
bakarak hangi komutla hangi REGISTER e mdahale edildiini grebiliriz. ERR Dosyas
ierisinde ise eer C kodlarnn yazm esnasnda bir hata olumu ise bu dosya ierisinde hata
grlebilir. C kodlarnda hata dzeltilir ise bu dosyann ierii kendiliinden deiir ve hata
olmadn yazar.
Derleyici ile 12 bit, 14 bit ve 18 serisi mikrodenetleyiciler iin program yazlabilmektedir.

CCS PIC C Programnn Kurulmas
Programn kurulmas iin EXE kurulum program ve REG dosyalar (lisans dosyalar) olmas
gerekmektedir. Lisans dosyalarnn program kurulum dosyas ile ayn klasrde olmas
gerekmektedir.

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

Hardware Microcontroller, hafza, arayz, g kayna, Sinyal koullayc devreler ile almas
ve d dnya ile alveri yapabilmesi iin kendisine balanan diger btn eleman paralardr. Bir
baka bak asda 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 imkanlar 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 zelliide fiyatdr.

In Circuit Emulator

3
(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. Farkll fiyat ve eitli ekil ve byklkde 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 iaretlendikce program hatalardan temizleyen (debugging) ve youn olarak
kullanlan hata kontrolu Derleyicinin (Assemblerin) iinde yaplandrlmdr. 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 yantarafnda yazdnz komut ve heksodesimal deerleri
ile birlikde 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 orjinlerini 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.



4













Kurulum baladktan sonra


Next tklanarak kuruluma devam edilmelidir.

5


Burada programn lisansl bir program olduundan bahsedilmektedir.



Programn kurulaca yer (hard disk alan) seilmelidir.




6


Dosyalarn hard diske kopyalanmasna devam ediliyor.



Son olarak ta program bilgisayarda MPLAB programnn kurulu olup olmadn kontrol eder
ve CCS PIC C program kurulmu olur.










7






















PIC C PROGRAMI MENLER

File Menu



New Yeni dosya oluturmak iin kullanlr.
Open nceden oluturulan dosyalar amak iin kullanlr.

8
Reopen Daha nceden alm dosyalardan bir tanesini amak iin kullanlr.
Save Yazlan program kaydetmek iin kullanlr.
Save As Dosyay farkl kaydetmek iin kullanlr.
Save All Ak olan dosyalarn tamamn kaydetmek iin kullanlr.
Close Aktif olan pencereyi kapatmak iin kullanlr.
Close All Ak olan tm pencereleri kapatr.
Print Aktif sayfay yazdrmak iin kullanlr.
Printer Setup Yazc ayarlarn yapmak iin kullanlr.
Exit Programdan kmak iin kullanlr.











Project Menu





New Yeni bir proje oluturur.
New|
PICWIZARD


Proje manuel (elle) yada proje sihirbaz (wizard) ile yaplr. Sihirbaz ile
kullanc zel parametreler eklediinde otomatik olarak header dosyalar (*. h)
eklenir. Standart program kodlar oluturulur RS232, I/O 12C, timer seenekleri,
interrupt kurulumu A/D seenekleri yapldnda header dosyalar ve standart
kodlar oluturulur.
Open A .PJT dosyas alr. Derleme ve debug ilemi yaplabilir.

9
Open
All Files
A.PJT dosyasna ait alt programlarn dosyalarn aar.
Reopen Alm projelerden birini tekrar amak iin kullanlr.
Find Text In
Project
Proje dosyas ierisinde bir kelime aramak iin kullanlr.

Print All Files Tm sayfalar yazdrmak iin kullanlr.

Include Dirs Alt program klasrlerinin yarini belirtmek


Close Project Tm projeleri kapatr.





Edit Menu




10
Undo Geri al
Cut Kes
Copy Kopyala
Paste Yaptr.
Copy from
File

Dosyadan Bulunulan dosyaya kopyalama
Paste to File

Seilen ksm yeni bir dosyaya yaptrr.
Find Kelime bulmak iin kullanlr.
Replace Son kelime bulma ilemini tekrarlar.
Next Sonraki kelimeleri bulur.
Find
matching
braces
Parantez bana ya da sonuna gider.
matching
braces
extended
{ veya ). Parantezini iaretler.
Toggle
Bookmark

Kursrn bulunduu yere 0-9 aras iaret rakam verir.
Goto
Bookmark

aret rakam verilen yere gider.
Next
Window

Birden fazla program penceresi aksa sonraki pencereye gemek iin kullanlr.

Previous
Window

Birden fazla program penceresi aksa nceki pencereye gemek iin kullanlr

Indent
Selection
Seili alann tanmlama ya da komut grubuna gre pragraf dzenlemesi yapar.










11






Options Menu


Recall
Open Files
aretlendii zaman program kapatlp aldnda en son allan programlarla
beraber alr.

Editor
Properties
Editr zellikleri penceresi.
General
Tab:
Window Settings:

12

Pencere ayarlar
Editor Options:
Komutlarn renkli grnmesini salar.
Auto Highlight braces
Kursrn bulunduu parantezin renkli grnmesini salar.
Auto Indent
Otomatik paragraf dzenlemesi yapar.
WordStar keys
TABS:
Tab size
Tab tuuna basldnda ka karakter atlama yaplacan gsterir.

Keep Tabs
Tab konumunun korunmas.


13

Insert Spaces
Sonraki Tab pozisyonuna geer.

Display
Tab:

Magrin

Visible left Margin
Sol marjinin grlmesi.
Visible Right Margin
Sa marjinin grlmesi.
Editor Font
Editr yaz fontu seilir.
Font Size:
Yaz bykl seilir.
Font Style
Yaz sitili seilir. (Italic/Bold/Underline)


14
Color


Editr renk ayarlar yaplr.

File
Formats
Compiler ve program dosya tipleri seilir.

Include
Dirs
INC dosyalarnn klasrleri yeri belirlenir.

Debugger
/Programmer
Debugger ( hata ayklama) ve programlama ilemi iin firmann programlayc
devresi bilgisayara bal olmaldr.

Global
Definitions
Standart # tanmlamalarnn ne anlama geldii yazlr.








Compile

15



PCW Compile
Derleme ilemi yaplr. Derleme sonucunda ekranda programnn bulunduu klasr, oluturulan
kodlar, kullanlan dosya says, hatalar, uyarlar, derleme sresi, ROM ve RAM belleklerde
kaplad yer gsteren bir uyar penceresi alr.












16
View Menu


C/ASM Programn ASM kodlarn gsterir. (C kodlar ile birlikte)
rnek:
.................... for(i=0;i<num_ms;i++)
0119: CLRF 31
011A: MOVF 2E,W
011B: SUBWF 31,W
011C: BTFSC 03.0
011D: GOTO 123
.................... delay_ms(250);
011E: MOVLW FA
011F: MOVWF 32
0120: CALL 0F6
0121: INCF 31,F
0122: GOTO 11A


Symbol Map



17
Kullanlan yazmalar ve kaydedilen adresleri gsterir.
00C @SCRATCH
00D @SCRATCH
00D _RETURN_
00E @SCRATCH
00F @SCRATCH
010 @SCRATCH
027 generate_tone.num_us_delays
028 generate_tone.num_ms_delays
029 generate_tone.ms_delay_time
Call Tree Program ierisindeki balantlar gsterir.
Main 0/30
INIT 0/6
WAIT_FOR_HOST 0/23 (Inline)
DELAY_US 0/12
SEND_DATA 0/65

Statistics Program istatistiklerini gsterir.
ROM used: 597 (58%)
427 (42%) including unused fragments
RAM used: 14 (21%) at main() level
54 (79%) worst case
Lines Stmts % Files
64 6 22 C:\Program Files\PICC\Examples\ARCEL.c
111 0 0 C:\PROGRAM FILES\PICC\devices\16F84.h
82 21 64 C:\PROGRAM FILES\PICC\drivers\tones.c

Data Sheet Kullanlan mikrodenetleyici ile ilgili bilgi dosyas (data sheet) varsa onu

18
aar.

Binary file Dosyann varsa binary kodlarn gsterir.
COD Debug file Oluturulan kodlar gsterir.
Valid Fuses #fuses direktifi ile kullanlabilecek sigortalar gsterir.
Valid Interrupts #int_xxxx direktifi ile kesmeleri aktif/pasif yapar.

Tools Menu


Device
Editor
Mikrodenetleyici seim editrdr.

19


Device
Selector

stenilen zellikler belirlenir ve belirlenen ihtiyalar erevesinde kriterlere uyan
mikrodenetleyiciyi gsterir.
File
Compare
stenilen iki dosyay karlatr.

Numeric
Converter

decimal, hex ve float ifadeleri birbirine dntrr.

Serial
Port Monitor
Bilgisayarn seri portuna bilgi gnderme ya da almak iin kullanlan pencere.
Disassembler HEX kodunu ASM koduna dntrme ilemi yapar
Extract Cal
Data
Harici veri girii iin ayarlama yaplr.
Program
Chip
Yazlan ve derlenen program ccs firmasnn programlaycs ile mikrodenetleyiciye
yklenir.

20
MPLAB MPLAB programna gei yapar.

Internet nternete balanarak bilgi almak iindir.
Debug Menu


Hata ayklama ve adm adm programn altrlmas iin kullanlr. Bilgisayara programlayc
takl deilse almaz.



Help Menu



21
About Program hakknda bilgi verir.
Contents Yardm dosyas iindekiler mens alr.
Index ndeks alr.

Keyword at cursor stenilen yardm kelimesi yazlarak konu hakknda bilgi alnr.






















C Dili ve CCS Temel Esaslar

Sabitler



123 Desimal
0123 Oktal
0x123 Heksadesimal
0b010010 Binary
'x' karakter
'\010' Oktal karakter
'\xA5 Hex karakter
'\c' zel karakter
\n sonraki satra ge
\r satr bana git
\t tab
\b nceki karakteri siler
\f balang noktasna gider.
\a uyar sesi karr
\v tab lsnde dikay boluk brtakr.

22
\? Soru iareti yazdrr
\ tek trnak yazdrr
\ ift trnak yazdrr.
\\ \ iareti yazdrr.

"abcdef" String (karakter yazdrmak iin kullanlr.























Operatrler

+ Toplama ilemi yapar
+= Arttrma ve atama operatr, x+=y >>>>> x=x+y
&= Mantksal ilem operatr, x&=y, >>>>>>>> x=x&y
& Adres operatr
^= s alma operatr x^=y, >>>>>>>>>> x=x^y
?: Koul operatr
- - Azaltma operatr
/= Blme ilemi, x\=y, x=x/y
/ Blme operatr
== Eitse operatr
> Byktr operatr
>= Byk eit operatr
++ Arttrma operatr
* arpm operatr
!= Eit deil operatr
<<= Sola kaydr ve eitle , x<<=y x=x<<y
< Kktr operatr

23
<< Sola kaydr
<= Kk eit operatr
&& AND operatr
! NOT operatr
ll OR operatr
% Modl alma operatr
>>= Saa kaydr eitle , x>>=y x=x>>y
>> Saa kaydr
-= kar ve eitle
- karma ilemi

















Veri Tipleri:

int1 1 Bitlik iaretsiz tam saylar
int8 8 Bitlik iaretsiz tam saylar
int16 16 Bitlik iaretsiz tam saylar
int32 32 Bitlik iaretsiz tam saylar
Char 8 Bit karakter tipi veriler.
Float 32 Bit ondalkl saylar
Short 1 Bitlik iaretsiz tam saylar
Long 16 Bitlik iaretsiz tam saylar
Unsigned aretsiz pozitif saylar tanmlamada kullanlr.
Signed Pozitif veya negatif say tanmlamalarnda kullanlr.




Tip Bit Genilii Alabilecei Deer Aral
short 1 0 veya 1
short int 1 0 veya 1
int 8 0 - 255
char 8 0 - 255

24
unsigned 8 0 -255
unsigned int 8 0 -255
signed 8 -128 ile 127 aras
signed int 8 -128 ile 127 aras
long 16 0 - 65536
long int 16 0 - 65536
signed long 16 -32768 ile 32767 aras
float 32 3.4E-38 to 3.4E+38



C Programlama Dilindeki Baz zellikler :
1- C dilinde // iareti grld andan itibaren yazlanlar programa dahil edilmez yani
aklama satr olarak alglanr.
/* aklamalar */ /* */ aretleri arasnda kalan yazlanlar aklama olarak kabul edilir.
2- Komut satrlar sonuna mutlaka ; (noktal virgl) konulur. Satr sonunda noktal
virgl kullanlmayan yerler etiket isimleri, for komutu sonu, while komutu sonu, if
komutu sonudur.
3- Komutlar kk harflerle yazlr. Byk harflerle yazlmak istenirse Trke karakter
kullanlmamaldr.(r. i harfi I eklinde yazlmaldr.)
4- Etiket isimlerinde byk kk ayrm yaplacandan kullanlan her yerde ayn
olmaldr. Byk ise dier satrlarda da byk, kk ise dier satrlarda da kk
olmaldr.

FONKSYON YAZIMI:
Programlarn karmaklktan kurtarlmas ve ayn ilemlerin birden fazla yerde yaplmas
gerekiyorsa fonksiyonlar kullanlr. Fonksiyonlar ana program ierisinde olmazlar. Ayrca
fonksiyon ierisinde baka bir fonksiyon altrlabilir fakat altrlmak istenen fonksiyon daha
nce yani programn stnde yazlmaldr.


void zaman( )
{
delay_ms(200);
output_b(100);

buton( ); // kullanlamaz.
}

void buton( )
{

zaman( );

output_a(2);


25
}

Burada zaman ve buton isimli iki ayr fonksiyon tanmlanmtr. buton fonksiyonu ierisinde zaman
fonksiyonu altrlabilir fakat zaman fonksiyonu ierisinde buton fonksiyonu altrlamaz.
Bunun nedeni ise buton fonksiyonu daha sonra yazldndan zaman fonksiyonu ierisinde
tanmlanamamaktadr.
Dolaysyla fonksiyonlar ana programda kullanmak iin void main( ) satrnn daha stne
yazmamz gerekir.




















Kontrol ve Dngler:
if Komutu : Kelime karl eerdir. C Dilinde if deyimini kullanmak iin u yol izlenir.
nce if deyimine bir ifade verilir. Bu ifade deerlendirilir ve ilemin sonucu doru ise if
deyiminden sonra gelen satr altrlr. Doru deilse altrlmaz.
Kullanm:
if(art)
Koul doru olduunda altrlacak satr;
rnek:
if(a<2)
goto tek;
else eklenerek kullanmak:
if komutunda art salanrsa bir ifade altrlr. art salanmazsa altrlmaz. Fakat else
kullanarak artn salanmad durumlarda yaplmas gereken ilem belirtilir.

26
Kullanm:
if(art)
Koul1;
else
Koul2;
rnek:
if (x==25)
x=1;
else
x=x+1;






rnek program:
#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
void main()
{
tek:
if(input(PIN_A0))
output_b(255);
else
output_b(1);
goto tek;

27
}
Bu rnekte A portunun 0. bitine bal olan buton 1 olmusa B portunun tm ular 1 yaplr. Buton
1 olmamsa B portunun 0. biti 1 olmaktadr.
While Komutu : Belirtilen art geerli olduu mddete ilem tekrarlanr.
Kullanm:
While(art)
{
ilemler;
}
rnek:
while(x<200)
{
output_a (255);
}
x deikeni 200 den kk olduu srece parantez ierisindeki komut satrlar tekrarlanr.
a=0;
while(a<4)
{
a++;
output_b (1);
}
yukardaki komut satrlar B portuna 1 bilgisini 4 defa gnderir.
Do while komutu: while dngsne ok benzer ve ayn mantkla alr. While komutunda koul
dngye girmeden nce yaplyordu. Yani nce koul kontrol ediliyor, eer doru olarak
deerlendirilir ise dngye giriliyordu. do while dngsnde ise nce dngye girilir, dng en az
bir kere altrlr, koul kontrol ise dng sonunda yaplr.
Kullanm:
Do

28
{
altrlacak satrlar;
} while (art);
rnek:
do
{
a++;
output_b(255);
} while(a!=10);
Bu rnekte a says bir arttrlarak b portuna gnderilir. Eer a 10 olursa ileme alt satrlardan
devam edilir. 10 deilse tekrar arttrlr.




rnek program:
#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
void main()
{
char a=0;
do
{
a=a+1;
delay_ms(250);
output_b(a);
} while(a!=3);

29
delay_ms(500);
output_b(255);
tek:
goto tek;
}
For Komutu : Belirlenen snrlar ierisinde istenilen ilemleri yapmak iin kullanlr.
x=0;
for(a=0; a<10;a=a+2)
{
x=x+1;
output_a (x);
}
yukardaki rnekte alt snr 0 (a=0), st snr 10 (a<10) ve a nn her dngde art miktardr.(a=a+2)
0 dan 10 ye kadar her dngde 2 arttrarak 5 defa B portuna her defasnda x e bal olarak farkl
bilgiler gnderir. 0, 1,2,3,4 bilgileri B portuna srasyla gnderilir.
rnek program
#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)

void main( )
{
char a,x=0;
for(a=0; a<10;a++)
{
x=x+1;
output_b (x);

30
delay_ms(250);
}
}
switch deyimi:
if deyiminin kullanmna ok benzer. i ie if deyimlerinin kullanlmas gereken yerlerde switch
deyimi kullanmak daha doru olur. Fakat bu olay switch deyiminin if deyiminden daha stn
olduunu gstermez. Her ikisinin de stn olduu kullanm alanlar vardr.
Kullanm:
Switch( koul) {
case sabit 1: altrlacak satr;
break;
case sabit 2: altrlacak satr;
break;
}

rnek: a deikenine bal olarak a nn 0.1.2 durumlarda b portuna 0.1.2 bilgisini gnderen
program.
#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
void main() {
char a=0;
tek:
switch (a)
{
case 0 : output_b(0);
delay_ms(250);
break;

31

case 1 : output_b(1);
delay_ms(250);
break;
case 2 : output_b(2);
delay_ms(250);
break;
}
a=a+1;
goto tek;
}



break ve continue deyimleri:
Tm dngler ierisinde kullanlan iki deyimdir.
Break deyimi; iinde kullanld dngy sonlandrmak iin kullanlr. Program ierisinde
break komutu grldne dng ierisindeki ilemler tamamlanmadan dng sonuna gidilir.
rnek:
Char a=0;
while (a<5) {
output_b(255);
delay_ms(250);
break;
a=a+1;
}

32
rnekte ilk olarak a deikeni kontrol edilir. a deeri 5 ten kk olduu iin b portuna 255
gnderilir daha sonra 250ms beklenir ve ilem bitirilir. Break komutu olmasayd bu ilem a nn 5
deerine ulamasna kadar devam edecekti.
Continue deyimi de benzer zellikler gsterir. Program ierisinde program aknn dng bana
dnmesini salar.
rnek:
char a=0;
while(a<5) {
output_b(255);
continue;
a++;
}

rnekte a nn 5 ten kk olduu kontrol edilir. b portuna 255 gnderilir. Continue komutu
grlnce dng bana dnlr dolaysyla b portuna srekli 255 gnderilmi olunur.


Sonsuz dngler:
tek :
goto tek;
ya da
char a=2;
while(a>1) {


}
burada a nn yani 2 nin 1 den byk olduu durumlarda parantez ierisindeki ilemler
gerekletirilecek yani srekli devam edecek.

33


























Diziler:
Tek Boyutlu Diziler:
DiziTipi DiziAd[n ]={dizi elemanlar };
n deeri dizideki eleman saysn gsterir. n yazlmadan da dizi oluturulabilir.
char dizi[3]={63,6,91};
char dizi[ ]={63,6,91}; // eklinde de yazlabilir.
output_b(dizi[0]);// Yazlr ise B portuna dizinin 0. eleman yani 63 bilgisi gnderilir.
char memo[]="Mehmet Ak";// memo isimli yaz trnde bir dizi oluturulmutur. Dizi yaz
trnde dizi olursa "Mehmet Ak" trnak ierisinde yazlmaldr.
Const char dizi [5] = {2,332,12,43,55}; // dizi const eklinde tanmlanrsa dizi RAM bellekte deil
de program belleinde saklanr.
ok Boyutlu Diziler:
Char dizi[ ] [ ]=

34
char const key[4][3] = {{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}};
rnekte 3 elemanl 4 ayr dizi olduunu gstermektedir.
Kullanrken
output_b(key[2][2]); eklinde kullanlabilir. Bylelikle b portuna 9 deeri gnderilmi olunur.
output_b(key[0][0]); ile B portuna 1 deeri gnderilir.
















ARETLER( POINTER):
Pointer tipinde deikenin tanmlanmasnda nce deikenin ne tip bir deeri gsterdiini
tanmlamak gerekir. Bunun yannda pointer tipi deikenler her zaman * iareti ile kullanlr:
veri tipi *d_adi;
Pointer ilemlerinde 2 ayr operatr kullanlr. Bunlardan biri deikenin bir adres bilgisi tuttuunu
gsteren ve o adresteki deeri veren *, dieri de deikenin hafzadaki adresini gsteren &
operatrdr. rnein;
m = &count;
kodu m deikenine countun adresini yazar. Bu ilemin countun deeri ile hi bir ii yoktur.
Yapt tek ey count deikeninin tutulduu adresi alp m deikenine atamaktr. Bunun yannda;
n = *m;
kodu da m adresinde tutulan deikenin deerini alr ve ne atar. Bir nceki kod ile bu kod beraber
dnlrse birincisi countun adresini me atyor, ikincisi de m adresindeki deeri, yani countun
tutulduu adresteki deeri, yani countun deerini ne atyor.
Pointer trleri ayn ise matematiksel ilemler yaplabilir.

35
rnek:
int x,y;
int p1=20;
x = &p1; // p1 deikeninin adres bilgisi x deikenine yklenir. ( adres 35 varsayalm)
y =*x; // x deikeninde tutulan adresin yani 35 nolu adresin ierisindeki bilgiyi y ye ykler.

Bu durumda x = 35 ve y = 20 (p1 deeri) olur.

rnek:

int p1=10;
int p2= 20;

x = &p1+p1;

x deikenine p1 ve p1 in tutulduu adres deeri toplanr.




STRUCTURE:
Structure yaps, birbiri ile ilikili farkl veri tipindeki deikenlerin tek bir yap altnda tutulmas
iin kullanlr. Structure yaps programc tarafndan tanmlanan bir api olduundan, kullanlmadan
nce ieriinin tanmlanmas gerekir. Structurei oluturan deikenlere eleman ad verilir.
Bir structurei oluturan deerler genelde birbiriyle ilikilidir. Structure tanmnn genel yaps
aadaki gibidir;
struct structure_adi
{
vtipi1 deg_ad1;
vtipi2 deg_ad2;

vtipi3 deg_ad3;
};
Structure tanm mutlaka ; ile bitmelidir. Bu tanm esnasnda hibir deiken tanmlamas
yaplmamtr ama bu tanm yapldktan sonra structure_ad ad ile bir veri tipi oluturulmu olur ve
bu structure tipi deiken tanmlamalarnda kullanlabilir. Bu veri tipine sahip bir deiken
yaratmak iin ise;
struct structure_adi degisken_adi;

36
satr gereklidir. Bu satir nceden tanmlanm yapda bir deiken tanmlar ve bu deiken tanml
olan structurein btn elemanlarna sahiptir. Derleyici tarafndan deiken tiplerinde tanmlama
yapldnda gerekleen ilemler burada da gerekleir. Derleyici tanmlanan deikenin structure
tipinin boyutu kadar hafza blounu deikene ayrr. rnein;
struct addr
{
char name[30];
char street[40];
char city[20];
char state[3];
unsigned long int zip;
};

Yapsnda bir structure tanmladktan sonra
struct addr addr_var;
Bir structure tipinde deiken tanmlamak iin, tanmlanacak deikenlerin isimleri, struct
tanmndan hemen sonra da verilebilir. rnein;
struct addr {
char name[30];
char street[40];
char city[20];
char state[3];
unsigned long int zip;
} addr_info, binfo, cinfo;
Satrlar hem addr tipinde bir structure tanmlar hem de bu veri yapsna sahip addr_info, binfo,
cinfo deikenlerini tanmlar. Ayni ekilde istenilen yapya sahip tek bir deiken tanmlanacaksa,
structtan sonra kullanlan veri tipi ismine ihtiya yoktur - sadece istenilen deikenin adi
verilebilir;
struct {
char name[30];
char street[40];
char city[20];

37
char state[3];
unsigned long int zip;
} addr_info;
Structure elemanlarna eriim
Bir structureda tanml olan her elemana . operatr ile ulalr. rnein bir nceki rnekte
tanmlanan addr_var deikenindeki zip alann deitirmek istersek;
addr_var.zip = 12345;
fadesini kullanrz. Elemanlar zerindeki ilemler ise tamamen elemann veri tipine baldr.
Normal bir tanmlama ile kullanlan deikenler zerinde yaplabilen btn ilemler elemanlar
zerinde de yaplabilir. rnein yazdrma ilemi;
printf("%d", addr_info.zip);
eklinde yaplrken, name stringinin btn elemanlar da;
for(t=0; addr_info.name[t]; ++t)
putchar(addr_info.name[t]);
ifadesi ile yazdrlabilir.
rnek:
void main( ) {

struct {
long kimlik;
int yas;

}bdate;

bdate.kimlik=12;
bdate.yas=30;

printf("\r\nKimlik No : %lu",bdate.kimlik);
printf("\r\nYas : %d",bdate.yas);

while(TRUE);

}








38
4. UYGULAMALAR


Led Diyod-Buton Uygulamalar

Led1: PIC 16F84 ile B portunun 0. bitine bal led diyodu 500 mili Saniye yakp sndren
program.



#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)


void main()
{

while(1)
{
output_b(1);
delay_ms(500);
output_b(0);
delay_ms(500);
}


}










39

Led2: PIC 16F84 ile B portuna bal led diyotlarn sras ile yanmasn salayan program.




#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)

char a;
void main()
{
a=1;
while(1)
{

output_b(a);
a=a<<1;
delay_ms(250);
if(a==256) a=1;
}

}

Programda ledlerin sadan sola deil de soldan saa ilerleyerek yanmas istenseydi a=128 deeri
atanr ve a=a>>1; eklinde deitirilirdi. Ayrca if kontrol de if(a= =0) a=128; yaplrd.







40
Buton 1 : A portunun 0. bitine bal olan butona basldnda B portunun 0.bitine bal olan led
diyodu yakp sndren program


#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)


void main()
{

while(1)
{
if(!input(PIN_A0))
{
output_b(1);
delay_ms(250);
output_b(0);
delay_ms(250);
}

}

}



41
Buton 2 : A portunun 0. bitine bal olan butona basldnda B portunun 0. bitine bal olan led
diyodu yakan, A portunun 1. bitine bal olan butona basldnda B portunun 1. bitine bal olan
led diyodu yakan program.


#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)


void main()
{

while(1)
{
if(!input(PIN_A0)) output_high(PIN_B0);
else output_low(PIN_B0);
if(!input(PIN_A1)) output_high(PIN_B1);
else output_low(PIN_B1);

}

}





42
Display ugulamalar

7 Segment 1: 7 Segment displayde sabit bir saynn gsterilmesi (rnek 5 rakam)



Ortak katotlu display kullanlmtr.

#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)

void main()
{

while(1)
{
output_b(109);
}


}











43

5 Rakam gstermesi iin a,c,d,f,g segmentlerinin lojik1, dier segmentlerin lojik 0 olmas
gerekmektedir. PIC 16F84 ularna balant ekline gre ( rnekte RB0 dan balanarak balant
yaplmtr.) porta gnderilecek deer hesaplanr.
ekildeki tabloya baklarak hangi rakam iin porta hangi bilginin gnderilmesi gerektii
bulunur.
Rakam H G F E D C B A Binary Desimal
0 0 0 1 1 1 1 1 1 00111111 63
1 0 0 0 0 0 1 1 0 00000110 6
2 0 1 0 1 1 0 1 1 01011011 91
3 0 1 0 0 1 1 1 1 01001111 79
4 0 1 1 0 0 1 1 0 01100110 102
5 0 1 1 0 1 1 0 1 01101101 109
6 0 1 1 1 1 1 0 1 01111101 125
7 0 0 0 0 0 1 1 1 00000111 7
8 0 1 1 1 1 1 1 1 01111111 127
9 0 1 1 0 1 1 1 1 01101111 111

7 Segment 2: 7 Segment displayde 0-9 aras sayma ileminin yaplmas
Uygulama devresi uygulama 3 teki ile ayn olacak.
#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)

char dizi[]={63,6,91,79,102,109,125,7,127,111};
char x=0;

void main()
{

while(1)
{
output_b(dizi[x]);
delay_ms(500);
x++;
if(x>9) x=0;
}
}
Bu uygulamada 0-9 aras sayma yapmak iin 7 segmente gnderilecek deerler bir dizide
gsterilmitir. Dizi elemanlar srasyla porta gnderilerek ve arada gecikme sresi braklarak
sayma ilemi yaptrlmtr.

44
LCD 1: 2x16 lk bir LCD displayde sabit bir yaznn yazdrlmas.

#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#include<lcd.c>

void main()
{
lcd_init();

while(1)
{
lcd_gotoxy(1,2); // LCD nin 1. stun, 2 satrna yazdrmak iindir.
lcd_putc("\ mehmet\ ");
}
}
LCD uygulamalarnda LCD.C include dosyas kullanlmaldr. Bu dosya genel bir dosyadr.
Hem B portu iin hemde D portu iin kullanlabilmektedir. Eer B portu kullanlacak ise
driver klasr ierisinden LCD.C dosyas almal ve B portu kullanlacak ekilde
ayarlanmaldr. Ayarlama aadaki satrn nndeki // iaretlerinin kaldrlmas ile
olacaktr.
//#define use_portb_lcd TRUE
#define use_portb_lcd TRUE
// iareti kaldrld zaman yukardaki ekilde renk deiimi olur.

45
LCD 2 : LCD Displayde bir deikenin yazdrlmas
Uygulama devresi bir nceki uygulama ile ayn olacaktr.
#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#include<lcd.c>
char n=0;
void main()
{
lcd_init();

while(1)
{
n++;
if(n>255) n=0;
lcd_gotoxy(1,1); // Bu satr ile 1. satr 1. stundan balanarak yazlr.
printf(LCD_PUTC, "deger=%03u",n); // 03 u ile 3 basamakl say ve bo basamakta 0
//grntlenecek ekilde yazdrlr.
delay_ms(200);
}
}

Ekran grnts bu ekilde olmaktadr. Say 0 dan balayarak sayar ve 255 ten sonra tekrar 0 a
dner. Burada yazdrlan n deeri yerine baka bir yerden alnan deiken deeri de yazdrlabilir.
( rnek ADC giriindeki bir bilgi)









46
LCD 3: 2x16 lk displayde sadan sola doru kayan yaz uygulamas.
Devre yukardaki devre ile ayn olacaktr.
#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)

#include<lcd.c>
char x=16;
void main()
{
lcd_init();

while(1)
{
x--;
lcd_gotoxy(x,1);
lcd_putc("\ MEHMET\ ");
delay_ms(200);
if(x= =-6) x=16;
}
}
MAX 7219 1: MAX 7219 7 segment display tarayc entegresi uygulamas (stenilen segmente
istenilen deer yazdrma)
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-
4
RA4/T0CKI
6
RA5/AN4/SS
7
RE0/AN5/RD
8
RE1/AN6/WR
9
RE2/AN7/CS
10
OSC1/CLKIN
13
OSC2/CLKOUT
14
RC1/T1OSI/CCP2
16
RC2/CCP1
17
RC3/SCK/SCL
18
RD0/PSP0
19
RD1/PSP1
20
RB7/PGD
40
RB6/PGC
39
RB5
38
RB4
37
RB3/PGM
36
RB2
35
RB1
34
RB0/INT
33
RD7/PSP7
30
RD6/PSP6
29
RD5/PSP5
28
RD4/PSP4
27
RD3/PSP3
22
RD2/PSP2
21
RC7/RX/DT
26
RC6/TX/CK
25
RC5/SDO
24
RC4/SDI/SDA
23
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
15
MCLR/Vpp/THV
1
U1
PIC16F877
A
14
B
16
C
20
D
23
E
21
F
15
G
17
DP
22
DIG0
2
DIG1
11
DIG2
6
DIG3
7
DIG4
3
DIG5
10
DIG6
5
DIG7
8
DIN
1
LOAD
12
CLK
13
ISET
18
DOUT
24
U3
MAX7219
R1
4k7
R2
4k7
R3
4k7
R4
4k7
R5
10k
C1
100n




47

#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#use delay(clock=20000000)
#include <max7219.c>


void main( )
{

init_7219( );

while(true){

send_16bit(1,1); // 1. display e 1 rakamn yazdrr.
send_16bit(2,2); // 2. display e 2 rakamn yazdrr.
send_16bit(3,3); // 3. display e 3 rakamn yazdrr.
send_16bit(4,4); // 4. display e 4 rakamn yazdrr.

}
}

Bu program yazarken max 7219 driver dosyas gerekmektedir.
Bu dosya max7219.c isimli olarak driver klasr ierisine kaydedilmelidr.

////////////////////////////////////////
Bu alanda haberlemede PIC in hangi ular kullanlacaksa o tanmlanr.
////////////////////////////////////////
#define da pin_c0
#define cs pin_c1
#define clk pin_c2
/////////////////////////////////////////

void send_16bit(byte address,byte data)
{
byte i;
#bit carry=0x03.0;
carry=0;
output_low(cs);
for(i=0;i<8;i++)
{
if((address & 0b10000000)==0)
output_low(da);
else
output_high(da);
rotate_left(&address,1);

output_high(clk);
delay_us(50);
output_low(clk);
delay_us(50);
}


48
for(i=0;i<8;i++)
{
if((data & 0b10000000)==0)
output_low(da);
else
output_high(da);

rotate_left(&data,1);
output_high(clk);
delay_us(50);
output_low(clk);
delay_us(50);
}
output_high(cs);
}

void init_7219()
{
send_16bit(0x09,0xff); //decode modu
delay_us(100);
send_16bit(0x0a,0x0f); //parlaklk ayar( 0-f aras yaplabilir.)
delay_us(100);
send_16bit(0x0b,0x03); //tarama yaplan display adeti 0x03 olursa 4 adet displayi tarar
delay_us(100);
send_16bit(0x0c,0x01); //display i kapatmak iin kullanlr.(0x00 kapal)
delay_us(100);
send_16bit(0x0f,0x00); //displayleri test etmek iindir. lk nce tarama yaplr. (0x01 test taramas
yapar.)
delay_us(100);
}

Decode modu:
Bu modde 0x09 nolu register e gnderilen bilgiye gre kod zme ilemi yaplr. rnein FF
yazldnda tm displayler kod zlm olur. Yani biz herhangi bir displaye 2 bilgisi gnderirsek
bu bilgi 2 olarak gzkr. Eer kod zme aktif edilmezse FF yerine 01 yazlr ise 0. displayde kod
zlr. Dierlerinde ise tek bitlik bilgi gnderilmi olunur.
REGISTER DATA HEX
KOD
DECODE
MODU
D7 D6 D5 D4 D3 D2 D1 D0
Kod zlmez 0 0 0 0 0 0 0 0 0x00
Sadece 1
displayde
zlr
0 0 0 0 0 0 0 1 0x01
lk 4 display de
zlr
0 0 0 0 1 1 1 1 0x0F
Tm
displaylerde
kod zlr.
1 1 1 1 1 1 1 1 0xFF



49

Font Modu:
Displayde
Grnen
Binary Karl Desimal
Karl
Displayde nokta
gstermek iin
0 0 0 0 0 0 128+0=128
1 0 0 0 1 1 128+1=129
2 0 0 1 0 2 128+2=130
3 0 0 1 1 3 128+3=131
4 0 1 0 0 4 128+4=132
5 0 1 0 1 5 128+5=133
6 1 1 0 0 6 128+6=132
7 0 1 1 1 7 128+7=135
8 1 0 0 0 8 128+8=136
9 1 0 0 1 9 128+9=137
- 1 0 1 0 10 128+10=138
E 1 0 1 1 11 128+11=139
H 1 1 0 0 12 128+12=140
L 1 1 0 1 13 128+13=141
P 1 1 1 0 14 128+14=142
Boluk 1 1 1 1 15 128+15=143



Seri letiim 1: PIC 16F84 ile seri bir bilginin gnderilmesi.

#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)

50
#use rs232(baud=9600, xmit=PIN_B2,rcv=PIN_B1)

void main()
{

while(1)
{
putc('M');
delay_ms(500);
}

}
Bu uygulamada PIC 16F84 ten seri bir bilginin gnderilmesi salanmtr. Proteus simulasyonunda
virtual terminal seildiinde ve gerekli ayarlamalar yapldnda 500mS aralklarla M karakteri
gnderilecektir. Burada dikkat edilmesi gereken husus virtual terminal ayarlarnn doru yaplmas
gerekmektedir.

C programnda baud hz olarak ne belirtilmise burada da ayn hz ayarlanmaldr. Ayrca dat biti
parite biti gibi ayarlamalar program ierisinde yazlmsa burada doru olarak tanmlanmaldr.
RS232 KOMUTLARI:
#use rs232 (seenekler)
Seenekler
BAUD=x Baud hz
XMIT=pin Bilgi gnderim pini
RCV=pin Bilgi alm pini
FORCE_SW Yazlmla farkl 2 UART pini tanmlarken kullanlr.(Donanmsal
olarak USART destekleyen PIC lerde kullanlabilir)
BRGH1OK Farkl baud oranlarna izin vermek iin kullanlr.
ENABLE=pin RS 485 iletiimde kullanlr.
INVERT Seri bilginin polaritesini deitirmek iin kullanlr.( Max 232 da
data+ data ularn yer deitirmek iin)
PARITY=X X Deikeni N,E ve O harfleri kullanlr (NOT, EVEN, ODD)
BITS =X X deikeni 5-9 aras bit deeri olabilir.


51
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
RS232 haberleme protokolnde haberleme hz baud, bilgi gnderme ucu xmit ve bilgi
alma ucu rcv belirlenmelidir.
Baud hz olarak 300-9600 aras bir deer verilebilir.
getc( ) , getch( ), getchar( ) komutlar:
rs232 Haberleme protokolnde rcv ucundan gelen bilgileri almak iin kullanlr.
value= getc( ) eklinde kullanlr. rcv ucundan seri olarak gelen bilgi value isimli deikene atanr.

putc (cdata), putchar (cdata) Komutlar:
rs232 Seri iletiimde bilgi gndermek iin kullanlr. Bilgi char tipli veri olarak gnderilir.
gets (string) Komutu:
String tipli verileri almak iin kullanlr.
printf (string) Komutu:
Seri olarak bilgi gnderiminde kullanlr.
printf("Merhaba");
printf("RTCC Degeri =%2x\n\r",get_rtcc());
printf("%2u %X %4X\n\r",x,y,z);
printf(LCD_PUTC, "n=%u",n);
eklinde kullanmlar vardr.
rnek Format:
zellik Deer=0x12 Deer=0xfe
%03u 018 254
%u 18 254
%2u 18 *
%5 18 254
%d 18 -2
%x 12 fe
%X 12 FE
%4X 0012 00FE
%3.1w 1.8 25.4


52
c Character
s String veya character
u Unsigned int
d Signed int
Lu Long unsigned int
Ld Long signed int
x Hex int (kk karakter)
X Hex int (byk karakter)
Lx Hex long int (kk karakter)
LX Hex long int (byk karakter)
f Float with truncated decimal
g Float (tam saydan fazlas silinmi)
e Float (tam sayya yuvarlanm)

set_uart_speed (baud, [stream]) Komutu:
100-115200 aras baud hz ile uart haberleme hz ayarlanabilir.
set_uart_speed(2400);
eklinde kullanlr.



Seri letiim 2: Seri bilgi gnderilmesi ve alnmas

#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT

53
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_B2,rcv=PIN_B4)
int a;
void main()
{

while(1)
{
a=getc();
delay_ms(500);
putc(a);
}

}
Bu uygulamada ise seri olarak gelen bilgi 500mS bekletilerek yine seri olarak gnderilmektedir.
Virtual terminalden girilen karakter gecikmeli olarak terminal ekrannda grntlenecektir. Seri
olarak alnan bilgiye gre ilem yaplabilir.
Seri letiim 3: Seri olarak alnan bilgi a karakteri ise seri olarak M karakteri gnderen, a deil ise
X karakteri gnderen program.
Uygulama devresi ayn devredir.
#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_B2,rcv=PIN_B4)
int deg;




void main()
{

while(1)
{
deg=getc();
delay_ms(500);
if(deg=='a') putc('M');
else putc('X');
}

}
ADC 1: Analog Dijital Dntrc Kullanm ( Analog utan okunan deerin LCD de
gsterilmesi)
ncelikle ADC komutlarndan ve nasl kullanlacandan bahsedelim.
ADC Komutlar ve ayarlamalar:
setup_adc( mod ); Bu komut ile analog-digital konvertr ayarlamas yaplr.

54
Mod olarak
ADC_OFF : ADC Kapal
ADC_CLOCK_INTERNAL : Dahili osilatr
ADC_CLOCK_DIV_32 : Fosc/32
ADC_CLOCK_DIV_8 : Fosc/8
ADC_CLOCK_DIV_2 : Fosc/2

Kullanlabilir.

setup_adc_ports( Deer ); Bu komut ile ADC giri ucu seilmektedir.

Deer olarak
NO ANALOG
ALL ANALOG
A0A5
E0..E2
eklinde mikrodenetleyici trne gre seim yaplabilir.

NO_ANALOGS
ALL_ANALOG
AN0_AN1_AN2_AN4_AN5_AN6_AN7_VSS_VREF 1
AN0_AN1_AN2_AN3_AN4
AN0_AN1_AN2_AN4_VSS_VREF
AN0_AN1_AN3
AN0_AN1_VSS_VREF
AN0_AN1_AN4_AN5_AN6_AN7_VREF_VREF
AN0_AN1_AN2_AN3_AN4_AN5
AN0_AN1_AN2_AN4_AN5_VSS_VREF
AN0_AN1_AN4_AN5_VREF_VREF
AN0_AN1_AN4_VREF_VREF
AN0_AN1_VREF_VREF
AN0
AN0_VREF_VREF
ANALOG_RA3_REF
A_ANALOG
A_ANALOG_RA3_REF
RA0_RA1_RA3_ANALOG
RA0_RA1_ANALOG_RA3_REF
ANALOG_RA3_RA2_REF
ANALOG_NOT_RE1_RE2
ANALOG_NOT_RE1_RE2_REF_RA3
ANALOG_NOT_RE1_RE2_REF_RA3_RA2
A_ANALOG_RA3_RA2_REF
RA0_RA1_ANALOG_RA3_RA2_REF
RA0_ANALOG
RA0_ANALOG_RA3_RA2_REF

Deerleri kullanlabilir (PIC 16F877iin bu deerler kullanlabilir.)
set_adc_channel(kanal); Bu komut ile analog giri olarak kullanlacak olan u seilir.

set_adc_channel( 1 );


55
setup_adc_ports( ) ALL_ANALOG seilmise aadaki deere baklarak giri kanal seilmelidir.
A0 A1 A2 A3 A5 E0 E1 E2

#device ADC=10 // 10 Bit deer okumak iin ayarlanmaldr.

Deer okumak iinse
a = read_adc();
a gibi bir deikene dijitale dntrlm analog bilgi kaydedilir.
























56


#include <16F877.h>
#device ADC=10 // 10 Bit deer okumak iin ayarlanmaldr.
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#include<lcd.c>
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

int32 n;
void main()
{
lcd_init();

setup_adc(ADC_CLOCK_DIV_2 ); // clock deeri Fosc/2 olarak seilmitir.
SETUP_ADC_PORTS( ALL_ANALOG );// Tm ular analog olarak ayarlanmtr.
set_adc_channel( 1 ); // Giri ucu olarak 1 nolu u (RA1) seilmitir.


while(1)
{

n=read_adc();
lcd_gotoxy(1,1);
printf(LCD_PUTC, "deg.=%4lu",n); // lcd de yazdrmak iin long unsigned olarak yazdrmaldr.

}
}

57
Motor 1: (DC Motor): Butonlara baslarak motor yn kontrol, potansiyometre ile de hz
kontrol yaplabilmektedir.
RA7/OSC1/CLKIN
16
RB0/INT
6
RB1/RX/DT
7
RB2/TX/CK
8
RB3/CCP1
9
RB4
10
RB5
11
RB6/T1OSO/T1CKI
12
RB7/T1OSI
13
RA0/AN0
17
RA1/AN1
18
RA2/AN2/VREF
1
RA3/AN3/CMP1
2
RA4/T0CKI/CMP2
3
RA6/OSC2/CLKOUT
15
RA5/MCLR
4
U1
PIC16F628A
IN1
5
IN2
7
ENA
6
OUT1
2
OUT2
3
ENB
11
OUT3
13
OUT4
14
IN3
10
IN4
12
SENSA
1
SENSB
15
GND
8
VS
4
VCC
9
U2
L298
+88.8
B1
12V
D1
1N5401
D2
1N5401
D3
1N5401
D4
1N5401
R2
10k
R3
10k
RV1
100

#include <16F628.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)


void main( ){

while(true){
if(!input(PIN_A0)) output_low(PIN_B0);
else output_high(PIN_B0);
if(!input(PIN_A1)) output_low(PIN_B1);
else output_high(PIN_B1);

}
}















58
Motor 2: (Step Motor): Butonlara basarak step motor her ili ynde de kontrol edilebilir.
RA7/OSC1/CLKIN
16
RB0/INT
6
RB1/RX/DT
7
RB2/TX/CK
8
RB3/CCP1
9
RB4
10
RB5
11
RB6/T1OSO/T1CKI
12
RB7/T1OSI
13
RA0/AN0
17
RA1/AN1
18
RA2/AN2/VREF
1
RA3/AN3/CMP1
2
RA4/T0CKI/CMP2
3
RA6/OSC2/CLKOUT
15
RA5/MCLR
4
U1
PIC16F628A
1B
1
2B
2
3B
3
4B
4
5B
5
6B
6
7B
7
8B
8
1C
18
2C
17
3C
16
4C
15
5C
14
6C
13
7C
12
8C
11
COM
10
U2
ULN2803
+88.8
BAT1
12V
R1
10k
R2
10k




Step angle adm asdr. Bu a yazlan programa gre deitirilmelidir. Yani step motor 4 admda
tam tur dndrlyorsa step angle 90 olmaldr. 8 Admda Dndrlecekse 45 dersece olarak
ayarlanmaldr. Ayrca motorun besleme gerilimi 12V, 9V ya da farkl gerilim olabilir. Uygulamada
buna dikkat edilmelidir. Motor ularnn tespitinde her step motorun farkl olabilecei dnlerek
sabit u bulunmal ve ona gre besleme gerilimi verilmelidir.

59
Src olarak ULN 2803 entegresi kullanlmtr. Her bir utan 500mA akm ekilebilir.
Kullanlan step motorun ekecei akma gre src entegre seilmelidir. Step motorun ular asla
dorudan PIC e balanmamaldr. Aksi takdirde PIC bozulur.

#include <16F628.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
int a;


BYTE const poz8[9] = { 0b0000,
0b1000,
0b1001,
0b0001,
0b0101,
0b0100,
0b0110,
0b0010,
0b1010};



void main( ) {
a=0;
while(true)
{

if(!input(PIN_A0))
{
if(a>8) a=0;
a++;
output_b(poz8[a]);
delay_ms(50);


}

if(!input(PIN_A1))
{
if(a<1) a=9;
a--;
output_b(poz8[a]);
delay_ms(50);

}
}
}





60

GR/IKI (INPUT/OUTPUT) KOMUTLARI:
output_low (pin);
Belirtilen pin i 0(sfr) yapar.
rnek: output_low(PIN_B7); // B Portunun 7. bitini 0 yapar.
output_high (pin);
Belirtilen pin i 1 yapar.
rnek: output_high(PIN_B7); // B Portunun 7. bitini 1 yapar
output_bit (pin, deer);
Belirtilen pini 1 ya da 0 yapar.
output_a (deer);
A portuna istenilen bir deeri gndermek iin kullanlr.
output_b( ); output_c( ); output_d( )
eklinde dier portlarda k olarak ynlendirilir ve deer gnderilebilir.
Bu komut kullanldnda port hem k olarak ynlendirilir hem de porta belirtilen deer
gnderilir.

SPI KOMUTLARI

setup_spi (mode) Komutu:
SPI Haberlemesi yaplmas iin SPI kurulumu yaplmas gerekmektedir. mode ii yazlabilecekler;
SPI_MASTER, SPI_SLAVE, SPI_SS_DISABLED
SPI_L_TO_H, SPI_H_TO_L
SPI_CLK_DIV_4, SPI_CLK_DIV_16,
SPI_CLK_DIV_64, SPI_CLK_T2
SPI Haberlemede 3 veya 4 u kullanlabilir. Bunlar DATA IN, DATA OUT, CLK, SELECT
ulardr. Sadece bilgi okunacaksa DATA OUT kullanlmayabilir.
spi_read (data) Komutu:
a=spi_read(adres)
SPI ile okunan deer bir deikene aktarlmaldr. Okunmak istenen adres belirtilmelidir.

61

SPI_WRITE (value) Komutu:
spi_write(0xa); Kullanlan eeprom a gre belirlenen bir deerdir.
spi_write(address); Bilgi yazlmak istenen adres bilgisidir.
spi_write(data); Yazlmak istenen veri deeridir.
I2C KOMUTLARI
#use i2c(master, sda=PIN_C4, scl=PIN_C3)
I2C Haberlemesi kullanlacaksa yukardaki tanmlama yaplm olmaldr. Programda CCS
derleyicisi ierisinde bulunan INCLUDE dosya kullanlarak program yazm sade ve kolay olur.
sda= PIN_C4 ile harici EEPROM un sda ucunun PIC te hangi uca balanaca tanmlanr.
scl=PIN_C3 ile scl ucunun balanaca PIC ucu tanmlanm olunur.
i2c_start();
i2c_write(0xa0);
i2c_write(address);
data=i2c_read(0);
i2c_stop();
Komutlar kullanlmaktadr. INCLUDE dosyalardan faydalanlabilir.
rnek: 2416.c include dosyas kullanlacak olursa read_ext_eeprom komutu bir deikene
eitlenir ve harici EEPROM dan veri okunur.
write_ext_eeprom( adres,data) komutu kullanlarak istenilen bir adrese bilgi yazdrlabilir.
Harici EEPROM uygulamasnda dikkat edilmesi gereken bir husus sda ve scl ularna pull-up
direnlerinin balanmas gerektiidir. ( 4,7Kohm luk bir diren +5V ucuna balanmaldr)
Program Yazm Format:

Program Komutu Aklama
#if defined(__PCM__)

Mikrodenetleyici grubunu belirlemek
iindir.( 12Bit, 14Bit ) Kullanlmas
zorunlu deildir.
#include <16F628.h>

Mikrodenetleyici eitini belirtmek
iin kullanlr.
#fuses NOWDT,NOPROTECT,INTRC_IO,NOMCLR

Mikrodenetleyicide sigorta
ayarlamalar iin kullanlr. ( Kod
koruma, osilatr tipi gibi)
#use delay(clock=4000000)

Devrede kullanlacak osilatr frekans
belirtilmelidir.
rnekte 4000000Hz = 4MHz osilatr

62
frekans seilmitir.
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1) RS232 haberlemesi kullanlacak ise
TX, RX ular belirlenir ve bilgi ak
hz belirlenir.)
void main( )
{


}
Ana programn olduu yerdir.
{ } parantezi ierisine PIC
mikrodenetleyiciye yaptrlmak istenen
ilemlerin komutlar yazlr.


Ana program parantezinden nce varsa deiken tanmlamalar yaplmaldr. Ayrca kullanlan
eleman varsa ( LCD, KEYBOARD gibi) onlarn dosyalar tanmlanmaldr.

You might also like