📄 pci_av2.asm
字号:
ORG 0000H
LJMP START
ORG 000BH ;定时器0中断入口地址
LJMP START
ORG 0023H ;串口中断入口地址
LJMP 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启动
SETB ET0 ;T0开中断
SETB 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 TH0, #00H ;T0清零
MOV TL0, #00H
RL A
MOV R7, A
MOV @R1, A
MOV A, R3
ADD A, #01H
DEC A
JZ REL2
DEC R3
LJMP REL1
REL2: SETB P3.2
MOV R3, #00H
LCALL SEND_ASK
;*********************************
; 监控循环体
;*********************************
MOV 20H, #00H ;状态清零
MOV 21H, #00H ;回答记录清零
MOV 22H, #0EFH ;计时赋值
MOV 23H, 22H
MOV 2AH, #00H
MAIN: MOV P0, #0FFH
MOV 50H, #0EFH ;本机地址存入50H单元
CLR RI
CLR TI
SETB EA
SETB ES ;串行开中断
MOV TH0, #00H ;T0清零
MOV TL0, #00H
MOV A, 10H
CJNE A, #00H, NO_0
LJMP NO_11
NO_0: DEC A
MOV 10H, A
NO_11: MOV A, 11H
CJNE A, #00H, NO_1
LJMP NO_12
NO_1: DEC A
MOV 11H, A
NO_12: MOV TH0, #00H
MOV TL0, #00H
MOV A, 12H
CJNE A, #00H, NO_2
LJMP NO_13
NO_2: DEC A
MOV 12H, A
NO_13: MOV A, 13H
CJNE A, #00H, NO_3
LJMP NO_14
NO_3: DEC A
MOV 13H, A
NO_14: MOV TH0, #00H
MOV TL0, #00H
MOV A, 14H
CJNE A, #00H, NO_4
LJMP NO_15
NO_4: DEC A
MOV 14H, A
NO_15: MOV A, 15H
CJNE A, #00H, NO_5
LJMP NO_16
NO_5: DEC A
MOV 15H, A
NO_16: MOV TH0, #00H
MOV TL0, #00H
MOV A, 16H
CJNE A, #00H, NO_6
LJMP NO_17
NO_6: DEC A
MOV 16H, A
NO_17: MOV A, 17H
CJNE A, #00H, NO_7
LJMP SCANSTART
NO_7: DEC A
MOV 17H, A
SCANSTART: MOV R1, #06H ;扫描开始 6-1
DEC1: DEC R1
MOV A, P1
ANL A, #0F8H ;P1低三位清零
ADD A, R1 ;与扫描地址合成
MOV P1, A
MOV TH0, #00H ;T0清零
MOV TL0, #00H
LCALL TIMER1
JNB P3.2, ALARM1 ;转报警处理
MAIN_LOOP1: CJNE R1, #00H, DEC1 ;是否循环完
INC R3
CJNE R3, #06H, MAIN_C
MOV R3, #00H
CPL P2.6 ;看门狗
MAIN_C: DJNZ 23H, MAIN_LP1
LJMP SEND_CX ;转发送查询
MAIN_LP1: LJMP MAIN
ALARM1: LJMP ALARM
;***********************************
; 报警处理程序
;***********************************
ORG 02A0H
ALARM: MOV TH0, #00H
MOV TL0, #00H
MOV A, R1
ADD A, #10H
MOV R0, A
CJNE @R0, #00H, ALARM_1
MOV @R0, #2AH
MOV A, R1
ADD A, #30H
MOV R0, A
CJNE @R0, #01H, ALARM_1
ALM_0: CJNE A, #30H, ALM_1 ;IN1
MOV R2, #01H
SETB P1.5
LJMP ALM_EXT
ALM_1: CJNE A, #31H, ALM_2
MOV R2, #02H
SETB P1.6
LJMP ALM_EXT
ALM_2: CJNE A, #32H, ALM_3
MOV R2, #04H
SETB P1.7
LJMP ALM_EXT
ALM_3: CJNE A, #33H, ALM_4
MOV R2, #08H
SETB P1.4
SETB P2.2
LJMP ALM_EXT
ALM_4: CJNE A, #34H, ALM_5
MOV R2, #10H
SETB P2.1
LJMP ALM_EXT
ALM_5: CJNE A, #35H, ALARM_1
MOV R2, #20H
SETB P2.0
ALM_EXT: LCALL SEND
ALARM_1: MOV TH0, #00H
MOV TL0, #00H
LJMP MAIN_LOOP1
RSLINK_RET2: LJMP RSLINK_RET1
;*************************************
; 串行通讯中断子程序
;*************************************
RSLINK: PUSH DPH
PUSH DPL
PUSH PSW
JNB RI, RSLINK_RET2
CLR RI
CLR ES
CPL P2.6
MOV TH0, #00H ;T0清零
MOV TL0, #00H
MOV A, SBUF
CJNE A, #0EBH, RSLINK_RET2
RSLINK_SELFR1: MOV TH0, #00H ;T0清零
MOV TL0, #00H
JNB RI, RSLINK_SELFR1
MOV A, SBUF
CJNE A, #0EFH, RSLINK_RET2
CLR RI
RSLINK_SELFR2: MOV TH0, #00H ;T0清零
MOV TL0, #00H
JNB RI, RSLINK_SELFR2
MOV A, SBUF
CLR RI
MOV 51H, A ;指令存入51H
RSLINK_SELFR3: MOV TH0, #00H ;T0清零
MOV TL0, #00H
JNB RI, RSLINK_SELFR3
MOV A, SBUF
CLR RI
MOV 52H, A ;操作数存入52H
RSLINK_SELFR4: MOV TH0, #00H ;T0清零
MOV TL0, #00H
JNB RI, RSLINK_SELFR4
MOV A, SBUF
CLR RI
MOV 53H, A ;操作数存入53H
RSLINK_SELFR5: MOV TH0, #00H ;T0清零
MOV TL0, #00H
JNB RI, RSLINK_SELFR5
MOV A, SBUF
CLR RI
MOV 54H, A ;校验和存入54H
MOV A, #0EFH
ADD A, 51H
ADD A, 52H
ADD A, 53H
CJNE A, 54H, RSLINK_RET3
MOV A, 51H ;取出指令
CJNE A, #73H, RSLINK_STOP_WD ;启动监视
MOV 20H, #01H
LJMP RSLINK_RET1
RSLINK_STOP_WD:CJNE A, #65H, RSLINK_ANSWER ;停止监视
MOV 20H, #00H
MOV 22H, #0EFH
LJMP RSLINK_RET1
RSLINK_ANSWER: CJNE A, #4FH, RSLINK_CLS_OUT ;回答
MOV 21H, #01H
LJMP RSLINK_RET1
RSLINK_CLS_OUT:CJNE A, #13H, RSLINK_CLS_ALM ;是否联动解除
MOV TH0, #00H
MOV TL0, #00H
CLR P1.5
CLR P1.6
CLR P1.7
CLR P2.0
CLR P2.1
CLR P2.2
RSLINK_RET3: LJMP RSLINK_RET1
RSLINK_CLS_ALM: MOV TH0, #00H ;T0清零
MOV TL0, #00H
CJNE A, #14H, RSLINK_ZD_ALM ;关闭ALARM
CLR P1.4
LJMP RSLINK_RET1
RSLINK_ZD_ALM: MOV TH0, #00H ;T0清零
MOV TL0, #00H
CJNE A, #1DH, RSLINK_B_C ;是否遮挡报警
SETB P1.4
LJMP RSLINK_RET1
RSLINK_B_C: CJNE A, #10H, RSLINK_ASK
MOV A, 52H
CJNE A, #0FFH, STATE_C
MOV 30H, #01H ;记录状态
MOV 31H, #01H
MOV 32H, #01H
MOV 33H, #01H
MOV 34H, #01H
MOV 35H, #01H
MOV 36H, #01H
MOV 37H, #01H
LJMP RSLINK_RET1
STATE_C: MOV 30H, #00H ;记录状态
MOV 31H, #00H
MOV 32H, #00H
MOV 33H, #00H
MOV 34H, #00H
MOV 35H, #00H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -