后面这两句什么意思啊

[复制链接]
868|35
手机看帖
扫描二维码
随时随地手机跟帖
jlyuan|  楼主 | 2018-10-23 18:17 | 显示全部楼层 |阅读模式

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




430f5438
后面这两句什么意思啊   

相关帖子

jiaxw| | 2018-10-23 18:20 | 显示全部楼层
这是不是在一些资料上看到的?
应该是:
TA0CTL = | (1 << 2)
TA0CTL = | (2 << 8)

使用特权

评论回复
spark周| | 2018-10-23 18:23 | 显示全部楼层

资料上这样写法,应该是想说TA0CTL的三种操作

使用特权

评论回复
liliang9554| | 2018-10-23 18:26 | 显示全部楼层
这个是源程序




#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;
}

使用特权

评论回复
午夜粪车| | 2018-10-23 18:29 | 显示全部楼层
其实那三行就是一句:
TA0CTL   = 0 | (1 << 2) | (2 << 8);
他为了写注释,分成了三行

使用特权

评论回复
jlyuan|  楼主 | 2018-10-23 18:32 | 显示全部楼层

0 | (1 << 2) | (2 << 8)  这句话就是或运算吗?  运算之后的结果是什么?   

使用特权

评论回复
zhaoxqi| | 2018-10-23 18:36 | 显示全部楼层
| 是按位或运算,<<是左移位运算

使用特权

评论回复
huangchui| | 2018-10-23 18:38 | 显示全部楼层
运算结果是:10 0000 0100

使用特权

评论回复
jlyuan|  楼主 | 2018-10-23 18:41 | 显示全部楼层
为什么不直接写入寄存器  还要进行移位运算等  这样写有什么好处吗

使用特权

评论回复
zhanghqi| | 2018-10-23 18:48 | 显示全部楼层

:L可能是习惯问题吧。

使用特权

评论回复
jlyuan|  楼主 | 2018-10-23 18:51 | 显示全部楼层
我发现这个5438挺难得   最主要的是  不会的时候还无人能问      让我很纠结

使用特权

评论回复
wuhany| | 2018-10-23 18:53 | 显示全部楼层
很多都是相通的,所以也不用太纠结型号

使用特权

评论回复
jlyuan|  楼主 | 2018-10-23 18:57 | 显示全部楼层

其实还是不大明白,我再琢磨琢磨吧,多谢了哈,结贴了先

使用特权

评论回复
Thorald| | 2018-10-24 21:04 | 显示全部楼层
<<是左移位运算

使用特权

评论回复
Garen2| | 2018-10-24 22:23 | 显示全部楼层
5438可以参考5438A

使用特权

评论回复
CaLipton| | 2018-10-27 22:55 | 显示全部楼层
为什么不直接写入寄存器

使用特权

评论回复
kkzz| | 2018-11-1 21:21 | 显示全部楼层
“|”是“或”运算符号

使用特权

评论回复
hudi008| | 2018-11-1 21:22 | 显示全部楼层
1<<2表示将1左移2位

使用特权

评论回复
lzmm| | 2018-11-1 21:22 | 显示全部楼层
定时器0选用SMCLK作时钟源

使用特权

评论回复
minzisc| | 2018-11-1 21:22 | 显示全部楼层
TA0CCTL0   ?   

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

880

主题

12030

帖子

4

粉丝