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

📄 alm8.asm

📁 视频监控数字报警控制箱原代码
💻 ASM
字号:


             	ORG  	0000H

           		JMP    	START

             	ORG  	000BH                   ;定时器0中断入口地址
           		
				JMP    	START

             	ORG  	0023H                   ;串口中断入口地址

           		JMP   	RSLINK                  ;串行通讯子程序

             	ORG   	0100H                  	;主程序
//**********************************//
//         初始化
//**********************************//
START:
		MOV   	SP,    	#56H              ;堆栈指针
        MOV   	P1,    	#00H              ;P1口-P2口清零
        MOV   	P2,    	#00H
        MOV   	IE,    	#80H
        MOV   	SCON,  	#050H             ;串行接收方式1,SM2=0
        MOV   	TMOD,  	#20H              ;T1为方式2,T0为方式0
        MOV   	TH1,   	#0FDH
        MOV   	TL1,   	#0FDH
        SETB  	TR1                      ;T1启动
        CLR   	ET0                      ;T0开中断
        CLR   	TR0                      ;T0启动
        MOV   	R3,     #07H             ;记录状态赋初值
        MOV   	R7,     #80H
REL1:   MOV   	A,      R3
        ADD   	A,      #30H
        MOV   	R1,     A
        MOV   	@R1,    #00H
        MOV   	A,      R3
        ADD   	A,      #40H
        MOV   	R1,     A
        MOV   	A,      R7
        MOV   	0A6H,   #01EH              
        MOV   	0A6H,   #0E1H
        RL    	A
        MOV   	R7,     A
        MOV   	@R1,    A
        MOV   	A,      R3
        ADD   	A,      #01H
        DEC   	A
        JZ    	REL2
        DEC   	R3
        JMP  	REL1
REL2:   SETB   	P3.2
        MOV   	R3,     #00H
        CALL  	SEND_ASK
        MOV   	8EH,   #00H
        MOV   	0A6H,  #01EH
        MOV   	0A6H,  #0E1h 
;*********************************
;      监控循环体
;*********************************
MAIN:      MOV   P0,     #0FFH
           MOV   50H,    #07EH            ;本机地址存入50H单元
           CLR   RI
           CLR   TI
           SETB  EA
           SETB  ES                       ;串行开中断
          
           MOV   A,  10H
           CJNE  A, #00H, NO_0
           JMP   NO_11
NO_0:      DEC   A
           MOV   10H, A
NO_11:     MOV   A,   11H
           CJNE  A,  #00H, NO_1
           JMP   NO_12
NO_1:      DEC   A
           MOV   11H,   A
NO_12:     MOV   A,     12H
           CJNE  A,  #00H, NO_2
           JMP   NO_13
NO_2:      DEC   A
           MOV   12H,   A
NO_13:     MOV   A,     13H
           CJNE  A,  #00H, NO_3
           JMP  NO_14
NO_3:      DEC A
           MOV   13H,   A
NO_14:     MOV   A,     14H
           CJNE  A,  #00H, NO_4
           JMP  NO_15
NO_4:      DEC A
           MOV   14H,   A
NO_15:     MOV   A,     15H
           CJNE  A,  #00H, NO_5
           JMP  NO_16
NO_5:      DEC A
           MOV   15H,   A
NO_16:     MOV   A,   16H
           CJNE  A,  #00H, NO_6
           JMP  NO_17
NO_6:      DEC A
           MOV   16H,   A
NO_17:     MOV   A,     17H
           CJNE  A,  #00H, NO_7
           JMP  SCANSTART
NO_7:      DEC A
           MOV   17H,   A

SCANSTART: MOV   R1,    #08H              ;扫描开始 8-1
DEC1:      DEC   R1
           MOV   A,     P1
           ANL   A,     #0F8H             ;P1低三位清零
           ADD   A,     R1                ;与扫描地址合成
           MOV   P1,    A
           CALL TIMER1
           JNB   P3.2,  ALARM1             ;转报警处理
MAIN_LOOP1:CJNE  R1,    #00H,   DEC1       ;是否循环完
           INC   R3
           CJNE  R3,   #08H,  MAIN_C
           MOV   R3,   #00H
           MOV   0A6H, #01EH
           MOV   0A6H, #0E1H 
           CPL   P1.5                     ;看门狗
MAIN_C:    JMP  MAIN

ALARM1:    JMP  ALARM
;***********************************
;           报警处理程序
;***********************************
           ORG     0200H

ALARM:     MOV   0A6H, #01EH
           MOV   0A6H, #0E1H 
           MOV   A,      R1

           ADD   A,      #10H
           MOV   R0,     A
           CJNE  @R0,  #00H,  ALARM_1
           MOV   @R0,   #1FH

           MOV   A,      R1
           ADD   A,      #30H
           MOV   R2,     A             ;路数
           MOV   R0,     A
           CJNE  @R0,    #01H,   ALARM_1
           ADD   A,      #10H
           MOV   R0,     A
           MOV   A,      @R0
           ORL   P2,     A
           SETB  P1.7
           CALL  SEND
ALARM_1:   JMP  MAIN_LOOP1


;*************************************
;        串行通讯中断子程序
;*************************************

RSLINK:        PUSH   DPH
               PUSH   DPL
               PUSH   PSW
               JNB    RI,    RSLINK_RET2
               CLR    RI
               CLR    ES
               CPL    P1.5
               MOV   0A6H, #01EH
               MOV   0A6H, #0E1H 
               MOV    A,     SBUF
               CJNE   A,    50H,   RSLINK_RET2
RSLINK_SELFR1: JNB    RI,   RSLINK_SELFR1
               MOV    A,    SBUF
               CLR    RI
               MOV    51H,   A                ;指令存入51H
RSLINK_SELFR2: JNB    RI,   RSLINK_SELFR2
               MOV    A,    SBUF
               CLR    RI
               MOV    52H,  A                ;操作数存入52H
RSLINK_SELFR3: JNB    RI,    RSLINK_SELFR3
               MOV    A,     SBUF
               CLR    RI
               CJNE   A,      #022H,   RSLINK_RET2   ;非结束码退出
               MOV    A,      51H                    ;取出指令
               CJNE   A,     #026H,   RSLINK_SJC     ;是否单布防
               MOV    A,     52H
               MOV    R0,    52H
               MOV    @R0,   #01H
RSLINK_RET2:   JMP   RSLINK_RET1
RSLINK_SJC:    CJNE   A,     #028H,   RSLINK_BUFANG   ;输出单解除
               JMP   SINGJIECHU
RSLINK_BUFANG: CJNE   A,     #02AH,   CHEFANG         ;是否全布防
               MOV    30H,   #01H                     ;记录状态
               MOV    31H,   #01H
               MOV    32H,   #01H
               MOV    33H,   #01H
               MOV    34H,   #01H
               MOV    35H,   #01H
               MOV    36H,   #01H
               MOV    37H,   #01H
               JMP   RSLINK_RET1
CHEFANG:   CJNE   A,     #023H,   CLSALARM   ;是否全撤防
           MOV    30H,   #00H                ;记录状态
           MOV    31H,   #00H
           MOV    32H,   #00H
           MOV    33H,   #00H
           MOV    34H,   #00H
           MOV    35H,   #00H
           MOV    36H,   #00H
           MOV    37H,   #00H
           JMP   RSLINK_RET2
CLSALARM:  CJNE   A,     #025H,   XIAOYIN     ;是否解除
           MOV    P2,    #00H
           JMP   RSLINK_RET2
XIAOYIN:   CJNE   A,     #02FH,   RSLINK_BYPS        ;是否消音
           CLR    P1.7
           JMP   RSLINK_RET2
RSLINK_BYPS:CJNE   A,     #024H,   RSLINK_INSET     ;是否旁路
           MOV     A,     52H
           MOV    R0,    52H
           MOV    @R0,   #00H
           JMP   RSLINK_RET1
RSLINK_INSET:MOV   0A6H, #01EH
             MOV   0A6H, #0E1H 
             CJNE   A,     #02BH,   RSLINK_OUT14   ;是否报警输入设置
             MOV    53H,    52H            ;保存输入通道数
             JMP   RSLINK_RET1
RSLINK_OUT14:CJNE   A,   #02CH,  RSLINK_OUT58 ;是否报警输出OUT1-OUT4设置
             JMP   OUT14SET
RSLINK_OUT58:CJNE   A,   #02DH, RSLINK_OUT912 ;是否报警输出OUT5-OUT8设置
             JMP   OUT58SET
RSLINK_OUT912:CJNE   A,  #29H,  RSLINK_OUT1316 ;是否报警输出OUT9-0UT12设置
              JMP   OUT912SET
RSLINK_OUT1316:CJNE   A,    #02EH,  RSLINK_RET1 ;是否报警输出OUT13-16设置
              JMP   OUT1316SET
RSLINK_RET1:  MOV   0A6H, #01EH
              MOV   0A6H, #0E1H 
              POP    PSW
              POP    DPL
              POP    DPH
              CLR    RI
              SETB   ES
              CPL    P1.5
              MOV   0A6H,   #01EH              
              MOV   0A6H,   #0E1H
              RETI

OUT14SET:  MOV    A,      52H
           ANL    A,     #0FH            ;取出out1-out4
           SWAP   A
           ANL    54h,   #0FH
           ADD    A,     54H              ;替换54h高四位
           MOV    54H,   A                ;保存输出通道数
           MOV    A,     53H
           ADD    A,     #010H
           MOV    R0,    A
           MOV    @R0,   54H
           JMP   RSLINK_RET1
OUT58SET:  MOV     A,     52H
           ANL    A,     #0FH            ;取出out5-out8
           ANL    54h,   #0F0H           ;保持54h高四位不变
           ADD    A,     54H              ;替换54h低四位
           MOV    54H,   A                ;保存输出通道数
           MOV    A,     53H
           ADD    A,     #10H
           MOV    R0,    A
           MOV    @R0,   54H
           JMP   RSLINK_RET1
OUT912SET: JMP   RSLINK_RET1

OUT1316SET:JMP   RSLINK_RET1

SINGJIECHU:MOV    A,     52H
           CJNE   A,     #30H,   E1
           CLR    P2.7
           JMP   RSLINK_RET1
E1:        CJNE   A,     #31H,   E2
           CLR    P2.6
           JMP   RSLINK_RET1
E2:        CJNE   A,     #32H,   E3
           CLR    P2.5
           JMP   RSLINK_RET1
E3:        CJNE   A,     #33H,   E4
           CLR    P2.4
           JMP   RSLINK_RET1
E4:        CJNE   A,     #34H,   E5
           CLR    P2.3
           JMP   RSLINK_RET1
E5:        CJNE   A,     #35H,   E6
           CLR    P2.2
           JMP   RSLINK_RET1
E6:        CJNE   A,     #36H,   E7
           CLR    P2.1
           JMP   RSLINK_RET1
E7:        CJNE   A,     #37H,   E8
           CLR    P2.0
E8:        JMP   RSLINK_RET1

;********************************************
;          报警发送子程序
;********************************************
          ORG    0620H

SEND:      SETB   P1.4
           MOV    A,      #040H
           MOV    SBUF,   A               ;发送@码
          
SEND_selfe1:JNB   TI,    SEND_SELFE1
           CLR    TI
           MOV    A,     50H
           MOV    SBUF ,  A               ;发送本机地址
           
SEND_selfe2:JNB   TI,    SEND_SELFE2
           CLR    TI
           MOV    A,      R2
           MOV    SBUF,   A               ;发送报警防区号
          
SEND_selfe3:JNB   TI,     SEND_SELFE3
           CLR    P1.4
           CLR    TI
           CLR    RI
           RET

;***************************************
;          开机复位回传' ' '
;***************************************
SEND_ASK:  SETB   P1.4
           CALL  TIMER1
           MOV    A,      #027H
           MOV    SBUF,   A
          
SEND1_selfe1:JNB  TI,    SEND1_SELFE1
           CLR    TI
           MOV    A,      #027H
           MOV    SBUF,   A
          
SEND1_selfe2:JNB  TI,     SEND1_SELFE2
           CLR    TI
           MOV    A,     #027H
           MOV    SBUF,  A
           
SEND1_SELFE3:JNB  TI,    SEND1_SELFE3
           CLR    P1.4
           CLR    TI
           CLR    RI
           RET
;**************************************
;         OK
;**************************************

SENDOK:    SETB   P1.4
           CALL  TIMER1
           MOV    A,      #06FH
           MOV    SBUF,   A
selfeOK1:  JNB    TI,    SELFEOK1
           CLR    TI
           MOV    A,      #06FH
           MOV    SBUF,   A
selfeOK2:  JNB    TI,    SELFEOK2
           CLR    TI
           MOV    A,    #06FH
           MOV    SBUF,  A
SELFEOK3:  JNB    TI,    SELFEOK3
           CLR    P1.4
           CLR    TI
           CLR    RI
           RET

;************************************
;             延时子程序
;************************************

TIMER1:    MOV    R6,     #040H
           MOV    R5,     #0A0H
WAIT0:     NOP
           NOP
           MOV   0A6H, #01EH
           MOV   0A6H, #0E1H 
           DJNZ   R5 ,    WAIT0
WAIT:      NOP
           NOP
           CLR    RI
           SETB   ES
           DJNZ   R6,     WAIT
           MOV   0A6H, #01EH
           MOV   0A6H, #0E1H 
           RET

TIMER2:    MOV    R4,     #01aH
WAIT2:     LCALL  TIMER1
           CLR    RI
           SETB   ES
           MOV   0A6H, #01EH
           MOV   0A6H, #0E1H 
           DJNZ   R4,     WAIT2
           RET

           END


⌨️ 快捷键说明

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