MCLK选择用LFXT1CLK即32768Hz应该用 BCSCTL2=SELM_3;
为什么这个io口中断加了那句跟不加延时是一样的呢?MCLK默认应该是DCOCLK的喔。。
是不是我还没设置好了??
我的io口中断程序:
#include
#define uchar unsigned char
void delay(uchar z)
{
uchar x,y,u;
for(x=0;x
for(y=0;y<255;y++)
for(u=0;u<100;u++);
}
void Key_init(void)
{
// P1DIR&=~BIT3;
P1REN|=BIT3;
P1IES&=~BIT3; //选择触发边沿,下降沿触发?
P1IE|=BIT3; //打开P1.3的中断
P1IFG&=0x00;
}
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
BCSCTL2=SELM_3;
P1DIR|=BIT0;
P1OUT|=BIT0;
Key_init(); //调用IO中断初始化函数
delay(80);
while(1)
{
_EINT();//开启总中断,这一步没有的话,所有的中断都不能触发??
P1OUT|=BIT0;
}
}
#pragma vector=PORT1_VECTOR
__interrupt void Key_interrput(void)
{
unsigned int i;
for(i=0;i<12000;i++)
if(P1IFG&BIT3)
{
P1OUT&=~BIT0;
delay(100);
P1IFG&=0x00;
P1REN|=BIT3;
}
}
首先你的按键中断初始化没有加上拉电阻,加个上拉电阻好些
你这个“for(i=0;i<12000;i++)
if(P1IFG&BIT3)
{
P1OUT&=~BIT0;
delay(100);
P1IFG&=0x00;
P1REN|=BIT3;”
是做什么呢?进入中断之后,P1IFG没有软件复位的话,一直保持不变。进入中断后可延时等待消抖,然后可以再比较下P1IN,以确定是否是按键按下。
建议程序进入待机模式,有按键时用中断唤醒。
回复 沙发经世致用 的帖子
换个简单点的程序可能容易找到错误,我写了个简单的LED灯闪烁
#include
#define uchar unsigned char
#define uint unsigned int
void delay(uint z)
{
uint x,y;
for(x=0;x
for(y=0;y<100;y++);
}
void main()
{
WDTCTL=WDTPW+WDTHOLD;
BCSCTL2=SELM_3;
P1DIR|=BIT0;
P1SEL|=BIT4;
P1DIR|=BIT4;
while(1)
{
P1OUT^=BIT0;
delay(100);
}
}
当我屏蔽BCSCTL2=SELM_3;这句话跟加上这句话,频率都是11Hz左右,为什么呢???
这是我用iar仿真时CYCLECOUNTER的变化
msp430g2553有内部上拉电阻设置的吗?我一般都是外加电阻的。
回复 5楼fghdzb 的帖子
就三楼的程序,我是控制P1.0的LED闪烁的,我加不加BCSCTL2=SELM_3;这句话,LED闪烁频率都在11Hz左右。。。。。