这是一个改变灯亮度的程序,以前试验的时候可以运行,但现在运行的时候 按键按下灯没有反应,哪位大神帮忙看看程序哪出错了,谢谢啦
#include "msp430g2553.h"
int i;
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
P1DIR|=BIT6;//设置P1.6为输出方向
P1SEL|=BIT6;//设置I/O端口
P1DIR&=~BIT3; //P1.3为输入
P1REN|=BIT3; //设置上拉电阻
P1IES|=BIT3; //高电平到低电平有效,即下降沿触发
P1IFG&=~BIT3; //清除中断标志
P1IE|=BIT3;//允许P1.3发生中断
_EINT();//开总中断
TACTL|=MC_1+TASSEL_2+ID_0;//选择SMCLK为时钟,不分频,增计数模式
TACCTL1=OUTMOD_7;//选择模式7高电平PWM输出
TACCR0=3000;//设置PWM的周期
TACCR1=0;//设置PWM的占空比,即TACCR1/TACCR0
}
#pragma vector=PORT1_VECTOR //I/O端口中断服务程序
__interrupt void P1_ISR(void) //声明中断服务程序,名为P1_ISR
{
if(P1IFG&BIT3) //判断键是否按下
{
for(i=0;i<300;i++);//消抖,延时一段时间再判断
if(P1IFG&BIT3)
{
TACCR1=TACCR1+500;
if(TACCR1>3000)
TACCR1=0;
}
}
P1IFG&=~BIT3;//清除中断标志
}
回复 沙发 huo_hu 的帖子
main不要结束?什么意思
回复 楼主 pp1234ll 的帖子
这个程序是PWM调整灯在逐渐变亮,后熄灭的,应该是有反应的吧,按1.3按键后,,,
楼主的程序下载到板子后,按键,灯是逐渐亮,是有反应滴
但有时按6次到最亮灭灯,时而有7次的,,求解释
回复 6楼 qwqwqw2088 的帖子
不清楚,我一直都是按6次达到最亮
谢谢啦,现在程序又能运行了,昨天不知道怎么了同一个程序就是不能运行
关于消抖处理的疑问
你的软件效抖,有作用么?如果下降沿触发以后,P1IFG的对应位是一直被置位的状态吧,直到P1IFG被清零为止吧,
中断之后程序改成这样比较好
P1IE&=~BIT3; //禁止P1.3中断
for(i=0;i<1000;i++); //消抖
if(P1IN&BIT3)
_NOP();
else
TACCR1=TACCR1+500;
if(TACCR1>3000)
TACCR1=0;
P1IFG=0; //中断标志清零
P1IE|=BIT3; //允许P1.3中断
回复 11楼 woshidalongxia 的帖子
不清楚,但在我的板子上可以运行
可是msp430g2553产生PWM波,TA0支持的引脚有P1.1,P1.2,P1.5,P2.6不是吗?你在P1.3做中断源,P1.6输出能行么?