• 歡迎光臨東莞市飛江電子科技有限公司官網!
    全國咨詢熱線

    13926563901

    18925580829

    飛江淘寶店鋪

    首頁>技術資料>51單片機

    STM8003F3定時器2周期性中斷

    發布時間:2018-04-04   瀏覽量:

    /*    添加包含芯片的頭文件    */
    #include

    unsigned int ms_count;


    /*******************************************************************************
    **函數名稱:void Timer2Init()
    **功能描述:定時器2參數初始化
    **入口參數:無
    **輸出:無
    *******************************************************************************/
    void Timer2Init()
    {
      TIM2_PSCR = 0x00;   //定時器2預分頻數為 1 分頻,即定時器時鐘 = 系統時鐘 = 16MHz
      TIM2_ARRH = 0x3e;   //設置1毫秒時間自動重載 16000 = 0x3e80
      TIM2_ARRL = 0x80;   //
      TIM2_CNTRH = 0;     //清除計數寄存器
      TIM2_CNTRL = 0;     //
      TIM2_IER = 0x01;    //使能定時器2允許更新中斷
      TIM2_SR1 = 0x00;    //清除所有的中斷標示
      TIM2_CR1 = 0x81;    //使能計數器,并允許自動預裝
    }

    /*******************************************************************************
    **函數名稱:void LED2Init()
    **功能描述:LED2->功能引腳初始化
    **入口參數:無
    **輸出:無
    *******************************************************************************/
    void LED2Init()
    {
      PC_DDR_bit.DDR7 = 1;
      PC_CR1_bit.C17 = 1;
      PC_CR2_bit.C27 = 1;
    }

    /**       主函數      **/
    int main(void)
    {
     
      asm("sim");           //先關閉總中斷
      CLK_CKDIVR = 0x00;    //CPUDIV = 1 HSIDIV = 1  內部時鐘 = 16Mhz
      LED2Init();           //調用LED2初始化函數
      Timer2Init();         //調用定時器2初始化函數
      asm("rim");           //打開總中斷
      while(1);             //進入死循環,等待定時器2周期中斷
    }


    /*******************************************************************************
    **函數名稱:__interrupt void TIM2_UPDATE_IRQHandler(void)
    **功能描述:定時器2重載更新中斷服務函數
    **入口參數:無
    **輸出:無
    *******************************************************************************/
    #pragma vector = 15     //設置定時器2重載的中斷向量號 = 15
    __interrupt void TIM2_UPDATE_IRQHandler(void)
    {
      TIM2_SR1 = 0x00;      //清除中斷標志
      ms_count++;           //中斷使 ms_count++ 做加法,記錄1毫秒產生的中斷次數
     
      if(ms_count >= 1000)  //記錄達到1000毫秒,即1秒
      {
        ms_count = 0;       //復位記錄中斷次數
        PC_ODR ^= 0x80;     //對LED2進行異或取反,使LED2以1秒的周期亮滅
      }
    }

    www.syhtzly.com

    黑人粗大无码AV人妻一区