用C中断 #包括 #定义按钮位3//端口1.3 #定义红色位0//端口1.0 #定义GRNLED BIT6//端口1.6 #定义零0x08 #定义一个0x48 #定义两个0x09 #定义三个0x49 int计数器=0; 内部主(空){ //看门狗设置 WDTCTL=WDTPW+WDTHOLD;//停止看门狗(密码+保持计数器) //LED初始设置 P1DIR |=REDLED+GRNLED;//将P1.0和P1.6设置为输出(1)引脚 P1OUT&=~REDLED;//禁用REDLED P1OUT&=~GRNLED;//禁用GRNLED //按钮设置 P1DIR&=~BUTTON;//按钮是一个输入 P1OUT |=按钮;//上拉电阻器 P1REN |=按钮;//电阻器已启用 P1IE |=0x08;//P1.3中断启用 P1IES&=~0x08;//下边缘 P1IFG&=~0x08;//零标志 而(1){ } } #pragma向量=端口1\u向量 __中断无效端口_1(无效){ 计数器+=1; 计数器=(计数器%4); 开关(计数器){ 案例0: P1OUT=零; 打破 案例1: P1OUT=1; 打破 案例2: P1OUT=两个; 打破 案例3: P1OUT=3; 打破 } P1IFG&=~0x08; }

用C中断 #包括 #定义按钮位3//端口1.3 #定义红色位0//端口1.0 #定义GRNLED BIT6//端口1.6 #定义零0x08 #定义一个0x48 #定义两个0x09 #定义三个0x49 int计数器=0; 内部主(空){ //看门狗设置 WDTCTL=WDTPW+WDTHOLD;//停止看门狗(密码+保持计数器) //LED初始设置 P1DIR |=REDLED+GRNLED;//将P1.0和P1.6设置为输出(1)引脚 P1OUT&=~REDLED;//禁用REDLED P1OUT&=~GRNLED;//禁用GRNLED //按钮设置 P1DIR&=~BUTTON;//按钮是一个输入 P1OUT |=按钮;//上拉电阻器 P1REN |=按钮;//电阻器已启用 P1IE |=0x08;//P1.3中断启用 P1IES&=~0x08;//下边缘 P1IFG&=~0x08;//零标志 而(1){ } } #pragma向量=端口1\u向量 __中断无效端口_1(无效){ 计数器+=1; 计数器=(计数器%4); 开关(计数器){ 案例0: P1OUT=零; 打破 案例1: P1OUT=1; 打破 案例2: P1OUT=两个; 打破 案例3: P1OUT=3; 打破 } P1IFG&=~0x08; },c,interrupt,msp430,C,Interrupt,Msp430,我不能进入中断程序。我检查了中断标志,当我按下按钮标志1时,但led没有改变,我想我不能进入中断。如果可以,led必须改变。怎么了?在程序启动时默认禁用全局中断。您需要添加在main()末尾设置全局中断启用(GIE)位的代码。最独立于平台(实际上不是)的方法是调用\uu enable\u interrupts()函数 #include <msp430.h> #define BUTTON BIT3 // Port 1.3 #define REDLED BIT0 // Port

我不能进入中断程序。我检查了中断标志,当我按下按钮标志1时,但led没有改变,我想我不能进入中断。如果可以,led必须改变。怎么了?

在程序启动时默认禁用全局中断。您需要添加在
main()
末尾设置全局中断启用(
GIE
)位的代码。最独立于平台(实际上不是)的方法是调用
\uu enable\u interrupts()
函数

#include <msp430.h>

#define BUTTON   BIT3 // Port 1.3
#define REDLED   BIT0 // Port 1.0
#define GRNLED   BIT6 // Port 1.6

#define ZERO    0x08
#define ONE     0x48
#define TWO     0x09
#define THREE   0x49

int counter = 0;

int main(void) {


// Watchdog setup
WDTCTL = WDTPW + WDTHOLD; // stop watchdog (password + hold counter)

// LED initial setup
P1DIR |= REDLED + GRNLED;             // set P1.0 and P1.6 as output (1) pins
P1OUT &= ~REDLED;                      // Disable REDLED
P1OUT &= ~GRNLED;                     // Disable GRNLED

// Button setup
P1DIR &= ~BUTTON;                     // button is an input
P1OUT |= BUTTON;                      // pull-up resistor
P1REN |= BUTTON;                      // resistor enabled

P1IE |= 0x08;                           //P1.3 interrupt enable
P1IES &= ~0x08;                          //lower edge
P1IFG &=  ~0x08;                        //zero flag
while(1){


    }
}
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void){
        counter += 1;
        counter = (counter % 4);
        switch(counter){
            case 0:
                P1OUT = ZERO;
                break;
            case 1:
                P1OUT = ONE;
                break;
            case 2:
                P1OUT = TWO;
                break;
            case 3:
                P1OUT = THREE;
                break;
        }

        P1IFG &= ~0x08;
}
要检查中断是否已启用(而不是在中断处理程序中,它们在默认情况下始终处于禁用状态),请执行以下操作:


默认情况下,在程序启动时禁用全局中断。您需要添加在
main()
末尾设置全局中断启用(
GIE
)位的代码。最独立于平台(实际上不是)的方法是调用
\uu enable\u interrupts()
函数

#include <msp430.h>

#define BUTTON   BIT3 // Port 1.3
#define REDLED   BIT0 // Port 1.0
#define GRNLED   BIT6 // Port 1.6

#define ZERO    0x08
#define ONE     0x48
#define TWO     0x09
#define THREE   0x49

int counter = 0;

int main(void) {


// Watchdog setup
WDTCTL = WDTPW + WDTHOLD; // stop watchdog (password + hold counter)

// LED initial setup
P1DIR |= REDLED + GRNLED;             // set P1.0 and P1.6 as output (1) pins
P1OUT &= ~REDLED;                      // Disable REDLED
P1OUT &= ~GRNLED;                     // Disable GRNLED

// Button setup
P1DIR &= ~BUTTON;                     // button is an input
P1OUT |= BUTTON;                      // pull-up resistor
P1REN |= BUTTON;                      // resistor enabled

P1IE |= 0x08;                           //P1.3 interrupt enable
P1IES &= ~0x08;                          //lower edge
P1IFG &=  ~0x08;                        //zero flag
while(1){


    }
}
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void){
        counter += 1;
        counter = (counter % 4);
        switch(counter){
            case 0:
                P1OUT = ZERO;
                break;
            case 1:
                P1OUT = ONE;
                break;
            case 2:
                P1OUT = TWO;
                break;
            case 3:
                P1OUT = THREE;
                break;
        }

        P1IFG &= ~0x08;
}
要检查中断是否已启用(而不是在中断处理程序中,它们在默认情况下始终处于禁用状态),请执行以下操作:


您有一个中断处理程序。但是你如何安装它,我的意思是,你如何告诉电路板在中断时调用这个例程?你有一个中断处理程序。但是你如何安装它,我的意思是,你如何告诉电路板在中断时调用这个例程?
__bis_status_register(GIE);
if (__get_SR_register() & GIE) {
    printf("interrupts enabled\n");
} else {
    printf("interrupts disabled\n");
}