定時器/計數(shù)器是單片機的幾大重要資源之一,而cc2530的定時器/計數(shù)器與普通的51系列單片機相比,工作模式增加了。通過學習手冊可知cc2530的定時器/計數(shù)器有三種工作模式,風別為自由模式、模模式和正計數(shù)/倒計數(shù)模式。無論哪種模式,均可以采用查詢和中斷兩種方式使用定時器的。本專題講述cc2530定時器/計數(shù)器處于模模式時的編程方法。
首先是用查詢的方式來使用Timer1定時器。使用Timer定時器時,首先要對該定時器進行初始化,代碼如下:
void INIT_Timer1()
{
T1CTL = 0x00; //1分頻、停止運行
T1CTL = 0x0e; //128分頻 模模式
T1CCTL0 |= 0x04; //設定timer1通道0輸出比較模式
T1CC0L = 0x24;
T1CC0H = 0xF4;
IRCON &= ~0x02;
}
很容明顯可以看出在使用Timer1時,我們要用到T1CTL、T1CCTL0、T1CC0L、T1CC0H及IRCON這五個寄存器。T1CTL是控制寄存器,用于①設置分頻器劃分值如f/8或f/128等,這里的f是標記頻率。②定時器三種模式的選擇。T1CC0L、T1CC0H這兩個寄存器存放的是計數(shù)的終值(計數(shù)記到該值,設置中斷標志位,或產(chǎn)生中斷)IRCON中則為中斷標志位。之所以寫出代碼
IRCON &= ~0x02;
是為了先清除Timer1對應的中斷標志位。
T1CCTL0 |= 0x04; //設定timer1通道0輸出比較模式
那么該行代碼中的T1CCTL0做該賦值操作又有何意義?
模模式需要開啟通道0的輸出比較模式,否則計數(shù)器只有到了0XFF時才會產(chǎn)生溢出中斷(相應的產(chǎn)生溢出標志),也就是如果沒有設置通道0的輸出比較模式,計數(shù)器的值到達T1CC0后,不會產(chǎn)生溢出中斷(相應的溢出標志不會置1),這點需要特別注意。下面貼出整個該程序的代碼:
#include #define LED1 P1_0 //定義LED1為P1.0 int count = 0; void INIT_LED(void) { P1SEL &= ~0x01; //設P1.0為普通I/O功能 P1DIR |= 0x01; //設P1.0為輸出方向 LED1 = 0; //將LED1點亮 } void INIT_Timer1() { T1CTL = 0x00; //1分頻、停止運行 T1CTL = 0x0e; //128分頻 模模式 T1CCTL0 |= 0x04; //設定timer1通道0輸出比較模式 T1CC0L = 0x24; T1CC0H = 0xF4; IRCON &= ~0x02; } void main( void ) { INIT_LED(); INIT_Timer1(); LED1 = 1 ; //int count = 0; while(1) { if(IRCON &= 0x02) { count++; if(count==1) { IRCON &= ~0x02 ; count = 0; LED1 = !LED1; } } } } 之所以稱該程序的編寫方式為查詢方式就在于如下代碼, if(IRCON &= 0x02) { count++; if(count==1) { IRCON &= ~0x02 ; count = 0; LED1 = !LED1; } } 在主程序中不斷對中斷標志位進行查詢,若中斷標致位被置位時需要軟件清0。
上一篇:cc2530裸機編程系列筆記4--GPIO口的使用
下一篇:51單片機系列知識6--中斷系統(tǒng)(1)
推薦閱讀
史海拾趣
設計資源 培訓 開發(fā)板 精華推薦
- Microchip 升級數(shù)字信號控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領先的新器件
- 意法半導體STM32MP23x:突破成本限制的工業(yè)AI應用核心
- 意法半導體推出用于匹配遠距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設置字重-ESP32篇
- 使用樹莓派進行 ESP32 Jtag 調試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試