最近在调试MSP430单片机内置比较器的时候,我想设置比较器的反向输入端接参考电压,同向端接P1.1,然后打开中断,中断触发边沿为上升沿触发。代码如下。
//******************************************************************************
// MSP430G2x13/G2x53 Demo - Comp_A, Output Reference Voltages on P1.1
//
// Description: Output Comparator_A reference levels on P1.1. Program will
// cycle through the on-chip comparator_A reference voltages with output on
// P1.1. Normal mode is LPM0, TA0_ISR will interrupt LPM0.
// ACLK = n/a, MCLK = SMCLK = default DCO
//
// MSP430G2x13/G2x53
// -----------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.1/CA1|--> Vref
// | |
//
// D. Dang
// Texas Instruments Inc.
// December 2010
// Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10
//******************************************************************************
#include <msp430g2553.h>
void main (void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
CACTL1 = CAIE+CARSEL+CAREF_2+CAON+CAIES; //打开比较器中断使能,参考电压加在反向端,参考电压设为1/2Vcc,
CACTL2 = P2CA4+CAF; // CA1/P1.1 = +comp
P1DIR|=BIT0;
P1REN|=BIT1;
P1OUT|=BIT1;
_BIS_SR(GIE); // enable interrupts
while (1)
{
;
}
}
// Timer A0 interrupt service routine
#pragma vector=COMPARATORA_VECTOR
__interrupt void Timer_A (void)
{
P1OUT^=BIT0;
}
P1.1作为比较器同相端的输入,打开其内置下拉电阻,这样只要将P1.1接到Vcc上就会产生一个上升沿,触发中断,中断程序将P1.0输出电平翻转,但是事实是我把P1.1接到VCC上时完全没有反应,而当我接到GND时,却能够正常的触发中断,难道是我代码写的有问题,于是我各种对比相应的寄存器设置,但是怎么也没有找到错误,等到了第二天我用万用表测试P1.1的输出电压,咦!不科学啊!我明明是打开了内置下拉电阻,怎么会有2.5V的电压那?结果又是一顿找错,最后突然注意到,板子上的RXD,TXD就是接在了P1.1,P1.2上的,于是我把程序下载进去,然后把RXD,TXD短路帽断开,结果P1.1的电压就正常的输出0V了,都怪自己太大意了,浪费了这么长时间!