一、
char addr,i;
addr=0x30; //起始地址
for(i=0;i<16;i++)
{
*((char idata*)addr++)=i; //从起始地动址开始赋值
}
addr=0x30;
具体意思是:
首先addr自加一,因为++在变量后面,所以该表达式使用自加之前的值,比如第一次循环,表达式使用的addr是0x30.
第二步,将0x30强制转换为char idata类型指针。
第三步,解引用该指针,将i的值赋给该指针指向的地址
二、
char addr1,i;
addr = 0x2000;
addr1 = 0x30; //片内,片外存储区首地址分别为30H、2000H
for(i=0;i<16;i++)
{
*((char xdata*)addr++) = i; //给片外存储地址赋值
}
addr=0x2000;
for(i=0;i<16;i++) //从片外存储区读取数据
{
*((char idata*)addr1++) = *((char xdata*)addr++); //存储到片内的数据存储区
}
三、
char addr,i,j,t;
addr=0x30; //数据块的首地址
for(i=0;i<16;i++)
{
*((char idata*)(addr+i))=15-i; //初始化数据块
}
for(i=0;i<15;i++) //采用冒泡法排序
for(j=i+1;j<16;j++)
{
if(*((char idata*)(addr+i))>*((char idata*)(addr+j)))
{
t=*((char idata*)(addr+i));
*((char idata*)(addr+i))=*((char idata*)(addr+j));
*((char idata*)(addr+j))=t;
}
}
四、
char aa,i;
P1=0xff;
while(1)
{
aa=P1; //初P1口的开关状态
switch(aa) //判断是哪个开关闭合
{
case 0xff: //没有开关按下时,则给目标地址一赋0
{
for(i=0;i<16;i++)
{
*((char idata*)0x30+i)=0x00;
}
}break;
case 0xfe: //第一个开关按下时,则给目标地址一赋1
{
for(i=0;i<16;i++)
{
*((char idata*)0x30+i)=0x01;
}
}break;
case 0xfd: //第二个开关按下时,则给目标地址一赋2
{
for(i=0;i<16;i++)
{
*((char idata*)0x30+i)=0x02;
}
}break;
case 0xfb: //第三个开关按下时,则给目标地址一赋3
{
for(i=0;i<16;i++)
{
*((char idata*)0x30+i)=0x03;
}
}break;
default: break;
}
}