我想编程长生一个终端来控制pwm的占空比变化,p1.3按键作为中断,可是我按了键发现波形没变化,这是怎么回事,这个中断函数用来控制灯的暗灭变化时可以的,这么到了这个程序里就不行了???紧急求助。。。。。。。。。
程序如下。。。。求大神给力。。。
#include
void key_init();
void main(void)
{
static int i;
//XTS(1);
//XT1OFF(0);
//XT1BYPASS(0);
//XCAP(0);
_EINT(); //打开全局中断
WDTCTL = WDTPW + WDTHOLD;
// Stop WDT禁止看门狗
P1DIR |= BIT2; // P1.2 and P1.3 TA1/2 options 1为选引脚第二功能,0为引脚第一功能1
P1SEL |= BIT2;
CCR0 = 512-1; // PWM Period
CCTL1 = OUTMOD_7;// CCR1 reset/set
i=168;
CCR1 =i; // CCR1 PWM duty cycle
TACTL = TASSEL_1 + MC_1; // ACLK时钟, 上升沿捕获
_BIS_SR(CPUOFF); // Enter LPM0
}
void key_init()
{
P1DIR&=~BIT3; //P1.3为输入
P1REN|=BIT3; //设置上拉
P1OUT|=BIT3;
P1IES|=BIT3; //高电平到低电平有效,即下降沿
P1IFG&=~BIT3; //清除中断标志,带上这句最好
P1IE|=BIT3;
}
#pragma vector=PORT1_VECTOR //中断
__interrupt void port1(void)
{
if(P1IFG&BIT3)
{
static int i;
if(i<=511)
i += 168;
else i = 0; // 调整占空比
P1IFG&=~BIT3; //这句清除中断标志
}
else
P1IFG=0X00;
}
回复 板凳 qinkaiabc 的帖子
#include
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT禁止看门狗
static int i;
P1DIR&=~BIT3; //P1.3为输入
P1REN|=BIT3; //设置上拉
P1OUT|=BIT3;
P1IES|=BIT3; //高电平到低电平有效,即下降沿
P1IFG&=~BIT3; //清除中断标志,带上这句最好
P1IE|=BIT3;
P1DIR |= BIT2; // P1.2输出信号
P1SEL |= BIT2+BIT3;
CCR0 = 512-1; // PWM Period
CCTL1 = OUTMOD_7;// CCR1 reset/set
i=168;
CCR1 =i; // CCR1 PWM duty cycle
TACTL = TASSEL_1 + MC_1; // ACLK时钟, 上升沿捕获
_EINT(); //打开全局中断
_BIS_SR(CPUOFF); // Enter LPM0
}
#pragma vector=PORT1_VECTOR //中断
__interrupt void port1(void)
{
if(P1IFG&BIT3)
{
static int i;
if(i<=384)
{
i += 168;
}
else i = 0; // 调整占空比
P1IFG&=~BIT3; //这句清除中断标志
}
else
P1IFG=0X00;
}
您再帮我看看这个程序
没看,扫了一眼,发现一条好像有点问题,也许不一定是你故障的直接原因
就是声明静态变量 i
在中断程序中声明static,表示只在本中断程序中使用,而且一般要声明的时候赋给初始值。