定時(shí)器 T1 通過查詢方式控制 LED1 周期性閃爍
關(guān)鍵就是對(duì)寄存器的配置。
CC2530的T1定時(shí)器(16位)需要配置三個(gè)寄存器T1CTL、T1STAT、IRCON
這里只是給出簡(jiǎn)單的介紹,要詳細(xì)的可以參考CC2530的datasheet.
T1CTL(0xE4) 作用是定時(shí)器 1 的控制和狀態(tài)
T1CTL (Bit 3:2) 分頻器劃分值,如下:
00: 標(biāo)記頻率/1
01: 標(biāo)記頻率/8
10: 標(biāo)記頻率/32
11: 標(biāo)記頻率/128
T1CTL (Bit 1:0) 選擇定時(shí)器1模式
00: 暫停運(yùn)行。
01: 自由運(yùn)行,從0x0000到0xFFFF反復(fù)計(jì)數(shù)。
10: 模,從0x0000到T1CC0反復(fù)計(jì)數(shù)。
11: 正計(jì)數(shù)/倒計(jì)數(shù),從 0x0000 到 T1CC0 反復(fù)計(jì)數(shù)并且從 T1CC0 倒計(jì)數(shù)到 0x0000。
T1STAT(0xAF) 作用是定時(shí)器 1 狀態(tài)
Bit5: 定時(shí)器 計(jì)數(shù)器溢出中斷標(biāo)志
Bit4: 定時(shí)器 1 通道 4 中斷標(biāo)志
Bit3: 定時(shí)器 1 通道 3 中斷標(biāo)志
Bit2: 定時(shí)器 1 通道 2 中斷標(biāo)志
Bit1: 定時(shí)器 1 通道 1 中斷標(biāo)志
Bit0: 定時(shí)器 1 通道 0 中斷標(biāo)志
IRCON(0xC0) 作用是中斷標(biāo)志 4
Bit1: 定時(shí)器1中斷標(biāo)志。當(dāng)定時(shí)器1中斷發(fā)生時(shí)設(shè)為1并且當(dāng)CPU向量指向中斷服務(wù)例程時(shí)清除。
0: 無(wú)中斷未決
1: 中斷未決
T1 配置如下:
T1CTL = 0x0d; //128 分頻,自動(dòng)重裝 0x0000-0xFFFF
T1STAT= 0x21; //通道 0,中斷有效
/****************************************************************************
* 描 述: 定時(shí)器T1通過查詢方式控制LED1周期性閃爍
****************************************************************************/
#include
typedef unsigned char uchar;
typedef unsigned int uint;
#define LED1 P1_0 // P1.0口控制LED1
/****************************************************************************
* 名 稱: InitLed()
* 功 能: 設(shè)置LED燈相應(yīng)的IO口
* 入口參數(shù): 無(wú)
* 出口參數(shù): 無(wú)
****************************************************************************/
void InitLed(void)
{
P1DIR |= 0x01; //P1.0定義為輸出
LED1 = 1; //使LED1燈上電默認(rèn)為熄滅
}
/****************************************************************************
* 名 稱: InitT1()
* 功 能: 定時(shí)器初始化,系統(tǒng)不配置工作時(shí)鐘時(shí)默認(rèn)是2分頻,即16MHz
* 入口參數(shù): 無(wú)
* 出口參數(shù): 無(wú)
****************************************************************************/
void InitT1()
{
T1CTL = 0x0d; //128分頻,自動(dòng)重裝 0x0000-0xFFFF
T1STAT= 0x21; //通道0,中斷有效
}
/****************************************************************************
* 程序入口函數(shù)
****************************************************************************/
void main(void)
{
uchar count=0;
InitLed(); //調(diào)用初始化函數(shù)
InitT1();
while(1)
{
if(IRCON > 0)
{
IRCON=0;
if(count++ >= 1) //約1s周期性閃爍,示波器測(cè)大約為1025MS 也可以用一//個(gè)延時(shí)函數(shù)延時(shí)
{
count=0;
LED1 = !LED1; //LED1閃爍
}
}
}
}