应广单片机的mini-c对数组的支持不是那么友好,数组的下标只能是常量,不能是变量。例如可以是dat[0]=xx,不能是,dat[n]=xx。不过别急。在关上一扇门的同时,会打开一扇窗的。可以用指针实现数组的大部分功能。不多说。上代码
#include "extern.h"
/*************常用宏定义*******************/
#define HIGH 1
#define LOW 0
#define DISABLE 0
#define ENABLE 1
#define EMPTY 0
#define FULL 1
#define ON 1
#define OFF 0
/*************端口定义*******************/
BIT LED_G : PA.3;
BIT TRG : PA.4;
#define GRE_LED_FLASH {if(LED_G){LED_G=0;}else{ LED_G=1;}}
/*****************LED*******************/
BIT ubMsFlag;
/****************系统时钟*********************/
byte count;
word usTmrCnt;
bit FLAG_NMS;
/**************T16*************************/
void TIME16_Init(void)
{
usTmrCnt=488;
ubMsFlag=0;
/*计算方法16M/*/
$ T16M IHRC,/1,BIT15;
INTEN.T16 =1;/*开启定时中断*/
Intrq.T16 =0;/*清除中断请求*/
}
/*定义数组*/
byte ucBindChn[10];
/*这两个变量个就类似于数组的下标*/
byte ucWrptr;
byte ucRdptr;
/*定义指针*/
word point;
byte ucTestCnt;
byte ucDat;
void SavDat(void)
{
/*基地址*/
point=ucBindChn;
/*加偏移*/
point+=ucWrptr;
/*数据保存到数组*/
*point=ucTestCnt;
/*循环寻址*/
ucWrptr++;
if(ucWrptr>9)
{
ucWrptr=0;
}
}
void GetDat(void)
{
while( ucRdptr!=ucWrptr)
{
/*基地址*/
point=ucBindChn;
/*加偏移*/
point+=ucRdptr;
ucDat=*point;
ucRdptr++;
if(ucRdptr>9)
{
ucRdptr=0;
}
}
}
void FPPA0 (void)
{
.ADJUST_IC SYSCLK=IHRC/8, IHRC=16MHz,init_ram, VDD=3.0V;
$ CLKMD IHRC/8,En_IHRC,En_ILRC,En_WatchDog;
.delay 40000;
$ LED_G OUT,HIGH;
$ TRG in,pull;
TIME16_Init();
ENGINT //全局中断开启
ucWrptr=0;
ucRdptr=0;
while (1)
{
wdreset;
/*1ms定时时间到*/
if( FLAG_NMS )
{
/*取数据*/
GetDat();
FLAG_NMS=0;
}
}
}
void Interrupt ( void )
{
pushaf;
if ( Intrq.T16 )
{
Intrq.T16 = 0;
STT16 usTmrCnt;
if ( count>0 )
{
count--;
}
else
{
count = 9;
/*1ms*/
FLAG_NMS= 1;
ucTestCnt++;
/*存队列*/
SavDat();
}
}
popaf;
}
/*end create by zhongvv QQ:85547259*/