我正在尝试为微型MSP430F1X开发程序,我想模拟宽屏擦除,因此想法是将2个引脚P1.0和P1.1作为输入来增加或减少状态( 0 =停止,1 = PWM 50%,2 = PWM 75%,3 = 1秒ON / 2秒OFF并重复)。目前我已经能够生成PWM = 50%,但是当我尝试在WDT中断内部使用开关盒例程进行循环时,似乎它没有进入开关我不会知道为什么,请有人帮帮我,(我不确定是否应该在WDT中断或主函数中实现开关盒,这是我的代码:
#define STATE_IDLE 0
#define STATE_INTER 3
#define STATE_LOW 1
#define STATE_HIGH 2
#define WDT_MDLY_0_5 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1)
int cnt=0; // global variable to count timer ticks
static int speed=0;
void main(void) {
// WDTCTL = WDTPW + WDTHOLD; //stop watchdog timer
WDTCTL = WDT_MDLY_0_5;
IE1 |= WDTIE;
_EINT();
P1DIR &= ~(BIT0+BIT1);
P1IES &= ~BIT0;
P1IES &= ~BIT1;
P1IE |= BIT0;
P1IE |= BIT1;
P1DIR |= BIT4;
for (;;) {
}
}
void interrupt [WDT_VECTOR] tick(void) {
while(1){
if (speed==1){
P1IFG &= ~BIT4;
if (++cnt == 200) {
cnt = 0;
P1OUT^=BIT4;
}
}
}
}
void interrupt [PORT1_VECTOR] p1Edge(void) {
if (P1IN & BIT0) {
speed=1;
P1IES &= ~BIT0;
P1IE |= BIT4; // enable P1.4 interrupts
if (speed==1){
speed=2;
P1IE |= BIT4; // enable P1.4 interrupts
}
else if(speed==2){
speed=3;
P1IE |= BIT4; // enable P1.4 interrupts
}
}
if (P1IN & BIT1) {
// P1.1 is now high -
P1IES &= ~BIT1;
if (speed==3){
speed=2;
P1IE |= BIT4; // enable P1.4 interrupts
}
else if(speed==2){
speed=1;
P1IE |= BIT4; // enable P1.4 interrupts
}
else if(speed==1)
speed=0;
P1IE |= BIT4; // enable P1.4 interrupts
}
}
提前致谢