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

📄 主机.asm

📁 用汇编语言编写的51程序
💻 ASM
字号:
;防盗器主机程序
      FSDD EQU P1.7     ;发射控制D端,高电平控制有效
      FSCC EQU P1.6     ;发射控制C端,高电平控制有效
      FSBB EQU P1.5     ;发射控制B端,高电平控制有效
      BJQ1 EQU P1.1     ;报警器,低电平报警
      SPK1 EQU P1.0     ;喇叭,驱动方式为脉冲信号
      LED1 EQU P3.0     ;指示灯
      JSVT EQU P3.2     ;接收头VT端
      JSDD EQU P3.3     ;接收头D输出端,有效高电平输出
      JSCC EQU P3.4     ;接收头C输出端,有效高电平输出
      JSBB EQU P3.5     ;接收头B输出端,有效高电平输出
      DYJC EQU P3.7     ;主机电源电压检测端,电源电压低于9V报警提示

      P1MO EQU 91H
      P1M1 EQU 92H

      P1MA EQU 00000000B;定义P1口状态
      P1MB EQU 11100011B;设P1.7、P1.6、P1.5、P1.1、P1.0口为推挽输出

      JSBM EQU 00111100B;设置接收端口状态,屏蔽P3.7、P3.6、P3.1、P3.0
      KJBM EQU 00011000B;设定开机编码为011(即接收头B为0、C为1、D为1)
      ZDBM EQU 00110000B;设定振动探测报警编码为110
      WBBM EQU 00101000B;设定微波探测报警编码为101
      DYBM EQU 00010000B;设定子机电源低压报警编码为010
      LLBM EQU 00001000B;设定3分钟联络子机一次编号为001

      ORG  0000H	;程序执行开始地址
      LJMP KS1   	;跳至KS1
      ORG  0003H	;外中断0中断程序入口
      RETI	        ;中断返回
      ORG  000BH        ;定时器T0中断程序入口
      LJMP INTT0        ;中断返回
      ORG  0013H	;外中断1中断入口
      RETI	        ;中断返回
      ORG  001BH	;定时器T1中断程序入口
      RETI      	;跳至INTT1中断服务程序
      ORG  0023H	;串口中断入口地址
      RETI

      ORG 0100H

;开机初始化
KS1:  MOV P1MO,#P1MA    ;定义P1口状态
      MOV P1M1,#P1MB    ;设P1口部分为推挽输出
      CLR SPK1          ;关喇叭
      CLR BJQ1          ;关报警器
      CLR FSDD          ;发射电路不发射(D端为0)
      CLR FSCC          ;发射电路不发射(C端为0)
      CLR FSBB          ;发射电路不发射(B端为0)
      MOV SP,#50H       ;设推栈初值
      MOV R0,#05H       ;设低压报警次数初值
      MOV PSW,#00H      ;设程序状态字寄存器为00
      MOV SCON,#00H     ;设串行口控制寄存器为00
      CLR LED1          ;指示灯提示通电
      ACALL DIDI        ;DI声提示通电
      SETB LED1         ;关指示灯
      ACALL DYJC1       ;电压检测

;----------------------------------------------------------------
KS2:  JB JSVT,$         ;检测是否接收到信号
      ACALL YS1
      JB JSVT,KS2    
      MOV A,P3          ;收到子机的反馈信号则判断是否正确
      ANL A,#JSBM       ;屏蔽P3.7、P3.6、P3.1、P3.0
      CJNE A,#KJBM,KS2  ;检查是否是开机信号
KS3:  CLR LED1          ;发光管点亮指示
      SETB BJQ1	        ;开报警声提示
      ACALL YS2         ;延时
      CLR BJQ1	        ;关报警声
      SETB LED1         ;发光管灭
      JNB JSVT,$        ;等待发射信号停止发射
      MOV TMOD,#00010001B;设定时器T1为计数器方式(方式1)
      MOV TH0,#3CH      ;设T1为100mS
      MOV TL0,#0B0H
      SETB EA           ;开总中断允许
      SETB ET0          ;允许定时器T1中断
      SETB TR0          ;启动计数器T1
      MOV R1,#00H       ;100ms时间计数器清零
      MOV R3,#0AH

L0:   JB JSVT,$         ;检测是否接收到信号
      ACALL YS1
      JB JSVT,L0    
      MOV A,P3          ;收到子机的反馈信号则判断是否正确
      ANL A,#JSBM       ;屏蔽P3.7、P3.6、P3.1、P3.0

      CJNE A,#KJBM,L1   ;检查是否是开机信号
      CLR EA            ;关总中断
      SJMP KS3          ;重新开始

L1:   CJNE A,#ZDBM,L2   ;检测收到的信号是否是振动探测报警信号
      CLR TR0           ;关计数器T1
      CLR LED1          ;是报警信号则发光管亮
      SETB BJQ1	        ;开报警声
      ;ACALL YS3         ;延时
      ;CLR BJQ1	        ;关报警声
      ;SETB LED1         ;发光管灭
      SETB TR0          ;启动计数器T1
      SJMP L0           ;返回继续检测

L2:   CJNE A,#WBBM,L3   ;检测收到的信号是否是微波探测报警信号
      CLR TR0           ;关计数器T1
      SETB BJQ1	        ;开报警声
      ACALL YS3         ;延时
      CLR BJQ1	        ;关报警声
      SETB TR0          ;启动计数器T1
      SJMP L0           ;返回继续检测

L3:   CJNE A,#DYBM,L4   ;检测收到的信号是否是子机低压报警信号
      CLR TR0           ;关计数器T1
      CLR LED1          ;发光管亮
      ACALL DIDI        ;是则3声DI报警
      ACALL DIDI
      ACALL DIDI
      ACALL DIDI
      ACALL DIDI
      ACALL DIDI
      DJNZ R3,L5
L6:   ACALL DIDI
      ACALL YS2
      SJMP L6           ;返回继续检测
L5:   SETB TR0          ;启动计数器T1
      SJMP L0           ;返回继续检测

L4:   CJNE A,#LLBM,L0   ;检测收到的信号是否是关机信号
      CLR TR0           ;关计数器T1
      ACALL DIDI        ;是则3声DI报警
      ACALL DIDI
      ACALL DIDI
      ACALL DIDI
      JNB JSVT,$        ;等待发射信号停止发射
      CLR BJQ1	        ;关报警声
      AJMP KS2          ;返回继续检测

;----------------------------------------------------------------
;5s时间子程序和电源电压监测中断处理程序
INTT0:CLR TR0           ;关计数器T1
      PUSH ACC          ;进栈保护ACC数据
      PUSH PSW          ;进栈保护PSW数据
      MOV TH0,#3CH      ;设T1为100mS
      MOV TL0,#0B0H
      INC R1            ;时间计数器,100ms进位1次
      CJNE R1,#50,LOP1  ;计时计数器,5s进位1次
      MOV R1,#00H       ;时间到清零
      CLR LED1          ;指示灯闪亮一下指示防盗监测状态
      ACALL YS2
      SETB LED1
      ACALL DYJC1       ;检测电源电压
LOP1: POP PSW           ;PSW出栈
      POP ACC           ;ACC出栈
      SETB TR0          ;开计数器T1
      RETI              ;中断返回

;----------------------------------------------------------------
;以下电源电压检测程序
;----------------------------------------------------------------
DYJC1:JB DYJC,LOP3      ;检测电源电压
      CLR LED1          ;发光管亮
      ACALL DIDI        ;是则2声DI报警
      ACALL DIDI
      DJNZ R0,LOP3      ;报警超过5次,连续报警多次后关机并进入掉电模式
      MOV A,#20         ;低压则连续报警20次
LOP2: ACALL DIDI
      ACALL YS2
      DEC A
      JNZ LOP2
      SETB LED1         ;发光管灭
      ORL PCON,#2       ;进入掉电模式,只有复位才能启动
      NOP
      NOP
      NOP
      AJMP KS1          ;软件陷阱

LOP3: RET
      NOP
      NOP
      NOP
      AJMP KS1          ;软件陷阱

;----------------------------------------------------------------
;以下为报警子程序
;----------------------------------------------------------------
;DI声报警子程序
DIDI: MOV 20H,#0F0H	;DI声提示音
L111: SETB SPK1	        ;开喇叭
      ACALL L222	;延时时间比INT1长
      CLR SPK1	        ;关喇叭
      ACALL L222	;
      DJNZ 20H,L111     ;不为零转
      RET
L222: MOV R2,#08H	;
S00EB:PUSH 02H          ;R2(复位后R2即为02H)存放时间常数,进栈保护
L00ED:PUSH 02H	        ;R2进栈保护
L00EF:PUSH 02H	        ;进栈
L00F1:DJNZ R2,$	        ;R2不为零等待
      POP 02H		;出栈
      DJNZ R2,L00EF	;R2不为零转
      POP 02H		;出栈
      DJNZ R2,L00ED	;R2不为零转
      POP 02H		;出栈
      DJNZ R2,S00EB	;R2不为零转
      RET     	        ;子程序返回

;----------------------------------------------------------------
;以下为延时子程序
;----------------------------------------------------------------
;延时子程序
YS1:  MOV R6,#0FFH
Y11:  MOV R7,#0FFH
Y12:  NOP
      NOP
      NOP
      DJNZ R7,Y12
      DJNZ R6,Y11
      RET
;----------------------------------------------------------------
YS2:  MOV R5,#08H       ;中长时间延时
Y20:  MOV R6,#0FFH
Y21:  MOV R7,#0FFH
Y22:  NOP
      NOP
      NOP
      DJNZ R7,Y22
      DJNZ R6,Y21
      DJNZ R5,Y20
      RET
;----------------------------------------------------------------
YS3:  MOV R5,#50       ;长长时间延时
Y30:  MOV R6,#0FFH
Y31:  MOV R7,#0FFH
Y32:  NOP
      NOP
      NOP
      DJNZ R7,Y32
      DJNZ R6,Y31
      DJNZ R5,Y30
      RET

      ORG 0300H
      NOP
      NOP
      NOP
      LJMP KS1         ;软件陷阱

      END

⌨️ 快捷键说明

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