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

📄 副机.asm

📁 用汇编语言编写的51程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
ZDFS: CLR LED1          ;指示灯亮
      SETB FSBB         ;B端为1
      SETB FSCC         ;C端为1
      CLR FSDD          ;D端为0
      CLR FSKZ          ;允许发射
      ACALL TZFS        ;调用停止发射程序
      RET               ;返回

;----------------------------------------------------------------
;以下为微波输出(有盗情)的发射程序
;----------------------------------------------------------------
;微波输出(有盗情)发射编码101给主机进行报警
WBFS: CLR LED1          ;指示灯亮
      SETB FSBB         ;B端为1
      CLR FSCC          ;C端为0
      SETB FSDD         ;D端为1
      CLR FSKZ          ;允许发射
      ACALL TZFS        ;调用停止发射程序
      RET               ;返回

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

;----------------------------------------------------------------
;以下为电源低压的发射程序
;----------------------------------------------------------------
;子机电源低压发射编码010给主机进行报警
DYFS: CLR LED1          ;指示灯亮
      CLR FSBB          ;B端为0
      SETB FSCC         ;C端为1
      CLR FSDD          ;D端为0
      CLR FSKZ          ;允许发射
      ACALL TZFS        ;调用停止发射程序
      RET               ;返回

;----------------------------------------------------------------
;以下为停止发射程序
;----------------------------------------------------------------
TZFS: ACALL YS2         ;延时
      ACALL YS2         ;延时
      SETB FSKZ         ;停止发射
      CLR FSBB          ;B端为0
      CLR FSCC          ;C端为0
      CLR FSDD          ;D端为0
      SETB LED1         ;指示灯灭
      RET               ;返回

;----------------------------------------------------------------
;以下为初始化程序
;----------------------------------------------------------------
CLEAR1:MOV P1MO,#P1MA   ;P1端口状态
      MOV P1M1,#P1MB
      MOV SP,#50H       ;设推栈初值
      SETB FSDY         ;关闭发射编码IC电源
      SETB FSKZ
      CLR FSDD          ;发射电路不发射(D端为0)
      CLR FSCC          ;发射电路不发射(C端为0)
      CLR FSBB          ;发射电路不发射(B端为0)
      CLR CGDY          ;关传感器电源
      CLR SPK1          ;关报警喇叭
      RET

;----------------------------------------------------------------
;以下为进入防盗后AD转换后初始化程序
;----------------------------------------------------------------
CLEAR2:MOV P1MO,#P1MA   ;P1端口状态
      MOV P1M1,#P1MB
      ;MOV SP,#50H      ;设推栈初值
      SETB FSDY         ;关闭发射编码IC电源
      SETB FSKZ
      CLR FSDD          ;发射电路不发射(D端为0)
      CLR FSCC          ;发射电路不发射(C端为0)
      CLR FSBB          ;发射电路不发射(B端为0)
      SETB CGDY         ;开传感器电源
      CLR SPK1          ;关报警喇叭
      RET

;----------------------------------------------------------------
;以下为外中断(接收头收到信号)处理程序
;----------------------------------------------------------------
INT00:CLR EX0           ;关外中断
      MOV A,P3          ;收到子机的反馈信号则判断是否正确
      ANL A,#JSBM       ;屏蔽P3.7、P3.6、P3.1、P3.0
      MOV 34H,A
      JNB JSVT,$        ;等待主机停止发射
      ;SETB EA           ;开总中断允许
      RETI

;----------------------------------------------------------------
;以下为处理程序
;----------------------------------------------------------------
;中断处理程序
INTT0:CLR EA            ;关总中断
      PUSH ACC          ;进栈保护ACC数据
      PUSH PSW          ;进栈保护PSW数据
      MOV TH0,#3CH      ;设T1为100mS
      MOV TL0,#0B0H
      INC 30H           ;ms时间计数器
      MOV A,30H
      CJNE A,#100,LOP2  ;计时计数器,10s进位1次
      MOV 30H,#00H      ;ms时间计数器清零,重新开始计时
      MOV R0,#01H       ;10s到标志      
LOP2: POP PSW           ;PSW出栈
      POP ACC           ;ACC出栈
      SETB EA           ;开总中断
      RETI              ;中断返回

;----------------------------------------------------------------
;以下为AD转换程序,监测电源电源
;----------------------------------------------------------------
;AD转换
ADAD:ACALL ADC_Power_On       ;开ADC电源,第一次使用时要打开内部模拟电源
                              ;开ADC电源,可适当加延时,1mS以内就足够了

    ACALL Set_ADC_Channel_0   ;设置P1.0作为A/D转换通道

    ACALL Get_AD_Result       ;测量电压并且取A/D转换结果

    MOV   A, ADC_Chl0         ;A/D转换结果

    RET

;┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
ADC_Power_On:
    PUSH  ACC
    ORL   ADC_CONTR,#80H ;开A/D转换电源
    MOV   A, #20H
    ACALL Delay          ;开A/D转换电源后要加延时,ImS以内就足够了
    POP   ACC
    RET
;┈┈┈┈┈┈┈┈┈┈┈
Set_ADC_Channel_0:
    MOV   ADC_CONTR,#ADC_Powerl0
                    ;选择P1.0作为A/D转换通道
    MOV   A,#05H    ;更换A/D转换通道后要适当延时,使输入电压稳定
                    ;以后如果不更换A/D转换通道的话,不需要加延时
    ACALL Delay	    ;切换A/D转换通道,加延时20uS~200uS就可以了,
	            ;也输入电压源的内阻有关
		    ;如果输入电压信号源的内阻在10K以下,可不加延时
    RET

;┈┈┈┈┈┈┈┈┈┈┈

Get_AD_Result:
    PUSH  ACC                    ;入栈保护
    MOV   ADC_DATA,#0  
    ORL   ADC_CONTR,#00001000B   ;启动 AD 转换

Wait_AD_Finishe:
    MOV   A,#00010000B           ;判断 AD 转换是否完成
    ANL   A,ADC_CONTR
    JZ    Wait_AD_Finishe        ;AD 转换尚未完成,继续等待
      
    ANL  ADC_CONTR,#11100111B    ;清0 ADC_FLAG,ADC_START位,停止A/D转换          
    MOV   A,ADC_DATA
    MOV   ADC_Chl0,A             ;保存 AD 转换结果
    POP   ACC
    RET
;┈┈┈┈┈┈┈┈┈┈┈
Delay:
    PUSH  02                 ;将寄存器组0的R2入栈
    PUSH  03                 ;将寄存器组0的R3入栈
    PUSH  04                 ;将寄存器组0的R4入栈
    MOV   R4,A
Delay_Loop0:
    MOV   R3,#200            ;2 CL0CK┈┈┈┈┈┈┈┈+
Delay_Loop1:                 ;                     │              
    MOV   R2,#249            ;2 CL0CK┈+           │
Delay_Loop:                  ;         │1002 CLOCK│200406 CLOCK
    DJNZ  R2, Delay_LooP     ;4 CL0CK  │          │
    DJNZ  R3, Delay_LooP1    ;4 CL0CK ┈+          │ 
    DJNZ  R4, Delay_LooP0    ;4 CL0CK┈┈┈┈┈┈┈┈+
 
    POP   04
    POP   03
    POP   02
    RET

;----------------------------------------------------------------

;----------------------------------------------------------------
;以下为延时子程序
;----------------------------------------------------------------
;延时子程序
YS1:  MOV R6,#100
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,#05H     ;长长时间延时
Y30:  MOV R6,#0FFH
Y31:  MOV R7,#0FFH
Y32:  NOP
      NOP
      NOP
      DJNZ R7,Y32
      DJNZ R6,Y31
      DJNZ R5,Y30
      RET

      ORG 0400H
      NOP               ;设置软件陷阱
      NOP
      NOP
      LJMP KS

      END


;*****************************************************************

⌨️ 快捷键说明

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