2019-08-07 19:50发布
dirtwillfly 发表于 2013-11-28 13:10 这是不是在一些资料上看到的? 应该是: TA0CTL = | (1
dirtwillfly 发表于 2013-11-28 15:19 其实那三行就是一句: TA0CTL = 0 | (1
最多设置5个标签!
应该是:
TA0CTL = | (1 << 2)
TA0CTL = | (2 << 8)
资料上这样写法,应该是想说TA0CTL的三种操作
这个是源程序
#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;
}
TA0CTL = 0 | (1 << 2) | (2 << 8);
他为了写注释,分成了三行
不好意思 我这个刚学 还不太懂
0 | (1 << 2) | (2 << 8) 这句话就是或运算吗? 运算之后的结果是什么?
一周热门 更多>