zigbee学习之路(五):定时器1(查询方式)

一.前言

     今天,我们来学习几乎所有单片机都有的功能,定时器的使用,定时器对单片机来说是相当重要的,有了它,单片机就可以进行一些复杂的工作。

二.原理与分析

    谈到定时器的控制,我们最先想到的是要给它赋初值和选择工作模式吧,下面我带大家熟悉一下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这个寄存器,主函数里通过它来判断定时器是否溢出。

原文地址:https://www.cnblogs.com/sjsxk/p/5295108.html