原创 CC2430基础实验——T2的使用(转载)

2009-9-20 17:50 2379 4 4 分类: MCU/ 嵌入式
 


  T2的使用主要是用定时器2来改变小灯的状态,T2每发生一次中断小灯改变状态一次。


    这个实验共用到P1、P1DIR、P1SEL、T2CNF、T2PEROF2、T2CAPLPL和T2CAPLPH几个个寄存器。其中前几个的作用前面的文章里应经介绍过了,这里就不再重复说明了。这里主要是讲一下后几个寄存器的作用。其中T2CNF是T2配置寄存器,T2PEROF2是T2溢出计数器2寄存器,T2CAPLPL是T2周期寄存器低字节,T2CAPLPH是T2周期寄存器高字节。另外还有一个IEN0是中断使能寄存器0。


    现在来看一下试验的相关函数:


   void Initial(void)


{
   LED_ENALBLE();


  //用T2来做实验


   SET_TIMER2_CAP_INT();                  //开比较中断
   //TIMER2_CMP_HIGH_BYTE();
   SET_TIMER2_CAP_COUNTER(0X0FFF);
   //SET_TIMER2_CAP_COUNTER(10000);


}


     要注意一下SET_TIMER2_CAP_INT()和SET_TIMER2_CAP_COUNTER(0X0FFF)的定义,


   #define SET_TIMER2_CAP_INT()      \
      do{                             \
        EA = 1;                       \    打开全局中断
        T2IE = 1;                     \    打开T2中断
        T2PEROF2 |= 0x40;             \    打开T2溢出中断
         }while(0)


 


   #define SET_TIMER2_CAP_COUNTER(val) SET_WORD(T2CAPLPL,T2CAPHPH,val)


    //将无符号整形数val高8位写入T2CAPLPL,低8位写入T2CAPHPH。


 


   启动T2


  #define TIMER2_RUN()  T2CNF|=0X01


   停止T2


  #define TIMER2_STOP() do{T2CNF&=0XFE;}while(0)


   最后我们要看一下T2的ISR


   #pragma vector = T2_VECTOR
   __interrupt void T2_ISR(void)
  {
   CLEAR_TIMER2_INT_FLAG();        //清T2中断标志
        if(counter<200)counter++; //200次中断LED闪烁一轮
        else
        {
          counter = 0;                  //计数清零
          TempFlag = 1;                   //改变闪烁标志
        }
  }


  主要的就是这些了,有了前一个实验,这个实验就不用放主程序了。


本文转载自阿元的新浪博客:http://blog.sina.com.cn/s/blog_4c8287230100av5z.html

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条