定时器a之连续计数模式多端口翻转输出1.c

来自「包含了msp430单片机上的ADC、定时器A、定时器B、基础时钟、看门狗的初始化」· C语言 代码 · 共 54 行

C
54
字号
/**********************************************************/
//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 + =
减小字号Ctrl + -
显示快捷键?