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

📄 ade7758.h

📁 实现对ADE7758电能芯片的读写和校准,8051单片机,通过PC对电参量进行校准
💻 H
字号:
//extern void write7753(unsigned char type,unsigned int wdata);
extern void write7753(unsigned char type,unsigned int wdata,unsigned char databit);
//extern unsigned int read7753(unsigned char type);
//extern void write7753a(unsigned char type,unsigned int wdata);
extern void write7753a(unsigned char type,unsigned int wdata,unsigned char databit);


extern void write7753b(unsigned char type,unsigned int wdata);
extern void write7753c(unsigned char type,unsigned int wdata);
extern unsigned long read7753a(unsigned char type,unsigned char databit);
extern unsigned int read7753b(unsigned char type);
extern unsigned int read7753c(unsigned char type);
extern void delay10us();

extern void clean_energy();
extern void get_data_from7758();
extern void init_7758();
extern void read_en_from_e2prom();


extern void read_set_from_e2prom();
extern void save_en_to_e2prom();
extern void save_en_to_flash();//save to mcu
extern void save_set_to_e2prom();
extern void write_mask();
extern void write_to7758();

////////////////////////////////////////////////
extern void erase_flash();
extern void look_for_flag();
extern void write_data_flag();
extern void save_en_to_flash();
extern void read_en_from_flash();
////////////////////////////////////////////////

//整型数和字符型数的共用体

#define uint unsigned int 
#define uchar unsigned char 
#define ulong unsigned long 

union int_char
{
	uint data16;
	uchar data8[2];
};

//长整型数和字符型数的共用体
union long_char
{
	ulong data32;
	uchar data8[4];
};

//通讯时的信息头结构
struct com
{
	uchar local_add;//本机地址
	
	uchar funtion_code;//功能码
	
	uchar reg_num;//寄存器个数
};

//保存所有处理过的从7758中来的电参量,也是一个在正常模式下的通讯缓冲区
struct all_data
{
	struct com          com_head;//通讯时的响应帧的开头   3bytes
	
	//union int_char      voltage[3];//三相电压值           6bytes
	
	union int_char      voltage[4];//三相电压值 + 平均值                8bytes
	
	union int_char      voltageLL[4];//三相线电压压值 + 平均值          8bytes
	
	//union int_char      current[3];//三相电流值           6bytes
	
	union int_char      current[4];//三相电流值 + 平均值                8bytes
	
	union int_char      watt[4];//三相有功功率,最后一个是三相总和        8bytes
	
	union int_char      var[4];//三相无功功率,最后一个是三相总和         8bytes
	
	union int_char      va[4];//三相视在功率,最后一个是三相总和          8bytes
	
	union long_char     watt_hour[4];//三相有功电能值,最后一个是三相总和,初始化时应该将E2PROM中的数据读出来。16bytes
	
	union long_char     var_hour[4];//三相无功电能值,最后一个是三相总和  16bytes
	
	union long_char     va_hour[4];//三相视在电能值,最后一个是三相总和   16bytes
	
	union int_char      sys_hz;//系统频率                                 2bytes
	
	union long_char     surge;//浪涌个数                                  4bytes
	
	union int_char      com_crc;//通讯时存放校验和                        2bytes
	
	
	//整个结构体的长度为95字节        //+12bytes
};

//在校准模式下的只读寄存器内容,与上面的结构体内存共用
struct adjust_datar
{
	struct com           com_head;//通讯时的响应帧的开头
	
	union long_char     voltage[3];
	
	union long_char     current[3];
	
	union int_char      watt[3];
	
	union int_char      var[3];
	
	union int_char      va[3];
	
	union int_char       com_crc;//通讯时存放校验和
	//以上部分不只作为只读数据缓冲,还作为校准模式下的通讯缓冲,总长度为:3 + 36 + 2 + 6
	
};

//在校准模式下的只写寄存器内容,与上面的结构体内存共用
struct adjust_dataw
{
	union int_char     voltage[3];
	
	union int_char     current[3];
	
	union int_char      watt[3];
	
	union int_char      var[3];
	
	union int_char      va[3];
	
	//总长度为:30字节
};

//在校准模式下存放电参量的原始数据
struct adjust_data
{
	struct adjust_dataw  write_data;//存放修正参数,最后将写入E2PROM
	
	struct adjust_datar  read_data;//存放原始数据
	
};

//存放正常模块和校准模式下的数据,采用共用体以节省存储空间
union all
{
	struct all_data       working;//正常工作模式下存放的电参量  95
	
	struct adjust_data    adjusting;//校准模式下存放的数据      65
	
	uint serie_data16[47];           //连续的数据16位           94
	
	uchar serie_data8[ 107];           //连续的数据8位            95
	
	uchar serie1_data8[41];           //连续的数据8位,communication   41
	
};//整个结构体的长度为107字节

extern union all xdata rwdata;

⌨️ 快捷键说明

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