应广单片机定时器中断配置

        应广单片机主要应用于消费电子,资源有限,只有一个定时器,因此用好T16定时器就非常关键了.可以说是整个单片机系统的核心配置

不说那么多了,直接上代码.

BIT     LED_G           :        PA.3;

#define GRE_LED_FLASH  {if(LED_G){LED_G=0;}else{ LED_G=1;}}


/*****************LED*******************/
word ucFlashTmrCnt;
BIT ubMsFlag; 

/****************系统时钟*********************/
bit     FLAG_NMS;
byte    count;
word    usTmrCnt;

/**************T16*************************/
void    TIME16_Init(void)
{

  /*设置计数值*/
    usTmrCnt=488;

    ubMsFlag=0;
    /*定时器配置*/
    $    T16M    IHRC,/1,BIT11;   
    INTEN.T16 =1;/*开启定时中断*/
    
    Intrq.T16 =0;/*清除中断请求*/
}

void UpdateLedTmr(void)
{
     
     /*1ms进行一次计数*/
    ucFlashTmrCnt++;
    if(ucFlashTmrCnt>250)
    {
        ucFlashTmrCnt=0;
        /*闪灯*/
        GRE_LED_FLASH;
    }
  

}

void    FPPA0 (void)
{
    .ADJUST_IC    SYSCLK=IHRC/8, IHRC=16MHz, VDD=3.0V;
    $ CLKMD IHRC/8,En_IHRC,En_ILRC,En_WatchDog;

   /*上电延时*/
    .delay 40000;
    /*端口配置*/
    $  LED_G     OUT,HIGH;          
 
    /*定时器配置*/
    TIME16_Init();
    
       ENGINT //全局中断开启

    while (1)
    {
            wdreset;
         /*1ms定时时间到*/
         if ( FLAG_NMS )
         {
          
             UpdateLedTmr();

            /*清除标记*/
            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;      
        }

    }

    popaf;
}
 

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页