应广单片机Mini-c数组指针队列应用

        应广单片机的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*/

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值