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

📄 jdq.bak

📁 本程序为集中抄表系统中低压电力线载波数据采集器程序源代码
💻 BAK
📖 第 1 页 / 共 2 页
字号:
                MOV     JDQ_9_12_STATE,#00H               ;置9-12路继电器状态字为0
                MOV     JDQ_13_16_STATE,#00H              ;置13-16路继电器状态字为0
                LJMP    JUDGE_END                         ;转发送
JUDGE_OPEN_METER9:
                CJNE    A,#9,JUDGE_OPEN_METER10           ;判断是9号表否
                MOV     JDQ_9_12_STATE,#02H               ;置9-12路继电器状态字为02H
                LJMP    SETB_9_12_CHANNEL2                ;转清其它通道值并发送
JUDGE_OPEN_METER10:
                CJNE    A,#10,JUDGE_OPEN_METER11          ;判断是10号表否
                MOV     JDQ_9_12_STATE,#08H               ;置9-12路继电器状态字为08H
                AJMP    SETB_9_12_CHANNEL2                ;转清其它通道值并发送
JUDGE_OPEN_METER11:
                CJNE    A,#11,JUDGE_OPEN_METER12          ;判断是11号表否
                MOV     JDQ_9_12_STATE,#20H               ;置9-12路继电器状态字为20H
                AJMP    SETB_9_12_CHANNEL2                ;转清其它通道值并发送
JUDGE_OPEN_METER12:
                CJNE    A,#12,JUDGE_OPEN_METER13          ;判断是12号表否
                MOV     JDQ_9_12_STATE,#80H               ;置9-12路继电器状态字为80H
SETB_9_12_CHANNEL2:
                MOV     JDQ_1_4_STATE,#00H               ;置1-4路继电器状态字为0
                MOV     JDQ_5_8_STATE,#00H               ;置5-8路继电器状态字为0
                MOV     JDQ_13_16_STATE,#00H             ;置13-16路继电器状态字为0
                LJMP    JUDGE_END                        ;转发送
JUDGE_OPEN_METER13:
                CJNE    A,#13,JUDGE_OPEN_METER14         ;判断是13号表否
                MOV     JDQ_13_16_STATE,#02H             ;置13-16路继电器状态字为02H
                LJMP    SETB_13_16_CHANNEL2              ;转清其它通道值并发送
JUDGE_OPEN_METER14:
                CJNE    A,#14,JUDGE_OPEN_METER15         ;判断是14号表否
                MOV     JDQ_13_16_STATE,#08H             ;置13-16路继电器状态字为08H
                LJMP    SETB_13_16_CHANNEL2              ;转清其它通道值并发送
JUDGE_OPEN_METER15:
                CJNE    A,#15,JUDGE_OPEN_METER16         ;判断是15号表否
                MOV     JDQ_13_16_STATE,#20H             ;置13-16路继电器状态字为20H
                LJMP    SETB_13_16_CHANNEL2              ;转清其它通道值并发送
JUDGE_OPEN_METER16:
                CJNE    A,#16,WR_JDQ_STATE_END           ;判断是16号表否
                MOV     JDQ_13_16_STATE,#80H             ;置13-16路继电器状态字为80H
SETB_13_16_CHANNEL2:
                MOV     JDQ_1_4_STATE,#00H               ;置1-4路继电器状态字为0
                MOV     JDQ_5_8_STATE,#00H               ;置5-8路继电器状态字为0
                MOV     JDQ_9_12_STATE,#00H              ;置9-12路继电器状态字为0
;发送当前所有继电器状态字
JUDGE_END:
                LCALL   SEND_JDQ_STATE                    ;发送3次当前所有继电器状态字
                LCALL   KEEP_JDQ_HIGH
                LCALL   SEND_JDQ_STATE
                LCALL   KEEP_JDQ_HIGH
                LCALL   SEND_JDQ_STATE
                LCALL   KEEP_JDQ_HIGH                     ;使继电器处于高阻状态
WR_JDQ_STATE_END:
                RET
;--------------------------------------------------
;16路继电器状态输出控制子程序
;--------------------------------------------------
;读继电器状态字子程序
READ_JDQ_STATE:
                CPL     WATCH_DOG                                ;清看门狗
		MOV	A,R7                                     ;得出通道号
                ADD     A,#C04_RELAY_STATE_0                     ;得出当前表的继电器状态字的地址
                MOV	DPL,A
                MOV	DPH,#C04_ADDR_H                          ;FM24C04高位控制字
		LCALL	RD_C04_1BYTE
                MOV     A,B                                      ;当前表的继电器状态值
                INC     R7                                       ;下一通道
                RET
;------------------------------------------------
;继电器动作后使1-16路继电器处于高阻状态减少功耗
;------------------------------------------------
KEEP_JDQ_HIGH:
                ACALL   WAIT_5ms
                MOV     JDQ_1_4_STATE,#00H                           ;置1-4路继电器状态字为0
                MOV     JDQ_5_8_STATE,#00H                           ;置5-8路继电器状态字为0
                MOV     JDQ_9_12_STATE,#00H                          ;置9-12路继电器状态字为0
                MOV     JDQ_13_16_STATE,#00H                         ;置13-16路继电器状态字为0
                ACALL   SEND_JDQ_STATE                               ;使所有继电器处于高阻状态减少功耗
                RET
;--------------------------------------------
;16路继电器状态输出控制子程序//04-03-24
SEND_JDQ_STATE:

        MOV R0,#JDQ_1_4_STATE       ;4片74hc595寄存器状态值:
        CLR C
SEND_TIMES:
        MOV R1,#08h                 ;每字节移位8次
        MOV A,@r0
SEND_ONE_OUT:
        RRC A
        MOV SER,C                   ;发送当前位到数据线
        NOP
        NOP
        CLR SRCLK
        NOP
        NOP
        SETB SRCLK
        NOP
        NOP
        DJNZ R1,SEND_ONE_OUT
        INC R0
        CJNE R0,#35H,SEND_TIMES     ;到最后一字节否?
        NOP
        NOP
        SETB SER                             ;发送完毕置数据线状态为高
        SETB SRCLK                           ;时钟线置高禁止发
SEND_ALL_OUT:
        SETB    RCLK                         ;同时输出继电器状态
        ACALL   WAIT_5ms
        SETB    RCLK
        ACALL   WAIT_5ms
        CLR     RCLK                           ;禁止状态输出变化
        CLR     RCLK
        ACALL   WAIT_100ms                     ;脉冲保持100毫秒
        RET
;存储等待延时5ms子程序--------------------------
WAIT_100ms:     MOV     R4,#20                             ;20次5ms延时
WAIT_NEXT:
                ACALL   WAIT_5ms
                DJNZ    R4,WAIT_NEXT
                RET
WAIT_5ms:       MOV     R5,#10                             ;5ms延时
                AJMP    WAIT0
WAIT_FOR_1ms:
                MOV     R5,#1                              ;1ms延时
WAIT0:          MOV     R6,#10
WAIT1:          NOP
                NOP
                DJNZ    R6,WAIT1
                CPL     WATCH_DOG
                DJNZ    R5,WAIT0
                RET

⌨️ 快捷键说明

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