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

ccs c pic programlama etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
ccs c pic programlama 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;
}

CCS C Müzik,Ses Uygulaması

0 yorum

generate_tone (frekans , süresi)

ses driver

TONES.C (kodları okuyamayanlar için TIKLAYIN)


#ifndef  MUSIC_NOTES#define  MUSIC_NOTES
//            NOTE                 FREQUENCY
//                     Octave0  Octave1  Octave2  Octave3
const long C_NOTE[4]  ={ 262,     523,    1047,    2093};
const long Db_NOTE[4] ={ 277,     554,    1109,    2217};
const long D_NOTE[4]  ={ 294,     587,    1175,    2349};
const long Eb_NOTE[4] ={ 311,     622,    1245,    2489};
const long E_NOTE[4]  ={ 330,     659,    1329,    2637};
const long F_NOTE[4]  ={ 349,     698,    1397,    2794};
const long Gb_NOTE[4] ={ 370,     740,    1480,    2960};
const long G_NOTE[4]  ={ 392,     784,    1568,    3136};
const long Ab_NOTE[4] ={ 415,     831,    1661,    3322};
const long A_NOTE[4]  ={ 440,     880,    1760,    3520};
const long Bb_NOTE[4] ={ 466,     923,    1865,    3729};
const long B_NOTE[4]  ={ 494,     988,    1976,    3951};
#endif
#define TONE_PIN  PIN_B0

void do_delay(int ms_delay, int num_ms, int us_delay, int num_us)  {
 int i;

 for(i=0;i<num_ms;i++)
  delay_ms(250);
 delay_ms(ms_delay);
 for(i=0;i<num_us;i++)
  delay_us(250);
 delay_us(us_delay);
}

void generate_tone(long frequency, long duration)
{
   int32 total_delay_time;                      // in microseconds
   long total_ms_delay_time, total_us_delay_time;
   int num_us_delays, num_ms_delays, ms_delay_time, us_delay_time;
   long num_periods;

   total_delay_time = (1000000/frequency)/2-10; // calculate total delay time (10 for error)

   total_ms_delay_time = total_delay_time/1000; // total delay time of ms
   num_ms_delays = total_ms_delay_time/250;     // number of 250ms delays needed
   ms_delay_time = total_ms_delay_time%250;     // left over ms delay time needed

   total_us_delay_time = total_delay_time%1000; // total delay time of us (ms already acounted for)
   num_us_delays = total_us_delay_time/250;     // number of 250us delays needed
   us_delay_time = total_us_delay_time%250;     // left over us delay time needed

   num_periods = ((int32)duration*1000)/(1000000/frequency);

   while((num_periods--) != 0)
   {
      do_delay(ms_delay_time, num_ms_delays, us_delay_time, num_us_delays);
      output_high(TONE_PIN);
      do_delay(ms_delay_time, num_ms_delays, us_delay_time, num_us_delays);
      output_low(TONE_PIN);
   }

   return;
}





Örnek Uygulama (Kodları okuyamayanlar TIKLAYIN)


/******************************************************************
 PIC16F877 ile Ses Uygulaması
*******************************************************************/
#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ılacak osilatör frekansı belirtiliyor.
#include <TONES.c>  // TONES.c dosyası programa ekleniyor
// Ses tonlarından oluşan dizi tanımlanıyor
const char muzik[48]={C_NOTE[0],C_NOTE[1],C_NOTE[2],C_NOTE[3],Db_NOTE[0],Db_NOTE[1],Db_NOTE[2],Db_NOTE[3],
                    D_NOTE[0],D_NOTE[1],D_NOTE[2],D_NOTE[3],Eb_NOTE[0],Eb_NOTE[1],Eb_NOTE[2],Eb_NOTE[3],
                    E_NOTE[0],E_NOTE[1],E_NOTE[2],E_NOTE[3],F_NOTE[0],F_NOTE[1],F_NOTE[2],F_NOTE[3],
                    Gb_NOTE[0],Gb_NOTE[1],Gb_NOTE[2],Gb_NOTE[3],G_NOTE[0],G_NOTE[1],G_NOTE[2],G_NOTE[3],
                    Ab_NOTE[0],Ab_NOTE[1],Ab_NOTE[2],Ab_NOTE[3],A_NOTE[0],A_NOTE[1],A_NOTE[2],A_NOTE[3],
                    Bb_NOTE[0],Bb_NOTE[1],Bb_NOTE[2],Bb_NOTE[3],B_NOTE[0],B_NOTE[1],B_NOTE[2],B_NOTE[3]   };
int i;  // Tam sayı tipinde değişken tanımlanıyor
//******************* 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ışı

   output_low(pin_b0); // RB0 çıkışı ilk anda lojik-0

   while(1) // Sonsuz döngü
   {
      for(i=0;i<48;i++)
      {
         generate_tone(muzik[i],100); delay_ms(50); // Sırayla muzık[] dizisindeki
      }                                             // tonlar oluşturuluyor
  }


PROJEYİ İNDİR 

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 *