📄 定时器a之连续计数模式多端口翻转输出1.c
字号:
/**********************************************************/
//MSP430 Advanced Developping Components - [BaseComponents_22.C]
////Timer_A, Toggle P1.0-3, Cont. Mode ISR, DCO SMCLK
////->>> http://www.dutzm.cn
////->>> tel :(0)13130044096
/**********************************************************/
//MSP430高级实验开发组件 - 定时器A之连续计数模式多端口翻转输出
//时钟设置:
////ACLK = n/a, MCLK = SMCLK = TACLK = default DCO ~800kHz
//当前演示程序功能描述:
////使用TimerA的CCRx和溢出产生四个独立的时间间隔
////CCR0,CCR1和CCR2利用端口的输出方式分别控制P11,P12和P13的输出
////在对应的中断服务程序设置CCRx对应的时间间隔
////在输出模式下,端口在TAR到达CCRx时翻转,是受硬件控制的
/*********************************************************/
#include <msp430x14x.h>
void main(void) {
WDTCTL = WDTPW + WDTHOLD; //停止看门狗
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_2 + MC_2 + TAIE; //SMCLK,连续计数模式,允许中断
_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 + -