📄 ad9225.c
字号:
#include"AD9225.h"
#include<SST\SST89x5x4.h>
#include<intrins.h>
#define SAMTIME 65
float GetScope()
{
unsigned char tempP0[SAMTIME],tempP2[SAMTIME];
unsigned char i,j,N,MeasureTime;
unsigned int temp[SAMTIME];
float d[SAMTIME];
float Scope,max,min;
bit flag;
AD9225Clk=0;
flag=1;
while(flag){
MeasureTime++;
for(i=0;i<SAMTIME;i++){
temp[i]=0;
tempP0[i]=0;
tempP2[i]=0;
Scope=0;
}
for(i=0;i<SAMTIME;i++){ //GetAD
AD9225Clk=1;
tempP0[i]=P0;
AD9225Clk=0;
tempP2[i]=P2;
}
for(i=0;i<SAMTIME;i++){
tempP2[i]&=0x1F; //屏蔽P2.6,P2.7
temp[i]|=tempP2[i];
temp[i]<<=8;
temp[i]|=tempP0[i];
}
for(i=0,j=0;i<SAMTIME;i++){
if(temp[i]<4096&&temp[i]>512){
d[j]=temp[i]*4.0/4096;
j++;
}
}
N=j;
min=4;
max=0.5;
for(i=0;i<N;i++){
if(d[i]<min)
min=d[i];
if(d[i]>max)
max=d[i];
}
if(MeasureTime>2){
Scope=(max-min)*1.0374;
flag=0;
}
}
return Scope;
}
unsigned int* GetAD(unsigned char T) //T次
{
unsigned char i;
unsigned char tempP0[5],tempP2[5];
unsigned int temp[5];
for(i=0;i<2;i++){
AD9225Clk=1;
tempP0[i]=P0;
AD9225Clk=0;
tempP2[i]=P2;
}
for(i=0;i<T;i++){
tempP2[i]&=0x1F; //屏蔽P2.6,P2.7
temp[i]|=tempP2[i];
temp[i]<<=8;
temp[i]|=tempP0[i];
}
return temp;
}
/************************************
采样两次,所得幅度差与间隔1.2uS的比值
*************************************/
float GetSlope()
{
unsigned char data i;
unsigned char data tempP0[2],tempP2[2];
unsigned int temp[2];
float Slope;
bit flag=1;
AD9225Clk=0;
while(flag){
AD9225Clk=1;
tempP0[0]=P0;
AD9225Clk=0;
tempP2[0]=P2;
AD9225Clk=1;
tempP0[1]=P0;
AD9225Clk=0;
tempP0[1]=P2;
for(i=0;i<2;i++){
tempP2[i]&=0x1F; //屏蔽P2.6,P2.7
temp[i]|=tempP2[i];
temp[i]<<=8;
temp[i]|=tempP0[i];
}
if((temp[1]>512)&&(temp[1]<4096)&&(temp[0]>512)&&(temp[0]<4096)){
if(temp[1]>temp[0]){
Slope=(temp[1]-temp[0])*4.0/4096;
Slope=Slope/1.2;
flag=0;
}
}
}
return Slope;
}
/************************************
根据统计规律求占空比,然后求斜率
*************************************/
/*
unsigned int* GetLAD()
{
unsigned char i;
unsigned char data tempP0[2],tempP2[2];
unsigned int temp[2];
for(i=0;i<2;i++){
AD9225Clk=1;
tempP0[i]=P0;
AD9225Clk=0;
tempP2[i]=P2;
}
for(i=0;i<2;i++){
tempP2[i]&=0x1F; //屏蔽P2.6,P2.7
temp[i]|=tempP2[i];
temp[i]<<=8;
temp[i]|=tempP0[i];
}
return temp;
}
float GetSlope()
{
unsigned char tempP0[SAMTIME],tempP2[SAMTIME];
unsigned char i,j,N,MeasureTime;
static int Up,Down;
unsigned int temp[SAMTIME];
float d[SAMTIME];
float Scope,max,min,Slope;
bit flag;
unsigned char T;
if(T==30){
T=0;
Up=0;
Down=0;
}
T++;
AD9225Clk=0;
flag=1;
while(flag){
MeasureTime++;
for(i=0;i<SAMTIME;i++){
temp[i]=0;
tempP0[i]=0;
tempP2[i]=0;
Scope=0;
}
for(i=0;i<SAMTIME;i++){ //GetAD
AD9225Clk=1;
tempP0[i]=P0;
AD9225Clk=0;
tempP2[i]=P2;
}
for(i=0;i<SAMTIME;i++){
tempP2[i]&=0x1F; //屏蔽P2.6,P2.7
temp[i]|=tempP2[i];
temp[i]<<=8;
temp[i]|=tempP0[i];
}
for(i=0,j=0;i<SAMTIME;i++){
if(temp[i]<4096&&temp[i]>512){
d[j]=temp[i]*4.0/4096;
j++;
}
}
N=j;
min=4;
max=0.5;
for(i=0;i<N;i++){
if(d[i]<min)
min=d[i];
if(d[i]>max)
max=d[i];
}
for(i=0;i<N;i++){
if(d[i]<d[i+1])
Up++;
else
Down++;
}
if(MeasureTime>2){
Scope=(max-min)*1.036944;
flag=0;
}
}
Slope=Scope*(Up+Down)/Up;
return Slope;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -