本帖最后由 DavisD 于 2010-3-12 16:18 编辑
请教一个在Keil3环境下调试C程序时遇到的问题:
反复验证后将问题缩小至如下范围:
Void tansf(int);
Void decode(int);
Int buff;
Int dec;
Int disptest;
disptest = 7;
Main(){
disptest = 7;
while(1){
Led();
Delay(200); //定义过的delay函数
}
}
volatile void trans(int buff)
{
switch(buff)
{
case 0:
p= 0; pb = 0; pc = 1; pd = 1; pe = 0; pf = 0; pg = 1; ledp = 1;//这些sbit是用于IO口控制
break;
Case 1:
…. 略去,形式相同
default: break;
}
}
/********************************
volatile void dec(int dec){
switch(dec)
{
case 1:
da= 0; db = 0; dc = 0; dd = 0; ;//这些sbit是用于IO口控制
break;
case 2:
………略去,形式相同
default: break;
}
}
//============================
volatile void led(void)
{
//disptest = 7;
buff = disptest;
trans(buff);
dec(1);
delay(100);
dec(2);
delay(100);
….略去,形式相同
}
/*****************************/
Led程序的作用是点亮数码管,transf 和 decode两个子程序被LED()程序调用.
现在发现的问题是:
disptest 已经在Main程序中赋值为7,
如果在led中这样操作: disptest = 7; buff = disptest; trans(buff);….这样是可以工作的,全部数码管都可以点亮
如果直接写成trans(7);…也是可以的
但如果不给disptest赋值,直接写成buff = disptest;…或者trans(disptest);…都不能正常工作,
这是为什么????
为什么赋值过的disptest在led子程序中必须要重新赋值才能使用???
设置:优化8级
Small – pDATA设置;
请各位大侠帮忙指点下!多谢了 |