"Karmaşıklığı kontrol etmek Programlamanın en asıl işidir."

16F628A etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
16F628A etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

22 Ağustos 2014 Cuma

CCS C Pic Programlama - 1 Giriş

0 yorum
Pic Nedir ? (Peripheral Interface Controller)





(resimde gördüğünüz gibi çok baçaklı çok işlevsel birşeydir :))

Adından da anlaşılacağı gibi bir ara birim denetleyicisidir(giriş/cıkış)

Çok geniş bir ürün ailesinin ilk üyesi olan PIC16C54 bu ihtiyacın ilk meyvesidir. PIC işlemcileri RISC benzeri işlemciler olarak anılır.

PIC16C54 12 Bit komut hafıza genişliği olan 8 bitlik CMOS bir işlemcidir.18 bacaklı dip kılıfta 13 I/O bacağına sahiptir ve 20 Mhz osilator hızına kadar kullanılabilir. 33 adet komut içermektedir. 512 byte program epromu ve 25 byte RAM`i bulunmaktadır. Bu hafıza kapasitesi birçok insanı güldürmüştür sanırım ama bir risc işlemci olması birçok işin bu kapasitede uygulanmasına olanak vermektedir. 

PIC serisi tüm işlemciler herhangi bir ek bellek veya giriş/çıkış elemanı gerektirmeden sadece 2 adet kondansatör, 1 adet direnç ve bir kristal ile çalıştırılabilmektedir. Tek bacaktan 40 mA akım çekilebilmekte ve entegre toplamı olarak 150 mA akım akıtma kapasitesine sahiptir. Entegrenin 4 Mhz osilator frekansında çektiği akım çalışırken 2 mA stand-by durumunda ise 20uA kadardır. 

CCS C derleyicisi 

CCS-C , “Custom Computer Services” Firmasının PIC Mikro Denetleyicileri için geliştirdiği özel bir C derleyicisidir. Standart C operatörleri yanı sıra PIC’lere özel dahili kütüphaneler ve önişlemci direktifleri de içeren program birçok donanım için hazır kodlar da sunmaktadır.

Basit Bir Örnek Yapalım

SET_TRIS_X = Port pinlerini Giriş veya Çıkış olarak ayarlar

OUTPUT_HIGH = Port'un istenilen bit'i lojik 1 yapılır.

OUTPUT_LOW = Port'un istenilen bit'i lojik 0 yapılır

#fuses *ayar* = sigorta ayarı yapılmasını sağlar( *ayar* cihaza bağlı olarak degişebilir)

Bazı yaygın seçenekler şunlardır;

XT = Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
HS = High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
NOWDT = No Watch Dog Timer
NOPUT = No Power Up Timer
NOPROTECT = Code not protected from reading 
NOBROWNOUT = No brownout reset
NOLVP = No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
NODEBUG = No Debug mode for ICD
NOWRT = Program memory not write protected
NOCPD = No EE protection

#use delay(clock=osilatör frekansı) Örnek Kullanım ; #use delay(clock=20000000) // HS OSC


//==============================================================================
#include <16f876.h> // Kullanılcak denetleyicinin başlık dosyası tanımlanıyor
// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=20000000)  // Gecikme fonksiyonu için kullanılan osilatör frekansı
//==============================================================================
void main () {
setup_spi(SPI_SS_DISABLED); // SPI birimi devre dışı
setup_timer_1(T1_DISABLED); // Timer1 devre dışı
setup_timer_2(T2_DISABLED,0,1); // Timer2 devre dışı
setup_adc_ports(NO_ANALOGS); // ANALOG girdi yok
setup_adc(ADC_OFF);  //  ADC birimi devre dışı
setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı
set_tris_b(0x00); // B portu çıkış olarak ayarlandı
output_b(0x00); // B portu komple 0 yapılıyor
while (1){ // Sonsuz Döngü
output_high(pin_b1); // B1 pin'i LOJİK-1 yapılıyor
}
}




B portunu kullanarak 8 ledi Sırayla yakma

//==============================================================================
#include <16f876.h> // Kullanılcak denetleyicinin başlık dosyası tanımlanıyor
// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=20000000)  // Gecikme fonksiyonu için kullanılan osilatör frekansı
//==============================================================================
int kaydir; // 8 bitlik bir degişken tanımlandı
int led=1; // 8 bitlik bir degişken tanımlandı
void main () {
setup_spi(SPI_SS_DISABLED); // SPI birimi devre dışı
setup_timer_1(T1_DISABLED); // Timer1 devre dışı
setup_timer_2(T2_DISABLED,0,1); // Timer2 devre dışı
setup_adc_ports(NO_ANALOGS); // ANALOG girdi yok
setup_adc(ADC_OFF);  //  ADC birimi devre dışı
setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı

set_tris_b(0x00); // B portu çıkış olarak ayarlandı
output_b(0x00); // B portu komple 0 yapılıyor
while (1){ // Sonsuz Döngü
led=1; // For döngüsünden çıkıldığında ledi 1 yap
for (kaydir=0;kaydir<8;led<<=1){  // KAYDİR 8 olana kadar LED degişkenini sola kaydir 1e eşitle
output_b(led); // LED değerini b portuna aktar
delay_ms(100); // 100 milisaniye bekle
}
}
}



























İletişim Formu

Ad

E-posta *

Mesaj *