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

📄 protocol.h

📁 单相多功能代码,计量芯片采用ADE7737做为计量,SPI通讯,仅供参考,不得用于商业
💻 H
字号:
/* protocol.h */

#ifndef PROTOCOL_H
#define PROTOCOL_H

#ifdef __cplusplus
extern "C"
{
#endif

#include "uart.h"

typedef unsigned char (*COMM_PROC_PTR)(void);

// 通信端口选择定义
#define NULL_PORT                      0x0000
#define IR_PORT                        0x0001
#define RS485_PORT                     0x0002
#define IR_PORT_WITH_BATTERY           0x0004
#define RS485_PORT_TX                  0x0008

/* 长度定义 */
#define FRM_ADDR_LEN                       6                      // 电表地址长度

/* 通信属性定义 */
#define COM_ATTRIBUTE_SINGLE            0x5A                      // 单机通信
#define COM_ATTRIBUTE_BROADCAST         0xA5                      // 广播通信

/* 桢格式说明 */
#define FRM_START_BYTE1                    0
#define FRM_ADDR                           1
#define FRM_START_BYTE2                    7
#define FRM_COMMAND                        8
#define FRM_DATALEN                        9
#define FRM_DATA                          10
#define FRM_CS   _frm_buf[FRM_DATALEN]+10
#define FRM_STOP_BYTE               FRM_CS+1

/* 命令索引 */
#define DI1                       FRM_DATA+1
#define DI0                         FRM_DATA

/* 桢数据域处理值 */
#define FRAME_DATA_APPENDVALUE          0x33

/* 桢起始字节及结束字节定义 */
#define PRE_FRAME_FLAG                  0xFE
#define FRAME_START_FLAG                0x68
#define FRAME_END_FLAG                  0x16

/* 串口状态定义*/
#define UART_RXD_OK                        0
#define UART_WAIT_START_BYTE1              1
#define UART_WAIT_ADDRESS                  2
#define UART_WAIT_START_BYTE2              3
#define UART_WAIT_CTL_WORD                 4
#define UART_WAIT_DATA_LENGTH              5
#define UART_WAIT_DATA                     6
#define UART_WAIT_CS                       7
#define UART_WAIT_STOP_BYTE                8
#define UART_RXD_PARITY_ERR                9
#define UART_RXD_OVERTIME_ERR             10
#define UART_RXD_CONFIRM_BONDRATE         11

/* Commands */
#define FRM_CTRW_READ_SLVS_DATA         0x01                       // 读电表数据
#define FRM_CTRW_WRITE_SLVS_DATA        0x04                       // 写电表数据
#define FRM_CTRW_WRITE_PASSWORD         0x0F                       // 写密码
#define FRM_CTRW_CLR_PWRDATA            0x09                       // 电量清零
#define FRM_CTRW_CLR_METER_DATA         0x6B                       // 电表清零
#define FRM_CTRW_CLR_PASSWORD           0x6F                       // 清密码
#define FRM_CTRW_CLR_CONSTANT           0x6E                       // 清电表常数
#define FRM_CTRW_CLR_E2PROM_A           0x6D                       // 清存储固定数据的E2prom
#define FRM_CTRW_CLR_E2PROM_V           0x6A                       // 清存储可变数据的E2prom
#define FRM_CTRW_DISP_INFO              0x60                       // 遥控器控制LCD显示
#define FRM_CTRW_REVISE_TIME            0x08                       // 广播校时
#define FRM_CTRW_WRITE_MNUM             0x0A                       // 广播写设备地址
#define FRM_CTRW_CLR_REQ_PWRDATA        0x10                       // 最大需量清零
#define FRM_CTRW_CLR_ZT_DATA                        0x6C              // 时区冻结电量清零
#define FRM_CTRW_SAVE_ZT_DATA                        0x19              // 时区冻结电量

/* commands of response */
#define CMD_RIGNT_RESP 0xE5  // right response
#define CMD_WRONG_RESP 0xEA  // wrong response

/* process of ending-comm */
#define COMM_SEND_RIGHT_RESP BIT0
#define COMM_SEND_WRONG_RESP BIT1
#define COMM_NO_RESP BIT2
#define COMM_LOAD_DATA BIT3
#define COMM_SAVE_DATA BIT4
  
/* 返回数据定义 */
#define RET_READ_E2PROM_A               0x01                       // 读存储固定数据的E2prom
#define RET_READ_E2PROM_V               0x02                       // 读存储可变数据的E2prom
#define RET_WRITE_E2PROM_A              0x04                       // 写存储固定数据的E2prom
#define RET_WRITE_E2PROM_V              0x08                       // 写存储可变数据的E2prom
#define RET_SEND_RIGHT_RESPONSION       0x10                       // 正确应答
#define RET_SEND_ERROR_RESPONSION       0x20                       // 错误应答
#define RET_NO_RESPONSION               0x40                       // 无应答

//extern const unsigned char _slvs_req_frm_len[];
//extern const unsigned char _slvs_right_resp_len[];
//extern const unsigned char _slvs_cmd[];


extern unsigned char DI0_H;
extern unsigned char DI0_L;

extern void parse_frame(void);

#ifdef __cplusplus
}
#endif


#endif /* PROTOCOL_H */

⌨️ 快捷键说明

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