📄 main.asm
字号:
;************************************************************
;文档类型: 原代码
;项目编号:
;文档编号:
;修订版本:
;生成日期: 07.01.31
;文档作者: DUSONG
;审 核:
;************************************************************
;相关文档: 主程序,规约
;文档编号 说明
;************************************************************
;修订说明:07.01.31 新增功能:(1)可以转发非广播命令的非读/写命令;
; (2)广播命令如果有返回数据可以转发.
;修订版本:V1.1
;修订说明:07.03.29 在使用过程中发现的问题(载波抄表时上电无返回;
; 载波误发表号数据;串口接收后发读继电器命令)。
; 修改:1、主程序不在判断时间就冗余。
; 2、在RAM中表号不对时,如有直抄命令,就用AA补足表号后转发。
; 3、在串口转发后等待3秒,如无数据返回则清除串口等待标志。
; 4、串口接收数据正确后,取反串口指示灯。
;修订版本:V1.2
;修改说明:07.04.29: 在使用过程中发现的问题(载波设置继电器后,抄继电器的状态时
; 不一致)。
; 修改:1、设置后同时读表号和继电器。
;修订版本:V1.7
;修改说明:07.11.21: 抄表后等待3分启动定时读表
; 修改:保存表号后,设置TMR_M1=180
;************************************************************
$INCLUDE (PL3105.INC)
$INCLUDE (CONST.INC)
$INCLUDE (IO.INC)
$INCLUDE (RAML128.INC)
$INCLUDE (RAMH128.INC)
EXTRN CODE (RESET_SYS)
EXTRN CODE (INIT_SYS)
EXTRN CODE (INIT_SYS_REF)
EXTRN CODE (T_PULSE)
EXTRN CODE (hw_rcv)
EXTRN CODE (TRANCIEVE)
EXTRN CODE (MINUTE_CHK)
EXTRN CODE (ZB_DO_WITH)
EXTRN CODE (HW_ZB)
EXTRN CODE (SAVE_DA)
EXTRN CODE (SAVE_ZB_SNO)
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
ORG 0000H
JMP INIT_MAIN
ORG 0003H
JMP RESET_SYS
ORG 000BH ;T0中断
; CALL T_PULSE
JMP T_PULSE
; RETI
JMP RESET_SYS
ORG 0013H
JMP RESET_SYS
ORG 001BH
JMP RESET_SYS
ORG 0023H ;串口0
; CALL HW_RCV
; RETI
JMP HW_RCV
JMP RESET_SYS
ORG 002BH
JMP RESET_SYS
ORG 0033H
JMP RESET_SYS
ORG 003BH ;INT2载波
; CALL TRANCIEVE
; RETI
JMP TRANCIEVE
JMP RESET_SYS
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ORG 0050H
INIT_MAIN:
NOP
NOP
NOP
MOV SP,#SP_ADDR
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
MOV R7,#0 ;确保上电
WAITA:
NOP
MOV SP,#SP_ADDR
MOV R6,#0
WAITB:
NOP
NOP
MOV WDI,#0A1H
MOV A,STATUS
; JNB ACC.0,INIT_MAIN ;无掉电检测
DJNZ R6,WAITB
DJNZ R7,WAITA
NOP
NOP
MOV R0,#0 ;清内部RAM区 256byte
MOV A,#0
CLR_256B:
NOP
MOV @R0,A
INC R0
CJNE R0,#00H,CLR_256B
CALL INIT_SYS ;系统初始化
MOV AA_99_FLAG,#0AAH ;上电后利用AAH读取表号
MOV R0,#RD_BH_TIME
MOV @R0,#3 ;上电后3秒读表号 LIHENG 07-5-12
MOV TMR_M1,#3
NOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN:
NOP
NOP
SETB SOFT_DOG ;置看门狗软标志
; MOV R0,#TMR_TIME
; MOV A,TMR_TIME
; CJNE A,#0,MAIN0 ; 07-3-23 liheng 主循环冗余
CALL INIT_SYS_REF ;系统重新初始化
;--------------------------------------------
MAIN0: MOV A,ZB_OK
CJNE A,#'O',MAIN1 ;接收到成帧载波数据?
MOV EIE,#0
CALL ZB_DO_WITH ;载波数据处理
MOV EIE,#1
MOV ZB_OK,#0
JMP MAIN
;----------------------------------------------
MAIN1:
MOV A,HW_OK
CJNE A,#'H',MAIN3 ;接收到成帧串口数据?
CLR ES
MOV A,ZB_HW
CJNE A,#'O',MAIN2 ;接收到的是载波抄表数据还是每200秒读取表号数据
CALL SAVE_ZB_SNO ; 07-3-23 LIHENG
MOV EIE,#0
CALL HW_ZB ;645数据转换为载波数据
SETB ES
MOV EIE,#1
JB ZB_ERR_SNO,MAIN_ERR
MOV EXT_CFG,#01H ;//070131
; SETB PLM_SSC ;载波发送数据
SETB PLM_RS
MOV PLM_RS0,#'F'
MAIN_ERR: MOV HW_OK,#0
MOV ZB_HW,#0
JMP MAIN
MAIN2:
NOP
NOP
NOP
MOV R0,#MINUTE_OK
CJNE @R0,#55H,MAIN
CALL SAVE_DA ;保存本表表号
SETB ES
MOV HW_OK,#0
MOV ZB_HW,#0
JMP MAIN
;-----------------------------------------------------
MAIN3:
MOV A,ZB_HW
CJNE A,#'O',MAIN4 ;有直抄数据不读取表号
JMP MAIN
MAIN4:
MOV A,ZB_OK
CJNE A,#'O',MAIN5 ;有载波数据不读取表号
JMP MAIN
MAIN5:
MOV R0,#MINUTE
CJNE @R0,#55H,MAIN
CALL MINUTE_CHK ;每3分钟发送数据读取表号或继电器状态
MOV R0,#MINUTE
MOV @R0,#0
JMP MAIN
;***********************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -