工具/软件:Code Composer Studio
下面我介绍了一个非常简短的计划。 它的行为以可预测的方式发生变化(因此我的线程标题有点用词不当)、但似乎不应该发生变化、我不确定导致这种变化的原因是什么。
该电路很简单、唯一的外部组件是按钮和两根导线、在按下按钮时将 P2.1连接到 P8.4。 按下按钮时会触发中断例程。
如果我将代码刷写到 MSP430、中断例程将不起作用。 板载 LED 不会亮起(或者在某些情况下、它会稍微闪烁、然后熄灭)。 如果我触发中断例程的次数为奇数次、以便灯亮起、然后重新刷新程序、灯将亮起、灯将按预期工作、每次按下按钮时切换。 如果我在指示灯亮起时重新刷写程序、则中断将按预期工作。 但是、如果我在指示灯熄灭时重新刷新程序、程序将无法再次打开指示灯、直到我按照上述步骤操作(按触发按钮奇数次、然后重新刷新)。
我还对一些代码行进行了注释。 这些行是我实验过的行、用于查看它们是否可以解决问题-例如、将 unlock 语句移至看门狗时钟禁用的正下方、或尝试在初始化任何内容之前清除输出矢量。
我对这种行为非常困惑、因为这完全是意料之外的、我看不到软件中的任何内容会导致这个问题。
#include int main (void) { WDTCTL = WDTPW | WDTHOLD;
//PM5CTL0 &=~LOCKLPM5; //P8OUT &=~0xff; //P2OUT &=~0xff;
//P9OUT &=~0xff; P2DIR &=~BIT1;//input P2REN |= BIT1;//PULLUP P2OUT |= BIT1;//SIAT HIGH P8DIR |= BIT4;//输出 P8OUT &=~ ~ ~BIT4;//输出低电平 P2OUT |= BIT1;// 输出中断0xPSIMPLE_TRIPE |= 0x2 ;//在 PORT0上启用 中断/LPTIES |= 0xPM2;//中断0xPM=中断0xLPBIST/中断= 0xPM1;//中断向量 LPBIST_2;//中断=中断0xLPBIST/中断= 0xPM1;//中断=中断0xPM1;//中断0xPM=中断0xLPBIST/中断=中断0xPM2;=中断向量 LP2=中断=中断0x //关联函数。 具有中断矢量 _interrupt void Port_2 (void) // ISR 的名称 { 开关(__evo_in_range (P2IV、P2IV_P2IFG7)) { //我使用 P2.1-2.4作为输入。 案例 P2IV_NONE:break;//向量0:无中断 案例 P2IV_P2IFG0:中断;//向量2:P2.0 案例 P2IV_P2IFG1: P2IE &=~BIT1;//禁用中断 P2IFG &=~0xff; P1DIR ^= BIT0;//使能输出 P1OUT ^= BIT0;//打开板载 LED P2IE |= BIT1; 中断; 案例 P2IV_P2IFG2: 中断; 案例 P2IV_P2IFG3: 中断; 案例 P2IV_P2IFG4: 中断; 案例 P2IV_P2IFG5:中断;//矢量12:P2.5 案例 P2IV_P2IFG6:中断;//向量14:P2.6 案例 P2IV_P2IFG7:中断;//向量16:P2.7 默认值:break; } }