CCS C hata ve hatalar.

Başlatan sayment, 22 Temmuz 2011, 01:12:37

sayment

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.

Okan AKÇA

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.

sayment

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 ?

Tagli

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.
Gökçe Tağlıoğlu

Okan AKÇA

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

sayment

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(;;)
   {  
    
   }   
}


Tagli

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.
Gökçe Tağlıoğlu

sayment

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 ?

Tagli

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.
Gökçe Tağlıoğlu

sayment

Yanıtınız için sağolun. Söylediğinizi yaptım ancak sorun devam ediyor.

frkcn

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..
Bugün ömrümün geride kalan son günü...

JKramer

Proteus'da deniyorsanız dosyayı yükler misiniz?


JKramer

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);
}
...

sayment

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.