程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led=P2^0;
void main()
{
uchar i;
uchar idata test_a[10]={1,2,3,4,5,6,7,8,9,0};
uchar idata * data p=0;
for(i=0;i<128;i++)
{
*p=0;
p++;
}
led=0;
}
发现0x00和0x07怎么也清不了,请大侠们指点指点,谢谢!
(原文件名:idata clear.JPG)
-----------------------------------------------------------------------
看一下汇编代码你就清楚了,此时汇编代码用R0和R7用作了你的循环记数器,你清到07时就已把R0和R7清过了,只是你的程序中INC R0和INC R7又把它加到了87和80H
回复【1楼】flywater 落叶
-----------------------------------------------------------------------
我清的是idata类型的数据,跟data类型没什么关系吧?我知道间接寻址内128字节的寄存器是要用到r0和r1,可那是data类型的啊,我查看的是idata类型的数据。
-----------------------------------------------------------------------
建议好好看看教科书!
-----------------------------------------------------------------------
回复【9楼】kongjie07 路人甲
-----------------------------------------------------------------------
我一直以为idata存储类型的数据只包含片内高128字节的RAM,现在懂了,对8052来说它包括256字节的片内RAM,清空它可以用STARTUP.A51,把idatalen改成100H,xdatalen也改成100H(我用的是stc89c52rc)就行了。
一周热门 更多>