如何編寫STC15F2K60S2定時(shí)/計(jì)數(shù)器中斷函數(shù)
STC15F2K60S2單片機(jī)是STC15系列的經(jīng)典產(chǎn)品之一。其中定時(shí)/計(jì)數(shù)器中斷是常用的功能,為了方便使用,我們可以自己編寫一個(gè)定時(shí)/計(jì)數(shù)器中斷初始化函數(shù),方便在平時(shí)使用中進(jìn)行調(diào)用。1. STC15
STC15F2K60S2單片機(jī)是STC15系列的經(jīng)典產(chǎn)品之一。其中定時(shí)/計(jì)數(shù)器中斷是常用的功能,為了方便使用,我們可以自己編寫一個(gè)定時(shí)/計(jì)數(shù)器中斷初始化函數(shù),方便在平時(shí)使用中進(jìn)行調(diào)用。
1. STC15F2K60S2定時(shí)/計(jì)數(shù)器中斷(晶振12MHz,12分頻)
單位時(shí)間等于12分頻/12MHz,即計(jì)數(shù)器每次加1使用的時(shí)間是1微秒。下面是示例代碼:
```c
include
sbit LED P1^1; //LED燈接口
unsigned int counter 0; //例子中需要使用的變量
/*函數(shù)名:定時(shí)計(jì)數(shù)器中斷初始化
調(diào)用:TimerCounterIntInit_12MHz(T_C_Int, TH_Init, TL_Init)
參數(shù):bit T_C_Int(定時(shí)器中斷0或定時(shí)器中斷1), delay_us(多少微秒)
返回值:無
結(jié)果:?jiǎn)?dòng)T/C1或T/C0并設(shè)置計(jì)數(shù)器初值*/
void TimerCounterIntInit_12MHz(bit Tx,unsigned int delay_us){
//定時(shí)器0和定時(shí)器1都使用工作方式0:16位自動(dòng)裝載的定時(shí)/計(jì)數(shù)器,不需在中斷函數(shù)中重寫初值(TMOD:定時(shí)器/計(jì)數(shù)器模式控制寄存器)
TMOD 0x00;
EA 1; //中斷總開關(guān)(屬IE:中斷允許寄存器)
if(Tx0){
ET0 1; //允許定時(shí)器中斷0中斷(屬IE:中斷允許寄存器)
TH0 (65536 - delay_us) >> 8; //16位計(jì)數(shù)寄存器T0高8位
TL0 (65536 - delay_us) 0x00FF; //16位計(jì)數(shù)寄存器T0低8
TR0 1; //定時(shí)器0啟動(dòng)(屬TCON:Timer Control Register)
}
else {
ET1 1; //允許定時(shí)器中斷1中斷(屬IE:中斷允許寄存器)
TH1 (65536 - delay_us) >> 8; //16位計(jì)數(shù)寄存器T1高8位
TL1 (65536 - delay_us) 0x00FF; //16位計(jì)數(shù)寄存器T1低8位
TR1 1; //定時(shí)器1啟動(dòng)(屬TCON:Timer Control Register)
}
}
```
2. 定時(shí)/計(jì)數(shù)器0中斷處理函數(shù)
該函數(shù)負(fù)責(zé)在定時(shí)/計(jì)數(shù)器0溢出后進(jìn)行中斷處理。具體代碼如下:
```c
/*函數(shù)名:定時(shí)/計(jì)數(shù)器0中斷處理函數(shù)
調(diào)用:[T/C0溢出后中斷處理]
參數(shù):無
返回值:無
結(jié)果:重新寫入16位計(jì)數(shù)寄存器初始值,處理用戶程序
備注:定時(shí)/計(jì)數(shù)器1中斷處理函數(shù)/
void TimerCounter_0(void) interrupt 1 using 1{
//切換寄存器組到1
counter ;
if(counter 1000){
//1毫秒重復(fù)1000次就是1秒
LED ~LED; //取LED相反狀態(tài),即LED燈重復(fù)開1秒,關(guān)1秒。
counter 0; //重置
}
}
```
3. 定時(shí)/計(jì)數(shù)器1中斷處理函數(shù)
該函數(shù)負(fù)責(zé)在定時(shí)/計(jì)數(shù)器1溢出后進(jìn)行中斷處理。具體代碼如下:
```c
/*函數(shù)名:定時(shí)/計(jì)數(shù)器1中斷處理函數(shù)
調(diào)用:[T/C1溢出后中斷處理]
參數(shù):無
返回值:無
結(jié)果:重新寫入16位計(jì)數(shù)寄存器初始值,處理用戶程序/
void TimerCounter_1(void) interrupt 3 using 3{
//切換寄存器組到3
//重新寫入初值
//用戶函數(shù)內(nèi)容
}
```
4. 主函數(shù)
主函數(shù)包含LED燈初始化及TimerCounterIntInit_12MHz()函數(shù)的調(diào)用。代碼如下:
```c
//主函數(shù)
void main(void){
LED 0; //初始化LED燈狀態(tài)為關(guān)
TimerCounterIntInit_12MHz(0,1000); //調(diào)用初始化函數(shù)
while(1){}
}
```
以上是STC15F2K60S2定時(shí)/計(jì)數(shù)器中斷函數(shù)的相關(guān)代碼和解釋。通過學(xué)習(xí)本文所述內(nèi)容,您可以輕松地編寫自己的定時(shí)/計(jì)數(shù)器中斷函數(shù),以幫助您更好地使用STC15F2K60S2單片機(jī)。