mikroc ondalıklı sayı ekleyince hata veriyor

Başlatan kosantospa, 18 Mart 2015, 23:40:24

kosantospa

   öncelikler herkese iyi çalışmalar 877a kullanarak bir hesap makinesi yapmaya çalıştım. Kod genel olarak çalışıyor iki sayi arasında 4 işlem yapacak şekilde yazdım. girilen sayıları tam sayı , toplama çıkarma ve çarpmada sonuç tamsayı bölmede sonucu float değişkeniyle tanımladım. Başta bütün sonuçlar floattı fakat iki tam sayı toplamını bile küsüratlı yazıyordu. O yüzden tam sayıya çevirdim.
   sorun bölme işleminde küsüratlı bölme işlemi yapmıyor. tam sayıya yuvarlıyor bende çözüm olarak girilen sayıları da float olarak atamak istediğimde  hata veriyor. hata da "there is not enough rom space" fakat integer olarak atama yapınca %40 hafıza doluyor. kodun ikinci sayıyı yazan bloğunu çıkartınca hata ortadan kalkıyor çözüm önerileriniz nelerdir ?
şimdiden teşekkürler


sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;

sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB5_bit;
char  keypadPort at PORTD;
unsigned short kp;
int  sonc;
float s1=0, s2=0;
float sonuc=0;
int  ii=0, i=1, j=0, k=0;
char snc[16] ;
void main()
{
    TRISA=0;
    TRISC=0;
    TRISE=0;
    INTCON = 0;
    ADCON1 =6;
    CMCON |= 7; // Disable Comparators
    Lcd_Init();                        // Initialize LCD
    Lcd_Cmd(_LCD_CLEAR);               // Clear display
    Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
    Keypad_Init();
    ii=0;
    while(1)
    {
        kp=0;
        if(kp==15)  Lcd_Cmd(_LCD_CLEAR);
        if(ii==0)  // birinci sayı bloğun başlangıcı
        { kp = Keypad_Key_Click();

                if(kp==1) {Lcd_out(1,i ,"1" );    delay_ms(300);     s1=s1*10+1; i++; break;}
                if(kp==2) {Lcd_out(1,i ,"2" );  delay_ms(300);     s1=s1*10+2; i++; break;}
                if(kp==3) {Lcd_out(1,i ,"3" );  delay_ms(300);     s1=s1*10+3; i++; break;}
                if(kp==4) {j=1; ii=1; Lcd_out(1,i ,"+" ); i++; break;}
                if(kp==5)
                {Lcd_out(1,i ,"4" )  ;  delay_ms(300);   s1=s1*10+4;
                i++;break;}
                if(kp==6)
                {Lcd_out(1,i ,"5" ) ;  delay_ms(300);   s1=s1*10+5;
                i++;break;}
                if(kp==7)
                {Lcd_out(1,i ,"6" ) ;  delay_ms(300);  s1=s1*10+6;
                i++;break;}
                if(kp==8)
                {if(s1==0) k=1; else
            {j=2; ii=1;}  Lcd_out(1,i ,"-" ); i++; break;}
                if(kp==9)
                {Lcd_out(1,i ,"7" ) ;  delay_ms(300);  s1=s1*10+7;
                i++;break;}
                if(kp==10)
                {Lcd_out(1,i ,"8" ) ;  delay_ms(300);   s1=s1*10+8;
                i++;break;}
                if(kp==11)
                {Lcd_out(1,i ,"9" ) ;  delay_ms(300);   s1=s1*10+9;
                i++;break;}
                if(kp==12)
                {j=3; ii=1; Lcd_out(1,i ,"*" ); i++;break;}
                if(kp==13)   Lcd_Cmd(_LCD_CLEAR); break;
                if(kp==14)
                {Lcd_out(1,i ,"0" ) ;  delay_ms(300);   s1=s1*10+0;
                i++;break;}
                if(kp==15) break;
                if(kp==16)
                { j=4; ii=1 ; Lcd_out(1,i ,"/" );  i++;break;}
        }
        if(ii==1) //ikinci sayı bloğu başlangıcı
        {   kp = Keypad_Key_Click();
             if(kp==1) {Lcd_out(1,i ,"1" );    delay_ms(300);   s2=s2*10+1; i++; break;}
               if(kp==2)  {Lcd_out(1,i ,"2" )  ;  delay_ms(300);  s2=s2*10+2; i++; break;}
                if(kp==3) {Lcd_out(1,i ,"3" )  ;  delay_ms(300);  s2=s2*10+3; i++; break;}
               if(kp==4)    break;
               if(kp==5)  {Lcd_out(1,i ,"4" )  ;  delay_ms(300);   s2=s2*10+4; i++; break;}
              if(kp==6)   {Lcd_out(1,i ,"5" ) ;  delay_ms(300);  s2=s2*10+5; i++; break;}
             if(kp==7)    {Lcd_out(1,i ,"6" ) ;  delay_ms(300);  s2=s2*10+6; i++; break;}
              if(kp==8)
                { if (k==1)
                    { k=0;  }
                  else{k=2;}
                   Lcd_out(1,i ,"-" ); i++;    break;}
              if(kp==9)   {Lcd_out(1,i ,"7" ) ;  delay_ms(300);  s2=s2*10+7; i++; break;}
              if(kp==10) {Lcd_out(1,i ,"8" ) ;  delay_ms(300);   s2=s2*10+8; i++; break;}
              if(kp==11) {Lcd_out(1,i ,"9" ) ;  delay_ms(300);   s2=s2*10+9; i++; break;}
              if(kp==12)  break;
              if(kp==13)   Lcd_Cmd(_LCD_CLEAR); j=0; ii=0; i=1; break;
              if(kp==14) {Lcd_out(1,i ,"0" ) ;  delay_ms(300);   s1=s1*10+0; i++; break;}
               if(kp==15) { ii=2; }
               if(kp==16) break;

        }
        if (ii==2) // işlem bloğu
        {
            kp=Keypad_Key_Click();
               if (kp==1) { if(k==0) sonc=s1+s2;  if (k==1) sonc=(-1)*s1+s2; if(k==2)sonc=(-1)*s2+s1; IntToStr(sonc,snc);}
               if (kp==2) { if(k==0) sonc=s1-s2;  if (k==1) sonc=(-1)*s1-s2; if(k==2)sonc=(-1)*s2-s1;IntToStr(sonc,snc); break;}
               if (kp==3) { if(k==0) sonc=s1*s2;  if (k==1) sonc=(-1)*s1*s2; IntToStr(sonc,snc); break;}
               if (kp==4) { if(k==0) sonuc=s1/s2;  if (k==1) sonuc=sonuc*(-1); FloattoStr(sonuc,snc); break; }
            Lcd_out(2,2,snc);
        }
}  }

burctankal

#1
Bildiğim kadarıyla bu pic iki farklı hafıza bankasından oluşuyor ve microC otomatik olarak iki bankayı da kullanamıyor. Bu ya yazılımsal olarak yapılmalı ya da en iyisi benim de yaptığım gibi aynı kılıfa sahip 18f4550 gibi daha yüksek hafızaya sahip bir entegreye geçilmeli :)

kosantospa

yanıt için teşekkür ederim.
kodun hantal olduğunu düşünüyordum zaten biraz daha üzerinde çalışınca ikinci sayı bloğuna gerek kalmadı kalabalık azalınca derlemede sıkıntı çıkmadı :)

burctankal

Maalesef ben de şu bol "if"kullanma alışkanlığımdan kurtulamadım."if" ile yazamayacağım program yok gibi :) İyi çalışmalar dilerim.

kosantospa

bana yeterince  if ve for verin dünyayı yerinden oynatayım. :) maalesef aynı alışkanlık bende de var. teşekkür ederim size de iyi çalışmalar.

Powered by EzPortal