打印

新人求教大神,一个关于430的中断问题

[复制链接]
1334|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
魏小淞|  楼主 | 2013-5-24 20:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "msp430f149.h"
volatile int SpeedSign=5,flag=0;
#define a       0x01                            //  AAAA
#define b       0x02                            // F    B
#define c       0x04                            // F    B
#define d       0x08                            //  GGGG
#define e       0x10                            // E    C
#define f       0x20                            // E    C
#define g       0x40                            //  DDDD
#define h       0x80
const char LightOpen[8]={a,b,c,d,e,f,g,h};
const char LCD_tab[]={
   a + b + c + d + e + f,                        // Displays "0"
   b + c,                                        // Displays "1"
   a + b + d + e + g,                            // Displays "2"
   a + b + c + d + g,                            // Displays "3"
   b + c + f + g,                                // Displays "4"
   a + c + d + f +g,                             // Displays "5"
   a + c + d + e + f + g,                        // Displays "6"
   a + b + c,                                    // Displays "7"
   a + b + c + d + e + f + g,                    // Displays "8"
   a + b + c + d + f + g,                        // Displays "9"
};
void InitSystem()
{
   P2DIR&=~(BIT1+BIT0);
   P2IES|=(BIT1+BIT0);
   P2IE|=BIT1;
   P2IE|=BIT0;
   _EINT();
}
#pragma vector=PORT2_VECTOR
__interrupt void P2_ISR(void)
{
   int i;
   P2DIR|=BIT3;
   P2OUT|=BIT3;
   if(P2IFG&BIT1) P2OUT&=~BIT3;
   for(i=0;i<1500;i++){};
   if(P2IN&(BIT1+BIT0)==0x03)
   {
     P2IFG=0;
     return;
   }
   if(P2IFG&BIT0)
   {
     if(SpeedSign<9)
     {
       SpeedSign++;
       flag=1;
     }
     
  }
   if(P2IFG&BIT1)
   {
       if(SpeedSign>0)
       {
       SpeedSign--;
       flag=1;
       }
   }
   P2IFG=0;
   return;
}  
void main( void )
{
   InitSystem();
   long int i;
   int BasicSpeed=2000,j=0,SignLight=5;
   WDTCTL = WDTPW + WDTHOLD;   // Stop watchdog timer to prevent time out reset
   P1DIR|=0xff;
   P1OUT|=0xff;
   P2DIR|=BIT2;
   P2OUT|=BIT2;
   P4DIR|=0xff;
   P4OUT|=0xff;
   while(1)
   {
    P4OUT=~LCD_tab[SpeedSign];
     if(SignLight==0)
     {
       P2OUT|=BIT2;
       flag=0;
       SignLight=2;
     }
     if(flag==1)
    {
      P2OUT&=~BIT2;
       SignLight--;
     }
     for(i=0;i<(BasicSpeed*SpeedSign);i++);
     P1OUT&=~LightOpen[j];
     j++;
     if(j==9)
     {
       P1OUT|=0xff;
       j=0;
     }
   }
}
刚学430单片机,练习中断编了这个程序,下载之后发现只有P2.0的中断有效P2.1的中断无效。把P2.1换成P2.7口也无效。里面的SignLight和接数码管的P4口和P2.3是监控中断程序是否执行,SpeedSign的数值,P2IFG&BIT1的数值的。发现P2.1的中断有效,但中断程序不执行。求助大神门!!!

相关帖子

沙发
chenyu988| | 2013-5-24 21:14 | 只看该作者
在初始化里 把中断标志清了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝