用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; }
我不能进入中断程序。我检查了中断标志,当我按下按钮标志1时,但led没有改变,我想我不能进入中断。如果可以,led必须改变。怎么了?在程序启动时默认禁用全局中断。您需要添加在用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
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");
}