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

📄 bcd_hex.asm

📁 本程序为集中抄表系统中低压电力线载波数据采集器程序源代码
💻 ASM
📖 第 1 页 / 共 3 页
字号:
                    MOV     DPTR,#RS485_CURRENT_ZR_ENERGY             ;485表存贮区当前正向无功首地址
                    LCALL   SAVE_METER485_VAR                         ;通信成功,存储读出的485电表参数
                    LJMP    READ_FRAMES_OVER                          ;结束
FALSE_RETURN3:
                    MOV     DPTR,#RS485_CURRENT_ZR_ENERGY        ;485表存贮区当前正向无功首地址
                    JMP     MAKE_DQ_ZX_WG_FRAMES                 ;把当前485表正向无功形成回应帧发送给集中器
READ_PULSE_DQ_ZX_WG:
                    MOV     DPTR,#PULSE_CURRENT_ENERGY           ;脉冲表当前电量首地址
MAKE_DQ_ZX_WG_FRAMES:
                    LCALL   READ_FRAMES_ACK                      ;读正向无功回应帧
DZW_READ_METER485_OVER:
                    AJMP    READ_DQ_WG_ERR                       ;回应帧发送完,退出.
;当前反向无功:数据标识:DI1:91,DI0:20------------------------------
READ_DQ_FX_WG:
                    CJNE    A,#20H,READ_DQ_WG_ERR                     ;判断是反向无功否
                    LCALL   JUDGE_WHAT_KIND_RAT_OR_VAR                ;判断为何种费率
                    JNB     PULSE_OR_485METER,READ_PULSE_DQ_FX_WG     ;判断是读485表还是脉冲表
                    LCALL   TERMINAL_CONNECT_485METER                 ;采集器与485表通信.
                    JNB     TERMINAL_METER485_CONNECT_OK,FALSE_RETURN4;判断采集终端与485表通信成功否?
                    CLR     TERMINAL_METER485_CONNECT_OK              ;清此标志位
                    LCALL   SEND_ONE_FRAMES_ACK                       ;发送读回应帧到集中器
                    MOV     DPTR,#RS485_CURRENT_FR_ENERGY             ;485表存贮区当前反向无功首地址
                    LCALL   SAVE_METER485_VAR                         ;通信成功,存储读出的485电表参数
                    LJMP    READ_FRAMES_OVER                          ;结束
FALSE_RETURN4:
                    MOV     DPTR,#RS485_CURRENT_FR_ENERGY        ;485表存贮区当前反向无功首地址
                    JMP     MAKE_DQ_FX_WG_FRAMES                 ;把当前485表反向无功形成回应帧发送给集中器
READ_PULSE_DQ_FX_WG:
                    MOV     DPTR,#PULSE_CURRENT_ENERGY           ;脉冲表当前电量首地址
MAKE_DQ_FX_WG_FRAMES:
                    LCALL   READ_FRAMES_ACK                      ;读当前反向无功回应帧
READ_DQ_WG_ERR:
                    LJMP    READ_FRAMES_OVER                     ;结束帧处理
;------------------------------------
;读上月有功电量
READ_LAST_YG:
                    CJNE    A,#94H,READ_LAST_WG                  ;判断是上月有功否?
                    MOV     A,DATA_DI0                           ;是上月有功,再判断是正向还是反向
                    ANL     A,#0F0H                              ;屏蔽掉低4位
;上月正向有功:数据标识:DI1:94,DI0:10-----------------------
READ_LAST_ZX_YG:
                    CJNE    A,#10H,READ_LAST_FX_YG                    ;判断是正向有功否
                    LCALL   JUDGE_WHAT_KIND_RAT_OR_VAR                ;判断为何种费率
                    JNB     PULSE_OR_485METER,READ_PULSE_LAST_ZX_YG   ;判断是读485表还是脉冲表
                    LCALL   TERMINAL_CONNECT_485METER                 ;采集器与485表通信.
                    JNB     TERMINAL_METER485_CONNECT_OK,FALSE_RETURN5;判断采集终端与485表通信成功否?
                    CLR     TERMINAL_METER485_CONNECT_OK              ;清此标志位
                    LCALL   SEND_ONE_FRAMES_ACK                       ;发送读回应帧到集中器
                    MOV     DPTR,#RS485_LAST_MONTH_ZA_ENERGY          ;485表存贮区上月正向有功首地址
                    LCALL   SAVE_METER485_VAR                         ;通信成功,存储读出的485电表参数
                    LJMP    READ_FRAMES_OVER                          ;结束
FALSE_RETURN5:
                    MOV     DPTR,#RS485_LAST_MONTH_ZA_ENERGY      ;485表存贮区上月正向有功首地址
                    JMP     MAKE_LAST_ZX_YG_FRAMES                ;把当前485表正向有功形成回应帧发送给集中器
READ_PULSE_LAST_ZX_YG:
                    MOV     DPTR,#PULSE_LAST_MONTH_ENERGY         ;脉冲表上月电量首地址
MAKE_LAST_ZX_YG_FRAMES:
                    LCALL   READ_FRAMES_ACK                       ;读上月正向有功回应帧
LZY_READ_METER485_OVER:
                    AJMP    READ_LAST_YG_ERR
;上月反向有功:数据标识:DI1:94,DI0:20-------------------------
READ_LAST_FX_YG:
                    CJNE    A,#20H,READ_LAST_YG_ERR                   ;判断是反向有功否
                    LCALL   JUDGE_WHAT_KIND_RAT_OR_VAR                ;判断为何种费率
                    JNB     PULSE_OR_485METER,READ_PULSE_LAST_FX_YG   ;判断是读485表还是脉冲表
                    LCALL   TERMINAL_CONNECT_485METER                 ;采集器与485表通信.
                    JNB     TERMINAL_METER485_CONNECT_OK,FALSE_RETURN6;判断采集终端与485表通信成功否?
                    CLR     TERMINAL_METER485_CONNECT_OK              ;清此标志位
                    LCALL   SEND_ONE_FRAMES_ACK                       ;发送读回应帧到集中器
                    MOV     DPTR,#RS485_LAST_MONTH_FA_ENERGY          ;485表存贮区上月反向有功首地址
                    LCALL   SAVE_METER485_VAR                         ;通信成功,存储读出的485电表参数
                    LJMP    READ_FRAMES_OVER                          ;结束
FALSE_RETURN6:
                    MOV     DPTR,#RS485_LAST_MONTH_FA_ENERGY      ;485表存贮区上月反向有功首地址
                    JMP     MAKE_LAST_FX_YG_FRAMES                ;把当前485表反向有功形成回应帧发送给集中器
READ_PULSE_LAST_FX_YG:
                    MOV     DPTR,#PULSE_LAST_MONTH_ENERGY         ;脉冲表上月电量首地址
MAKE_LAST_FX_YG_FRAMES:
                    LCALL   READ_FRAMES_ACK                       ;读上月反向有功回应帧
READ_LAST_YG_ERR:
                    LJMP    READ_FRAMES_OVER                      ;结束帧处理
;------------------------------------
;读上月无功电量
READ_LAST_WG:
                    CJNE    A,#95H,READ_LAST_LAST_YG              ;判断是上月无功否?
                    MOV     A,DATA_DI0                            ;是上月无功,再判断是正向还是反向
                    ANL     A,#0F0H                               ;屏蔽掉低4位
;上月正向无功:数据标识:DI1:95,DI0:10---------------------------
READ_LAST_ZX_WG:
                    CJNE    A,#10H,READ_LAST_FX_WG                ;判断是正向无功否
                    LCALL   JUDGE_WHAT_KIND_RAT_OR_VAR            ;判断为何种费率
                    JNB     PULSE_OR_485METER,READ_PULSE_LAST_ZX_WG;判断是读485表还是脉冲表
                    LCALL   TERMINAL_CONNECT_485METER                 ;采集器与485表通信.
                    JNB     TERMINAL_METER485_CONNECT_OK,FALSE_RETURN7;判断采集终端与485表通信成功否?
                    CLR     TERMINAL_METER485_CONNECT_OK              ;清此标志位
                    LCALL   SEND_ONE_FRAMES_ACK                       ;发送读回应帧到集中器
                    MOV     DPTR,#RS485_LAST_MONTH_ZR_ENERGY          ;485表存贮区上月正向无功首地址
                    LCALL   SAVE_METER485_VAR                         ;通信成功,存储读出的485电表参数
                    LJMP    READ_FRAMES_OVER                          ;结束
FALSE_RETURN7:
                    MOV     DPTR,#RS485_LAST_MONTH_ZR_ENERGY      ;485表存贮区上月正向无功首地址
                    JMP     MAKE_LAST_ZX_WG_FRAMES                ;把当前485表正向无功形成回应帧发送给集中器
READ_PULSE_LAST_ZX_WG:
                    MOV     DPTR,#PULSE_LAST_MONTH_ENERGY         ;脉冲表上月电量首地址
MAKE_LAST_ZX_WG_FRAMES:
                    LCALL   READ_FRAMES_ACK                       ;读上月正向无功回应帧
LZW_READ_METER485_OVER:
                    AJMP    READ_LAST_WG_ERR
;上月反向无功:数据标识:DI1:95,DI0:20------------------------------
READ_LAST_FX_WG:
                    CJNE    A,#20H,READ_LAST_WG_ERR               ;判断是反向无功否
                    LCALL   JUDGE_WHAT_KIND_RAT_OR_VAR            ;判断为何种费率
                    JNB     PULSE_OR_485METER,READ_PULSE_LAST_FX_WG;判断是读485表还是脉冲表
                    LCALL   TERMINAL_CONNECT_485METER                 ;采集器与485表通信.
                    JNB     TERMINAL_METER485_CONNECT_OK,FALSE_RETURN8;判断采集终端与485表通信成功否?
                    CLR     TERMINAL_METER485_CONNECT_OK              ;清此标志位
                    LCALL   SEND_ONE_FRAMES_ACK                       ;发送读回应帧到集中器
                    MOV     DPTR,#RS485_LAST_MONTH_FR_ENERGY          ;485表存贮区上月反向无功首地址
                    LCALL   SAVE_METER485_VAR                         ;通信成功,存储读出的485电表参数
                    LJMP    READ_FRAMES_OVER                          ;结束
FALSE_RETURN8:
                    MOV     DPTR,#RS485_LAST_MONTH_FR_ENERGY      ;485表存贮区上月反向无功首地址
                    JMP     MAKE_LAST_FX_WG_FRAMES                ;把当前485表上月反向无功形成回应帧发送给集中器
READ_PULSE_LAST_FX_WG:
                    MOV     DPTR,#PULSE_LAST_MONTH_ENERGY         ;脉冲表上月电量首地址
MAKE_LAST_FX_WG_FRAMES:
                    LCALL   READ_FRAMES_ACK                       ;读上月反向无功回应帧
READ_LAST_WG_ERR:
                    LJMP    READ_FRAMES_OVER                      ;结束帧处理
;------------------------------------
;读上上月有功电量;485表内部没有上上月电量.
READ_LAST_LAST_YG:
                    CJNE    A,#98H,READ_LAST_LAST_WG           ;判断是上上月有功否?
                    MOV     A,DATA_DI0                         ;是上上月有功,再判断是正向还是反向
                    ANL     A,#0F0H                            ;屏蔽掉低4位
;上上月正向有功:数据标识:DI1:98,DI0:10---------------------------
READ_LAST_LAST_ZX_YG:
                    CJNE    A,#10H,READ_LAST_LAST_FX_YG                   ;判断是正向有功否
                    LCALL   JUDGE_WHAT_KIND_RAT_OR_VAR                    ;判断为何种费率
                    JNB     PULSE_OR_485METER,READ_PULSE_LAST_LAST_ZX_YG  ;判断是读485表还是脉冲表
                    MOV     DPTR,#RS485_LAST_LAST_ZA_ENERGY    ;485表存贮区上上月正向有功首地址
                    JMP     MAKE_LAST_LAST_ZX_YG_FRAMES        ;把当前485表上上月正向有功形成回应帧发送给集中器
READ_PULSE_LAST_LAST_ZX_YG:
                    MOV     DPTR,#PULSE_LAST_LAST_ENERGY       ;脉冲表上上月电量首地址

⌨️ 快捷键说明

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