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

pic programlama dersleri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
pic programlama dersleri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

28 Ağustos 2014 Perşembe

CCS C Toggle uygulaması

0 yorum

output_toggle( )




Sözdizimi:
output_toggle(pin)

Parametreler:
Pinler cihazların .h dosyasında tanımlanır.Gerçek değeri biraz adresidir. #define PIN_A3 43: Örneğin, port (bayt 5) biraz 3 5 * 8 + 3 veya 43'e değerini aşağıdaki gibi bu tanımlanır olurdu.

Dönüş:
Tanımsız

Fonksiyon:
Belirtilen pinin yüksek(high) / düşük(low) durumunu değiştirir. (0 ise 1 -> 1 ise 0) yapar

Durum:
Bütün cihazlar

Gereksinim:
Pin sabitleri .h dosyası cihazlarda tanımlandığı gibidir

Örnek:
output_toggle(PIN_B4);

Örnek Dosya:
Yok





Örnek Uygulama ;

/******************************************************
      PIC16F877 ile Led Toggle Uygulaması

Bu program ile B portuna bağlı 8 LED'i TOGGLE komutu ile
sırayla yakıp söndürmektedir.

Yazan   :SERDAR ÇİÇEK
*******************************************************/
#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları
#use delay(clock=4000000)   // Gecikme fonksiyonu için kullanılan osilatör frekansı belirtiliyor
#use fast_io(b) // Port yönlendirme komutları B portu için geçerli
/********* ANA PROGRAM FONKSİYONU********/
void main ()
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş 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);    // RB0 portu tümüyle çıkış olarak ayarlandı.

   output_b(0x00);      // B portu çıkışı sıfırlanıyor

   basla:

   delay_ms(500);          // 500 ms'lik gecikme veriliyor
   output_toggle(pin_b0);  // RB0 ucunun çıkış durumu tersleniyor
   delay_ms(500);          // 500 ms'lik gecikme veriliyor
   output_toggle(pin_b1);  // RB1 ucunun çıkış durumu tersleniyor
   delay_ms(500);          // 500 ms'lik gecikme veriliyor
   output_toggle(pin_b2);  // RB2 ucunun çıkış durumu tersleniyor
   delay_ms(500);          // 500 ms'lik gecikme veriliyor
   output_toggle(pin_b3);  // RB3 ucunun çıkış durumu tersleniyor
   delay_ms(500);          // 500 ms'lik gecikme veriliyor
   output_toggle(pin_b4);  // RB4 ucunun çıkış durumu tersleniyor
   delay_ms(500);          // 500 ms'lik gecikme veriliyor
   output_toggle(pin_b5);  // RB5 ucunun çıkış durumu tersleniyor
   delay_ms(500);          // 500 ms'lik gecikme veriliyor
   output_toggle(pin_b6);  // RB6 ucunun çıkış durumu tersleniyor
   delay_ms(500);          // 500 ms'lik gecikme veriliyor
   output_toggle(pin_b7);  // RB7 ucunun çıkış durumu tersleniyor
   delay_ms(500);          // 500 ms'lik gecikme veriliyor

   goto basla;
}

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 *