📄 spi.c
字号:
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
#include "c8051.h"
extern bit RESET_bz;
extern uchar SPI_CM; //用于存放SPI读或写的命令字
extern uchar SPI_Data[3]; //用于存放SPI读或写的数据
void SPIRead()
{
uchar i,k;
SPI_CS=1;
_nop_();
SPI_CK=0;
_nop_();
_nop_();
_nop_();
SPI_CS=0;
for(i=0;i<8;i++)
{
SPI_CK=1;
if(SPI_CM&0x80)
SPI_DI=1;
else
SPI_DI=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SPI_CK=0;
SPI_CM=SPI_CM<<1;
}
SPI_DI=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
for(k=0;k<3;k++)
{SPI_Data[k]=0;
for(i=0;i<8;i++)
{SPI_Data[k]=SPI_Data[k]<<1;
SPI_CK=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
if(SPI_DO)
SPI_Data[k]=SPI_Data[k]|0x01;
SPI_CK=0;
}
}
SPI_CS=1;
}
//SPI写函数
void SPIWrite()
{
uchar i,k;
SPI_CS=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SPI_CK=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SPI_CS=0;
SPI_CM=SPI_CM&0x80;
for(i=0;i<8;i++)
{
SPI_CK=1;
if(SPI_CM&0x80)
SPI_DI=1;
else
SPI_DI=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SPI_CK=0;
SPI_CM=SPI_CM<<1;
}
SPI_DI=0;
for(k=0;k<3;k++)
{
for(i=0;i<8;i++)
{
SPI_CK=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
if(SPI_Data[k]&0x80)
SPI_DI=1;
else
SPI_DI=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SPI_CK=0;
SPI_Data[k]=SPI_Data[k]<<1;
}
}
SPI_DI=0;
SPI_CS=1;
}
///////////////////////////////////////////////////////////////////////////
void SPImtWrite()
{
SPI_Data[0]=0x00;
SPI_Data[1]=0x00;
SPI_Data[2]=0x00;
SPI_CM=0xc9;
SPIWrite( ); //允许校表寄存器修改
SPI_Data[0]=0x00;
SPI_Data[1]=0x00;
SPI_Data[2]=0x00;
SPI_CM=0x80;
SPIWrite( ); //写起始校表命令字,任意三个字节写到校表寄存器00H里
SPI_Data[0]=0x00;
SPI_Data[1]=0x00;
SPI_Data[2]=0x01;
SPI_CM=0xaa;
SPIWrite( ); //三相三线合相能量累加模式,=1为绝对值相加 =0代数相加
SPI_Data[0]=0x00;
SPI_Data[1]=0x00;
SPI_Data[2]=0x4f;
SPI_CM=0x0a; //三个字节数据根据公式计算出来 脉冲常数为200,电压380v,电流20A =79=4fh
SPIWrite( ); //写高频脉冲输出参数到校表寄存器20H(命令0A0H)
SPI_Data[0]=0x00;
SPI_Data[1]=0x03;
SPI_Data[2]=0x65;
SPI_CM=0x9f;
SPIWrite( ); //写启动电流不同ISTART=INT(0.8*0.648*0.1*0.2%*2^23)=869=3h,65h
SPI_Data[0]=0x02;
SPI_Data[1]=0xe7;
SPI_Data[2]=0x2e;
SPI_CM=0x9e;
SPIWrite( ); //写比差分段补偿区域设置 在35%
SPI_Data[0]=0x0e;
SPI_Data[1]=0x83;
SPI_Data[2]=0xe4;
SPI_CM=0x82;
SPIWrite( ); //写相位补偿区域设置1 区域在175%
SPI_Data[0]=0x06;
SPI_Data[1]=0x38;
SPI_Data[2]=0x86;
SPI_CM=0x83;
SPIWrite( ); //写相位补偿区域设置2 区域在75%
SPI_Data[0]=0x01;
SPI_Data[1]=0x3e;
SPI_Data[2]=0x81;
SPI_CM=0x84;
SPIWrite( ); //写相位补偿区域设置3 区域在15%
SPI_Data[0]=0x00;
SPI_Data[1]=0xa9;
SPI_Data[2]=0xde;
SPI_CM=0x85;
SPIWrite( ); //写相位补偿区域设置4 区域在8%
SPI_Data[0]=0x1f;
SPI_Data[1]=0x8a;
SPI_Data[2]=0x54;
SPI_CM=0x86;
SPIWrite( ); //写A相功率增益 1
SPI_Data[0]=0x1f;
SPI_Data[1]=0x50;
SPI_Data[2]=0x31;
SPI_CM=0x89;
SPIWrite( ); //写A相功率增益 2
SPI_Data[0]=0x00;
SPI_Data[1]=0x035;
SPI_Data[2]=0x96;
SPI_CM=0x8c;
SPIWrite( ); //写A相相位校正1
SPI_Data[0]=0x00;
SPI_Data[1]=0x2b;
SPI_Data[2]=0x56;
SPI_CM=0x8d;
SPIWrite( ); //写A相相位校正2
SPI_Data[0]=0x00;
SPI_Data[1]=0x1e;
SPI_Data[2]=0xb6;
SPI_CM=0x8e;
SPIWrite( ); //写A相相位校正3
SPI_Data[0]=0x00;
SPI_Data[1]=0x10;
SPI_Data[2]=0x56;
SPI_CM=0x8f;
SPIWrite( ); //写A相相位校正4
SPI_Data[0]=0x00;
SPI_Data[1]=0x0d;
SPI_Data[2]=0x56;
SPI_CM=0x90;
SPIWrite( ); //写A相相位校正5
SPI_Data[0]=0x1e;
SPI_Data[1]=0xd0;
SPI_Data[2]=0xc1;
SPI_CM=0x87;
SPIWrite( ); //写B相功率校正1
SPI_Data[0]=0x1E;
SPI_Data[1]=0xC3;
SPI_Data[2]=0x67;
SPI_CM=0x8A;
SPIWrite( ); //写B相功率校正2
SPI_Data[0]=0xff;
SPI_Data[1]=0xe1;
SPI_Data[2]=0x56;
SPI_CM=0x91;
SPIWrite( ); //写B相相位校正1
SPI_Data[0]=0xff;
SPI_Data[1]=0xd0;
SPI_Data[2]=0xf4;
SPI_CM=0x92;
SPIWrite( ); //写B相相位校正2
SPI_Data[0]=0xff;
SPI_Data[1]=0xba;
SPI_Data[2]=0xf4;
SPI_CM=0x93;
SPIWrite( ); //写B相相位校正3
SPI_Data[0]=0xff;
SPI_Data[1]=0xac;
SPI_Data[2]=0xf4;
SPI_CM=0x94;
SPIWrite( ); //写B相相位校正4
SPI_Data[0]=0xff;
SPI_Data[1]=0xab;
SPI_Data[2]=0xf4;
SPI_CM=0x95;
SPIWrite( ); //写B相相位校正5
SPI_Data[0]=0x1e;
SPI_Data[1]=0x7a;
SPI_Data[2]=0x27;
SPI_CM=0x88;
SPIWrite( ); //写C相功率增益 1
SPI_Data[0]=0x1e;
SPI_Data[1]=0x02;
SPI_Data[2]=0x55;
SPI_CM=0x8b;
SPIWrite( ); //写C相功率增益 2
SPI_Data[0]=0xff;
SPI_Data[1]=0xda;
SPI_Data[2]=0x77;
SPI_CM=0x96;
SPIWrite( ); //写C相相位校正1
SPI_Data[0]=0xff;
SPI_Data[1]=0xc6;
SPI_Data[2]=0xa7;
SPI_CM=0x97;
SPIWrite( ); //写C相相位校正2
SPI_Data[0]=0xff;
SPI_Data[1]=0xb4;
SPI_Data[2]=0x77;
SPI_CM=0x98;
SPIWrite( ); //写C相相位校正3
SPI_Data[0]=0xff;
SPI_Data[1]=0xa0;
SPI_Data[2]=0x94;
SPI_CM=0x99;
SPIWrite( ); //写C相相位校正4
SPI_Data[0]=0xff;
SPI_Data[1]=0x9d;
SPI_Data[2]=0x94;
SPI_CM=0x9a;
SPIWrite( ); //写C相相位校正5
SPI_Data[0]=0x00;
SPI_Data[1]=0x00;
SPI_Data[2]=0x00;
SPI_CM=0x9b;
SPIWrite( ); //写A相电压
SPI_Data[0]=0x00;
SPI_Data[1]=0x00;
SPI_Data[2]=0x00;
SPI_CM=0x9c;
SPIWrite( ); //写B相电压
SPI_Data[0]=0x00;
SPI_Data[1]=0x00;
SPI_Data[2]=0x00;
SPI_CM=0x9d;
SPIWrite( ); //写C相电压
SPI_Data[0]=0x00;
SPI_Data[1]=0x00;
SPI_Data[2]=0x00;
SPI_CM=0xa6;
SPIWrite( ); //写A相电流
SPI_Data[0]=0x00;
SPI_Data[1]=0x00;
SPI_Data[2]=0x00;
SPI_CM=0xa7;
SPIWrite( ); //写B相电流
SPI_Data[0]=0x00;
SPI_Data[1]=0x00;
SPI_Data[2]=0x00;
SPI_CM=0xa8;
SPIWrite( ); //写C相电流
SPI_Data[0]=0x00;
SPI_Data[1]=0x00;
SPI_Data[2]=0x01;
SPI_CM=0x2A;
SPIWrite( ); //三相三线合相能量累加模式,=1为绝对值相加
SPI_Data[0]=0x00;
SPI_Data[1]=0x00;
SPI_Data[2]=0x01;
SPI_CM=0xC9;
SPIWrite( ); //校表寄存器修改禁止
//SPI_CM=0x0d;
//SPIRead( ); //从7022中读出数据
}
/////////////////////////////////////////////////////////////////////////////
void RESET7022(void)
{
RESET_bz=1;
RST=0;
mDelay(100);
RST=1;
mDelay(100);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -