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

📄 general.h

📁 单相复费率MSP430硬件时钟参考代码,MSP413设计方案
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef _GRNERAL_H_
#define _GRNERAL_H_

// 函数指针类型定义
typedef void (* PROC_FUNC)(void);

// 设备状态属性
#define DEVICE_OK                        0xCF       // 正常状态

// 电流方向定义
#define ATTRIBUTE_OF_PLUS_MINUS          0x04       // 反向

// 电量属性定义 之 四类定义
#define ATTRIBUTE_OF_APEX              0x0000       // 电量属性之峰
#define ATTRIBUTE_OF_CALM              0x0001       // 电量属性之平
#define ATTRIBUTE_OF_VALE              0x0002       // 电量属性之谷
#define ATTRIBUTE_OF_TINE              0x0003       // 电量属性之尖

// 电量属性定义 之 八类定义
#define ATTRIBUTE_OF_APEX_PLUS         0x0000       // 电量属性之正峰
#define ATTRIBUTE_OF_CALM_PLUS         0x0001       // 电量属性之正平
#define ATTRIBUTE_OF_VALE_PLUS         0x0002       // 电量属性之正谷
#define ATTRIBUTE_OF_TINE_PLUS         0x0003       // 电量属性之正尖
#define ATTRIBUTE_OF_APEX_MINUS        0x0004       // 电量属性之反峰
#define ATTRIBUTE_OF_CALM_MINUS        0x0005       // 电量属性之反平
#define ATTRIBUTE_OF_VALE_MINUS        0x0006       // 电量属性之反谷
#define ATTRIBUTE_OF_TINE_MINUS        0x0007       // 电量属性之反尖

// 事件位定义
#define EVENT_01_SECOND                BIT0       // 1s定时事件
#define EVENT_01_MINUTE                BIT1       // 1min定时事件
//#define EVENT_15_MINUTE                BIT2       // 15min定时事件
#define EVENT_SERIAL_PORT              BIT3       // 串口通信事件
#define EVENT_KEY_DOWN                BIT4       // 按键事件
#define EVENT_KEY_DETECT                BIT5       // 按键事件
#define EVENT_POWERMINUS               BIT6       // 反向起始事件
#define EVENT_REVERSED                    (BIT2|BIT7)

// 基本数据定义
#define PULSE_COUNT_OF_PER_DEGREE         100       // 一度电的脉冲数
//#ifdef LIAONING_STANDARD
#define COUNT_OF_CHARGE_RATE                3       // 费率数
#define PROTOCOL_WR_DATALEN       16
#define COUNT_OF_DISPLAY_POWER            4
//#else 
//#ifdef BEIJING_STANDARD
//#define COUNT_OF_CHARGE_RATE                4       // 费率数
//#define PROTOCOL_WR_DATALEN       20
//#define COUNT_OF_DISPLAY_POWER            5
//#endif
//#endif

// 数据存储模式定义
#define DUTY_STORE                     0x0000       // 例行存储
#define FORCE_STORE                    0x0001       // 强制存储

// 时段检查模式定义
#define DUTY_DETECT                    0x0000       // 时段例行检查
#define FORCE_DETECT                   0x0001       // 时段强制检查

// 时间数组各项下标含义定义
#define SPACE_OF_SECOND                0x0000
#define SPACE_OF_MINUTE                0x0001
#define SPACE_OF_HOUR                  0x0002
#define SPACE_OF_WEEKDAY               0x0003
#define SPACE_OF_DAY                   0x0004
#define SPACE_OF_MONTH                 0x0005
#define SPACE_OF_YEAR                  0x0006

// 定时器个数定义
#define TIMER_NUMBER                        2

// RealTimer操作定义
#define REALTIMER_WRITE                     0
#define REALTIMER_READ                      1

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

// 奇偶校验标识
#define UART_BIT_9_H                     0xA5
#define UART_BIT_9_L                     0x5A

// 串口状态定义
#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_ERR_START_BYTE1         0x81
#define UART_RXD_ERR_ADDRESS             0x82
#define UART_RXD_ERR_START_BYTE2         0x83
#define UART_RXD_ERR_CTL_WORD            0x84
#define UART_RXD_ERR_DATA_LENGTH         0x85
#define UART_RXD_ERR_DATA                0x86
#define UART_RXD_ERR_CS                  0x87
#define UART_RXD_ERR_STOP_BYTE           0x88
#define UART_RXD_ERR_STATE               0x89
#define UART_RXD_ERR_PARITY              0x8A

// 串口消息固定字符
#define UART_RXD_BUF_SIZE                  48
#define UART_TXD_BUF_SIZE                   7
#define UART_START_BYTE                  0x68
#define UART_STOP_BYTE                   0x16

// 波特率定义
#define BAUD_RATE                        1200
#define IR_CARRIER                      38000

// ACLK=32768,SMCLK=ACLK*32
#define SMCLK_FREQ                 (32768*32)

// generate IR carrier
#define IR_CAR_GEN    (SMCLK_FREQ/IR_CARRIER)

// BAUD_RATE
#define Bitime_5   (SMCLK_FREQ/(2*BAUD_RATE)) // ~ 0.5 bit length + small adjustment 13.6533
#define Bitime       ((SMCLK_FREQ/BAUD_RATE)) // 427us bit length ~ 2341 baud 27.30666

// 串口发送定义
#define N_HALF_CLK                         10
#define N_SEND_BIT                        200

// 串口接收定义
#define UART_HALF_BIT_TIME_1200            14
#define UART_BIT_TIME_1200                 27

// 串口发送波特率定义
#define UART_BOND_RATE_1200               200


//表号
#define LCD_ADDRESS_OF_DEVICE_NUM           0
#define LCD_OF_DEVICE_NUM                BIT5
//户号
#define LCD_ADDRESS_OF_USER_NUM           0
#define LCD_OF_USER_NUM                BIT3
//日期,时间
#define LCD_ADDRESS_OF_DATE_TIME            0
#define LCD_OF_TIME                      BIT7
#define LCD_OF_DATE                      BIT6
//冒号前
#define LCD_ADDRESS_OF_MAOHAO0              4
#define LCD_OF_MAOHAO0                   BIT3
//冒号后
#define LCD_ADDRESS_OF_MAOHAO1              5
#define LCD_OF_MAOHAO1                   BIT3
#define LCD_ADDRESS_OF_MAOHAO2              6
#define LCD_OF_MAOHAO2                   BIT3
//正向,反向
#define LCD_ADDRESS_OF_ZHENGFAN_XIANG       0
#define LCD_OF_ZHENGXIANG                BIT0
#define LCD_OF_FANXIANG                  BIT1
//总,峰,平,谷,尖
#define LCD_ADDRESS_OF_ZFPGJ                8
//点后 
#define LCD_ADDRESS_OF_DOT1                 7
#define LCD_OF_DOT1                      BIT3
//通信...
#define LCD_ADDRESS_OF_TONGXIN              9
#define LCD_OF_TONXIN                    BIT2
//电量
#define LCD_ADDRESS_OF_DIANLIANG            9
#define LCD_OF_DIANLIANG                 BIT5
//需量
//#define LCD_ADDRESS_OF_XULIANG              8
//#define LCD_OF_XULIANG                   BIT4
//本
#define LCD_ADDRESS_OF_BEN       2
#define LCD_OF_BEN                       BIT3
//上
#define LCD_ADDRESS_OF_SHANG       0
#define LCD_OF_SHANG1                    BIT4
//月
#define LCD_ADDRESS_OF_YUE       3
#define LCD_OF_YUE                       BIT3
//null
#define LCD_OF_NULL                         0
//冬
#define LCD_ADDRESS_OF_DONG                 0
#define LCD_OF_DONG                      BIT2
//低电显示
#define LCD_ADDRESS_OF_LOWPWR               9
#define LCD_OF_LOWPWR                    BIT4
//掉电显示
#define LCD_ADDRESS_OF_BRKPWR               9
#define LCD_OF_BRKPWR                    BIT5
//开盖报警显示
#define LCD_ADDRESS_OF_COVER               9
#define LCD_OF_COVER                    BIT1
//编程显示
#define LCD_ADDRESS_OF_PROGRAM               9
#define LCD_OF_PROGRAM                    BIT0

// 其他数据地址定义
// 1.常规数据信息
#define ADDRESS_OF_DEVICE_CONSTANT         0       // 设备常数             - 4字节
#define ADDRESS_OF_DEVICE_NUMBER            4       // 设备标识地址         - 6字节
#define ADDRESS_OF_DEVICE_CODE              10       // 设备码地址           - 6字节
#define ADDRESS_OF_USER_CODE               16       // 用户编号地址         - 6字节
#define ADDRESS_OF_STARTING_COUNT          22       // 设备起始读数         - 20字节(总峰平谷尖:缺省为0)
#define ADDRESS_OF_DEVICE_PASSWORD1        42       // 设备访问密码1        - 4字节
#define ADDRESS_OF_DEVICE_PASSWORD2        46       // 设备访问密码2        - 4字节
#define ADDRESS_OF_DEVICE_PASSWORD3        50       // 设备访问密码3        - 4字节
#define ADDRESS_OF_TIME_REFINE             54       // 对时允许误差值       - 1字节 - 缺省为5(分钟)
#define ADDRESS_OF_DISPLAY_CHOOSE_BAK      55       // 设备显示选择备份     - 4字节 - 缺省为FF(所有数据轮显)
#define ADDRESS_OF_DISPLAY_INTERVAL        57       // 循显时间设定         - 1字节 - 缺省为01(每秒切换显示内容),此字节可直接设置,是ADDRESS_OF_DISPLAY_CHOOSE_BAK的第三个字节
#define ADDRESS_OF_DISPLAY_CHOOSE          59       // 设备显示选择         - 7字节 - 缺省为FF(所有数据轮显)
#define ADDRESS_OF_DEVICE_STATUS_MAIN      66       // 设备主状态字         - 1字节
#define ADDRESS_OF_DEVICE_STATUS_SUB       67       // 设备子状态字         - 1字节
#define ADDRESS_OF_SOFTWARE_VERSION        68       // 软件版本号          - 3字节
#define ADDRESS_OF_HARDWARE_VERSION        71       // 硬件版本号          - 3字节

#define ADDRESS_OF_PROGRAM_TIMES           74       // 编程次数             - 2字节
#define ADDRESS_OF_PROGRAM_TIME            76       // 最近一次编程时间     - 6字节
#define ADDRESS_OF_DEVICE_CLEAR_TIMES      82       // 设备清零次数         - 2字节
#define ADDRESS_OF_DEVICE_CLEAR_TIME      84       // 最近一次清零时间     - 6字节
#define ADDRESS_OF_START_TIME_MINUS        90       // 最近一次反向时间     - 6字节
#define ADDRESS_OF_POWER_TIME_MINUS        96       // 反向运行的总时间     - 4字节 - 单位是分钟

#define ADDRESS_OF_LAST_BREAK_POWER_TIME 100       // 最后一次掉电时间     - 6字节
#define ADDRESS_OF_LAST_LOW_POWER_TIME    106       // 最后一次低压时间     - 6字节
#define ADDRESS_OF_SUCCESSSETTIME_FLAG    112       // 成功对时标记位       - 1字节
#define ADDRESS_OF_STARTING_COUNT_TIME    113       // 设备起始读数时间     - 6字节
#define ADDRESS_OF_TIME_REFINE_TIME       119       // 最近一次对时时间     - 6字节
#define ADDRESS_OF_CPU_RESET_CNT          125       // CPU复位次数         - 2字节
#define ADDRESS_OF_OPEN_COVER_CNT      127      // 开盖次数         - 2字节
#define ADDRESS_OF_OPEN_COVER_TIME      129      // 开盖次数         - 6字节

// 2.临时数据保存区
#define ADDRESS_OF_RELAY_STATE            150       // 继电器状态           - 1字节
#define ADDRESS_OF_SETTLEMENT_HOUR        151       // 月结算日期           - 1字节 - 缺省为01(每月1号)
#define ADDRESS_OF_SETTLEMENT_DAY         152       // 月结算日期           - 1字节 - 缺省为01(每月1号)
#define ADDRESS_OF_SETTLEMENT_RECODE_MON  153       // 上一次结算月信息     - 1字节
#define ADDRESS_OF_BACKUP_STATUS_MAIN     154       // 设备主状态字         - 1字节
#define ADDRESS_OF_BACKUP_STATUS_SUB      155       // 设备子状态字         - 1字节
#define ADDRESS_OF_RS485BAUDRATE          156       // RS485波特率设置      - 2字节
#define ADDRESS_OF_IRBAUDRATE             158       // IR波特率设置         - 2字节
#define ADDRESS_OF_PERIOD_OF_TIME_COUNT   160       // 时段数              - 1字节

// 时段设置数据存储地址,每项的存储格式为:
// typedef struct tag_TimeSect
// {
//     unsigned char Attribute;     - 时段属性
//     unsigned char Minute;        - 时段的起始分钟
//     unsigned char Hour;          - 时段的起始小时
// }TimeSect_S;
// 如此的存储格式限定了时段设置不能跨零点
#define ADDRESS_OF_TIME_SECT              161       // 共占用3*12=36个字节

// 3.用电数据统计区
#define ADDRESS_OF_TOTAL_POWER_PLUS       200       // 设备总正用电量       - 4字节
#define ADDRESS_OF_TOTAL_APEX_PLUS        204       // 设备总正峰电量       - 4字节
#define ADDRESS_OF_TOTAL_CALM_PLUS        208       // 设备总正平电量       - 4字节
#define ADDRESS_OF_TOTAL_VALE_PLUS        212       // 设备总正谷电量       - 4字节
#define ADDRESS_OF_TOTAL_TINE_PLUS        216       // 设备总正尖电量       - 4字节
#define ADDRESS_OF_TOTAL_POWER_MINUS      220       // 设备总反用电量       - 4字节
#define ADDRESS_OF_TOTAL_APEX_MINUS       224       // 设备总反峰电量       - 4字节
#define ADDRESS_OF_TOTAL_CALM_MINUS       228       // 设备总反平电量       - 4字节
#define ADDRESS_OF_TOTAL_VALE_MINUS       232       // 设备总反谷电量       - 4字节
#define ADDRESS_OF_TOTAL_TINE_MINUS       236       // 设备总反尖电量       - 4字节


// 月历史冻结数据存储地址,每月的存储格式为:
// typedef struct tag_MonthLog
// {
//     unsigned long PlusTotalLog;  - 总正电量数据
//     unsigned long PlusApexLog;   - 正峰电量数据
//     unsigned long PlusCalmLog;   - 正平电量数据
//     unsigned long PlusValeLog;   - 正谷电量数据
//     unsigned long PlusTineLog;   - 正尖电量数据
//     unsigned long MinusTotalLog; - 总反电量数据
//     unsigned long MinusApexLog;  - 反峰电量数据
//     unsigned long MinusCalmLog;  - 反平电量数据
//     unsigned long MinusValeLog;  - 反谷电量数据
//     unsigned long MinusTineLog;  - 反尖电量数据
// }MonthLog_S;
#define ADDRESS_OF_MONTH_LOG              500       // 共占用40*13=520个字节

#define ADDRESS_OF_MONTH_01               500       // 一月数据存储地址
#define ADDRESS_OF_MONTH_02               540       // 二月数据存储地址
#define ADDRESS_OF_MONTH_03               580       // 三月数据存储地址
#define ADDRESS_OF_MONTH_04               620       // 四月数据存储地址
#define ADDRESS_OF_MONTH_05               660       // 五月数据存储地址
#define ADDRESS_OF_MONTH_06               700       // 六月数据存储地址
#define ADDRESS_OF_MONTH_07               740       // 七月数据存储地址
#define ADDRESS_OF_MONTH_08               780       // 八月数据存储地址
#define ADDRESS_OF_MONTH_09               820       // 九月数据存储地址
#define ADDRESS_OF_MONTH_10               860       // 十月数据存储地址
#define ADDRESS_OF_MONTH_11               900       // 十一月数据存储地址
#define ADDRESS_OF_MONTH_12               940       // 十二月数据存储地址

#define ADDRESS_OF_MONTH_CURRENT         1000       // 当前月数据记录区(40bytes)

// 实时时钟管脚定义 ( MSP430F413 <--> RS5C372A )
// +---------------+
// |          P6.7 |  ---> SCL
// |          P6.6 | <---> SDA
// +---------------+

⌨️ 快捷键说明

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