一.前言
通過上次的實驗,我們已經學會了定時器3的中斷方式,這次,我們來看看定時器1通過中斷怎么控制。
二.原理分析
定時器1的初始化跟前面提到的一樣,也是要配置寄存器T1CTL,還要進行開中斷的操作,由T1IE和EA控制。
三.程序
#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_IO初始化函數
void InitT1(void); //Timer1中斷方式初始化函數
//由於是中斷函數用到,一定要定義為全局變量
uint count=0;//用於計算溢出中斷的次數
/********************************* 函 數 名 : main 功能描述 : Timer1測試(Timer1中斷方式的使用) 輸入參數 : NONE 輸出參數 : NONE 返 回 值 : NONE *****************************/
void main(void)
{
InitLed(); //調用初始化函數
InitT1();
while(1)
{ }
}
/************** 函 數 名 : T1_ISR 功能描述 : 中斷服務函數 輸入參數 : NONE 輸出參數 : NONE 返 回 值 : NONE *****************/
#pragma vector = T1_VECTOR //Timer1中斷向量
__interrupt void T1_ISR(void)
{ IRCON = 0x00; //清中斷標志, 也可由硬件自動完成
if((++count)==1) //1次中斷后LED取反,閃爍一輪(0.5 秒時間)
{
count = 0; //計數清零
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 |= 0x13; //P1_0、P1_1、P1_4義為輸出
LED1 = 1; //LED1燈熄滅
LED2 = 1; //LED2燈熄滅
LED3 = 1; //LED3燈熄滅
}
/********************************* 函 數 名 : InitT1 功能描述 : Timer1中斷方式初始化函數 輸入參數 : NONE 輸出參數 : NONE 返 回 值 : NONE *****************/
void InitT1(void)
{ T1CTL|=0X0d; //128分頻,自由運行模式
T1IE = 1; //開Timer1中斷
EA = 1; //開總中斷 }
四.總結與分析
程序的功能與之前一樣,就是讓led閃爍,目的只是熟悉定時器的使用,大家要注意區分的是定時器1和2都是16位的,而3和4都是8位的。至此為止,定時器所進行和了解的差不多了,下一節,我們主要開始學習串口。
