Derleme Hatası : Error 27,51,43

Başlatan NaMcHo, 31 Temmuz 2010, 19:02:58

NaMcHo

#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NODEBUG,NOLVP,NOCPD,NOWRT,NOBROWNOUT
#use delay(clock=4MHz)
#define data     pin_a1  //8255 Data hattı
#define saat     pin_a0 //8255 Clock sinyali icin
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
int S[]={0b1000000}; //satir fonksiyonundaki b cıkısı 8255 in ayarkodu.
int A[]={0x03,0x75,0x76,0x75,0x03};
void satir(char z,int harf[],int harfbiti)
{
   char k,s;    //k=kaydedici 8255 portd si icin ayar s=satır satır verisi icin harflerin
   switch(z)
   {
      case k:                             //8255 icin ayar
      output_c(0b00001101);              //8255 ici mod secimi Read=1,Write=0,A0=1 ve A1=1 yani port de secildi mod secimi icin.
      output_b(harf[harfbiti]);         //Tum portlar cıkıs olarak ayarlandı 8255'de.
      break;
      case s:
      output_c(0b00000001);           //8255 de porta yazma moduna alınıyor.(Read=1,Write=0,A0=0,A1=0)
      output_b(harf[harfbiti]);
      break;
   }
}

int sutun,tekrar,x,y,birdefa=0; char k;
void main()
{
   setup_psp(psp_disabled);
   setup_timer_1(t1_disabled);
   setup_timer_2(t2_disabled,0,1);
   setup_adc_ports(no_analogs);
   setup_adc(adc_off);
   setup_ccp1(ccp_off);
   setup_ccp2(ccp_off);
   
   set_tris_a(0);
   set_tris_b(0);
   set_tris_c(0);
   
   sutun=0b00000001;
   while(TRUE)
   {
      for(tekrar=0;tekrar<20;tekrar++)
      {
         for(x=0;x<5;x++)    //Sutun degerleri 74164 e gönderiliyor x=0 icin 1.Sutun High olur(aynı sekilde x=1 icin 2.sutun high...)
         {
            for(y=0;y<8;y++)
            {
            output_bit(data,bit_test(sutun,x));
            output_high(saat);                    //Her bir biti 74164 de hareket ettirmek icin gereken saat sinyali acılıp kapatılır.
            output_low(saat);
            }
            sutun=sutun<<1;                      //her seferinde bir bit kayarak ilgili sutunun aktif olması saglanmıstır
                                                 //mesela x=1 oldugunda sutun degeri 0b00000010 olur ve bu sefer 74164 ün son biti 0 sondan bi onceki 1 olur yani 2.Sutun aktif.
            delay_ms(10);
            if(birdefa==0){          //8255 de Mod seciminin birdefa yapılması icin tekrar tekrar herdongude aynı işlemi yapmaya gerek yok.
            satir(k,S,0);                         //8255 ayarlanıyor.
            birdefa++;}
            satir(s,A,x);                         //A harfi gonderiliyor 8255 e
            sutun=sutun<<1;                      //her seferinde bir bit kayarak ilgili sutunun aktif olması saglanmıstır
                                                 //mesela x=1 oldugunda sutun degeri 0b00000010 olur ve bu sefer 74164 ün son biti 0 sondan bi onceki 1 olur yani 2.Sutun aktif
            if(sutun==0b00100000)
            sutun=0b00000001;
         }
      }
    }
}


Aldığım hatalar:

-***Error 27 "uyg1.c" Line 16(13,14): Expression must evaluate to a constant   -------> bu hatanın üzerine tıkladığımda imleç case k:  daki k ile : nin arasına geliyor.
-***Error 27 "uyg1.c" Line 20(7,11): A numeric expression must appear here     ------->bu hatanın üzerine tıkladığımda imleç case s:     case in soluna geliyor
-***Error 27 "uyg1.c" Line 25(1,2): Expecting a declaration
                     -------->bu hatanın üzerine tıkladığımda imleç satir fonsiyonunun bittiği } işaretin soluna geliyor

radres

switch case fonksiyonunda switch (z) demişsin ya sonra case kısmında tam değer belirtmen gerekiyor. Yani case k: değil de
case 1: gibi veya case 'a' gibi. Aynı düzeltmeyi case s: de de yap düzelir.

NaMcHo

#2
Alıntı yapılan: radres - 31 Temmuz 2010, 20:04:26
switch case fonksiyonunda switch (z) demişsin ya sonra case kısmında tam değer belirtmen gerekiyor. Yani case k: değil de
case 1: gibi veya case 'a' gibi. Aynı düzeltmeyi case s: de de yap düzelir.

Teşekkür ettim.Düzeldi :)  k değil 'k'  s değil 's' yazdım.
(k yazınca değiken 'k' yazınca ise normal k harfi oluyor yani sabit.Anlık dalgınlık)

radres