藍橋杯STC基礎代碼-以定時器計數作爲時間軸的模板

以定時器計數作爲時間軸的模板

簡介

這是我寫STC15代碼時候首先都會配置的一個時間軸。

1.配置起來比較簡單:
2.可讀性強,操作簡單

Created with Raphaël 2.2.0開始系統初始化定時器中斷?定時器計數+1到達1ms時間點?程序每1ms要做的事情到達20ms時間點?程序每20ms要做的事情到達100ms時間點?程序每100ms要做的事情掃描任務完成yesyesnoyesnoyesno

配置過程

定時器的配置

配置定時器,我個人是以定時器2作爲時間軸,就算代碼忘了也沒有關係,在我們使用的燒錄軟件STC-ISP中就可以ctrl+c ctrl+v。

選擇定時器二,定時長度爲1ms(可以自己選擇)。
注意
軟件中沒有給出 打開總中斷以及打開定時器中斷,一定要自己打開。
設置 EA 總開關 跟 ET2 定時器開關 。
對於打開ET2 我們只能用通過設置IE2 這個寄存器。
所以需要自己添加下面兩行代碼。
EA=1;
IE2 |= 0X04;

定時器2配置代碼

 AUXR |= 0x04;  //定時器時鐘1T模式
 T2L = 0xCD;  //設置定時初值
 T2H = 0xD4;  //設置定時初值
 AUXR |= 0x10;  //定時器2開始計時
 
 EA=1;
 IE2 |= 0X04;

定時器中斷的配置

定時器每次中斷的時間的1ms,我們需要創建一個變量來存儲定時器計數的時間
這裏我用 TIM2_time 這個變量,以及一個結構體來存儲時間軸到達某個時間點的標誌。

long TIM2_time;
typedef struct 
{ 
  u8 flag_1ms;
  u8 flag_20ms;
  u8 flag_100ms;
  u8 flag_500ms;
  u8 flag_1s;
}TIM2;

定義好了變量之後,我們再來看看定時器中斷的內容,其實也挺簡單。

void TIM2_interrupt(void) interrupt 12
{
   TIM2_time++;
   TIM2_flag.flag_1ms = True;	
   if(TIM2_time % 20 == 0)
   {
     TIM2_flag.flag_20ms = True;
   }
  if(TIM2_time % 100 == 0)
  {
     TIM2_flag.flag_100ms = True;
  }
}

主函數的配置

在定義好了定時器之後,基本就完成了一半了。
在主循環裏面判斷定時器到達節點的標誌是否爲真,如果是就執行命令語句。
具體代碼如下:

 while(1)	
 {
   if(TIM2_flag.flag_1ms == True)
   {
     TIM2_flag.flag_1ms = False;
     /*************程序每隔1ms要做的事情********/  
    
     /*********************************************************/	
   }	
   if(TIM2_flag.flag_20ms == True)
   {
    TIM2_flag.flag_20ms = False;
    /*************程序每隔20ms要做的事情********/  

    /*********************************************************/
   }
   if(TIM2_flag.flag_100ms == True)
   {
     TIM2_flag.flag_100ms = False;
      /*************程序每隔100ms要做的事情********/  

      /*********************************************************/
   }
 }

代碼下載地址

代碼在藍橋杯的板子上測試過,基礎定時器2的流水燈,以及矩陣按鍵讀取,數碼管顯示,

代碼下載地址

藍橋杯單片機資源包

下一章

下一章講LED 繼電器等基礎外設初始化以及簡單操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章