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

📄 副机.asm

📁 用汇编语言编写的51程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;防盗器子机程序

      FSDY EQU P1.7     ;发射电源端,高电平为输出
      FSKZ EQU P1.6     ;发射控制端,低电平有效
      FSDD EQU P1.5     ;发射控制D端,高电平控制有效
      FSCC EQU P1.4     ;发射控制C端,高电平控制有效
      FSBB EQU P1.3     ;发射控制B端,高电平控制有效
      CGDY EQU P1.2     ;传感器电源端,高电平为输出
      SPK1 EQU P1.1     ;报警喇叭,高电平为输出,暂时不用
      DYAD EQU P1.0     ;电源AD输入端

      CGQ1 EQU P3.0     ;振动传感器
      CGQ2 EQU P3.1     ;微波传感器

      JSVT EQU P3.2     ;接收头VT端
      JSDD EQU P3.3     ;接收头D输出端,有效高电平输出
      JSCC EQU P3.4     ;接收头C输出端,有效高电平输出
      JSBB EQU P3.5     ;接收头B输出端,有效高电平输出
      LED1 EQU P3.7     ;指示灯

      P1MO EQU 91H
      P1M1 EQU 92H

      P1MA EQU 00000001B
      P1MB EQU 10111110B

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

      DYBJ EQU 80H      ;设定电源低电压(9V以下)报警值

;┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈;A/D转换程序。
ADC_CONTR   EQU 0C5H    ;A/D转换寄存器
ADC_DATA    EQU 0C6H    ;A/D转换结果寄存器,
                        ;为10位A/D转换结果的高8位
;ADC_LOW2   EQU 0BEH    ;A/D转换结果寄存器,低2位有效,
                        ;为10位A/D转换结果的低2位
                        ;如果不用ADC_L0W2的低2位,
                        ;只用ADC_DATA的8位,则为8位A/D转换

ADC_Powerl0 EQU 11100000B;P1.0作为A/D输入

;定义变量
ADC_Chl0    EQU 32H     ;0通道A/D转换结果
;┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

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

      ORG 100H
;开机初始化
KS:   ACALL CLEAR1      ;设定初值
      MOV PSW,#00H      ;设程序状态字寄存器为00
      MOV SCON,#00H     ;设串行口控制寄存器为00
      CLR LED1          ;指示灯提示通电
      ACALL YS2         ;延时
      SETB LED1         ;关指示灯

;----------------------------------------------------------------
;开机检测
      ACALL ADAD
      SUBB A,#DYBJ      ;与预定值比较
      ACALL CLEAR1      ;重新设定初值
      JNC KS2           ;电压低报警,正常才能开防盗器
      MOV A,#20         ;低压则连续报警20次
KS1:  ACALL DYFS        ;电压低发射010报警信号
      CLR LED1          ;红灯亮
      ACALL YS2         ;延时
      SETB LED1         ;红灯灭
      ACALL YS2         ;延时
      DEC A
      JNZ KS1
      CLR LED1          ;红灯闪20次后常亮
      ORL PCON,#2       ;进入掉电模式,只有复位才能启动
      NOP
      NOP
      NOP
      AJMP KS           ;软件陷阱

;--------------------------------------------------
;电源电压检测(AD转换)后进入待机状态
;--------------------------------------------------
KS2:  CLR IT0           ;外部中断低电平触发
      SETB EA           ;开总中断允许
      SETB EX0          ;开外部中断0

KS3:  ORL PCON,#01H     ;进入待机,只有外中断或复位才能启动
      NOP               ;退出中断后设置软件陷阱
      NOP
      NOP
      CJNE A,#KJBM,KS2  ;必须是开机信号,信号不对返回继续进入待机

;--------------------------------------------------
;开始进入防盗状态
;--------------------------------------------------
KS0:  SETB CGDY         ;打开振动和微波探测头电源
      CLR A             ;A清零
      CLR LED1          ;进入报警监测状态,指示灯亮
      SETB SPK1         ;报警器响一下,进入防盗状态
      ACALL YS3         ;延时
      CLR SPK1          ;关报警器
      ACALL KJFS        ;发射011回应主机,表示收到并进入防盗状态
      SETB LED1         ;指示灯灭
      ACALL YS2

;--------------------------------------------------
;
;--------------------------------------------------
      MOV TMOD,#00010001B;设定时器T1为计数器方式(方式1)
      MOV TH0,#3CH      ;设T1为100mS
      MOV TL0,#0B0H
      SETB ET0          ;允许定时器T1中断
      SETB TR0          ;启动计数器T1
      MOV 30H,#00H      ;100ms时间计数器清零
      MOV R0,#00H       ;10s时间到标志位清零
      MOV 34H,#00H
      MOV 33H,#0FH
      MOV 35H,#00H
      MOV R1,#0FH      

;--------------------------------------------------
;正式进入防盗状态
;--------------------------------------------------

KS4:  JNB CGQ1,KS5      ;检测振动传感器是否输出(有盗情)
      ACALL YS1
      JNB CGQ1,KS5
      CLR TR0           ;关定时中断
      INC 35H
      MOV A,35H
      CJNE A,#10,S2
      DEC 35H
      SETB SPK1         ;报警器响一下
      ACALL YS2         ;延时
      CLR SPK1          ;关报警器
      SJMP KS5
S2:   ACALL ZDFS        ;检测到振动传感器有输出,发射110报警信号
      ACALL YS2         ;延时
      SETB TR0          ;开定时中断允许
  
KS5:  JB CGQ2,KS6       ;检测微波传感器是否输出(有盗情)
      ;ACALL YS1
      ;JB CGQ2,KS6
      CLR TR0           ;关定时中断
      DJNZ R1,S1
      INC R1
      SETB SPK1         ;报警器响一下,进入防盗状态
      ACALL YS2         ;延时
      CLR SPK1          ;关报警器
      SJMP KS6
S1:   ACALL WBFS        ;检测到微波传感器有输出,发射101报警信号
      ACALL YS2         ;延时
      SETB TR0          ;开定时中断允许

KS6:  CJNE R0,#01H,KS7  ;10S检测一次电源电压
      CLR TR0           ;关定时中断
      ACALL ADAD        ;调用电源电压检测程序
      ACALL CLEAR2      ;重新设定初值
      SUBB A,#DYBJ      ;与预定值比较
      CLR A             ;A清零
      MOV R0,#00H       ;10s时间到标志位清零
      SETB TR0          ;开定时中断允许
      JNC KS7           ;电压低报警
      CLR TR0           ;关定时中断
      ACALL DYFS        ;电压低发射010报警信号
      SETB TR0          ;开定时中断允许
      DJNZ 33H,KS7
      CLR LED1
      CLR TR0           ;关定时中断
      AJMP KS2

KS7:  MOV A,P3          ;收到子机的反馈信号则判断是否正确
      ANL A,#JSBM       ;屏蔽P3.7、P3.6、P3.1、P3.0
      CJNE A,#GJBM,KS8  ;检测是否收到主机的关机信号
      CLR ET0           ;无信号则关定时器T1中断
      CLR CGDY          ;关传感器电源

      CLR LED1          ;进入报警监测状态,指示灯亮
      SETB SPK1         ;报警器响一下,进入防盗状态
      ACALL YS2         ;延时
      CLR SPK1          ;关报警器
      ACALL YS3         ;延时
      SETB SPK1         ;报警器响一下,进入防盗状态
      ACALL YS3         ;延时
      CLR SPK1          ;关报警器
      ACALL GJFS        ;调用关机发射程序
      SETB LED1         ;进入报警监测状态,指示灯亮
      JNB JSVT,$        ;等待主机停止发射
      AJMP KS2          ;返回进入待机状态

KS8:  CJNE A,#KJBM,S3
      JNB JSVT,$        ;等待主机停止发射
      AJMP KS0          ;返回进入待机状态

S3:   CJNE A,#DYBM,S4
      SETB SPK1         ;报警器响一下,进入防盗状态
      ACALL YS3         ;延时
      CLR SPK1          ;关报警器
      MOV R1,#01H
S4:   AJMP KS4

;****************************************************************
;----------------------------------------------------------------
;以下为子程序
;----------------------------------------------------------------
;----------------------------------------------------------------
;以下为开机发射程序
;----------------------------------------------------------------
;主机开机子机发射编码011给主机以联通
KJFS: CLR LED1          ;指示灯亮
      CLR FSBB          ;B端为0
      SETB FSCC         ;C端为1
      SETB FSDD         ;D端为1
      CLR FSKZ          ;允许发射
      ACALL TZFS        ;调用停止发射程序
      RET               ;返回

;----------------------------------------------------------------
;以下为振动输出(有盗情)的发射程序
;----------------------------------------------------------------
;振动输出(有盗情)发射编码110给主机进行报警

⌨️ 快捷键说明

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