ccs c de program hatası reed anahtarla hız ölçümü

zacnblnt

Üye
Katılım
7 May 2010
Mesajlar
210
Puanları
1
#include <16f628a.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use fast_io(a)
#use fast_io(b)
#define use_portb_lcd TRUE //LCD PORTB YE BAĞLI
#include <lcd.c>
unsigned char kontrol=0;
unsigned char sonuc[]=" ";
unsigned int CX;
float pi=3.14159,r=0.0811;
//***************ANA PROGRAM*******************


void main()
{
setup_psp(PSP_DİSABLED);
setup_timer_1(T1_DİSABLED);
setup_timer_2(T2_DİSABLED,0,1);
setup_adc_port(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP2_OFF);
set_tris_a(0xFF);
set_tris_b(0x00);
output_a(0x00);
output_b(0x00);
lcd_init(); //LCD Yİ HAZIRLA
lcd_clear(); //LCD Yİ TEMİZLE ??????
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_8); //T0 AYARLAMALARI
set_timer0(131); // T0 DEĞERİ ATAMASI 256-131=125
while(SW==1); //GİRİŞ 1 İSE BEKLE
while(kontrol==0)
{
if(SW==1)
break;}
goto LCD_YAZ();


}


//*************LCD ALT PROGRAMI*************


void LCD_YAZ()
{
float hiz;
unsigned int hiz2;
lcd_clear(); //???????????
hiz=(2*pi*r*3600)/CX; //KM/H CİNSİNDEN HİZ
hiz2=(int)hiz; //???????????HIZI HESAPLA
lcd_send_byte(0,0x0d); //LCD YE KOMUT GÖNDERİYOR.İMLEÇ YANIP SÖNSÜN
printf(lcd_putc,"\f zAc HIZ GOSTERGESI");//LCD YE VERİ GÖNDER
delay_ms(1000); //1s gecikme
lcd_gotoxy(1,2); //1. SUTUN 2. SATIRA KONUMLANDIR
if(kontrol==0)
{
printf(lcd_putc,"\f HIZ=%d",sonuc);//sonuc yerine hiz2 yaz
}
else
{
printf(lcd_putc,"\f HIZ=0";); //BİSİKLET DURUYORSA HIZ=0 YAZDIR
}



}


//*************T0 KESME ALT PROGRAMI*******************
#int_timer0 //T0 KESMESİ
void timer0_kesme()
{
CX++;
if(CX>10000)kontrol=1;
TOIF=0; //??????BAYRAK TEMİZLEME
set_timer0(131);



}
 
bir sürü hata veriyordu konfigürasyon ayarları ile başlık dosyasını silince hata sayısı 1 e düştü ama son hatayı bulamıyorum yardım edebilirseniz
 
bi kere DİSABLED kelimesinde büyük i kullanmışsın bunu kabul ediyo mu ?
 
Ne 1 hata , neredeyse her satırı hata verir.
CCSC değil , PicC (Hi-Tech) için yazılmış.

Kaynak :

Kendimiz Yapalım
 
ondada denedim hata veriyor.
HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode) V9.83Copyright (C) 2011 Microchip Technology Inc.
(1273) Omniscient Code Generation not available in Lite mode (warning)
Error [939] ; . no file arguments
 
Şimdi kurulu değil deneme imkanım yok.
Lakin verildiği yerde hex mevcut.
Öylesine bir çalışma ise uğraşma.
Ama öğreneceğim diyorsan CCSC çok güzel kitaplar ve örnekler açısından başlangıç için çok iyidir.
PicC diyorsan lite den başka çözümlerde yardımcı oluruz.
Lakin durumdan anlaşılan , başlangıç için sana pek uygun değil.
Özellikle Hi-Tech microchip tarafından satın alındığından beri sorunludur.
 
Anladığım kadarıyla Tübitak'ın sitesinde hi-tec c ile verilmiş olan projedeki kod, ccs'e çevrilmeye çalışılmış.

Önce hangi derleyiciyi kullanacağınıza karar verin, hi-tec ve ccs c arasında bir sürü fark vardır. Hiçbir kod her ikisi ile birden değişiklik yapılmadan derlenemez.


CCS için konuşursak ( ki kod ccs'e daha uygun görünüyor) ilk bakışta görebildiğim hatalar:

-Kesme fonksiyonunu main'den sonra yazmışsınız. Alt fonksiyon olması alta yazılacak demek değildir.

-TOIF nedir, tanımını yapmanız gerekir. ben ne olduğunu biliyorum ama ccs hangi yazmacın hangi biti olduğunu bilmez.
Hi-tec ise "pic.h" dosyası sayesinde bilir. CCS'te böyle bir tanımlama yapılmamış. o halde ne yapıyoruz?

16f628a'nın datasheetini açıp bakıyoruz, toif'in intcon yazmacının 2. biti olduğunu görüyoruz.
Intcon'un adresi 0bh, o halde başlangıçta global değişkenleri tanımladığınız kısıma şu şekilde bir ekleme yapmalıyız:

#byte INTCON = 0xbh
#bit T0IF = INTCON.2

Böylelikle, toif bitini program içerisinde bit cinsinden değişken olarak kullanabilirsiniz.


Siz en iyisi problemi parçalara bölerek çözmeyi deneyin, mesela programı önce sadece boş bir main fonksiyonuna dönüştürüp derleyin.
Bu sayede ilk olarak yaptığınız tanımlamaların doğruluğunu kontrol etmiş olursunuz
Sonra lcd dosyasını include edin, main içine lcd'ye birşeyler yazdıracak bir-iki satır ekleyin
Sonra kesme fonksiyonunu ilave edin vs vs.
Böyle yaparsanız, derleyici hata verdiği anda hatanın nereden kaynaklandığını derhal anlayabilirsiniz.

Başarılar dilerim.
 
Anladığım kadarıyla Tübitak'ın sitesinde hi-tec c ile verilmiş olan projedeki kod, ccs'e çevrilmeye çalışılmış.

Önce hangi derleyiciyi kullanacağınıza karar verin, hi-tec ve ccs c arasında bir sürü fark vardır. Hiçbir kod her ikisi ile birden değişiklik yapılmadan derlenemez.


CCS için konuşursak ( ki kod ccs'e daha uygun görünüyor) ilk bakışta görebildiğim hatalar:

-Kesme fonksiyonunu main'den sonra yazmışsınız. Alt fonksiyon olması alta yazılacak demek değildir.

-TOIF nedir, tanımını yapmanız gerekir. ben ne olduğunu biliyorum ama ccs hangi yazmacın hangi biti olduğunu bilmez.
Hi-tec ise "pic.h" dosyası sayesinde bilir. CCS'te böyle bir tanımlama yapılmamış. o halde ne yapıyoruz?

16f628a'nın datasheetini açıp bakıyoruz, toif'in intcon yazmacının 2. biti olduğunu görüyoruz.
Intcon'un adresi 0bh, o halde başlangıçta global değişkenleri tanımladığınız kısıma şu şekilde bir ekleme yapmalıyız:

#byte INTCON = 0xbh
#bit T0IF = INTCON.2

Böylelikle, toif bitini program içerisinde bit cinsinden değişken olarak kullanabilirsiniz.


Siz en iyisi problemi parçalara bölerek çözmeyi deneyin, mesela programı önce sadece boş bir main fonksiyonuna dönüştürüp derleyin.
Bu sayede ilk olarak yaptığınız tanımlamaların doğruluğunu kontrol etmiş olursunuz
Sonra lcd dosyasını include edin, main içine lcd'ye birşeyler yazdıracak bir-iki satır ekleyin
Sonra kesme fonksiyonunu ilave edin vs vs.
Böyle yaparsanız, derleyici hata verdiği anda hatanın nereden kaynaklandığını derhal anlayabilirsiniz.

Başarılar dilerim.

programı baştan yazmak zorunda kaldım sanırım hataları ayıklamak yeniden yazmaktan daha zor
ilginize teşekkürler...
 

Forum istatistikleri

Konular
128,163
Mesajlar
915,589
Kullanıcılar
449,927
Son üye
yusuf2023

Yeni konular

Geri
Üst