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

📄 从控测试程序.asm

📁 一卡通源码程序是我公司的一卡通源码程序,绝对难得
💻 ASM
📖 第 1 页 / 共 5 页
字号:
                clr       f_30s                 ;  0.5秒  初始化  =0开蜂鸣器 . =1 关蜂鸣器
             ;   clr       line_beep             ; 有位数=1  就开蜂鸣器
                mov       shi_j,#0              ;  让时间位从0开始加   一直加到  add_r
add_7:
                jnb        f_30s,add_8          ; =0开蜂鸣器 . =1 关蜂鸣器
                setb       line_beep
                sjmp       add_9
add_8:          clr        line_beep            ; =0开蜂鸣器 . =1 关蜂鸣器
add_9:          mov       a,shi_j

                cjne      a,add_r,add_6
add_6:          jc       add_7                  ;shi_j  <add_r    就返回继续加
                setb      line_beep             ;   等于的话   就关蜂鸣器



add_5:
;-----------------------------------------------z          3、测试AT24C16的好坏
                ;mov       a,shi_j               ; 时间秒计数单元的随即数
                ;lcall     WriteEEFlag           ;向   AT24C16 中写系统初始化标志
                LCALL CheckEEFlag               ; 判断系统标志     C=0系统真确
		JNC   at24_1                    ;好的话跳走
                mov   shi_j,#0
		clr   LINE_BEEP                 ;蜂鸣器长鸣叫 5秒钟
at24_3:         mov   a,shi_j
                cjne  a,#2,at24_2
at24_2:         jc    at24_3                    ;小于5秒蜂鸣器   继续鸣叫。
                setb  line_beep                 ;到5秒关蜂鸣器。
at24_1:
              
                mov r1,#16
                mov  a,#0
maichong:       
                mov dptr,#pp_buf    ;clr 16 pulse
                movx @dptr,a
                inc dptr
                djnz r1,maichong
;---------------MasterRelay OUTPOT RESET--------
                mov r1,#16
 xx1:           mov a,r1
                dec a
                LCALL     MasterRelayOpenRelease     ;将主继电器开置0        
		LCALL     MasterRelayCloseRelease    ;将主继电器关置0
                djnz r1,xx1
                 mov r1,#16
 xx2:           mov a,r1
                dec a
                LCALL     slaveRelayOpenRelease     ;将主继电器开置0        
		LCALL    slaveRelayCloseRelease    ;将主继电器关置0
                djnz r1,xx2
;---------------将主继电器的开关都置0-----------
                mov   shi_j,#0
                
	aaaaa:	MOV	  R1,#16
MN_01:
                MOV	  A,R1
		DEC	  A
                mov  r5,#5
                mov  r4,#00
f_1_1:          lcall  MasterRelayOpenPress;
               
                djnz r4,f_1_1
                djnz r5,f_1_1
              ; mov a,shi_j
              ; cjne a,100,f_1_1_t
 f_1_1_t:    ;  jc    f_1_1          
              ; mov  shi_j,#0
              ; clr c
                mov  r5,#5
                mov  r4,#00
f_1_1_1:        LCALL     MasterRelayOpenRelease     ;将主继电器开置0
                mov a,shi_j
             ;  cjne a,150,f_1_1_1_t
f_1_1_1_t:    ; jc   f_1_1_1
               
                djnz r4,f_1_1_1
                djnz r5,f_1_1_1
                djnz r1,mn_01
                ;;;;;;;;;;;;;;;
                mov r1,#16     
                
 MN_01_2:
                MOV	  A,R1
		DEC	  A
                mov  r5,#5
                mov  r4,#00
f_1_2:          lcall  MasterRelayClosePress;
                djnz r4,f_1_2
                djnz r5,f_1_2
                mov  r5,#5
                mov  r4,#00
f_1_2_1:        LCALL     MasterRelayOpenRelease     ;将主继电器开置0
                djnz r4,f_1_2_1
                djnz r5,f_1_2_1
                djnz r1,mn_01_2
                ;;;;;;;;;;;;;;;
                
                mov r1,#16
 mn_01_3 :               
                mov  a,r1
                dec a
                mov  r5,#5
                mov  r4,#00
f_1_3:          lcall  SlaveRelayOpenPress
                djnz r4,f_1_3
                djnz r5,f_1_3
                mov  r5,#5
                mov  r4,#00
f_1_3_1:        LCALL     MasterRelayOpenRelease     ;将主继电器开置0                         
                djnz r4,f_1_3_1
                djnz r5,f_1_3_1
                djnz r1,mn_01_3
                ;;;;;;;;;;;;;;
                 mov r1,#16
 mn_01_4 :               
                mov  a,r1
                dec a
                mov  r5,#5
                mov  r4,#00                        
                                         
                                         
f_1_4:          lcall  SlaveRelayClosePress
                djnz r4,f_1_4
                djnz r5,f_1_4
                mov  r5,#5
                mov  r4,#00 
f_1_4_1:      	LCALL     MasterRelayOpenRelease     ;将主继电器开置0
                djnz r4,f_1_4_1
                djnz r5,f_1_4_1
                djnz r1,mn_01_4
        ;	LCALL     MasterRelayOpenRelease     ;将主继电器开置0        
	;	LCALL     MasterRelayCloseRelease    ;将主继电器关置0
	;	在INCPOINT 中只要有脉冲就把脉冲pp_buf置为1,160 变为1 pp_buf
               ; mov r1,#16
                ;MOV     R5,ADDRESS          ; R5中存放校验和 从本机地址开始
                mov r1,#16
 maichongx:     mov dptr,#pp_buf    ;clr 16 pulse
                movx a,@dptr
                inc dptr
                djnz r1,maichongx       
                
                mov a,#14h    ;minglingzi 
                LCALL	SendData
                mov a,#20                    ;comm_length
                mov  r2,#0
                mov r2,a                     ;r2 chy
                LCALL	SendData
                add a,r2
                mov r2,a
                MOV     A,ADDRESS
		LCALL	SendData
                add a,r2
                mov r2,a
                mov r1,#16        ;16 pulse buffer
 maichong1:     mov dptr,#pp_buf    ;clr 16 pulse
                movx a,@dptr
                LCALL	SendData
                add a,r2
                mov r2,a
                inc dptr
                djnz r1,maichong1
                cpl a
                add a,#1
                LCALL	SendData
                CLR	  RS485_TR             ; 184设置成接收数据状态
                
                                        ljmp  aaaaa
;---------------内扩SRAM中电表读数初始化0.0 00 AA AA AA--------
                LCALL     FullPoint

;---------------EEPROM OPERATIONS------------------------------
		LCALL CheckEEFlag               ; 判断系统标志     C=0系统真确
		JNC   MNEE_OK
		SJMP  MNSVR_FALSE

MNEE_OK:        LCALL   ReadServer              ; 判断系统ID   =0真确
                JZ      MNSVR_OK
                SJMP    MNSVR_FALSE

MNSVR_OK:
                MOV     A,ADDRESS
                CJNE    A,ADDR,MNSVR_FALSE      ; 判断本从控地址和上次运行时候的地址是否一致
                SJMP    MN_START

MNSVR_FALSE:
                LCALL   WriteBegin              ; 系统ID读取出错 || 本机地址和上次不一致,则初始化系统参数

MN_START:
		MOV	TMOD,#11H

                MOV     TH0,#0B8H
                MOV     TL0,#03H                ; 10MS,22.1184MHZ
		SETB	TR0
		SETB	ET0



                MOV     TH1,#0DCH
                MOV     TL1,#00H                ; 5MS,22.1184MHZ

                SETB	TR1
                SETB    PT1
                CLR     ET1
		SETB	ET1

		MOV	SCON,#0F0H
		SETB	ES

		SETB	EA


		MOV	TH2,#0FFH
		MOV	TL2,#0B8H		; 9600BPS,22.1184MHz

		MOV	RCAP2H,TH2
		MOV	RCAP2L,TL2
		MOV	T2CON,#30H
		SETB	TR2
                ret  ;z
             ;   setb     FLAG_START;

MN_MN:          CPL	 WDI                    ; WATCHDOG RESET
                LCALL    Start                  ; 检测系统执行标志   判断系统是否运行
                LCALL    CHECK_PW_CNT           ; 检测实时功率保存单元计数有无超时超时将电表当前信息当中的当前功率=0
                LCALL    RELAYOPTION            ; 调用继电器开/关操作子程序
                LCALL    BIHUANJIANCE           ; 闭环检测
                LCALL    CLEARFLAG              ;

                JNB      F_1M,MN_MN             ;1分钟标志  =1时 到一分钟
                LCALL    SHARELIMITCP           ; 分时间段限制电流比较
		SJMP	 MN_MN




;---------------------------------------
;          功能:初始化系统参数
;---------------------------------------
WriteBegin:
		MOV	 CURR_MRY00,#0FFH
		MOV	 CURR_MRY01,#0FFH
		MOV      CURR_MRY10,#0FFH
		MOV	 CURR_MRY11,#0FFH       ; 主继电器当前状态

                MOV      CTRL_MRY00,#0FFH
                MOV      CTRL_MRY10,#0FFH
                MOV      CTRL_MRY01,#0FFH
                MOV      CTRL_MRY11,#0FFH       ; 主继电器存储状态

		MOV	 CURR_SRY00,#0FFH
		MOV	 CURR_SRY01,#0FFH
		MOV      CURR_SRY10,#0FFH
		MOV	 CURR_SRY11,#0FFH       ; 从继电器存储状态

		LCALL	 WriteCurrRelay         ; 初始化主继电器和从继电器的状态

                ; 初始化跳电关断时间
		MOV	 DPTR,#CLOSE_TIME
                MOV      A,#DEF_CT              ;关断时间为3分钟
                MOV      R7,#16
WTB_0:          MOVX     @DPTR,A
                INC      DPTR
                DJNZ     R7,WTB_0
 		LCALL	 WriteCloseTime

                ; 初始化限制电流
		MOV	 DPTR,#LIMIT_PP
                MOV      A,#DEF_CURR*LMT_VAL    ;30*6=180
                MOV      R7,#16
WTB_1:          MOVX     @DPTR,A
                INC      DPTR
                DJNZ     R7,WTB_1
                LCALL	 WriteLimitPP

                ; 初始化多费率时间表
		MOV	 DPTR,#RATE_BUF
                MOV      A,#0AAH
                MOV      R7,#81
WTB_2:          MOVX     @DPTR,A
                INC      DPTR
                DJNZ     R7,WTB_2
 	        LCALL	 WriteRate

                ; 写系统初始化标志
		LCALL	 WriteEEFlag

                ; 将EEPROM中的电表读数FF
                LCALL    RESETPOINT

                ; 初始化恶意负载的识别功率
                MOV     R0,#SBLC_LIMIT
                MOV     R7,#16
                MOV     A,#SBLC_WD    ; 默认软件恶意负载识别功率(12,600W)
WTB_3:          MOV     @R0,A
                INC     R0
                DJNZ    R7,WTB_3
                LCALL   WriteEEBadcode;

                ; 初始化功率识别屏蔽区间
                LCALL   ResetOutCode

                ;初始化恶意负载识别功能标志 defualt 起用
                LCALL   ResetBadFlag

                ;初始化分时间段限制电流
                LCALL   ResetShareLimit      ;64字节的时间段AAH,16字节的电流240
                RET
                ;---------------------------------------------------

Start:         ;主写系统ID真确的时候才有可能运行T1
                JB       FLAG_START,ST_00       ; 判断系统运行标志=1系统运行    只有在写系统ID的时候才=1
                RET

ST_00:          JB       SYS_ERR,SYSTEM_ERR     ; 本机存放的系统信息和接收到的系统信息不一致标志
                                                ;只有在写系统ID的时候才有可能=1   系统标志出错
                AJMP     SYSTEM_OK

SYSTEM_ERR:     LCALL    RESETPOINT             ; 系统信息出错,复位电表读数

SYSTEM_OK:
                CLR     FLAG_START              ;运行过一次后将系统运行标志=0下次不在运行到这里

		LCALL	ReadCurrRelay           ; 读取系统断电时候的继电器状态
		LCALL	ReadCloseTime           ; 读取系统过流后的关断时间
		LCALL	ReadLimitPP             ; 读取系统的限制电流
		LCALL	ReadAllPoint            ; 读取电表读数
                LCALL   ReadEEBadcode           ; 读取恶意负载识别功率
                LCALL   ReadRate                ; 读取多费率时间段
                LCALL   ReadOutCode             ; 读取功率识别屏蔽区间
                LCALL   ReadBadFlag             ; 读取恶意负载识别标志
                LCALL   ReadSHARELIMIT          ; 读取分时间段限制电流
    	        SETB	BEEP_EN                 ;beep允许叫标志   =1时允许鸣叫    T1中开系统鸣叫5次

;---------------CURREN MasterRelay RELOADS------------------
;---------------根据主继电器状态 置开、关标志   0F0H开  0E0H关----------
		MOV	A,CURR_MRY00
		CJNE 	A,CURR_MRY10,STRY_ERR
		MOV	A,CURR_MRY01
		CJNE 	A,CURR_MRY11,STRY_ERR
		SJMP 	STRY_OK

STRY_ERR:
                LCALL	ReadCurrRelay

STRY_OK:
		MOV	A,CURR_MRY00
		MOV	B,A
		SETB	C
		CLR	A
		MOV	R5,#0
		MOV	R7,#8

STRY_M01:
                RLC	A
		PUSH	ACC
		ANL	A,B
		JZ	STRY_M02
		MOV	A,R5
		LCALL	OpenMasterRelay

                MOV     DPTR,#METER_INF                 ; 电表当前信息首地址
                PUSH    B          ; 电表当前信息,主继电器状态、从继电器状态、当前功率、跳电电流、跳电功率80byte
                MOV     B,#5
                MUL     AB
                ADD     A,DPL
                MOV     DPL,A
                MOV     A,B
                ADDC    A,DPH
                MOV     DPH,A                           ; 计算指定地址
                POP     B

                MOV     A,#10000000B
                MOVX    @DPTR,A                   ;80H开

		SJMP	STRY_M03

STRY_M02:
                MOV	A,R5
		LCALL	CloseMasterRelay

                PUSH    B
                MOV     DPTR,#METER_INF                 ; 电表当前信息首地址
                MOV     B,#5
                MUL     AB
                ADD     A,DPL
                MOV     DPL,A
                MOV     A,B
                ADDC    A,DPH
                MOV     DPH,A                           ; 计算指定地址
                POP     B

                MOV     A,#10000011B                    ;83H关
                MOVX    @DPTR,A
STRY_M03:
    	        INC	R5
		POP	ACC
		CLR	C
		DJNZ	R7,STRY_M01


		MOV	A,CURR_MRY01
		MOV	B,A
		SETB	C
                CLR     A
		MOV	R5,#8
		MOV	R7,#8

STRY_M11:
                RLC	A
		PUSH	ACC
		ANL	A,B
		JZ	STRY_M12
		MOV	A,R5
		LCALL	OpenMasterRelay

                PUSH    B
                MOV     DPTR,#METER_INF                 ; 电表当前信息首地址
                MOV     B,#5
                MUL     AB
                ADD     A,DPL
                MOV     DPL,A
                MOV     A,B
                ADDC    A,DPH
                MOV     DPH,A                           ; 计算指定地址
                POP     B

                MOV     A,#10000000B
                MOVX    @DPTR,A

		SJMP	STRY_M13

STRY_M12:
                MOV	A,R5
		LCALL	CloseMasterRelay
                PUSH    B
                MOV     DPTR,#METER_INF                 ; 电表当前信息首地址
                MOV     B,#5
                MUL     AB
                ADD     A,DPL
                MOV     DPL,A
                MOV     A,B
                ADDC    A,DPH
                MOV     DPH,A                           ; 计算指定地址
                POP     B

⌨️ 快捷键说明

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