#include"msp430x14x.h"
#include"math.h"
#include"init.h"
#include"ad9851.h"
ulong DAT[200];
ulong V_max,V_min;
float V_effective;
uchar hz=0;
//void init_clock();
void main(void)
{
uint frequence=100;
uint i;
float c1;
ulong c2;
clk_init();
io_init();
init_1602();
interrupt_init();
_EINT();
init_9851();
start_9851_100hz();
while(1)
{
if((P1IN&BIT0)!=BIT0)
{
if(hz==0)
{
start_9851_100hz();//输出100hz
frequence=100;
}
if(hz==1)
{
start_9851_1khz();//输出1khz
frequence=1000;
}
if(hz==2)
{
start_9851_10khz();//输出10khz
frequence=10000;
} } for(i=0;i<200;i++)
{
DAT[i]=ADS1252();
}
RMS();
// V_max=0X7fffff;
c1=((float)(V_max))*4.0/0x7fffff;
c2=(ulong)(c1*1000);
show_1602(frequence,c2);
}
}
//***************************************************
//**************ADS1252*************************//
uint ADS1252(void)
{
//uchar ad_data1=0,ad_data2=0,ad_data3=0;
uchar i;
ulong ad=0;
CLK_L;
SCLK_L;
for(i=0;i<24;i++)
{
CLK_H;
CLK_L;
}//t4
for(i=0;i<6;i++)
{
CLK_H;
CLK_L;
}//t2
for(i=0;i<6;i++)
{
CLK_H;
CLK_L;
}//t3
CLK_H;
CLK_L;
SCLK_H;
if(DOUT&BIT2)
ad=ad|0x01;
CLK_H;
CLK_L;
SCLK_L;
CLK_H;
CLK_L;
CLK_H;
CLK_L;
for(i=0;i<23;i++)
{
ad=ad<<1;
if(DOUT&BIT2)
ad=ad|0x01;
SCLK_H;
CLK_H;
CLK_L;
CLK_H;
CLK_L;
SCLK_L;
CLK_H;
CLK_L;
CLK_H;
CLK_L;
}
SCLK_H;
CLK_H;
CLK_L;
CLK_H;
CLK_L;
SCLK_L;
CLK_H;
CLK_L;
CLK_H;
CLK_L;
for(i=0;i<248;i++)
{
CLK_H;
CLK_L;
}
for(i=0;i<248;i++)
{
CLK_H;
CLK_L;
}
return ad;
//CLK_H;
//CLK_L;
/*for(i=0;i<8;i++)
{
SCLK_L;
CLK_H;
CLK_L;
CLK_H;
CLK_L;
CLK_H;
CLK_L;
SCLK_H;
ad_data1<<=1;
if(DOUT&BIT2)
{
ad_data1+=0x01;
}
SCLK_L; }
for(i=0;i<8;i++)
{
SCLK_L;
CLK_H;
CLK_L;
CLK_H;
CLK_L;
CLK_H;
CLK_L;
SCLK_H;
ad_data2<<=1;
if(DOUT&BIT2)
{
ad_data2+=0x01;
}
SCLK_L; }
for(i=0;i<8;i++)
{
SCLK_L;
CLK_H;
CLK_L;
CLK_H;
CLK_L;
CLK_H;
CLK_L;
SCLK_H;
ad_data3<<=1;
if(DOUT&BIT2)
{
ad_data3+=0x01;
}
}
SCLK_L;
for(i=0;i<253;i++)
{
CLK_H;
CLK_L;
}
ad=(uint)ad_data1;
ad<<=8;
ad+=(uint)ad_data2;
ad<<=8;
ad+=(uint)ad_data3;
return ad;
*/
}
//************************RMS***************************//
void RMS()
{
uint i;
float convert;
V_effective=0.0; V_max=V_min=DAT[0];
for(i=0;i<N;i++)
{
if(DAT[i]>V_max) V_max=DAT[i];
if(DAT[i]<V_min) V_min=DAT[i];
}
for(i=0;i<N;i++)
{
convert=V*DAT[i]/1023;
V_effective+=convert*convert;
} V_effective=sqrt(V_effective/(N));
}
//***********外部中断P1.0控制AD9851产生正弦波的频率*******//
#pragma vector=PORT1_VECTOR
__interrupt void frequence_change()
{
delay_ms(20);
if((P1IN&BIT0)!=BIT0)
{
delay_ms(20);
while((P1IN&BIT0)==~BIT0);
hz=hz+1;
if(hz==3)
{
hz=0;
}
}
P1IFG=0X00;
}
Van Yang:
你好,430有SPI外设,不需要用IO口来模拟,建议你采用SPI外设在做驱动。