zoukankan      html  css  js  c++  java
  • CC2541蓝牙学习——定时器1正计数/倒计数模式

    学习目标:掌握定时器1正计数/倒计数模式,两种实现方式:查询和中断
     

    正计数/倒计数模式】:

    在正计数/倒计数模式,计数器反复从0x0000开始,正计数直达到T1CC0H:T1CC0L保存值。然后计数器将倒计数直到0x0000,如下图所示。这个定时器用于周期必须是对称输出脉冲而不是0xFFF的应用程序,因此允许中心对齐的PWM输出应用的实现。在正计数/倒计数模式,当达到最终计数值时0x0000设置标志IRCON.T1IFT1STAT.OVFIF。如果设置了相应的中断屏蔽位TIMIF.OVFIM以及IEN1.T1EN和总中断IEN0.EA,计数器溢出将产生一个中断请求。注意:在正计数达到最大值又倒计数回到0x0000时产生中断。

    查询方式

     1 /******************************************************************************
     2 *函 数 名:InitT1
     3 *功    能:定时器1初始化,系统不配置时钟默认2分频,即16M
     4 *入口参数:无
     5 *出口参数:无
     6 ******************************************************************************/
     7 void InitT1(void)
     8 {
     9   T1CTL  = 0x0f;     //定时器1设置为128分频,正计数/倒计数模式
    10   T1CC0L = 0xff;     //模值1024,定时器1通道0捕获/比较值低位
    11   T1CC0H = 0x9f;     //定时器1通道0捕获/比较值高位
    12   T1STAT = 0X21;     //通道0,中断有效。这一句在裸机程序中可有可无
    13 }

    主程序

     1 /******************************************************************************
     2 *程序入口函数
     3 ******************************************************************************/
     4 int main(void)
     5 {
     6   InitClock();
     7   InitLED(1);                //LED初始化,熄灭LED1
     8   InitT1();                  //定时器1初始化
     9    
    10   while(1)
    11   {
    12     if(T1STAT & (1<<5))       //检测定时器1是否溢出
    13     {
    14       T1STAT &= ~(1<<5);      //清溢出标志
    15       LED1 = !LED1;          //LED闪烁
    16     }
    17   }
    18 }

     也可以通过判断定时器1中断标志(IRCON.T1IF)来作为检测是否溢出的依据。

    中断实现方式,定时器1正计数/倒计数模式初始化程序:

     1 /******************************************************************************
     2 *函 数 名:InitT1
     3 *功    能:定时器1初始化,系统不配置时钟默认2分频,即16M
     4 *入口参数:无
     5 *出口参数:无
     6 ******************************************************************************/
     7 void InitT1(void)
     8 {
     9   T1CTL  = 0x0f;     //定时器1设置为128分频,正计数/倒计数模式
    10   T1CC0L = 0xff;     //模值1024,定时器1通道0捕获/比较值低位
    11   T1CC0H = 0x9f;     //定时器1通道0捕获/比较值高位
    12   T1STAT = 0X21;     //通道0,中断有效。这一句在裸机程序中可有可无
    13   TIMIF |= (1<<6);   //定时器1溢出中断使能
    14   IEN1  |= (1<<1);   //定时器1中断使能
    15   EA = 1;            //开总中断
    16 }

    中断服务程序

     1 /******************************************************************************
     2 *函 数 名:Timer1_ISR
     3 *功    能:定时器1中断服务程序
     4 *入口参数:无
     5 *出口参数:无
     6 ******************************************************************************/
     7 #pragma vector = T1_VECTOR 
     8 __interrupt void Timer1_ISR(void) 
     9 { 
    10   LED1 = !LED1;
    11   IRCON &= ~0x02;
    12   T1STAT &= ~0x20; 
    13 }
  • 相关阅读:
    IO学习BufferedWriter 规格严格
    Finalization 规格严格
    linux下查看主板内存槽与内存信息 规格严格
    调试JavaScript/VB Script脚本程序(Wscript篇) 规格严格
    ORA01688:unable to extend table name。name partition NAME by NUM in tablespace NAME 规格严格
    Hidden Java 7 Features – SecondaryLoop 规格严格
    Web应用服务器监控 规格严格
    NetBeans 时事通讯(刊号 # 12 Jun 16, 2008)
    NetBeans 时事通讯(刊号 # 12 Jun 16, 2008)
    Win32 DLL的一个调试心得
  • 原文地址:https://www.cnblogs.com/chenzhao207/p/4497700.html
Copyright © 2011-2022 走看看