接下来的程序采用的单片机均为MSP430F149,编程环境为IAR
程序一:
#include "msp430x14x.h"
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; //关看门狗
TACTL=TASSEL0+TACLR+MC0; //ACLK为时钟源,清TAR,增计数模式
TACCR0=512-1; //设定PWM周期
TACCTL1=OUTMOD_7; //CCR1输出为reset/set模式
TACCR1=384; //CCR1的PWM占空比设定
TACCTL2=OUTMOD_7; //CCR2输出为reset/set模式
TACCR2=128; //CCR2的PWM占空比设定
P1DIR|=0X0c; //P1.2、P1.3输出,对应TA1,TA2
P1SEL|=0X0c; //TA1,TA2输出功能
while(1);
}
功能:P1.2,P1.3分别输出TA1,TA2的pwm信号,通过杜邦线接两个led,
可观察到不同占空比的pwm效果。一个亮些,一个暗些。
程序二:
#include "msp430x14x.h"
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
TBCTL=TBSSEL_2+TBCLR+MC0; //SMCLK(800K),增模式
TBCCTL1=OUTMOD_3; //置位/复位模式
TBCCR0=8000; //PWM周期
TBCCR1=0; //PWM的低电平时间
P4DIR=0X02; //P4.1输出,P4.1受TBCCR1控制
P4SEL=0X02; //P4.1作为定时器B的PWM输出
P1DIR=0XFC; //P1.0 P1.1输入
P1IE=0X03; //允许中断P1.1和P1.2
P1IES=0XFC; //上升沿中断
_EINT();
while(1);
}
#pragma vector=PORT1_VECTOR
__interrupt void PORT_INTERRUPT(void)
{
uint i;
for(i=8000;i>0;i--); //延时,去抖
if(P1IFG&BIT0)
{
if(TBCCR1>=8000)
{
TBCCR1=1000;
}
else
{
TBCCR1=TBCCR1+1000;
}
}
if(P1IFG&BIT1)
{
if(TBCCR1<1000)
{
TBCCR1=8000;
}
else
{
TBCCR1=TBCCR1-1000;
}
}
P1IFG=0X00; //消除按键中断标志
}
功能:通过P4.1外接一个led灯
430板子的key1,key2调节亮度。一个增,一个减。
今天的分享就这样结束了,有什么不足之处希望大家指正。最后希望大家能一起探讨学习过程中的疑问,分享自己的经历,大家一起努力。