学习板试程序,老是卡壳,问题求发现

2019-07-15 19:32发布

写了一个程序,发现把for(a=8;a>0;a--)改成for(a=0;a<8;a++)后显示不正常了。
下面是程序的其中一段
void write_byte(uchar dat)
{
uchar a;
ACC=dat;
RST=1;
for(a=8;a>0;a--)             //这里
{
  IO=ACC0;
  SCLK=0;
  SCLK=1;
  ACC=ACC>>1;
}
}



然后在KEIL里写了个简单的程序想验证,结果发现执行完成后aa=0而bb=8
void main()
{
unsigned char ii,aa,jj,bb;
  aa=0; bb=0;
for(ii=0;ii<8;ii++)
  aa++;
for(jj=8;jj>0;jj--)
  bb++;
}

求各位指点,是不是我犯了什么低级错误还是基础知识不扎实导致弄错了。
PS:最近用学习板试程序,老是卡壳,好郁闷,恳请各位大大开导

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
olive2003
1楼-- · 2019-07-15 22:23
今天又试了下,在后面加一段程序,,调试正常,显示也正常。是不是我KEIL又问题?


#include <STC89.H>
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x07f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0123456789ABCDEF 共阴

void delay(uchar c)
{
        uchar x,y;
        for(x=0;x<c;x++)
                for(y=0;y<110;y++);
}


void main()
{
        unsigned char ii,aa,jj,bb;
        aa=1; bb=0;
        for(ii=0;ii<8;ii++)
                aa++;
        for(jj=8;jj>0;jj--)
                bb++;
        while(1)
        {
                P24=0;
                P23=0;
                P22=0;
                P0=table[aa];
                delay(5);
       
                P24=0;
                P23=0;
                P22=1;
                P0=table[bb];
                delay(5);
        }                 

}
dazhanhongtu
2楼-- · 2019-07-15 22:39
 精彩回答 2  元偷偷看……
BBOYBL
3楼-- · 2019-07-16 01:56
本帖最后由 BBOYBL 于 2014-6-1 20:26 编辑

楼上答对了 每个都赋初值就没事了!要不就全部都不要给初值!
olive2003
4楼-- · 2019-07-16 06:09
dazhanhongtu 发表于 2014-6-1 14:15
试下,把每个变量在声名时同时初始化。

试了下把ii,jj声明时初值赋为0,还真的正常了。感谢。
顺便问下原因,如果不一开始赋初值,在for(ii=0;ii<8;ii++)里面不是也会赋予ii=0么。
东坡7c
5楼-- · 2019-07-16 09:20
是啊是啊,同求。。。为虾米嘞,开始先声明,在for的赋值表达式中赋值为虾米不行嘞。。。这问题没遇到过,好神奇哎。
dazhanhongtu
6楼-- · 2019-07-16 11:09
良好的编程习惯之一:

在使用变量之前请先”初始化“。因为,未初始化的变量,其值是”不确定“的。
”不确定“的意思是指可能是任何值。

初始化和赋值操作符”=“的区别:
在声名一个变量时,”同时“给他赋与一个合法的值,这是初始化。
先声名一个变量,”过后“再给他赋与一个合法的值,这是赋值。

以上特点是由 c 语言的语义所决定的。c 标准中并不要求编译器对变量自动初始化。

如果对一个未初始化的变量赋值,也就是对一”不确定的值“赋值。

每个变量都指向一个内存地址,如果说这个变量的值”不确定“,也就是说这个内存地址中的值可能是有作用的也可能是没作用的。如果这个值是有其他作用的,你如果对他赋值,那会发生什么


一周热门 更多>