QQ空间的老文章转到这里
//dami 2006,9,17本程序的目的是在于观察如何定义使用内存变量,观察内存变量的变化,从而了解8XXX系列单片机的内存使用方法
//他可以稍加变通用到8XXX系列单片机.使用simulate软件仿真,快速方便,也适合没有仿真器的朋友
//
#include<ioS3C825A.H>
#include<INTRINSICS.H>
#define uchar unsigned char
#define uint unsigned int
//位定义方法
#definetestbit(var,bit)((var)&(1<<(bit)))//位测试
#definesetbit(var,bit)((var)|=(1<<(bit)))//位置1
#defineclrbit(var,bit)((var)&=~(1<<(bit)))//位清零 clrbit(p3,1);就是了
//全局变量的定义要在任何函数之外,但静态变量就可以在函数中
unsigned int i;
// __tiny static unsigned int mm = 0;这些也可以在这里定义使之全局可以用
void main()
{
//对于特殊功能积存器,一个以直接访问.他的定义在CPU头文件中有体现
BTCON = 0xa2;
CLKCON = 0x98;//时钟控制器不分频
OSCCON = 0x0;//主从晶体及运行/停止
IMR = 0X8;
WTCON = 0x0;
//P5CONH = 0x8c;//P3CONL.7~5:011,P3CONL.4~2=001
//BRDATA = 0x19;//4M 晶体频率不分频. 波特率9600
//UARTCON = 0xd2;//模式:11,MCE:0,TB8,RB8:00,RIE:接收中断允许,TIE发送中断不允许
while ( 1 )
{ //***************************__tiny __tiny2 tiny2pn __tinyn 的使用*********************
//结果可以通过simulate->Veiw->memory 的PAGE0,PAGE1,PAGE查看
//全局变量,静态变量及指针可以用__tiny
__tiny static unsigned int mm = 0;
//PAGE0 可以初始位零
//PAGE1之后要用__no_init修饰,并且不能初始化
__no_init __tinyp1 static unsigned int mm1;
__no_init __tinyp2 static unsigned int mm2;
__no_init __tinyp3 static unsigned int mm3;
__no_init __tinyp4 static unsigned int mm4;
__no_init __tinyp5 static unsigned int mm5;
__no_init __tinyp6 static unsigned int mm6;
__no_init __tinyp7 static unsigned int mm7;
//PAGE的0XC0~~0XFF之间数据可以和上面一样访问,只是__tiny2,__tiny2pn修饰
__tiny2 static unsigned int hm = 0;
__no_init __tiny2p2 static unsigned int hm2;
unsigned int delay;
unsigned char INDEX = 0;
unsigned short i,j = 1;
mm1 = 0;
mm2 = 0;
mm3 = 0;
mm4 = 0;
mm5 = 0;
mm6 = 0;
mm7 = 0;
hm = 0;
hm2 = 0;
for (INDEX = 0; INDEX < 20; INDEX++)
{
unsigned char SUM = 0;
SUM += INDEX;
__no_operation();
__no_operation();
j = i++;
j++;
mm = j+i;
mm++;
mm1 = mm;
mm2 = mm1+3;
mm3 = mm2+5;
mm4 = mm3+3;
mm5 = mm4+3;
mm6 = mm5+3;
mm7 = mm6+3;
mm7++;
hm++;
hm2++;
for ( delay = 0; delay < 10; delay++ );
__no_operation();
__no_operation();
}
}
}