pic c yardım

svsilence

Üye
Katılım
21 Ara 2008
Mesajlar
7
Puanları
1
Yaş
38
elimde pic c de yazılmış kod var arkadaşım yazı ccs c derleyicisinde derle çalıştır dedi ben indirdim bitane derleyici PCW diye aratıp bulduğumda compile dediğimde hata verdi

kod bu arakdaşım yazdım hata yoktur falan demişti acaba derleyici mi farklı olması gerekiyor lütfen yardım!!!



Kod:
#include <16f877A.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#device ADC=10  // 10 bitlik ADC kullanılacağı belirtiliyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)
#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#int_RB                // PORTB de B4...B7 pinlerinde meydana gelen değişim kesmesi
void  B_degisiklik ()   // Kesme fonksiyonu ismi
{
   if (input(pin_b4)==0)// RB4 pini girişi okunuyor.
   {
      set_adc_channel(0);   // AN0 ucundaki sinyal A/D işlemine tabi tutulacak
      delay_us(20);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir
      bilgi1=read_adc();     // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
      voltaj1=(0.001953125*bilgi1);   // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
      printf("\fDijital1=%lu",bilgi1); // AN0 ucundaki sinyalin dijital karşılığı 
      printf("\nVoltaj1=%fV",voltaj1); // AN0 ucundaki sinyalin gerilim değeri
   }
   if (input(pin_b5)==0)      // RB5 pini girişi okunuyor.
   {
      set_adc_channel(1);   // AN1 ucundaki sinyal A/D işlemine tabi tutulacak
      delay_us(20);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir
      bilgi2=read_adc();     // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
      voltaj2=(0.001953125*bilgi2);   // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
      printf("\fDijital2=%lu",bilgi2); // AN1 ucundaki sinyalin dijital karşılığı 
      printf("\nVoltaj2=%fV",voltaj2); // AN1 ucundaki sinyalin gerilim değeri
   }   
   if (input(pin_b6)==0)      // RB6 pini girişi okunuyor.
   {
      set_adc_channel(2);   // AN2 ucundaki sinyal A/D işlemine tabi tutulacak
      delay_us(20);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir
      bilgi3=read_adc();     // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
      voltaj3=(0.001953125*bilgi3);  // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
      printf("\fDijital3=%lu",bilgi3); // AN2 ucundaki sinyalin dijital karşılığı 
      printf("\nVoltaj3=%fV",voltaj3); // AN2 ucundaki sinyalin gerilim değeri
   }
   if (input(pin_b7)==0)      // RB7 pini girişi okunuyor.
   {
      set_adc_channel(3);   // AN3 ucundaki sinyal A/D işlemine tabi tutulacak
      delay_us(20);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir
      bilgi4=read_adc();     // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
      voltaj4=(0.001953125*bilgi4);  // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
      printf("\fDijital4=%lu",bilgi4); // AN3 ucundaki sinyalin dijital karşılığı 
      printf("\nVoltaj4=%fV",voltaj4); // AN3 ucundaki sinyalin gerilim değeri
   }
   delay_ms(1000);   // 1 sn gecikme veriliyor.
   output_b(0xFF);   // B portu çıkışı komple lojik1
}

unsigned long int bilgi1,bilgi2,bilgi3,bilgi4; // İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor
float voltaj1,voltaj2,voltaj3,voltaj4;            // ondalıklı tipte voltaj isminde değişken tanıtılı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_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı
   setup_adc(adc_clock_div_32);   // ADC clock frekansı fosc/32
   setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
   enable_interrupts(INT_RB);     // RB çevrimi bitti kesmesi tanıtılıyor
   enable_interrupts(GLOBAL);     // Tüm kesmeler aktif
   set_tris_b(0xFF);  // B portu komple giriş
   
   while(1)   // sonsuz döngü
   {
      enable_interrupts(INT_RB);     // RB çevrimi bitti kesmesi tanıtılıyor
   }
}
 
Moderatör tarafında düzenlendi:
Kodlarla çok fazla hata var; düzeltin öyle deneyin.
Mesela #use delay #rs232 den önce tanımlanmalı; sonra değişkenler tanımlanmamış vs.
 
lcd tanımlanmamış include <lcd.c>
lcd başlatılmamış lcd_init();
fast io kullanmışsınız ama tanımlamamışsınız use_fast_io(b);
birde indirdiğin derleyici cracklı mı onuda söylersen daha faydalı olur kodu ona göre düzenler koyarız.
 
#include <16f877A.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#device ADC=10 // 10 bitlik ADC kullanılacağı belirtiliyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)
unsigned long int bilgi1,bilgi2,bilgi3,bilgi4; // İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor
float voltaj1,voltaj2,voltaj3,voltaj4; // ondalıklı tipte voltaj isminde değişken tanıtılıyor
use_fast_io(b);
#int_RB // PORTB de B4...B7 pinlerinde meydana gelen değişim kesmesi
void B_degisiklik () // Kesme fonksiyonu ismi
{

if (input(pin_b4)==0)// RB4 pini girişi okunuyor.
{
set_adc_channel(0); // AN0 ucundaki sinyal A/D işlemine tabi tutulacak
delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir
bilgi1=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
voltaj1=(0.001953125*bilgi1); // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
printf("\fDijital1=%lu",bilgi1); // AN0 ucundaki sinyalin dijital karşılığı
printf("\nVoltaj1=%fV",voltaj1); // AN0 ucundaki sinyalin gerilim değeri
}
if (input(pin_b5)==0) // RB5 pini girişi okunuyor.
{
set_adc_channel(1); // AN1 ucundaki sinyal A/D işlemine tabi tutulacak
delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir
bilgi2=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
voltaj2=(0.001953125*bilgi2); // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
printf("\fDijital2=%lu",bilgi2); // AN1 ucundaki sinyalin dijital karşılığı
printf("\nVoltaj2=%fV",voltaj2); // AN1 ucundaki sinyalin gerilim değeri
}
if (input(pin_b6)==0) // RB6 pini girişi okunuyor.
{
set_adc_channel(2); // AN2 ucundaki sinyal A/D işlemine tabi tutulacak
delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir
bilgi3=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
voltaj3=(0.001953125*bilgi3); // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
printf("\fDijital3=%lu",bilgi3); // AN2 ucundaki sinyalin dijital karşılığı
printf("\nVoltaj3=%fV",voltaj3); // AN2 ucundaki sinyalin gerilim değeri
}
if (input(pin_b7)==0) // RB7 pini girişi okunuyor.
{
set_adc_channel(3); // AN3 ucundaki sinyal A/D işlemine tabi tutulacak
delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir
bilgi4=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
voltaj4=(0.001953125*bilgi4); // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
printf("\fDijital4=%lu",bilgi4); // AN3 ucundaki sinyalin dijital karşılığı
printf("\nVoltaj4=%fV",voltaj4); // AN3 ucundaki sinyalin gerilim değeri
}
delay_ms(1000); // 1 sn gecikme veriliyor.
output_b(0xFF); // B portu çıkışı komple lojik1
}



//********** 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_CCP1(CCP_OFF); // CCP1 birimi devre dışı
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı
setup_adc(adc_clock_div_32); // ADC clock frekansı fosc/32
setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
enable_interrupts(INT_RB); // RB çevrimi bitti kesmesi tanıtılıyor
enable_interrupts(GLOBAL); // Tüm kesmeler aktif
set_tris_b(0xFF); // B portu komple giriş

while(1) // sonsuz döngü
{
enable_interrupts(INT_RB); // RB çevrimi bitti kesmesi tanıtılıyor
}
}




bu da kodların düzeltilmiş hali kardeşim şimdilik bir hatası yok ama çalışması konusunda bişi diyemem dene olmazsa uydururuz ona bir yol hadi kolay gelsin...
 
#include <16f877A.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#device ADC=10 // 10 bitlik ADC kullanılacağı belirtiliyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)
unsigned long int bilgi1,bilgi2,bilgi3,bilgi4; // İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor
float voltaj1,voltaj2,voltaj3,voltaj4; // ondalıklı tipte voltaj isminde değişken tanıtılıyor
use_fast_io(b);
#int_RB // PORTB de B4...B7 pinlerinde meydana gelen değişim kesmesi
void B_degisiklik () // Kesme fonksiyonu ismi
{

if (input(pin_b4)==0)// RB4 pini girişi okunuyor.
{
set_adc_channel(0); // AN0 ucundaki sinyal A/D işlemine tabi tutulacak
delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir
bilgi1=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
voltaj1=(0.001953125*bilgi1); // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
printf("\fDijital1=%lu",bilgi1); // AN0 ucundaki sinyalin dijital karşılığı
printf("\nVoltaj1=%fV",voltaj1); // AN0 ucundaki sinyalin gerilim değeri
}
if (input(pin_b5)==0) // RB5 pini girişi okunuyor.
{
set_adc_channel(1); // AN1 ucundaki sinyal A/D işlemine tabi tutulacak
delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir
bilgi2=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
voltaj2=(0.001953125*bilgi2); // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
printf("\fDijital2=%lu",bilgi2); // AN1 ucundaki sinyalin dijital karşılığı
printf("\nVoltaj2=%fV",voltaj2); // AN1 ucundaki sinyalin gerilim değeri
}
if (input(pin_b6)==0) // RB6 pini girişi okunuyor.
{
set_adc_channel(2); // AN2 ucundaki sinyal A/D işlemine tabi tutulacak
delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir
bilgi3=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
voltaj3=(0.001953125*bilgi3); // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
printf("\fDijital3=%lu",bilgi3); // AN2 ucundaki sinyalin dijital karşılığı
printf("\nVoltaj3=%fV",voltaj3); // AN2 ucundaki sinyalin gerilim değeri
}
if (input(pin_b7)==0) // RB7 pini girişi okunuyor.
{
set_adc_channel(3); // AN3 ucundaki sinyal A/D işlemine tabi tutulacak
delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir
bilgi4=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
voltaj4=(0.001953125*bilgi4); // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
printf("\fDijital4=%lu",bilgi4); // AN3 ucundaki sinyalin dijital karşılığı
printf("\nVoltaj4=%fV",voltaj4); // AN3 ucundaki sinyalin gerilim değeri
}
delay_ms(1000); // 1 sn gecikme veriliyor.
output_b(0xFF); // B portu çıkışı komple lojik1
}



//********** 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_CCP1(CCP_OFF); // CCP1 birimi devre dışı
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı
setup_adc(adc_clock_div_32); // ADC clock frekansı fosc/32
setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
enable_interrupts(INT_RB); // RB çevrimi bitti kesmesi tanıtılıyor
enable_interrupts(GLOBAL); // Tüm kesmeler aktif
set_tris_b(0xFF); // B portu komple giriş

while(1) // sonsuz döngü
{
enable_interrupts(INT_RB); // RB çevrimi bitti kesmesi tanıtılıyor
}
}




bu da kodların düzeltilmiş hali kardeşim şimdilik bir hatası yok ama çalışması konusunda bişi diyemem dene olmazsa uydururuz ona bir yol hadi kolay gelsin...




ustam öncelikle başarılı çalışmalar dilerim ben bu pic konularına hiç bulaşmadım ama merakım çok fazla inşaallah onlarlada uğraşıcazda bu verdiğiniz kodlar örneğin # delay komutu vs... bunlar tıpkı plc de macro yazmak gibi birşeymi? merakımı hoş görün...
 
evet ustam bu zaman gecikmesi için hazırlanmış küçük bir macro bu komutu kullanınca iç içe geçmiş zaman döngüleri meydana geliyor asm olarak ama bu c dili olduğu için tek komutta işi bitiriyorsunuz mesela asm de 200 ms bir zaman döngüsü için 2 farklı değişken ve o değişkene uygulamanız gereken aritmetiksel işlemler vardı (çıkarma) adamlar bunları tek komutta birleştirip kullanıcının emrine sunmuşlar tüm numarası bu arada hangi plc üzerine uğraşıyorsunuz?
 
ağırlık delta dop-b panel orada var macrolar orada çok şeyler yapılabiliyor bu macrolar sayesinde bilgilendirdiğiniz için teşekkür ederim...
 
ağırlık delta dop-b panel orada var macrolar orada çok şeyler yapılabiliyor bu macrolar sayesinde bilgilendirdiğiniz için teşekkür ederim...

bunlarda dokunmatik ekran sürme durumu varmı varsa o konuda bilginiz varsa alabilirmiyim?
 

Forum istatistikleri

Konular
129,689
Mesajlar
929,034
Kullanıcılar
452,395
Son üye
gkmeens

Yeni konular

Çevrimiçi üyeler

Geri
Üst