关于C51绝对寻址的问题
扫描二维码
随时随地手机看文章
在keilC51中 基本有两种绝对寻址方式,尽量都不要使用。毕竟C51中内存地址是由软件自动设置好了的。如果不熟悉就滥用反而引起程序出现问题。
调试的程序如下:
#include
#include
#define uchar unsigned char
#define uint unsigned int
//#define led_on DBYTE[0x01]
idata char led_on _at_ 0x01;
void main()
{
led_on = 0x0F;
while(1)
{
P0 = led_on;
}
}
方式1: XBYTE[XXXX] :一般是用在扩展I/O的时候,比如可以用为: XBYTE[0x8000]=0x01; 对外部8000RAM单元写入0x01;;DBYTE用于单片机内部256RAM单元寻址。还有CBYTE,CWORD等等。就不尽数详说了。
方式2:【根据寻址范围使用:IDATA、 XDATA 、...】 【数据类型:char、...】 【变量名】 _at_ 【地址】
例如:idata char led_on _at_ 0x01; 即是申明为单片机内部256单元的RAM的01单元,即R1(寄存器组0);
其他的地址根据寻址范围来决定idata xdata 或者其他。
例子中的我使用的R1寄存器 在实际使用的时候不要这样用。因为它是工作寄存器,值随时可能在变!!!