📄 定时器a之连续计数模式多端口翻转输出2.c
字号:
/**********************************************************/
//MSP430 Advanced Developping Components - [BaseComponents_24.C]
////Timer_A, Toggle P1.0-3, Cont. Mode ISR, HF XTAL ACLK
////->>> http://www.dutzm.cn
////->>> tel :(0)13130044096
/**********************************************************/
//MSP430高级实验开发组件 - 定时器A之连续计数模式多端口翻转输出
//时钟设置:
////ACLK = MCLK = TACLK = LFXT1 = HF XTAL
//当前演示程序功能描述:
////使用TimerA的CCRx和溢出产生四个独立的时间间隔
////CCR0,CCR1和CCR2利用端口的输出方式分别控制P11,P12和P13的输出
////在对应的中断服务程序设置CCRx对应的时间间隔
////在输出模式下,端口在TAR到达CCRx时翻转,是受硬件控制的
//// P1.1 = CCR0 = 4MHz/(2*200) = 10kHz
//// P1.2 = CCR1 = 4MHz/(2*1000) = 2kHz
//// P1.3 = CCR2 = 4MHz/(2*10000) = 200Hz
//// P1.0 = overflow = 4MHz/(2*65536) = 30.5Hz
/*********************************************************/
#include <msp430x14x.h>
void main(void) {
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; //停止看门狗
BCSCTL1 |= XTS; //ACLK = LFXT1 = HF XTAL
do {
IFG1 &= ~OFIFG; //清除ASCFault标志位
for (i=0xFF;i>0;i--); //延时
}while((IFG1&OFIFG)); //判断OSCFault标志位
BCSCTL2 |= SELM_3; //MCLK = LFXT1
P1SEL |= (BIT1 + BIT2 + BIT3); //设置P11,P12,P13端口第二功能
P1DIR |= (BIT0 + BIT1 + BIT2 + BIT3); //端口的输出方向
CCTL0 = OUTMOD_4 + CCIE; //CCR0翻转模式,中断
CCTL1 = OUTMOD_4 + CCIE; //CCR1翻转模式,中断
CCTL2 = OUTMOD_4 + CCIE; //CCR2翻转模式,中断
CCR0 = 200;
CCR1 = 1000;
CCR2 = 10000;
TACTL = TASSEL_1 + MC_2 + TAIE; //ACLK,连续计数模式,允许中断
_BIS_SR(LPM0_bits + GIE); //LPM0低功耗模式,允许系统中断
}
//Timer_A0中断服务程序
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0 (void) {
CCR0 += 200; //CCR0 Offset
}
//Timer_A3中断服务程序
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1(void) {
switch(TAIV) {
case 2:
CCR1 += 1000; //CCR1 Offset
break;
case 4:
CCR2 += 10000; //CCR1 Offset
break;
case 10:
P1OUT ^= BIT0; //Timer_A3溢出,软件翻转端口
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -