打印

430f5438的定时器问题

[复制链接]
1345|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuyang8023|  楼主 | 2013-11-26 20:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
dirtwillfly| | 2013-11-28 13:10 | 只看该作者
这是不是在一些资料上看到的?
应该是:
TA0CTL = | (1 << 2)
TA0CTL = | (2 << 8)
资料上这样写法,应该是想说TA0CTL的三种操作

使用特权

评论回复
板凳
liuyang8023|  楼主 | 2013-11-28 15:16 | 只看该作者
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| | 2013-11-28 15:19 | 只看该作者
其实那三行就是一句:
TA0CTL   = 0 | (1 << 2) | (2 << 8);
他为了写注释,分成了三行

使用特权

评论回复
5
liuyang8023|  楼主 | 2013-11-28 15:24 | 只看该作者
dirtwillfly 发表于 2013-11-28 15:19
其实那三行就是一句:
TA0CTL   = 0 | (1

不好意思  我这个刚学   还不太懂  
0 | (1 << 2) | (2 << 8)  这句话就是或运算吗?  运算之后的结果是什么?   

使用特权

评论回复
6
dirtwillfly| | 2013-11-28 15:28 | 只看该作者
| 是按位或运算,<<是左移位运算

使用特权

评论回复
7
dirtwillfly| | 2013-11-28 15:33 | 只看该作者
运算结果是:10 0000 0100

使用特权

评论回复
8
liuyang8023|  楼主 | 2013-11-28 15:55 | 只看该作者
dirtwillfly 发表于 2013-11-28 15:33
运算结果是:10 0000 0100

为什么不直接写入寄存器  还要进行移位运算等  这样写有什么好处吗

使用特权

评论回复
9
dirtwillfly| | 2013-11-28 15:56 | 只看该作者
liuyang8023 发表于 2013-11-28 15:55
为什么不直接写入寄存器  还要进行移位运算等  这样写有什么好处吗

:L可能是习惯问题吧。

使用特权

评论回复
10
liuyang8023|  楼主 | 2013-11-28 16:00 | 只看该作者
dirtwillfly 发表于 2013-11-28 15:56
可能是习惯问题吧。

你一流汗  我都不敢问了:handshake

使用特权

评论回复
11
dirtwillfly| | 2013-11-28 16:01 | 只看该作者
liuyang8023 发表于 2013-11-28 16:00
你一流汗  我都不敢问了

:lol没关系了,我知道的都会尽量回答

使用特权

评论回复
12
liuyang8023|  楼主 | 2013-11-28 16:02 | 只看该作者
liuyang8023 发表于 2013-11-28 16:00
你一流汗  我都不敢问了

我发现这个5438挺难得   最主要的是  不会的时候还无人能问      让我很纠结      只有你回答了我 别人也不理我啊   

使用特权

评论回复
13
liuyang8023|  楼主 | 2013-11-28 16:03 | 只看该作者
dirtwillfly 发表于 2013-11-28 16:01
没关系了,我知道的都会尽量回答

我发现这个5438挺难得   最主要的是  不会的时候还无人能问      让我很纠结      只有你回答了我 别人也不理我啊

使用特权

评论回复
14
dirtwillfly| | 2013-11-28 16:05 | 只看该作者
liuyang8023 发表于 2013-11-28 16:03
我发现这个5438挺难得   最主要的是  不会的时候还无人能问      让我很纠结      只有你回 ...

:lol其实我也没用过5438,我用过其他的msp430芯片

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
liuyang8023 + 3
15
liuyang8023|  楼主 | 2013-11-28 16:07 | 只看该作者
dirtwillfly 发表于 2013-11-28 16:05
其实我也没用过5438,我用过其他的msp430芯片

很感谢你哦

使用特权

评论回复
16
dirtwillfly| | 2013-11-28 16:07 | 只看该作者
liuyang8023 发表于 2013-11-28 16:07
很感谢你哦

有问题多来论坛交流:handshake

使用特权

评论回复
17
liuyang8023|  楼主 | 2013-11-28 16:09 | 只看该作者
dirtwillfly 发表于 2013-11-28 16:07
有问题多来论坛交流

好的  我怎么结不了帖啊         结贴有什么用啊

使用特权

评论回复
18
dirtwillfly| | 2013-11-28 16:10 | 只看该作者
liuyang8023 发表于 2013-11-28 16:09
好的  我怎么结不了帖啊         结贴有什么用啊

你发帖时没给分,系统就自动给你结贴了。
如果你发帖时给分数了,就需要手动结贴。结帖给分是对回答你问题的人一种认可。

使用特权

评论回复
19
liuyang8023|  楼主 | 2013-11-28 16:12 | 只看该作者
dirtwillfly 发表于 2013-11-28 16:10
你发帖时没给分,系统就自动给你结贴了。
如果你发帖时给分数了,就需要手动结贴。结帖给分是对回答你问 ...

哦  谢谢     你有430交流群的群号码   我现在只有自己啊          很需要帮助

使用特权

评论回复
20
dirtwillfly| | 2013-11-28 16:40 | 只看该作者
liuyang8023 发表于 2013-11-28 16:12
哦  谢谢     你有430交流群的群号码   我现在只有自己啊          很需要帮助

没有啊,来论坛就留吧

使用特权

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

本版积分规则

个人签名:舍得   一个多么美丽而又讽刺的动作

22

主题

204

帖子

0

粉丝