⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi.c

📁 一个用C语言控制的读写7022
💻 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 + -