📄 shiyan.c
字号:
#define __dsPIC30F4013__
#include <p30f4013.h>
#include <math.h>
#include <uart.h>
//#include <timer.h>
//#include <spi.h>
//#include <ports.h>
//定义配置位
#define nop() asm("nop");
#define CLRWDT() asm("clrwdt");
#define DASCLK PORTDbits.RD9
#define DADIN PORTDbits.RD3
#define DACS PORTBbits.RB11
#define IO1 PORTDbits.RD8 //采样电阻控制信号
#define IO2 PORTDbits.RD2 //变压器串电阻的控制信号
#define IO3 PORTBbits.RB12 //小电流接入控制信号
#define IO4 PORTBbits.RB8 //大电流接入控制信号
#define DL0 PORTCbits.RC13 //电流采样放大倍数控制信号
#define DL1 PORTDbits.RD1 //电流采样放大倍数控制信号
#define DY0 PORTBbits.RB9 //电压采样放大倍数控制信号
#define DY1 PORTFbits.RF2 //电压采样放大倍数控制信号
#define DY2 PORTDbits.RD0 //电压采样放大倍数控制信号
#define ZEN PORTBbits.RB10 //AD7501的选择使能
//定义变量
unsigned int DIANYA,DIANLIU;
float DIANZU;
//函数声明
int delay(unsigned int delay);
void inital(void);
void ADDY(void);
void ADDL(void);
void DAWrite(unsigned int AA);
int main (void)
{
int i;
float j,k,p;
long b;
inital();
DAWrite(0X000);
/*
//基于OP-07测000放大倍数
DY0=0;
DY1=0;
DY2=0;
ZEN=1;
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
DIANZU=0;
for(i=0;i<100;i++)
{
delayms(50000);
delayms(50000);
ADDL();
ADDY();
ACCBL=DIANLIU;
ACCBH=DIANYA;
j=DIANLIU;
k=DIANYA;
DIANZU=DIANZU+k/j;
}
DIANZU=DIANZU/100;
b=DIANZU*1000000;
ACCAL=0;
ACCAH=0;
ACCAL=ACCAL+b%10000/1000;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%1000/100;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%100/10;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%10;
ACCAH=ACCAH+b%10000000/1000000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%1000000/100000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%100000/10000;
*/
/*
//基于OP-07测001放大倍数
DY0=1;
DY1=0;
DY2=0;
ZEN=1;
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
DIANZU=0;
for(i=0;i<100;i++)
{
delayms(50000);
delayms(50000);
ADDL();
ADDY();
ACCBL=DIANLIU;
ACCBH=DIANYA;
j=DIANLIU;
k=DIANYA;
DIANZU=DIANZU+k/j;
}
DIANZU=DIANZU/100;
b=DIANZU*1000000;
ACCAL=0;
ACCAH=0;
ACCAL=ACCAL+b%10000/1000;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%1000/100;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%100/10;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%10;
ACCAH=ACCAH+b%10000000/1000000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%1000000/100000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%100000/10000;
*/
/*
//基于OP-07测010放大倍数
DY0=0;
DY1=1;
DY2=0;
ZEN=1;
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
DIANZU=0;
for(i=0;i<100;i++)
{
delayms(50000);
delayms(50000);
ADDL();
ADDY();
ACCBL=DIANLIU;
ACCBH=DIANYA;
j=DIANLIU;
k=DIANYA;
DIANZU=DIANZU+k/j;
}
DIANZU=DIANZU/100;
b=DIANZU*1000000;
ACCAL=0;
ACCAH=0;
ACCAL=ACCAL+b%10000/1000;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%1000/100;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%100/10;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%10;
ACCAH=ACCAH+b%10000000/1000000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%1000000/100000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%100000/10000;
*/
/*
//基于010测011放大倍数
DIANZU=0;
for(i=0;i<100;i++)
{
DY0=0;
DY1=1;
DY2=0;
ZEN=1;
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
ADDY();
ACCBL=DIANYA;
j=DIANYA;
DY0=1;
DY1=1;
DY2=0;
ZEN=1;
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
ADDY();
ACCBH=DIANYA;
k=DIANYA;
DIANZU=DIANZU+k/j;
}
DIANZU=DIANZU/100;
b=DIANZU*1000000;
ACCAL=0;
ACCAH=0;
ACCAL=ACCAL+b%10000/1000;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%1000/100;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%100/10;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%10;
ACCAH=ACCAH+b%10000000/1000000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%1000000/100000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%100000/10000;
*/
/*
//基于011测100放大倍数
DIANZU=0;
for(i=0;i<100;i++)
{
DY0=0;
DY1=1;
DY2=1;
ZEN=1;
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
ADDY();
ACCBL=DIANYA;
j=DIANYA;
DY0=0;
DY1=0;
DY2=1;
ZEN=1;
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
ADDY();
ACCBH=DIANYA;
k=DIANYA;
DIANZU=DIANZU+k/j;
}
DIANZU=DIANZU/100;
b=DIANZU*1000000;
ACCAL=0;
ACCAH=0;
ACCAL=ACCAL+b%10000/1000;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%1000/100;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%100/10;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%10;
ACCAH=ACCAH+b%10000000/1000000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%1000000/100000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%100000/10000;
*/
/*
//基于100测DL1放大倍数
DY0=0;
DY1=0;
DY2=1;
ZEN=1;
DL1=1;
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
DIANZU=0;
for(i=0;i<100;i++)
{
delayms(50000);
delayms(50000);
ADDL();
ADDY();
ACCBL=DIANLIU;
ACCBH=DIANYA;
// DIANYA=2;
// DIANLIU=3;
j=DIANLIU;
k=DIANYA;
DIANZU=DIANZU+j/k;
}
DIANZU=DIANZU/100;
b=DIANZU*1000000;
ACCAL=0;
ACCAH=0;
ACCAL=ACCAL+b%10000/1000;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%1000/100;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%100/10;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%10;
ACCAH=ACCAH+b%10000000/1000000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%1000000/100000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%100000/10000;
*/
/*
//基于DL1测101放大倍数
DY0=1;
DY1=0;
DY2=1;
ZEN=1;
DL1=1;
WWW=0;
MMM=0;
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
DIANZU=0;
for(i=0;i<100;i++)
{
delayms(50000);
delayms(50000);
ADDL();
ADDY();
ACCBL=DIANLIU;
ACCBH=DIANYA;
j=DIANLIU;
k=DIANYA;
DIANZU=DIANZU+k/j;
}
DIANZU=DIANZU/100;
b=DIANZU*1000000;
ACCAL=0;
ACCAH=0;
ACCAL=ACCAL+b%10000/1000;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%1000/100;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%100/10;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%10;
ACCAH=ACCAH+b%10000000/1000000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%1000000/100000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%100000/10000;
*/
/*
//基于101测110放大倍数
DIANZU=0;
for(i=0;i<100;i++)
{
DY0=1;
DY1=0;
DY2=1;
ZEN=1;
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
ADDY();
ACCBL=DIANYA;
j=DIANYA;
DY0=0;
DY1=1;
DY2=1;
ZEN=1;
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
ADDY();
ACCBH=DIANYA;
k=DIANYA;
DIANZU=DIANZU+k/j;
}
DIANZU=DIANZU/100;
b=DIANZU*1000000;
ACCAL=0;
ACCAH=0;
ACCAL=ACCAL+b%10000/1000;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%1000/100;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%100/10;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%10;
ACCAH=ACCAH+b%10000000/1000000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%1000000/100000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%100000/10000;
*/
/*
//基于110测111放大倍数
DIANZU=0;
for(i=0;i<100;i++)
{
DY0=0;
DY1=1;
DY2=1;
ZEN=1;
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
ADDY();
ACCBL=DIANYA;
j=DIANYA;
DY0=1;
DY1=1;
DY2=1;
ZEN=1;
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
ADDY();
ACCBH=DIANYA;
k=DIANYA;
DIANZU=DIANZU+k/j;
}
DIANZU=DIANZU/100;
b=DIANZU*1000000;
ACCAL=0;
ACCAH=0;
ACCAL=ACCAL+b%10000/1000;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%1000/100;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%100/10;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%10;
ACCAH=ACCAH+b%10000000/1000000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%1000000/100000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%100000/10000;
*/
/*
//基于111测DL0放大倍数
DY0=1;
DY1=1;
DY2=1;
ZEN=1;
DL0=1;
delayms(50000);
delayms(50000);
delayms(50000);
delayms(50000);
DIANZU=0;
for(i=0;i<100;i++)
{
delayms(50000);
delayms(50000);
ADDL();
ADDY();
ACCBL=DIANLIU;
ACCBH=DIANYA;
// DIANYA=2;
// DIANLIU=3;
j=DIANLIU;
k=DIANYA;
DIANZU=DIANZU+j/k;
}
DIANZU=DIANZU/100;
b=DIANZU*1000000;
ACCAL=0;
ACCAH=0;
ACCAL=ACCAL+b%10000/1000;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%1000/100;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%100/10;
ACCAL=ACCAL<<4;
ACCAL=ACCAL+b%10;
ACCAH=ACCAH+b%10000000/1000000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%1000000/100000;
ACCAH=ACCAH<<4;
ACCAH=ACCAH+b%100000/10000;
*/
/*
//由于变压器电压的变动,产生电流的驱动电压也应该随之变动。改变驱动电压就可以改变电流输出的大小实验
IO4=1;
DAWrite(0XC10); //各电压的经典值如下:1A为0X830,1.2A为0X870,5A为0X92A,6A为0X970,10A为0XA09,12A为0XA80,19A为0XBC0,21A为0XC10;
*/
return 0;
}
//电流采样
void ADDL(void)
{
IEC0bits.ADIE=0;
ADPCFG=0XFFFE;
ADCON1=0X0000;
ADCHS=0X0000;
ADCSSL=0;
ADCON3=0X0002;
ADCON2=0;
ADCON1bits.ADON=1;
ADCON1bits.DONE=0;
ADCON1bits.SAMP=1;
delayms(50000);
ADCON1bits.SAMP=0;
while(!ADCON1bits.DONE);
DIANLIU=ADCBUF0;
}
//电压采样
void ADDY(void)
{
IEC0bits.ADIE=0;
ADPCFG=0XFFFD;
ADCON1=0X0000;
ADCHS=0X0001;
ADCSSL=0X0000;
ADCON3=0X0002;
ADCON2=0X0000;
ADCON1bits.ADON=1;
ADCON1bits.SAMP=1;
delayms(50000);
ADCON1bits.SAMP=0;
while(!ADCON1bits.DONE);
DIANYA=ADCBUF0;
}
//D/A数据输入子程序
void DAWrite(unsigned int AA)
{
int i;
DACS=1;
DASCLK=1;
delayms(100);
DASCLK=0;
delayms(500);
DACS=0;
delayms(100);
DASCLK=0;
delayms(100);
for(i=4;i<16;i++)
{
if ((AA<<i)&0x8000)
{
DADIN=1;
}
else
{
DADIN=0;
}
delayms(100);
DASCLK=1;
delayms(100);
DASCLK=0;
delayms(100);
}
delayms(100);
DACS=1;
delayms(100);
DASCLK=1;
delayms(100);
DASCLK=0;
DACS=0;
}
//系统初始化
void inital(void)
{
TRISFbits.TRISF2 =0;
TRISFbits.TRISF3 =0;
TRISBbits.TRISB3=1;
TRISBbits.TRISB4=1;
TRISBbits.TRISB5=1;
TRISBbits.TRISB9=0;
TRISBbits.TRISB10=0;
TRISDbits.TRISD0=0;
TRISDbits.TRISD1=0;
TRISDbits.TRISD8=0;
TRISDbits.TRISD2=0;
TRISBbits.TRISB8=0;
TRISBbits.TRISB12=0;
TRISCbits.TRISC14=0;
TRISBbits.TRISB11=0;
TRISDbits.TRISD3=0;
TRISDbits.TRISD9=0;
TRISFbits.TRISF2=0;
TRISFbits.TRISF1=0;
TRISFbits.TRISF6=0;
TRISBbits.TRISB2=1;
TRISFbits.TRISF0=0;
TRISFbits.TRISF2=0;
TRISCbits.TRISC13=0;
}
//延时子程序
int delayms(unsigned int aa)
{
while (--aa);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -