请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430G2152 //#define datalog BIT3 //WFP //#define backlight BIT4 //WFP //define 1.4 MAXMIN BIT5 //WFP //#define DCAC BIT1//WFP 1.1 //#define VHz BIT2//WFP 1.2 //# define DCAC_out BIT6//WFP //WFP //#define 1.5 2.6 //#define DCAC BIT5//#= 1.3 /=/= BUITE=7 = 2.7 = 标准MSP430包括========= */ #include <msp430g2152.h> /* ========= 主==== */ int main (void) { WDTCTL = WDTPW | WDTHOLD; //停止监视计时器 P1OUT = BIT1 | BIT2 | BIT3 | BIT4 | BIT5; P1DIR = BIT3 | BIT4 | BIT5; P1REN = BIT1 | BIT2; P1IES = BIT1 | BIT2; P1IFG = 0; P1IE = BIT1 | BIT2; P2SEL2 = BIT3; P2OUT = BIT6 | BIT7; P2SEL &=~(BIT6 | BIT7); P2DIR = BIT6 | BIT7; P2IES = 0; P2IFG = 0; __bis_sr_register(LPM3_bits | GIE); } #pragma vector = Port1_vector __interrupt void Port1_ISR( void ){ P1IE &=~(BIT1 | BIT2);////禁用这些引脚上的中断 __DELAY周期(1万); TA0CCR1 = 0; TA0CCTL0 &=~CCIFG; TA0CTL |= MC_1;//启动计时器 开关(P1IN和(BIP1 | BIIT2)){ 案例0: 已按下//VHz+DCAC按钮 IF (P1OUT & BIT3) P1OUT &=~(BIT3); Else P1OUT ||(BIT3); __DELAY周期(2万); 中断; 案例2: 已按下//VHz按钮 同时(!(P1IN & BIT2)&&!(TA0CCTL0 & CCIFG)); TA0CTL &=~MC1; 如果(!(TA0CCTL0 & CCIFG)){ P2OUT &=~(BIT7); __DELAY周期(1万); P2OUT |=(BIT7); } 否则{ P1OUT &=~(BIT4); __DELAY周期(1万); P1OUT |=(BIT4); } 中断; 案例4: 已按下//DCAC按钮 while (!(P1IN & BIT1)&&!(TA0CCTL0 & CCIFG)); TA0CTL &=~MC1; 如果(!(TA0CCTL0 & CCIFG)){ P2OUT &=~(BIT6); __DELAY周期(1万); P2OUT |=(BIT6); } 否则{ P1OUT &=~(BIT5); __DELAY周期(1万); P1OUT |=(BIT5); } 中断; 案例6: //未按任何按钮 中断; } TA0CTL &=~(MC1 + MC0);//清除Mcx位以停止计时器 while (!(P1IN和(BIP1 | BIIT2))) P1IFG &=~(BIT1 | BIT2);//将中断的寄存器标志设置为0:没有待处理的中断 P1IE ||(BIT1 | BIT2);//在这些引脚上重新启用中断 }
我正在尝试复制此处显示 的项目http://www.mjlorton.com/forum/index.php?topic=284.0 ,但我使用的是g2152,而不是g2211。 我比较了解代码在做什么,但是我很难设置计时器和捕获比较寄存器。 此外,我不确定计时器/CCR如何用于区分长按或短按按钮(是否使用嵌套中断?) 原始代码使用的是包含Grace的配置,但显然不存在,我尝试推断事物最初是如何设置的。 我已确定GPIO和WDT配置,但未确定计时器或CCR (我可能还会遗漏其他内容) ,任何能将我推向正确方向的见解或提示都将很有帮助。 谢谢。