430f5438的定时器问题

2019-08-07 19:50发布


TA0CTL   = 0                        // 复位Timer0_A5, 分频系数设置为1
           | (1 << 2)                 // 计数器清0
           | (2 << 8);                // 计数时钟设为SMCLK




后面这两句好什么意思啊            希望可以交流交流
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
dirtwillfly
1楼-- · 2019-08-07 20:34
这是不是在一些资料上看到的?
应该是:
TA0CTL = | (1 << 2)
TA0CTL = | (2 << 8)
资料上这样写法,应该是想说TA0CTL的三种操作
liuyang8023
2楼-- · 2019-08-08 01:11
dirtwillfly 发表于 2013-11-28 13:10
这是不是在一些资料上看到的?
应该是:
TA0CTL = | (1

这个是源程序




#include "msp430x54x.h"


#define LED_light_CTL       P9DIR=0Xff             //LED流水灯端口置为输出
#define LED_light           P9OUT                  //LED流水灯数据口
#define        LED_light_BIT            P9DIR                   //LED流水灯按位控制

/******************************************************************************
* 函数声明区
******************************************************************************/

void Init_Clk(void);
void TimerA0_Init(void);
/******************************系统主函数*************************************/

void main( void )
{
  WDTCTL = WDTPW + WDTHOLD;   //关闭看门狗
  P5DIR|=BIT4;
  P7DIR|=BIT3;  
  P11DIR |= 0x07;                           // ACLK, MCLK, SMCLK set out to pins
  P11SEL |= 0x07;
  Init_Clk();                 //初始化系统时钟
  LED_light_CTL;              //初始化 LED IO端口
  TimerA0_Init();             //初始定时器timeA
  _EINT();                    //打开全局中断
  LPM3;                       //进入低功耗模式
}

/******************************************************************************
* 函数名:void Init_Clk(void)
* 功  能:系统时钟初始化
* 参  数:无
* 返回值:无
******************************************************************************/

void Init_Clk(void)
{
  WDTCTL     = WDTPW + WDTHOLD;                 // 关看门狗
  P5SEL     |= 0x0C;                            // 端口功能选择振荡器
  UCSCTL6   &= ~XT2OFF;                         // 振荡器使能
  UCSCTL3   |= SELREF_2;                        // FLLref = REFO
  UCSCTL4   |= SELA_2;                          // ACLK=REFO,SMCLK=DCO,MCLK=DCO
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // 清除 XT2,XT1,DCO 错误标志                                                         
    SFRIFG1 &= ~OFIFG;
  }while(SFRIFG1&OFIFG);                        // 检测振荡器错误标志
    UCSCTL6   |= XT2DRIVE0 + XT2DRIVE1;           // XT2 驱动模式 24~32MHz
    UCSCTL4   |= SELS_5 + SELM_5;                 // SMCLK = MCLK = XT2
}

/******************************************************************************
* 函数名:void TimerA0_Init(void)
* 功  能:定时器 TimeA 初始化
* 参  数:无
* 返回值:无
******************************************************************************/

void TimerA0_Init(void)
{
  TA0CTL   = 0                        // 复位Timer0_A5, 分频系数设置为1
           | (1 << 2)                 // 计数器清0
           | (2 << 8);                // 计数时钟设为SMCLK                                                          ;
  TA0CCR0  =  32000  - 1;             // SMCK=EX2=16MHz,设置计数器溢出时间为1ms
  TA0CCTL0 = 0                        // 初始化捕获控制
           | (1 << 4);                // 使能比较中断
  TA0CTL  |= (1 << 4);                // 设置计数器为加计数,启动
}

/******************************************************************************
* 函数名:__interrupt void Timer0_A0 (void)
* 功  能:定时器 TimeA 中断服务函数
* 参  数:无
* 返回值:无
******************************************************************************/

#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer0_A0 (void)
{  
  LED_light   ^= 0x0F;
  TA0CCR0  = (32000) - 1;
}

dirtwillfly
3楼-- · 2019-08-08 03:45
其实那三行就是一句:
TA0CTL   = 0 | (1 << 2) | (2 << 8);
他为了写注释,分成了三行
liuyang8023
4楼-- · 2019-08-08 07:17
dirtwillfly 发表于 2013-11-28 15:19
其实那三行就是一句:
TA0CTL   = 0 | (1

不好意思  我这个刚学   还不太懂  
0 | (1 << 2) | (2 << 8)  这句话就是或运算吗?  运算之后的结果是什么?   
dirtwillfly
5楼-- · 2019-08-08 11:47
 精彩回答 2  元偷偷看……
dirtwillfly
6楼-- · 2019-08-08 12:03
运算结果是:10 0000 0100

一周热门 更多>