以定時器計數作爲時間軸的模板
簡介
這是我寫STC15代碼時候首先都會配置的一個時間軸。
1.配置起來比較簡單:
2.可讀性強,操作簡單
配置過程
定時器的配置
配置定時器,我個人是以定時器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 繼電器等基礎外設初始化以及簡單操作