zoukankan      html  css  js  c++  java
  • zigbee学习之路(八):定时器1(中断)

    一.前言

        通过上次的实验,我们已经学会了定时器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位的。至此为止,定时器所进行和了解的差不多了,下一节,我们主要开始学习串口。

  • 相关阅读:
    block为什么用copy以及如何解决循环引用
    iOS证书失效
    基于AFNetWorking封装一个网络请求数据的类
    Xcode的内存清理
    block的用法以及block和delegate的比较(转发)
    React-Native 获取node.js提供的接口
    npm创建和发布模块
    React-Native之ViewPagerAndroid的使用
    使用.NET框架、Web service实现Android的文件上传(二)
    使用.NET框架、Web service实现Android的文件上传(一)
  • 原文地址:https://www.cnblogs.com/sjsxk/p/5308165.html
Copyright © 2011-2022 走看看