Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

rom hafıza

Başlatan styx75, 28 Ocak 2016, 23:46:22

styx75

selam arkadaşlar microc de yeniyim .aşağıdaki kod a "sprintf (txt,"%d", sayi);" komutu eklediğim zaman used rom hafızası %4 den %51 e çıkıyor nedeni nedir arkadaşlar.
  #define led1 porte.re0
 #define led2 porte.re1
 #define led3 porte.re2
char GLCD_DataPort at PORTD;sbit GLCD_CS1 at LATC0_bit;
sbit GLCD_CS2 at LATC1_bit;
sbit GLCD_RS  at LATA2_bit;
sbit GLCD_RW  at LATC2_bit;
sbit GLCD_EN  at LATA0_bit;
sbit GLCD_RST at LATA1_bit;
sbit GLCD_CS1_Direction at TRISC0_bit;
sbit GLCD_CS2_Direction at TRISC1_bit;
sbit GLCD_RS_Direction  at TRISA2_bit;
sbit GLCD_RW_Direction  at TRISC2_bit;
sbit GLCD_EN_Direction  at TRISA0_bit;
sbit GLCD_RST_Direction at TRISA1_bit;

short int sayi=12; 
short int ters=1;
char txt[3];
void interrupt(){


    if(sayi==12)
    {
    led1=~led1;
    INT0IF_bit=0;
    }
    if(!portb.RB1){
     porte.re1=1;
     INT1IF_bit=0;
    }
    if(!portb.RB2){
     porte.re2=1;
     INT2IF_bit=0;
    }
}
void yaz () {
  Glcd_Write_Text("ISTASYON.1", 0, 0, 1);
 }

void main() {
  INTCON2=0;
  TRISA=0;
  TRISB=0xFF;
  INT0IE_bit=1;
  INT0IF_bit=0;
  INT1IE_bit=1;
  INT1IF_bit=0;
  INT2IE_bit=1;
  INT2IF_bit=0;
  INTEDG0_bit=0;
  INTEDG1_bit=0;
  INTEDG2_bit=0;
  PORTA=0;
  PORTB=0;
  ADCON1 |= 0x0F;
  CMCON  |= 7;
  Glcd_Init();
  Glcd_Fill(0x00);
  trise=0x00;
  porte=0;


  while(1) {
 Glcd_Write_text (txt, 0, 0, ters);
 delay_ms(400);
}
  }

Karamel

ustadim. siz sprintf yada printf gibi function lari cagirinca. stdio library sini micorcontroller icersine yerlestiriyor. buda buyuk yer kapliyor. yanilmiyorsam 6 yada 8 kb olmasi gereki.

tekosis

hocam o stdio librarysini düzenleyerek gereksiz fonksiyonları silerek program hafifleyebilir sanırım.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

Karamel

#3
hocam onu yapmak yerine. printf i hic kullanmayip. sadece yapmak istedigimize ait code lari yazmamis daha mantikli olur. 2 sene once bunu bana sevgili @RaMu hocam ogretmisti ::) kendisine sevgi ve saygilarimi gonderiyorum buradan ::) ::)

sprintf (txt,"%d", sayi); burada yapilmak istenen. txt isimli variable a sayi nin characterini yazmak. bu 8-10 satir code ile manual olarak yapilabilir. hatta boyle bir function ulusturulursa. sayi variable icin ayri. atiyorum numara variable icin ayri code yazmak yerine. bir function da hepsi halledilir.

edit: yazim yanlisi.

tekosis

tabi bu işi kendi alt fonksiyonlarımız ile yapmamız daha kolay ve kontrol edilebilir olur.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

styx75

cevaplar için çok teşekkür ederim arkadaşlar. şu şekilde yaptım "byteToStr(sayi,txt);
Ltrim(txt);"sorun çözüldü ama doğru bir yöntemmidir siz üstadlardan yorum bekliyorum ayrıca arkadaşlar kesme fonksiyonu içinde altprogram nasıl çagrılır.birdeneme yaptım ama hata alıyorum örnek..
#define led1 porte.re0
 #define led2 porte.re1
 #define led3 porte.re2
char GLCD_DataPort at PORTD;sbit GLCD_CS1 at LATC0_bit;
sbit GLCD_CS2 at LATC1_bit;
sbit GLCD_RS  at LATA2_bit;
sbit GLCD_RW  at LATC2_bit;
sbit GLCD_EN  at LATA0_bit;
sbit GLCD_RST at LATA1_bit;
sbit GLCD_CS1_Direction at TRISC0_bit;
sbit GLCD_CS2_Direction at TRISC1_bit;
sbit GLCD_RS_Direction  at TRISA2_bit;
sbit GLCD_RW_Direction  at TRISC2_bit;
sbit GLCD_EN_Direction  at TRISA0_bit;
sbit GLCD_RST_Direction at TRISA1_bit;

short int sayi=12; 
short int ters=1;
char txt[3];
short int aku=0;

void interrupt(){

    if((sayi==12)&&(!portb.RB0))
    {
    aku=aku++;
    yaz ();
    }
    if(!portb.RB1){
     porte.re1=1;
     INT1IF_bit=0;
    }
    if(!portb.RB2){
     porte.re2=1;
     INT2IF_bit=0;
    }
}
void yaz () {
 byteToStr(sayi,txt);
 Ltrim(txt);
  Glcd_Write_Text(txt, 5, 5, 1);
 }

void main() {
  INTCON2=0;
  TRISA=0;
  TRISB=0xFF;
  INT0IE_bit=1;
  INT0IF_bit=0;
  INT1IE_bit=1;
  INT1IF_bit=0;
  INT2IE_bit=1;
  INT2IF_bit=0;
  INTEDG0_bit=0;
  INTEDG1_bit=0;
  INTEDG2_bit=0;
  GIE_bit=1;
  PEIE_bit=1;
  PORTA=0;
  PORTB=0;
  ADCON1 |= 0x0F;
  CMCON  |= 7;
  Glcd_Init();
  Glcd_Fill(0x00);
  trise=0x00;
  porte=0;

  while(1) {
 Glcd_Write_text ("deneme", 0, 0, 0);
 delay_ms(1000);
}

  }