ZigBee開發 5 基礎實驗定時器

2022-08-10 16:06:21 字數 3535 閱讀 3168

一、定時/技術器的基本原理

定時/計數器,是一種能夠對內部時鐘訊號或外部輸入訊號進行計數,當計數值達到設定要求時,向cpu提出中斷處理請求,從而實現定時或者計數功能的外設。

定時/計數器的最基本工作原理是進行計數不管是定時器還是計數器,本質上都是計數器,可以進行加1(減1)計數,每出現乙個計數訊號,計數器就會自動加1(自動減1),當計數值從0變成最大值(或從最大值變成0)溢位時,定時/計數器就會向cpu提出中斷請求。

二、cc2530的定時/計數器

cc2530共有5個定時/計數器,其中定時器1是乙個16位的定時器,為cc2530中功能最全的乙個定時/計數器,在 應用中應優先選用。定時器1的工作模式有三種:

<1>自由執行模式:計數器從0x0000開始,在每個活動 時鐘邊沿增加1,當計數器達到0xffff時溢位,計 數器重新載入0x0000並開始新一輪的遞增計數。該 模式的計數週期是固定值0xffff,當達到最終計數 值0xffff時,標誌位t1if和ovfif被設定。

<2>模模式:計數器從0x0000開始,在每個活動時鐘邊 沿增加1,當計數器達到t1cc0暫存器儲存的值時 溢位,計數器又將從0x0000開始新一輪的遞增計數, 模模式的計數週期可由使用者自行設定。

<3>正計數/倒計數模式:計數器反覆從0x0000 開始,正計數到ticc0儲存的最終計數值,然後再倒計數回0x0000,當達到最終計數值時,標誌位t1if和ovfif被設定。

三、cc2530的定時/計數器中斷系統

定時器有3種情況能產生中斷請求:

<1> 計數器達到最終計數值(溢位或回到零)。

<2> 輸入捕獲事件。

<3> 輸出比較事件(模模式時使用)。

使用模模式要特別注意,需要開啟通道0的輸出比較模式,否則計數器的 值達到t1cc0後,是不會產生溢位中斷的。

設定定時器1的最大計數值

定時器1共有5對t1ccxh和t1ccxl暫存器,分別對應通道0到通道4。在使用定時器1的定時功能時,使用t1cc0ht1cc0l兩個暫存器存放最大計數值的高8位和低8位。

最大計數值 = 定時時長 / 定時器計數週期。

在本實訓中,系統時鐘為16mhz,分頻係數為128,要定時0.1秒,最大計數值為:

定時器初始化函式設計

<1> 將定時器1的最大計數值寫入t1cc0。

<2> 通過t1cctl0暫存器開啟定時器1通道0的輸出比較模式。

<3> 設定定時器1的相關中斷控制位。

<4> 設定分頻係數和工作模式並啟動定時器。

定時器中斷服務函式設計

<1> 清除t1stat的中斷標誌位。

<2> 累加全域性變數count。

<3> count被10整除即1秒的定時到了。

<4> 10秒定時到將count清零。

#include "

iocc2530.h

"#define led5 p1_3

#define led6 p1_4

/****************定時器1初始化函式***************===

*/void

init_timer1()

unsigned

char count = 0

; /*

***************=定時器1服務函式********************

*/#pragma vector = t1_vector__interrupt

void

timer1_sevice()

if(count == 100) //

定時10秒到}/*

***************==埠初始化函式********************

*/void

init_port() /*

***************====主函式*************************

*/void

main()

定時器1 有5個通道不怎麼明白這5個通道有什麼用,因為經過我的實驗,這五個通道所裝載的值都是通道1所裝在的值只是產生的中斷標誌位不一樣,並不像我想象的那樣,五個通道可以裝載不同的計數值

1 #include 2

3#define uint unsigned int

4#define uchar unsigned char56

7#define led1 p1_0

8#define led5 p1_1

9#define led6 p1_4

10/*

***************定時器1初始化函式***************===

*/11

void

init_timer1()

1234

35 unsigned char count = 0

; 36 unsigned char count1 = 0

; 37 unsigned char count2 = 0

; 38

/****************=定時器1服務函式********************

*/39

#pragma vector = t1_vector

40 __interrupt void

timer1_sevice()

415354}

55else

if((t1stat & 0x02) != 0)56

6465}66

67else

if((t1stat & 0x04) != 0)68

7677}78

79}80/*

***************==埠初始化函式********************

*/81

void

init_port()82

89/*

***************====主函式*************************

*/90

void

main()

91

zigbee基礎應用(四)定時器

1.暫存器相關 舉個栗子 t1ctl 0x0d 128分頻,自動重灌 0x0000 0xffff t1stat 0x21 通道0,中斷有效 2.程式案例 描述 通過定時器t1查詢方式控制led1周 期性閃爍 include define uint unsigned int define uchar ...

Zigbee基礎實驗學習 電池板的點燈實驗

新手學zigbee,利用光碟資料做的小實驗,記錄下遇到的錯誤以及解決方法。實驗操作步驟 1 iar embedded workbench開啟cc2430 sw examples工程 2 直接rebuilt出現錯誤 fatal error e62 file name d zigbee資料庫 cc243...

無線感測網 zigbee基礎實驗 點對點通訊

標頭檔案 1 include 2 3 include hal mcu.h 4 include hal assert.h 5 include hal board.h 6 include hal rf.h 7 8 include 9 include basic rf.h 10 11 define nod...