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

📄 main.asm

📁 一、 模块功能简介 &nbsp &#1048698 支持串口通信与电力线载波通信之间的转发; &nbsp &#1048698 ZF3106串口‐载波通讯模块可以完成载波信道到TTL串口
💻 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 + -