发 帖  
原厂入驻New
[问答]

msp430f149外部中断计脉冲

5524
分享
#include <msp430x14x.h>
int i=0;
void init()//初始化时钟
{
   unsigned int i;
   _DINT();//__disable_interrupt()
   BCSCTL1 &=~XT2OFF;//Basic clock System Control 1,Enable XT2CLK
                      //即打开XT2
   do
   {
     IFG1 &= ~OFIFG;        // IFG1:Interrupt Flag 1                                                // 清除振荡器失效标志
      for(i=0xFF;i>0;i--);// 延时,等待XT2起振
   }
   while((IFG1 & OFIFG) != 0);// 判断XT2是否起振,OFIFG=0则起振               
   BCSCTL2 =SELM1+SELS;       //MCLK(SELM1),SMCLK时钟为XT2,都为8MHZ
//BCSCTL2:Basic Clock System Control 2
}
void count_init()
{
   P1SEL =0x00;
   P1DIR&=~(BIT0+BIT1);
   P1DIR|=BIT6;
   P1OUT=0X00;
   P1IES = 0x00;               // P1.0选择上升沿中断
   P1IE  = 0x01;               // 打开中断使能
}
int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  init();
  count_init();
  _EINT();           //开总中断
  return 0;
}
#pragma vector=PORT1_VECTOR   //外部中断计脉冲
__interrupt void port1(void)
{

  if(P1IFG&BIT0==BIT0)
  {  
    P1IFG=0X00;
    if((P1IN&BIT1)==BIT1)
    i++;
    else
    i--;
    if(i>=100)//接收的脉冲大于100则P1.6输出高电平,灯亮
      P1OUT|=BIT6;
    else
      P1OUT&=~BIT6;
  }
}
我打算用外部中断计电机脉冲个数,但是好像没有用,这是我写的一个外部中断测试,灯一直不亮,现在也不知道是什么原因,求帮助,已经困扰好久了,谢谢!

0
2014-5-14 11:11:08   评论 分享淘帖 邀请回答
9个回答
可能是硬件出了问题吧   建议检查下硬件  
2014-5-14 13:04:34 评论

举报

#include <msp430x24x.h>
int i=0;
void init()//初始化时钟
{
   unsigned int i;
   BCSCTL1 &=~XT2OFF;//Basic Clock System Control 1,Enable XT2CLK
                      //即打开XT2
   do
   {
     IFG1 &= ~OFIFG;        // IFG1:Interrupt Flag 1                                                // 清除振荡器失效标志
      for(i=0xFF;i>0;i--);// 延时,等待XT2起振
   }
   while((IFG1 & OFIFG) != 0);// 判断XT2是否起振,OFIFG=0则起振               
   BCSCTL2 =SELM1+SELS;       //MCLK(SELM1),SMCLK时钟为XT2,都为8MHZ
}
void count_init()
{
   P1DIR|=BIT6;
   P1IES = 0x00;               // P1.0选择上升沿中断
   P1IE  = 0x03;               // 打开中断使能
   P1IFG = 0X00;
}
void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  init();
  count_init();
  _EINT();           //开总中断
}
#pragma vector=PORT1_VECTOR   //外部中断计脉冲
__interrupt void port1(void)
{

  if(P1IFG&BIT0)
  {  
    P1IFG=0X00;
    P1OUT|=BIT6;
  }
  if(P1IFG&BIT1)
  {
    P1IFG=0X00;
    P1OUT&=~BIT6;
  }
}
2014-8-9 15:56:22 评论

举报

你可以在proteus中仿真一下 ,我把这个稍微修改了一下 是可以的,因为我的proteus中只有msp430f249,所以我选的是f249,在仿真的时候注意我们选的是外部高频晶体振荡器,所以我们要选择一下8MHz的晶振,在添加源程序的那个框中添加
2014-8-9 16:00:48 评论

举报

2015-1-15 09:48:37 评论

举报

楼主问题解决了吗?同问啊
2015-8-1 20:00:03 评论

举报

在主函数里是不是应该加上一个while(1);?
2016-7-28 10:19:28 评论

举报

#include <msp430x24x.h>
int i=0;
void init()//初始化时钟
{
   unsigned int i;
   BCSCTL1 &=~XT2OFF;//Basic Clock System Control 1,Enable XT2CLK
                      //即打开XT2
   do
   {
     IFG1 &= ~OFIFG;        // IFG1:Interrupt Flag 1                                                // 清除振荡器失效标志
      for(i=0xFF;i>0;i--);// 延时,等待XT2起振
   }
   while((IFG1 & OFIFG) != 0);// 判断XT2是否起振,OFIFG=0则起振               
   BCSCTL2 =SELM1+SELS;       //MCLK(SELM1),SMCLK时钟为XT2,都为8MHZ
}
void count_init()
{
   P1DIR|=BIT6;
   P1IES = 0x00;               // P1.0选择上升沿中断
   P1IE  = 0x03;               // 打开中断使能
   P1IFG = 0X00;
}
void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  init();
  count_init();
  _EINT();           //开总中断
   while(1);
}
#pragma vector=PORT1_VECTOR   //外部中断计脉冲
__interrupt void port1(void)
{

  if(P1IFG&BIT0)
  {  
    P1IFG=0X00;
    P1OUT|=BIT6;
  }
  if(P1IFG&BIT1)
  {
    P1IFG=0X00;
    P1OUT&=~BIT6;
  }
}
2016-7-28 10:20:08 评论

举报

jessehe 发表于 2016-7-28 10:20
#include
int i=0;
void init()//初始化时钟

你的这个程序可不可行?
2016-8-12 16:36:25 评论

举报

只有小组成员才能发言,加入小组>>

1403个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表