zoukankan      html  css  js  c++  java
  • zigbee学习之路(七):定时器3(中断方式)

    一.前言

         上次我们学习了了用定时器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的运行。

        

  • 相关阅读:
    Java中equals与==异同
    CGI与WSGI
    Javazh中static的简单理解
    MySQL 4.1/5.0/5.1/5.5各版本的主要区别
    php生成随机密码的几种方法
    phpmyadmin里MySQL字符集:cp1252 West European (latin1) ,解决乱码问题
    GoogleMap API 离线版
    [转]为前端开发人员制作的 Chrome 扩展 jsbeautifier
    Google Map Tile 下载脚本
    Google 地图 API 参考
  • 原文地址:https://www.cnblogs.com/sjsxk/p/5308125.html
Copyright © 2011-2022 走看看