定时器测
定时器测时的值变化无规律
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)
{
}