MSP430_定时器输出PWM
2014-06-25 16:59
453 查看
#include <msp430.h>
//MSP430G2553 - 使用Timer_A,Up Mode, DCO SMCLK
//
// 介绍: 该程序利用TIMER A 的 UP模式 在P1.0脚产生1S方波
// ACLK = na, SMCLK = MCLK = TACLK = DCO-16M
//
// MSP430G2553
// -----------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.0/TA1|-->led
//
// 使用 MSP430 LaunchPad , MSP430G2553芯片
// CCS5.2编译通过
//******************************************************************************
/*#define CPU_F ((double)1630)//cpu frequency1630 //CPU的实际MCLK大约为13.05/8=1.63KHz
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))*/
void Timer_A0_1_init() //TA0.1输出PWM
{
TACTL|= TASSEL_1+MC_1;//ACLK,增计数
CCTL1=OUTMOD_7;//输出模式为复位/置位
CCR0=328;//时钟频率为32768HZ,100HZ
//CCR1=164;//时钟频率为32768HZ,占空比CCR1/CCR0=50%
CCR1=109;//占空比CCR1/CCR0=1/3 TA0.1由P1.2 P1.6输出
}
void Timer_A1_2_init() //TA1.2输出PWM
{
TA1CTL|= TASSEL_1+MC_1;//ACLK,增计数
TA1CCTL2=OUTMOD_7;//输出模式为复位/置位,注意CCTL2要写为TA1CCTL2
TA1CCR0=163;//时钟频率为32768HZ,波形32768/CCR0=199HZ
TA1CCR2=41;//占空比CCR2/CCR0=1/4,注意CCR2要写成TA1CCR2 TA1.2由P2.4 P2.5输出
}
void Timer_A1_1_init() //TA1.1输出PWM
{
TA1CCTL1=OUTMOD_7;
TA1CCR1=123; //占空比CCR1/CCR0=3/4,注意CCR1要写成TA1CCR1 TA1.1由P2.1 P2.2输出
}
void IO_init()
{
P1SEL|=BIT2+BIT6;
P1DIR|=BIT2+BIT6;//P1.2 P1.6输出 TA0.1 OUT1
P2SEL|=BIT4;
P2DIR|=BIT4;//P2.4 P2.5输出 TA1.2 OUT2
P2SEL|=BIT1+BIT2;
P2DIR|=BIT1+BIT2; //P2.1 P2.2输出 TA1.1 OUT1
}
void main(void) {
WDTCTL=WDTPW+WDTHOLD;
IO_init();
TA1CCTL0 = CCIE;
Timer_A0_1_init();
Timer_A1_2_init();
Timer_A1_1_init();
_EINT();
_BIS_SR(CPUOFF); // Enter LPM0 进入低功耗模式0 SMCLK ON,ACLK ON
}
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TimerA1_ISR(void)
{
TA1CCR2 = 82;
}
实验结果在P2.4引脚输出占空比可调的PWM,若想得到想要的占空比,在中断里更新TA1CCR2的值即可
//MSP430G2553 - 使用Timer_A,Up Mode, DCO SMCLK
//
// 介绍: 该程序利用TIMER A 的 UP模式 在P1.0脚产生1S方波
// ACLK = na, SMCLK = MCLK = TACLK = DCO-16M
//
// MSP430G2553
// -----------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.0/TA1|-->led
//
// 使用 MSP430 LaunchPad , MSP430G2553芯片
// CCS5.2编译通过
//******************************************************************************
/*#define CPU_F ((double)1630)//cpu frequency1630 //CPU的实际MCLK大约为13.05/8=1.63KHz
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))*/
void Timer_A0_1_init() //TA0.1输出PWM
{
TACTL|= TASSEL_1+MC_1;//ACLK,增计数
CCTL1=OUTMOD_7;//输出模式为复位/置位
CCR0=328;//时钟频率为32768HZ,100HZ
//CCR1=164;//时钟频率为32768HZ,占空比CCR1/CCR0=50%
CCR1=109;//占空比CCR1/CCR0=1/3 TA0.1由P1.2 P1.6输出
}
void Timer_A1_2_init() //TA1.2输出PWM
{
TA1CTL|= TASSEL_1+MC_1;//ACLK,增计数
TA1CCTL2=OUTMOD_7;//输出模式为复位/置位,注意CCTL2要写为TA1CCTL2
TA1CCR0=163;//时钟频率为32768HZ,波形32768/CCR0=199HZ
TA1CCR2=41;//占空比CCR2/CCR0=1/4,注意CCR2要写成TA1CCR2 TA1.2由P2.4 P2.5输出
}
void Timer_A1_1_init() //TA1.1输出PWM
{
TA1CCTL1=OUTMOD_7;
TA1CCR1=123; //占空比CCR1/CCR0=3/4,注意CCR1要写成TA1CCR1 TA1.1由P2.1 P2.2输出
}
void IO_init()
{
P1SEL|=BIT2+BIT6;
P1DIR|=BIT2+BIT6;//P1.2 P1.6输出 TA0.1 OUT1
P2SEL|=BIT4;
P2DIR|=BIT4;//P2.4 P2.5输出 TA1.2 OUT2
P2SEL|=BIT1+BIT2;
P2DIR|=BIT1+BIT2; //P2.1 P2.2输出 TA1.1 OUT1
}
void main(void) {
WDTCTL=WDTPW+WDTHOLD;
IO_init();
TA1CCTL0 = CCIE;
Timer_A0_1_init();
Timer_A1_2_init();
Timer_A1_1_init();
_EINT();
_BIS_SR(CPUOFF); // Enter LPM0 进入低功耗模式0 SMCLK ON,ACLK ON
}
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TimerA1_ISR(void)
{
TA1CCR2 = 82;
}
实验结果在P2.4引脚输出占空比可调的PWM,若想得到想要的占空比,在中断里更新TA1CCR2的值即可
相关文章推荐
- MSP430程序库<十一>定时器TA的PWM输出
- MSP430定时器控制PWM输出 (MSP430入门)
- MSP430 定时器输出PWM波形
- (转)STM32学习笔记(5):通用定时器PWM输出
- 定时器中断模拟pwm输出声音文件
- STM32自学系列——2.定时器TIM和PWM的输出
- EFM32小记----定时器配置为捕获、比较以及PWM输出注意事项
- 通用定时器PWM输出实验
- STM32TIM输出比较的三种模式及一个定时器如何输出频率不同的PWM波
- STM32定时器输出不同频率不同占空比的PWM
- 定时器的分时复用输出PWM方法考虑
- msp430输出PWM波
- 【定时器/中断/PWM】利用一个定时器实现一路PWM波的输出---点亮LED
- STM32 定时器输出PWM的模式
- STM32定时器输出比较(PWM)
- STM32 HAL库 定时器TIM----- PWM输出配置
- 通用定时器PWM输出
- 郑州-杰瑞鼠 / STM32定时器的PWM输出配置(标准库)
- STM32 配置定时器让引脚输出PWM波形
- 1. avr定时器/计数器0 --TC0 --CTC模式输出PWM (比较匹配发生时清除计数器模式(即CTC模式))