请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号: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 (我可能还会遗漏其他内容) ,任何能将我推向正确方向的见解或提示都将很有帮助。 谢谢。