一.前言
今天,我們來學習幾乎所有單片機都有的功能,定時器的使用,定時器對單片機來說是相當重要的,有了它,單片機就可以進行一些復雜的工作。
二.原理與分析
談到定時器的控制,我們最先想到的是要給它賦初值和選擇工作模式吧,下面我帶大家熟悉一下cc2530中的定時器寄存器。
如上圖所見,DIV寄存器用來確定定時器運行一次所需的時間,MODE用來選擇定時器的工作模式。
定時器中斷的標志位,有中斷發生時,置為1
三.程序
#include <ioCC2530.h>
#define uint unsigned int
#define uchar unsigned char
//定義控制LED燈的端口
#define LED1 P1_0 //LED1為P1_0端口控制
#define LED2 P1_1 //LED2為P1_1端口控制
#define LED3 P1_4 //LED3為P1_4端口控制
//函數聲明
void Delayms(uint xms); //延時函數
void InitLed(void); //初始化LED端口
void InitT1(void); //初始化定時器T1
/********* 函 數 名 : main 功能描述 : Timer1測試(Timer1查詢方式的使用) 輸入參數 : NONE 輸出參數 : NONE 返 回 值 : NONE ***************/
void main(void)
{ uchar count=0;
InitLed(); //LED1_IO初始化
InitT1(); //Timer1初始化
while(1)
{
if(IRCON>0) //查詢溢出標志
{ IRCON=0;
if((++count)==1) //溢出一次約為0.5s
{ count=0;
LED1 = !LED1; //LED1取反
LED2 = !LED2;
LED3 = !LED3; }
} } }
/********** 函 數 名 : Delayms 功能描述 : 毫秒延時 輸入參數 : xms:延時時間,如 i=xms 即延時i毫秒 輸出參數 : none 返 回 值 : none ******************/
void Delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=587;j>0;j--); }
/************************ 函 數 名 : InitLed 功能描述 : LED_IO初始化函數 輸入參數 : NONE 輸出參數 : NONE 返 回 值 : NONE *****************/ void InitLed(void)
{ P1DIR |= 0xff; //P1端口定義為輸出
LED1 = 1; //LED燈初始化熄滅
LED2 = 1;
LED3 = 1; }
/************ 函 數 名 : InitT1 功能描述 : Timer1初始化函數 輸入參數 : NONE 輸出參數 : NONE 返 回 值 : NONE **************/
void InitT1(void)
{ T1CTL = 0x0d; //128分頻;
自由運行,從0x0000到0xFFFF反復計數 }
四.總結
通過本次實驗,相信大家已經基本了解定時器1的使用了,需要注意的是IRCON這個寄存器,主函數里通過它來判斷定時器是否溢出。