器件型号:MSP432P401R
目前、我编写的代码在 Timer_A 确定的时间成功地打开和关闭 ADC 但是、我想知道是否有任何方法可以使用外部按钮来重置 Timer_A、这样我就可以按下一个按钮将 Timer_A 的计数重置为0、因为我发现的所有示例都涉及使用 Timer_A 来检测按钮是否被按下?
编辑:我编写了一些测试代码、以便在 P3.0上的外部按钮成功触发 GPIO 中断时使 LED2上的红色 LED 闪烁、并在中断未发生时使 LED2上的绿色 LED 闪烁。 但是、尽管我做出了最大努力、但它仍然没有中断。 是否有人能指出我解决这个新问题的正确方向(我在下面包含了测试代码)?
/*测试外部按钮是否会切换 P2.0 (V1)上的红色 LED */ #include "msp.h" #include "mytime.h" volatile int button_flag = 0; //标记为信号按钮按 void setFreq (int freq); void delayM (int n、int freq); void main (void) { setFreq (FREQ_3_MHz); WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器 //初始化端口3 (按钮连接) P3->SEL0 = BIT0;//清除寄存器选择 P3->SEL1 = BIT0;//清除寄存器选择 P3->DIR = BIT0; P3->OUT = BIT0; P3->REN = BIT1;//上拉使能电阻 P3->IES = BIT1;//高-低转换时中断 P3->IFG = BIT0;//清除任何挂起标志 P3->IE = BIT1;//启用端口3中断 //用于调试 P2->SEL1 &=~BIT2;//P2.1是简单的 I/O P2->SEL0 &=~BIT2; P2->DIR |= BIT2;// P2.1设置为输出引脚 P2->DIR |= BIT1;// P2.0设置为输出引脚 P2->OUT &=~BIT0;// LED 初始为低电平(关闭) P2->OUT &=~BIT1;// LED 初始为低电平(关闭) NVIC->ISER[3]= 1 <<(PORT3_IRQn)& 31); //启用全局中断 __ENABLE_IRQ(); while (1){ //无限循环 if (button_flag = 1){ P2->OUT |=1; //打开 P2.0红色 LED delayMs (500、FREQ_3_MHz); P2->OUT &=~1; //关闭红色 P2.0 delayMs (500、FREQ_3_MHz); button_flag = 0; //复位标志 }否则{ P2->OUT |= 2; //打开 P2.1绿色 LED delayMs (500、FREQ_3_MHz); P2->OUT &=~2; //关闭 P2.1绿色 LED delayMs (500、FREQ_3_MHz); } } void PORT3_IRQHandler (void) // P3.0的中断处理程序 { button_flag = 1; //set flag to signal button pressed.(检测到按压信号。 P3->IFG &=~BIT0; //清除 P3.0挂起中断标志 P3->IE |= BIT0; //禁用 P3.0的去抖中断 }