CCS C'ye yeni başladım. Çok basit bi hatadan dolayı konu açtığım için kusura bakmayın anlayamadım. Hata şöyle ki:
Derleyici "Expecting a ; or ," hatasını veriyor ve "void main()" ana fonksiyonun olduğu satırı gösteriyor. Hatam nerede acaba ?
NOT: Eğer bir sakıncası yoksa ileride karşılaşacağım sorunları da, konu kalabalığı olmaması adına buradan sormayı düşünüyorum.
Bir deyim sonuna noktalı virgül koymayı unuttunuz ya da parantezlerden biri fazla ya da eksik.
void main()'den bir önceki satıra bakın. Arkadaşın dediği gibi noktalı virgül koymayı unutmuşsunuz.
Üst satırlardan birin de tanımsız yada bir yanlış yazım mevcut.
Genelde bir fonksiyonun içinde yada main içindeki böyle hataları imleci fonksiyon sonuna giderek gösterir. Ama sen muhtemelen bir değişken tanımında sona ";" eklemeyi unutmuşsun.
Sana tavsiyem CCS C' yi MBLAB ile kullan , Hem PICKIT2 ve MPLAB SIM'de debug yapabilirsin hemde mplab hata ayıklama da daha iyi.
arkadaşlar benimde bir sorum olacak öncelikle teşekkürler...
//main deneme
#include<pic.h>
#include <delay.c>
void main()
TRISB=0;
{
for(;;)
{
RP0=0;
Delay_Ms(250);
RP0=1;
Delay_Ms(250);
}
}
-program bu basit bi tek let yakıp söndürme programı zaman aralığı ile.fakat 3 gündür bi, hatayı bulamadım ona uğraşıyorum hata şu;
Error [141] C:\Documents and Settings\pazarlama\Desktop\celloooo\ilk deneme.c; 5.18 can't open include file "delay.c": No such file or directory
ve hataya tıkladığımda şu satırı gösteriyor;
#include <delay.c> teşekkürler...
Bu kod CCS için değil, Hitech için muhtemelen.
proje klasöründe "delay.c" satırın yok diyor. delay fonkiyonarını kullanabilmen için delay.c dosyası gerekli.
ewet hi tech c bu...
proje satırında dediğiniz yer nersi anlayamadım??
klasörün içeriisne main c,delay c,delay h, dosyalarını kopyaladım yani aynı dizindeler...zannediyorum ki burada bi sorun yok bide sadece bu program için değil netten kopyala yapıştır yaptığım bütün programlar için aynı hatayı veriyor....3 gündür çıkamadım içiinden lütfen yardımcı olun??
Dosya aynı dizindeyse çift tırnak kullanın: #include "delay.c"
Sonrasında da bir yazım hatası var:
#include<pic.h>
#include "delay.c"
void main()
{
TRISB=0;
//TRISB=0;
//{
for(;;)
{
RP0=0;
Delay_Ms(250);
RP0=1;
Delay_Ms(250);
}
}
Alıntı yapılan: GreeN - 22 Temmuz 2011, 09:51:34
Genelde bir fonksiyonun içinde yada main içindeki böyle hataları imleci fonksiyon sonuna giderek gösterir. Ama sen muhtemelen bir değişken tanımında sona ";" eklemeyi unutmuşsun.
Sana tavsiyem CCS C' yi MBLAB ile kullan.
Verdiğiniz yanıtlar için herkese teşekkür ederim. Ana fonksiyondan önce uzun bir dizi tanımlarken dediğiniz gibi ";" unutmuşum:)
Derleyici olarak PCW kullanıyorum MPLAB'a geçerken bi zorlanma falan yaşarmıyım acaba. Bu programı kullanması gayet kolayda.
bu seferde bu hatayı veriyor
Warning [361] C:\Documents and Settings\pazarlama\Desktop\projeler\main deneme.c; 13.1 function declared implicit int
kafayı yiyeceğim ya bi türlü çıkamadım işin içinden....
Alıntı Yap
Derleyici olarak PCW kullanıyorum MPLAB'a geçerken bi zorlanma falan yaşarmıyım acaba. Bu programı kullanması gayet kolayda.
Mplab tecrüben olabileceğini düşündüm. Sadece öneri.
Tavsiyem ilk önce bir C programlama kitabı al ve bunun üzerinde çalış! Yazdığın kod C bilginin zayıf olduğunu gösteriyor.
Alıntı yapılan: GreeN - 22 Temmuz 2011, 17:26:27
Alıntı Yap
Derleyici olarak PCW kullanıyorum MPLAB'a geçerken bi zorlanma falan yaşarmıyım acaba. Bu programı kullanması gayet kolayda.
Mplab tecrüben olabileceğini düşündüm. Sadece öneri.
Sağolun. Bundan önce PBP ile yazıyordum onda da MicroCodeStudio kullandım MPLAB hiç kullanmadım. Ama kitapta MPLAB kullanmayı gösteriyor bakarım.
Alıntı yapılan: gokhan1500 - 22 Temmuz 2011, 17:35:07
Tavsiyem ilk önce bir C programlama kitabı al ve bunun üzerinde çalış! Yazdığın kod C bilginin zayıf olduğunu gösteriyor.
Serdar Çiçek'in kitabını aldım ondan çalışıyorum. Daha yeni başladımı haliyle bilgim zayıf.
Serdar Çiçek CCS kitabı CCS C kullanarak Pic programlamayı öğrenmek için çok güzel bir kaynaktır.Ama C Programlamaya bu kitapla başlamak hatadır bence.Belli bir C altyapın vardır onun üstüne bu kitapla rahatça çalışırsın.
Sıfırdan başladım. PBP alt yapım var geçiş yapmak pek zor olmadı.Hemen hemen aynı komutlar. Kitabın dilide gayet yalın.
picproje gezinirken biraz dikkatimi cekti herkez programcılık ogreniyor yada ögrenmeye calışıyor ne güzel bir şey ancak yanlış burda başlıyor eger işlemci programlamayı ögrenecekseniz elektronik alt yapınız olacak her önüne gelen programcılık yapmaya calışarak bu işin üsdatlarına yapan kişileirin adı kötülenir.
Alıntı yapılan: cyclone - 23 Temmuz 2011, 09:20:09
picproje gezinirken biraz dikkatimi cekti herkez programcılık ogreniyor yada ögrenmeye calışıyor ne güzel bir şey ancak yanlış burda başlıyor eger işlemci programlamayı ögrenecekseniz elektronik alt yapınız olacak her önüne gelen programcılık yapmaya calışarak bu işin üsdatlarına yapan kişileirin adı kötülenir.
Ne yani bırakayım mı öğrenmeyi ? Siz ne önerirsiniz ?
Benim de elektronik altyapim yok ama bir sekilde bata cika idare ediyorum. Bence olay daha cok programlama altyapisi ile ilgili, tabi cok profesyonel projelere girilmedigi surece.
programcılık onemlidir ancak ne kadar önemlidir.herkez programcıyım die ovünür ama hic kimse ben analogcuyum demez.progracılık işin en basit kısmıdır aslında.similasyonda yaptıgın devreler canavar gibi calısır iş end. uygulamalarda başlar.en basit başlayarak yapılan her iş profesyonel olması gerekir daha dogrusu mühendislik iş yapılması gerekir.progracı arkadaşlar yazar programı sonra uygulamada sihaz sapıtır. sonra pic parazit alıyor yok efendim bunlar prazitten etkileniyor derlerrrrrr programcı arkadaşlar :D :D :D :D
Kesmeleri öğrenmek için uygulama yaparken bir sorunla karşılaştım şöyle ki:
Kesme meydana geldikten sonra program sürekli kesme fonksiyonu içerisinde kalıyor.Kesme fonksiyonun içerisindeki komutları işledikten sonra kaldığı yerden devam etmiyor, sürekli kesme fonksiyonu içerisindeki komutları işlemeye devam ediyor. CCS C kesme bayrağını manuel olarak sıfırlamasak bile kesme fonksiyonunun sonunda kendisi otomatik olarak sıfırlıyor biliyorum. Hadi bunu da geçtim zaten manuel olarak interrupt ı sıfırlıyorum. Gene de program kesme fonksiyonu içerisindeki komutları işlemeye devam ediyor. Neden acaba ?
Bir de RB0 ve RB4-RB7 kesmelerini öğrendim. Diğer kesmeleri öğrenmem için tavsiye edeceğiniz örnekler yada kaynaklar nelerdir ?
Program aşağıda.
#include <16f877.h>
#fuses XT, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOWRT, NODEBUG, NOCPD
#use delay(clock=4000000)
#use fast_io(b)
#int_RB
void rb_kesme(int s)
{
output_b(0x03);
delay_ms(50);
output_b(0x00);
delay_ms(50);
output_b(0x03);
delay_ms(50);
output_b(0x00);
delay_ms(50);
output_b(0x0c);
delay_ms(50);
output_b(0x00);
delay_ms(50);
output_b(0x0c);
delay_ms(50);
output_b(0x00);
delay_ms(50);
clear_interrupt(int_rb);
}
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_CLOCK_DIV_2);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_ccp1(CCP_OFF);
set_tris_b(0xf0);
output_b(0x00);
//ext_int_edge(H_TO_L);
enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);
for(;;)
{
}
}
Daha once bir baslikta daha dile getirilmisti: PORTB degisim kesmesinin bayragini indirebilmak icin PORTB'nin (register) en az bir kez okunmus olmasi gerekiyor. Yoksa kesme sarti saglanmasa bile bayrak surekli kalkmaya devam ediyor.
Alıntı yapılan: Tagli - 03 Ağustos 2011, 20:08:26
PORTB degisim kesmesinin bayragini indirebilmak icin PORTB'nin (register) en az bir kez okunmus olmasi gerekiyor.
Tam olarak anlayamadım. Bu söylediğinizi nasıl yapacağım ?
CCS C bilmedigim icin tam bir cevap vermem mumkun degil ama yapman gereken sey PORTB uzerindeki herhangi bir bacagi veya tum portu normal giris okur gibi okumak. Okudugun degeri kullanip kullanmaman onemli degil.
Yanıtınız için sağolun. Söylediğinizi yaptım ancak sorun devam ediyor.
cyclone söylediklerinin arkadaşın yardım istemesiyle ne alakası var. Sen bayağı profesyonel sin anlaşılan yardım etmek yerine vurmayı seçmişsin enteresan..
Proteus'da deniyorsanız dosyayı yükler misiniz?
Buyrun.
http://www.4shared.com/file/pNP4Mf8o/09_-_nterrupt_Kesme__uygulamal.html
Tagli'nın dediğini yaptığınızda sorun çözülüyor:
...
#int_RB
void rb_kesme()
{
static int8 sample=0;
sample=input_b();
output_b(0x03);
delay_ms(50);
output_b(0x00);
delay_ms(50);
output_b(0x03);
delay_ms(50);
output_b(0x00);
delay_ms(50);
output_b(0x0c);
delay_ms(50);
output_b(0x00);
delay_ms(50);
output_b(0x0c);
delay_ms(50);
output_b(0x00);
delay_ms(50);
}
...
Ben portu değil sadece herhangi bir pini okuttum ve değişkene eşitlemedim sadece okuttum. Bi sonuç alamamıştım. Neden bir değişkene eşitledik ?
input(pin_bx);
Bu komutla okutmuştum.
Pini okumakla kastedilen, pinin lojik durumunu bir değişkene atmaktır. Yazdığınız satır zaten hata verip derlenmez.
Herhangi bir pini de okuyabilirsiniz:
static int8 sample=0;
sample=input(PIN_B5);
Derleyici kurulum klasöründe (program files\picc olabilir) Ccsc.chm isimli bir dosya var, onda komutların kullanımı ve örnekler mevcut.
Ekleme: Hata verip derlenmez dedim ama input(pin_b5); şeklinde bir satır hata vermiyor ve derleniyor :). Yalnız lst dosyasına bakarsanız bu satıra karşılık bir şey gelmediğini görebilirsiniz. Belki yeni sürümlerde düzeltmişlerdir, bence hata vermesi gerekiyor.
Açıklamanız için teşekkür ederim anladım.
Bende tam derleniyor yazacaktım ki mesajı güncellemişsiniz:) Bence de hata vermesi mantıklı olur. Hiç bir amaca hizmet etmeyen boş bir komut öylece duruyor.
Konunun başını okumadım.
Eğer son konu konu 8bit değişkene bir pinin değeri atılır mı ise?
Atılır. Pin 0 ise değişken 0 pin 1 ise değişken 1 olur.
CCS de bir C derleyici. Onun da bu işi yapıyor olması gerekir.
Derleyicinin ürettiği kodda bu kısmın görünmeme sebebi : bu değerin bir yerde kullanılmıyor oluşu.
Eğer sample değişkeni başka bir yerde anlamlı bir şekilde kullanılırsa, üretilen kodda da görünür olacaktır.
#include "C:\Users\USER\Desktop\Yeni klasör (2)\main.h"
#define use_portb_lcd TRUE
#include <LCD.C>
sbit LCD_RS at LATB4_bit;
sbit LCD_EN at LATB5_bit;
sbit LCD_D4 at LATB0_bit;
sbit LCD_D5 at LATB1_bit;
sbit LCD_D6 at LATB2_bit;
sbit LCD_D7 at LATB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
void main()
{
}
Arkadaşlar böyle bir kod var expecting a ( hatası ile expecting a decleration hatası alıyorum neden olabilir acaba?
#include <16F628A.h>
//#fuses NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT
#use delay (clock=4000000)
#include "LCD.C"
#include "DS1302.C"
int saniye,dakika,saat,gun,ay,yil,haftanin_gunu;
void main(){
lcd.init();
rtc.init();
rtc_set_datetime(12,3,11,1,23,59);
while(1){
rtc_get_time(saat,dakika,saniye);
rtc_get_date(gun,ay,yil,haftanin_gunu);
printf(lcd_putc,"\f%02d:%02d:%02d ",saat,dakika,saniye);
switch(haftanin_gunu){
case 1:printf(lcd_putc,"P.TESİ");break;
case 2:printf(lcd_putc,"SALI");break;
case 3:printf(lcd_putc,"CARSA.");break;
case 4:printf(lcd_putc,"PERSE.");break;
case 5:printf(lcd_putc,"CUMA");break;
case 6:printf(lcd_putc,"C.TESİ");break;
case 7:printf(lcd_putc,"PAZAR");break;
}
printf(lcd_putc,"\f%02d:%02d:%02d ",gun,ay,yil);
delay_ms(300);
}
}
------>lcd.init(); ve rtc.init(); kısmında hata alıyorum sebebini araştırdım fakat çözüm bulamadım .Yardımcı olursanız çok sevinirim.Teşekkürler.(kod RTC uygulaması içindir)
Mesajınıza kod eklemek için "Code"
simgesini kullanın.
CCS C kullaıyorsanız,
lcd.init(); değil lcd_init(); olacak
rtc.init(); değil rtc_init (); olacak