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

📄 manipulate7758.c

📁 ADE7758三相电能芯片读写源程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#define 	MANIP7758_GLOBALS
#include	"includes.h"

const uchar GACHC_58addr_num[]={1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,
								 2,1,3,1,1,1,1,1,3,3,3,2,2,1,1,1,
								 1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,
								 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,
								 1,1,1,1,1,2,2,2,2
								};

/****************************************************************/
/*                          Read a byte from 7758                                                 */
/*description: get byte for 7758 output                                                       */
/*                            */
/*                                                                                                            */
/*input parameters:  none                                      */
/*                                 	                                                                     */
/*output argument:    return the obtaned byte which type is uchar*/
/*relative globe variables or functons:  none                                                              */
/***************************************************************/

uchar read_1byte7758(void)
{
	union UN_DEF LUB_data;
	uchar i;
	LUB_data.BYTE=0;nop();
	for(i=0;i!=8;i++)
		{
		P_7758CLK_HIGH;
		//us_delay(1);
		us_delay(2);
		P_7758CLK_LOW;
		LUB_data.BIT.b0=P_7758DOUT;
		if(i==7)
			{
			LUB_data.BYTE=~LUB_data.BYTE;/*invert the obtain bit*/
			return LUB_data.BYTE;
			}
		LUB_data.BYTE<<=1;
		//us_delay(1);
		us_delay(2);
		}
}

/****************************************************************/
/*                              write a byte to 7758                                                  */
/*description:    this  function write one byte to the 7758                               */
/*                            */
/*                                                                                                            */
/*input parameters:  PB_data:the data ready to be write                               */
/*                                 	                                                                     */
/*output argument: none                                                                        */
/*relative globe variables or functons:none                                                  */
/***************************************************************/
void write_1byte7758(uchar PB_data)
{
	uchar i;
	union UN_DEF LUB_data;
	LUB_data.BYTE=~PB_data;/*invert the certain bit before output*/
	for(i=0;i!=8;i++)
		{
		P_7758DIN=LUB_data.BIT.b7;		
		P_7758CLK_HIGH;		
		LUB_data.BYTE<<=1;
		//us_delay(1);
		us_delay(2);
		P_7758CLK_LOW;
		//us_delay(1);
		us_delay(2);
		nop();
		}
}
/****************************************************************/
/*                              write a command  to 7758                                                  */
/*description:    this fuction  send a certain   command to the 7758             */
/*                            */
/*                                                                                                            */
/*input parameters:  PB_addr: the command address                               */
/*                            PB_byte_nums: the numbers of the given command    */
/*				   PP_data_point:  a pointer which is point to the first byte*/
/*output argument: none                                                                        */
/*relative globe variables or functions :none                                                                */
/***************************************************************/

void Data_wr7758(uchar PB_addr ,uchar *PP_data_point)
{
	uchar i,LB_byte_nums;
	
	ready_7758com();us_delay(2);
	if((PB_addr==0x7e)||(PB_addr==0x7f))LB_byte_nums=1;
	else LB_byte_nums=GACHC_58addr_num[PB_addr];
	P_7758NCS_active;
	us_delay(50);
	//us_delay(150);
	PB_addr|=0x80;
	write_1byte7758(PB_addr);/*send the command address*/
	LB_byte_nums&=0x03;
	for(i=0;i!=LB_byte_nums;i++)
		{
		write_1byte7758(*(PP_data_point+i));
		}
	P_7758NCS_inactive;
	us_delay(50);
	//us_delay(150);
	sleep_7758com();
}

/****************************************************************/
/*                              read a data  from 7758                                                  */
/*description:    this fuction  send a certain   command to the 7758             */
/*                            */
/*                                                                                                            */
/*input parameters:  PB_addr: the command address                               */
/*                            PB_byte_nums: the numbers of the obtained data    */
/*				                                                     */
/*output argument: GA_buf_rdwr7758 saving the obtained data                    */
/*relative globe variables or functions :GA_buf_rdwr7758,  read_1byte7758      */
/*read_1byte7758                */
/***************************************************************/
void Data_rd7758(uchar PB_addr)
{
	uchar i,LB_byte_nums;
	ready_7758com();us_delay(2);
	if((PB_addr==0x7e)||(PB_addr==0x7f))LB_byte_nums=1;
	else LB_byte_nums=GACHC_58addr_num[PB_addr];
	P_7758NCS_active;
	us_delay(50);
	//us_delay(150);
	nop();/*debug*/
	write_1byte7758(PB_addr);
	for(i=0;i!=LB_byte_nums;i++)
		{
		GA_buf_rdwr7758[i]=read_1byte7758();
		}
	P_7758NCS_inactive;
	sleep_7758com();
	us_delay(50);
	//us_delay(150);
	sleep_7758com();
	nop();/*debug*/
}
/****************************************************************/
/*                              Initialize the 7758                                                  */
/*description: this fuction  initialize the relatived ports of 7758             */
/*                                                                                      */
/*                                                                                                            */
/*input parameters: none                        */
/*                                                                              */
/*				                                                     */
/*output argument: none                    */
/*relative globe variables or functions :none                                               */
/***************************************************************/
void ini_7758(void)
{
	uint LW_data;
	SET_OUTPUT_7758NCS;P_7758NCS_inactive;
	SET_OUTPUT_7758CLK;P_7758CLK_LOW;
	SET_OUTPUT_7758DIN;
	SET_INPUT_7758DOUT;
	SET_INT_MODE7758IQR;

	us_delay(10);
	GA_buf_rdwr7758[0]=0x40;
	Data_wr7758(Addr_OPMODE,  GA_buf_rdwr7758);
	us_delay(30);
	
	Read_EeprData(GST_58para.U_apcf.ACH_apcf,2,APCFDEN_EeAddr);
	if(GST_58para.U_apcf.APCFDEN>0x0fff)
		{
		GST_58para.U_apcf.APCFDEN=0x0fff;
		}	
	Data_wr7758(Addr_APCFDEN, GST_58para.U_apcf.ACH_apcf);
	
	
	Read_EeprData(GST_58para.U_varcp.ACH_varcp,2,VARCFDEN_EeAddr);
	if(GST_58para.U_varcp.VARCFDEN> 0x0fff )
		{
		GST_58para.U_varcp.VARCFDEN=0x0fff;
		}
	Data_wr7758(Addr_VARCFDEN, GST_58para.U_varcp.ACH_varcp);
	
       
	Read_EeprData(GST_58para.U_awg.ACH_awg,2,AWG_EeAddr);
	if(GST_58para.U_awg.AWG> 0x0fff )
		{
		GST_58para.U_awg.AWG=0x0f35;
		}	
	Data_wr7758(Addr_AWG, GST_58para.U_awg.ACH_awg);
	
       
	Read_EeprData(GST_58para.U_bwg.ACH_bwg,2,BWG_EeAddr);
       if(GST_58para.U_bwg.BWG> 0x0fff)
       	{
		GST_58para.U_bwg.BWG=0x0f35;
       	}
	Data_wr7758(Addr_BWG, GST_58para.U_bwg.ACH_bwg);
    
	Read_EeprData(GST_58para.U_cwg.ACH_cwg,2,CWG_EeAddr);
	if(GST_58para.U_cwg.CWG>0x0fff )
		{
		GST_58para.U_cwg.CWG=0x0f35;
		}
	Data_wr7758(Addr_CWG, GST_58para.U_cwg.ACH_cwg);
	
	Read_EeprData(GST_58para.U_avarg.ACH_avarg,2,AVARG_EeAddr);
	if(GST_58para.U_avarg.AVARG>0x0fff)
		{
		GST_58para.U_avarg.AVARG=0x0f35;
		}
	Data_wr7758(Addr_AVARG, GST_58para.U_avarg.ACH_avarg);

	Read_EeprData(GST_58para.U_bvarg.ACH_bvarg,2,BVARG_EeAddr);
	if(GST_58para.U_bvarg.BVARG> 0x0fff)
		{
		GST_58para.U_bvarg.BVARG=0x0f35;
		}
	Data_wr7758(Addr_BVARG, GST_58para.U_bvarg.ACH_bvarg);

	Read_EeprData(GST_58para.U_cvarg.ACH_cvarg,2,CVARG_EeAddr);
	if(GST_58para.U_cvarg.CVARG>0x0fff)
		{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -