打印

c51中全局变量的传递问题

[复制链接]
1473|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
h2thesun|  楼主 | 2009-7-18 15:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的程序附在下面,比较长。但大致就是这个意思:
原程序中ad_buf作为全局变量在main函数与子函数间传递,但是发现在子函数中修改了ad_buf这个变量后,回到主函数中,却发现这个变量的量仍然没有变化。请问这个问题是什么原因?我是在KEIL中调试的。

[不好意思,刚才帖错程序了,在函数ad_update()已经取消对 ad_buf的赋值]
源程序:

#include <reg52.h>
#include <math.h>
#include  <intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit sca_mosi=P1^0;
sbit sca_miso=P1^1;
sbit sca_sck=P1^2;
sbit sca_csb=P1^3;

void ad_update(void);

uchar cmd;
uint ad_buf;

void main(void)
{
  uint anglex,angley,ang;

  cmd=0x10;
  ad_update();
  anglex=ad_buf;
  cmd=0x11;
  ad_update();
  angley=ad_buf;
  ang=asin(((float)anglex-1024)/3277.0)*360/6.28;
  }

void ad_update(void)
{
  uchar cnt1=8,cnt2=11;
  sca_csb=0;
  _nop_();_nop_();_nop_();


while(cnt1>0)
{
  sca_sck=0;
  sca_mosi=((cmd&0x80)==0)?0:1;
  cmd < <=1;
  _nop_();
  sca_sck=1;
  _nop_();_nop_();_nop_();
  cnt1--;
  }

    while(cnt2>2)
{
  sca_sck=1;
  if(sca_miso)ad_buf=ad_buf|0x0001;
  ad_buf < <=1;
  _nop_();
  _nop_();_nop_();_nop_();
  cnt2--;
  }
  sca_csb=1;
  sca_sck=0;
  } 

相关帖子

沙发
ayb_ice| | 2009-7-18 16:27 | 只看该作者

那两个ad_buf根本就是两个不同变量

这是C的基本问题,也就是作用域的问题,程序优先访问局部变量,如果局部和全局同名

使用特权

评论回复
板凳
h2thesun|  楼主 | 2009-7-20 10:56 | 只看该作者

发现错误了。

就是二楼说的错误,谢谢啦。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝