This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Return from a function is not stable! - C51

Dear All,

In the below program, main function calls "yaz" function 10 times. it works fine without any problem with the global variable definition marked as "bold" "unsigned char i" altough it is not used in the program. When I ignore or delete this definition line, "yaz" function enters endless loop and never returns to main program. Any idea what the problem is about?
regards.
akif

#include <reg51rd2.h>

unsigned char data gdeger[8];
//unsigned char i;
unsigned char code rakam[10][8]= {      {0x00,0x00,0x7E,0x81,0x81,0x81,0x7E,0x00},      [..]
        Data lines deleted for proper format
         [..]
        };

void bekle(unsigned char j){
        unsigned char i;
        for (i=1; i<=j; i++){
                TMOD =0x01;
                TH0 = 0xFE;
                TL0 = 0x00;
                TF0 = 0;
                TR0 = 1;
                 while (TF0 == 0);
                TR0 = 0;
        }
}//bekle

void yaz (unsigned char gonder[]){
        unsigned char row;
        unsigned int col;
        unsigned char i;
        unsigned char n=7; //sola kayd&#305;rma miktar&#305;
        unsigned char sdeger;
        unsigned char goster;

        for (i=1; i<=8; i++) {
                for (row=0;row<9;row++)      {
                        sdeger=gonder[row];
                        sdeger=sdeger<<n;
                        sdeger=sdeger&0x80;
                        gdeger[row]=gdeger[row]>>(1);
                        gdeger[row]+=sdeger;
                }//for row
                row=0;
                n=n-1;
        for (goster =1; goster < 15; goster++) {
                for (col = 1 ; col < 256 ; col <<= 1){
                                P2 = col ;
                                P1 = ~gdeger[row++];
                                bekle(1);                       }//for col
                row=0;
        }//for goster
        } //for i
        for (goster =1; goster < 100; goster++) {
                for (col = 1 ; col < 256 ; col <<= 1){
                                P2 = col ;
                                P1 = ~gdeger[row++];
                                bekle(1);                               }//for col
                        row=0;
                }//for goster
}//yaz

void main (){

        unsigned int s;
        P1 = 0;
        P2 = 0;
        ET0 = 0;

        while(1){
        for (s=0; s<10; s++)
                yaz(rakam[s]);
         }//while
}//main

0