This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

积分式电压表 ???急需高手指教

Other Parts Discussed in Thread: MSP430G2553

 注:黄色的是充放电开关,高电平放电,低电平充电;蓝色的是比较器输出端。我们要采样的时间是    充电开关开启到比较器输出端正跳变

定时器测 

定时器测时的值变化无规律

P1.0;//充放电开关

P1.4//比较器输出采样端

#include <msp430g2553.h>
#include "12864.h"
#define CPU_F ((double)1000000)
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
unsigned int i=0,m,an;
unsigned int ii[100]=0;
unsigned long shu=0;
float j=30000,v;
unsigned int tar=5000,k=0;
unsigned char kk=0;
unsigned char A[10];

void key_Init();
void DAC_convert(uint da);
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
DCOCTL=0;
BCSCTL1=CALBC1_1MHZ;
DCOCTL=CALDCO_1MHZ;

P1DIR |=BIT0;   //P1.0测时 
LCD_OUT; //设置LCD端口方向

Lcd_Init();
key_Init();
TACCR0=65535;

// TACTL = TASSEL_2 +TACLR+ MC_1;
_EINT();
/*
Write_Str(0,1,"量程:");
Write_Str(2,1,"电压:");
Write_Str(2,1,"时间:");*/

while(1)
{
if(an)
{
P1OUT |=BIT0;//放电
delay_ms(1);}

P1OUT&=~BIT0;//充电
if(an)
{ TACCTL0 =CCIE;
TACTL |= TASSEL_2 +TACLR+ MC_1;
// delay_ms(100);
TACCTL0 =CCIE;
an=0;
}
}
}
void key_Init() //jie
{
P1IES&= ~BIT4; // P1.4high-to-low transition  //比较器输出端
P1IE |= BIT4; // P1.3 中断允许
P1DIR &=~BIT4; // P1.3 输入口设置
P1IFG &= ~BIT4; // P1.3 终端标志位清零
P1REN |=BIT4; // P1.3 上拉电阻
P1OUT|=BIT4;
P1IN &=~BIT4;
}
#pragma vector=PORT1_VECTOR //p1按键中断
__interrupt void P1_ISR(void)
{
if(P1IFG&BIT4)
{ kk++;
TACCTL0 &=~CCIE;
P1OUT |=BIT0;//放电
tar=TAR;
TACTL |= MC_0;

ii[kk]=tar;

if(kk==10)
{kk=0;
for(i=0;i<10;i++)
{
shu+=ii[i];
}
shu=shu/10;
}
v=(float)shu/20000;
LCD_DispDec(1,1,v,6,4);
// delay_ms(500);

}
an=1;
P1IFG=0;
}

// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{

}