表2 基于AT89C2051的程序设计部分 ORG 0000H ; CLR P1.6 ; CLR P1.2 ; ACALL DYS ; SETB P1.6 ACALL YS ; SETB P1.2 ; CLR P1.3 ; CLR P1.6 ; ACALL DYS ; SETB P1.6 ; ACALL YS ; SETB P1.3 ; CLR P1.4 ; CLR P1.6 ; ACALL DYS ; SETB P1.6 ; ACALL YS ; SETB P1.4 ; CLR P1.5 ; CLR P1.6 ; ACALL DYS ; SETB P1.6 ; ACALL YS ; ; MOV P1, #0FFH ; MOV P3, #0FFH ; AGARN: MOV R6, #34H ;
JB P3.6, TINDIAN ;检查是否停电
21
JNB P3.0, AGARN ;是否有有效无线信号输入 ACALL DYS ; JNB P3.0, AGARN ; MOV A, P3 ;读入无线信号值 ANL A, #3CH ;0011,1100
CJNE A,#20H, XH ;20H=00(10,00)00 B ;撤防程序 CLR P3.1 ;
CLR P1.6 ;撤防成功响应 CLR P1.4 ;指示灯 CLR P1.5 ; SETB P3.7 ; ACALL YS ; SETB P1.6 ; AJMP AGARN ;
XH: CJNE A,#30H, ONE ;判断是否为布防信号 SETB P3.1 ;
CLR P1.6 ;布防成功响应 SETB P1.4 ;指示灯 SETB P1.5 ; SETB P3.7 ; ACALL YS ; SETB P1.6 ; AJMP AGARN ;
ONE: JNB P3.1, AGARN ;
CJNE A,#4H, TWO ;1H=00(00,01)00B MOV P1, #0FBH ; AJMP BJ ;
TWO: CJNE A,#8H, THREE ;2H= 00(00,10)00B
22
MOV P1, #0F7H ; AJMP BJ ;
THREE: CJNE A,#0CH, FOUR ;3H=00(00,11)00B MOV P1, #0EFH ; AJMP BJ ;
FOUR: CJNE A,#10H, FIVE ;00(01,00)00B MOV P1, #0DFH ; AJMP BJ ; FIVE: NOP ; NOP ; NOP ; AJMP AGARN ;
BJ: CLR P3.7 ;启动报警信号 ACALL YS ;延时34秒 JB P3.0, AGARN ; DJNZ R6, BJ ;
SETB P3.7 ;关闭报警信号 AJMP AGARN ;
TINDIAN: MOV P1, #0FFH ;停电程序 CLR P1.6 ; CLR P1.5 ; ACALL YS ; SETB P1.6 ; SETB P1.5 ; ACALL YS ; CLR P1.6 ; CLR P1.5 ; ACALL YS ; SETB P1.6 ;
23
SETB P1.5 ; ACALL YS ; AJMP AGARN ; DYS: MOV R0, #14H ; L1: MOV R1, #0F1H ; L2: NOP ; NOP ; NOP ;
DJNZ R1, L2 ; DJNZ R0, L1 ; RET
YS: MOV R0, 0FFH ; L3: MOV R1, 0F1H ; L4: NOP ; NOP ; NOP ;
DJNZ R1, L4 ; DJNZ R0, L3 ; RET ; END ;
24