zigbee学习之路(七):定时器3(中断方式)

时间:2022-09-20 00:16:33

一.前言

     上次我们学习了了用定时器3进行查询方式来进行溢出判断,今天我们来换一种方式,用中断方式来检测和查询定时器3的溢出。

二.原理与分析

      要使用定时器3,我们必须先要配置的是T3CTL,来把定时器3初始化,进行工作模式和频率的选择,要使用中断模式来控制定时器3,我们还要配置中断的控制寄存器,T3IE和总中断EA。T3CTL的配置和上次的一样。

三.程序

 

#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 InitT3(void);              //Timer3中断方式初始化函数

//由于是中断函数用到,一定要定义为全局变量

uint count=0;//用于计算溢出中断的次数

/***************** 函 数 名  : main  功能描述  : Timer3测试(Timer3中断方式的使用)  输入参数  : NONE   输出参数  : NONE  返 回 值  : NONE ******************/

void main(void)

{     

InitLed();  //调用初始化函数    

InitT3();    

while(1)     {     } }

/*********************  函 数 名  : T3_ISR  功能描述  : 中断服务函数  输入参数  : NONE   输出参数  : NONE  返 回 值  : NONE *********************/ #pragma vector = T3_VECTOR  //Timer3中断向量

 __interrupt void T3_ISR(void)

{     IRCON = 0x00;           //清中断标志, 也可由硬件自动完成    

if((++count)>254)       //254次中断后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 |= 0xff;  //P1端口定义为输出    

LED1 = 1;       //LED1灯熄灭    

LED2 = 1;   

  LED3 = 1; }

/********************  函 数 名  : InitT3  功能描述  : Timer3中断方式初始化函数  输入参数  : NONE   输出参数  : NONE  返 回 值  : NONE *************************/

void InitT3(void)

{        

T3CTL|=0XE0;               //128分频,    

T3CTL |= 0x08 ;            //开溢出中断     

T3CTL &= ~0X03;            //自动重装0x00---0xFF     

T3IE = 1;                  //开Timer3中断    

EA = 1;                    //开总中断    

T3CTL |=0X10;              //启动

}

四.原理与分析

    通过本次实验,我们应该会用中断来控制定时器了,通过开总中断EA和定时器3中断T3IE来控制定时器3的运行。