51单片机变量 51的单片机变量是怎么个定义法。全局变量,局部变量都放在什么存储器里的

51的单片机变量是怎么个定义法。全局变量,局部变量都放在什么存储器里的,还有如果我想定义个变量放在用户RAM里地址为0x32,定义变量放在位寻址区那(如0X22)有怎么定义呢?
bdata unsigned char ss=0x22;这样定义了下 如果在程序里给它赋值,在memory window 处D:0X22 没看到有值。各位大神来个解释下 谢谢了,俺初次用这个51单片机

不能这样定义,这样定义是错的。你这个是赋值,不是定义在0x22单元格里。
unsigned char bdata SS _at_ 0x22;
只有在Keil编译环境下才可以这样使用。还有,这种语法不适合用C语言,我说的是不适合,不是不能用。C语言里面的指针就是针对这个的,不建议使用 _at_ 进行变量在RAM中固定,这样对程序编译优化时,带来很多麻烦,也得不到充分的优化。
其实用C语言指针的方法是可行的。
bdata区虽然有自己独立的位地址,但你用的是char型 ,是一个字节的,所以你说的0x22只是bdata区的字节地址,而不是位地址,那麽用C语言的方式实现 就是这样:
unsigned char *p;
p=0x22;
*p=50;
*p 表示指向0x22所在的单元格,就是将50赋值到0x22地址所指向的单元格里。
再从另一个角度讲,如果你没于传参或改变实参的情况下,不建议使用这类,即使有,也不是很建议。因为单片机高手是不会用_at_这类关键字进行变量定位的。
有什么疑问可以一起探讨。
希望我的回答对你有帮助,谢谢。追问

哦,明白了。。。谢谢!
再问个问题 keil u2能软仿真那种波形么 比如用延时产生一个方波,在u2能看到么?它上面有performance analyzer窗口 ,是看波形的吗 怎么用的? 还有像mplab sim中的外加激励一样的东东u2有吗?

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-30
这个应该是汇编时才要考虑的吧?地址寻址一般都有专用的地址寄存器
C语言的话都是编译软件自动反汇编下载到单片机的,这些都不用考虑的。
相似回答