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

📄 m_master.asm

📁 合泰单片机汇编程序,摩托车防盗器主机程序
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;接收后回传
;M_Master:
;Date 06.04.30
;MCU  HT48R30A-1    24pin  sop
;空脚全做输出,防止受到外部干扰
;带断电记忆,静音时按key2不回到有声,而是寻车,要按key3解除再按key2才回到有声
;进入防枪时,只有KEY3有效

    R0    EQU  00H
    MP    EQU  01H
    ACC   EQU  [05H]
	Wdts	equ	[09h]
    STATUS EQU  [0AH]
    C     EQU  [0AH].0
    Z     EQU  [0AH].2
    TO    EQU  [0AH].5
	Intc	equ	0bh
	Emi		equ 0
	EEi		equ	1
	Eti		equ	2
	EIF		equ	4
	TF		equ	5
	Tmr		equ	0dh
	Tmrc	equ	0eh
	Ton		equ 4

    PA    EQU  [12H]
    Vdd_STA  EQU  [12H].0
    Flameout EQU  [12H].1   ;熄火
    Learn_Key EQU  [12H].2
    LockOn   EQU  [12H].6
    
    PAC   EQU  [13H]
    PB    EQU  [14H]
    Bugle EQU  [14H].1
    STA   EQU  [14H].2
    Light EQU  [14H].3
    Vib   EQU  [14H].4      ;振动
    ;;TX    EQU  [14H].5
    RX    EQU  [14H].6
    Vdd_TxRx EQU [14H].7    ;TxRx Vdd   
    
    RF    EQU  [14H].6;0

    BUZ   EQU  [14H].0
    PBC   EQU  [15H]
    PC    EQU  [16H]
    SDA   EQU  [16H].0;4;0;1
    SCL   EQU  [16H].2;5;2
    PCC   EQU  [17H]
    SDA_C EQU  [17H].0;4;0;1
    SCL_C EQU  [17H].2;5;2
    PGC   EQU  [1FH]
    PG    EQU  [1EH]


    COUNT0 EQU [40H]
    COUNT1 EQU [41H]
    COUNT2 EQU [42H]
    COUNT3 EQU [43H]
    TX_CNT EQU [44H]
    CNT0   EQU 45H
    CNT1   EQU 46H
    CNT2   EQU 47H
    TMP_CNT EQU 48H
    FLAGS  EQU 49H
    BITIN  EQU 07H
    DATA1  EQU 4AH
    DATA2  EQU 4BH
    DATA3  EQU 4CH
    COUNT4 EQU [4DH]
    TX_CNT1 EQU [4EH]
    KEY_Cancel EQU 4FH
    CHKData1   EQU 51H
    CHKData2   EQU 52H
    CHKData3   EQU 53H
    CHKData4   EQU 54H
    CHKData5   EQU 55H
    CHKData6   EQU 56H
    KEY_Only   EQU 57H
    FLAG       EQU 58H
    F_KEY1     EQU [58H].0
    F_KEY2     EQU [58H].1
    F_KEY3     EQU [58H].2
    F_KEY4     EQU [58H].3
    F_KEY5     EQU [58H].4
    F_KEY6     EQU [58H].5
    F_KEY7     EQU [58H].6
    F_KEY8     EQU [58H].7


    Dataaddr   EQU  59H
    Tempdata2  EQU  5AH
    CentreConlTime  EQU 5BH
    Read_out   EQU  5CH
    Temp3      EQU  5DH
    COUNT_IIC0 EQU  5EH
    COUNT_IIC1 EQU  5FH
    BUF        EQU  [60H]
    CNT10s_30s EQU  [61H]
    COUNT_4s   EQU  [62H]
    COUNT_30s  EQU  [63H]
    COUNT_Vib  EQU  [64H]
    CNT_Bits   EQU  [65H]      ;TX 位数
    CNT_TX     EQU  [66H]      ;TX 次数

    FLAG1      EQU [67H]
    ;/F_guard    EQU [67H].0
    F_first    EQU [67H].1
    ;/Un_Bugle   EQU [67H].2     ;静音
    F_START    EQU [67H].3     ;启动标记
    F_SaveKeyArea EQU [67H].4
    Un_Light   EQU [67H].5
    Open_Light EQU [67H].6     ;第2次振动 OR LOCK ON  ,灯闪烁
    F_run      EQU [67H].7     ;n.串联  ;第2次振动 OR LOCK ON  ,只做一次响应标记
    Temp0      EQU 68H
    COUNT_240ms EQU [69H]
    FLAG2      EQU [6AH]
    F_Rob      EQU [6AH].0     ;防抢标记
    F_DELAY    EQU [6AH].1     ;延时次数
    F_glom     EQU [6AH].2     ;偷
    Relay_Stop EQU [6AH].3     ;Relay stop 释放,延时,防止自身振动连续响应

    come_lockon equ [6ah].4    ;来自 LOCKON 发射标记
    come_vib    equ [6ah].5    ;来自 振动 发射标记
    tx_comeVib  equ [6ah].6    ;决定来自 振动 再次发射标记  在MAIN里扫描
    tx_comelock equ [6ah].7    ;决定来自 LOCKON 再次发射标记  在MAIN里扫描
    
    TX_Data1   EQU  6BH        ;Return  Remote Code 
    TX_Data2   EQU  6CH
    TX_Data3   EQU  6DH
    Re_LOOP    EQU  [6EH]      ;循环次数

   ;----------------------------------
   ;放在同一个单元以便控制断电记忆 
    Memory_ret EQU [6FH]       ;
    F_guard    EQU [6FH].0
    Un_Bugle   EQU [6FH].1     ;静音
   ;----------------------------------  
    F_Auto     EQU [6FH].2     ;允许自动设防标记
    INT_Auto   EQU [6FH].3     ;自动设防中断体
    F_KEY_Auto EQU [6FH].4
    ;/TurnOn_Lock EQU [6FH].5    ;插上钥匙标记
    SAVE_DATA1 EQU [70H]
    SAVE_DATA2 EQU [71H]
    SAVE_DATA3 EQU [72H]
    BUF_STATUS EQU [73H]
    CNT_Auto4s EQU [74H]       ;自动设防计时器
    CNT_Auto   EQU [75H]
    CNT_Auto10s   EQU [76H]
    

    ORG   000H
	JMP   START
  
    ORG   008H
    JMP   SEVER
  
    ORG   0010h;20H
START:
        SZ   TO
    JMP  Re_WDT

   	mov a, 40H;20H;40h
	mov [mp], a               
	mov a,3CH;5CH;3ch
	mov COUNT2,A;[count1], a          
RegClear: 	   
	clr [r0]                           
	inc [mp]	                       
	sdz COUNT2 ;[count1]	            
	jmp RegClear  

Re_WDT:
    CLR    TO
     MOV    A,7D
     MOV   WDTS,A
     MOV    A,87D
     MOV   [TMRC],A
    
    MOV   A,01000100B
    MOV   PAC,A
    MOV   A,00000100B
    MOV   PA,A
    MOV   A,01010000B
    MOV   PBC,A
    ;MOV   A,00H;00000000B
    ;MOV   PB,A
    CLR   PB
    CLR   PCC
    CLR   PGC
    call  Readbyte1  ;断电记忆
    call   ReadRemote     ;恢复保护 Remote code 以免复位清0过后不能正确回传正在使用的遥控器码

;======== 转为输出口,TX  ================

    ;CLR   PBC;SET   PBC       ;输出口,TX
    ;clr   pb;SET   PB;CLR   PB
    ;CLR   PAC.7
    ;CLR   PA

;==========================================

;======= 转为输入口,来接收 ==========
    ;SET    PBC.6  ;转为输入口,接收Remote信号进来
    ;CLR    PB.7   ; RX提供电源,;停止TX ,且开始RX
    ;CLR    PBC.5  ;	TX	输出
    
;=====================================
    ;SET    PAC.2  ;学习
    ;SET    PA.2
    ;SET    PAC.6  ;钥匙输入
    ;CLR    PA.6
    ;SET    PBC.4  ;振动输入   CLR   Vdd_sta             ;恢复引擎
   ;CLR   Flameout
   ; CLR    PB.4
   ; CLR    PCC
MAIN:
    SZ    F_KEY_Auto ; 自动设防
    JMP   KEY_Auto
  CLR    PB.7    ;RX  供电
    CLR   WDT
    CALL   RECEIVE
    SNZ     C
    JMP    RIGHT
    SnZ     F_guard
    JMP   LEARN_ON ;JMP    MAIN
    SnZ   Learn_key;SNZ   Free        ;紧急解除,备用
    JMP   CH_LockOn   ;jmp   key3
  ;------------------------------------
   sz    Tx_ComeLock
   jmp   L_Tx_again
   sz    Tx_ComeVib     ;振动或 LOCKON 再重新发射 3 次
   jmp   Vib_Tx_again
  ;------------------------------------
   SZ    F_START      ;在设防状态下,启动时,不扫描 LockOn,以免报警
   JMP    GU
    SZ    LockOn      ;在报警下 LockOff,时,30s后关闭报警,(30s后中断时间到 clr  f_run )
    JMP   Alarm1      ;         LockOn  时,一直不停的叫
   ;----------------------------------------
    ;在报警下 LockOff,时关
   ;/ SZ    F_glom      ;偷
   ;/ JMP   Alarm1_out  
   ;----------------------------------------
 GU:
    SZ    F_run       ;concatenation :  n.串联
    JMP   MAIN
    SZ    Vib
    JMP   Alarm2
    JMP   MAIN

LEARN_ON:
    SNZ    LockOn
    JMP    Automatism ;JMP    MAIN   自动设防
    SNZ    Learn_key
    CALL   LEARN
    snz    f_rob      ;;防止防抢熄火进入自动设防,同时计时车等不闪烁
    SET    F_Auto     ;在解除下启动或Lockon时,为关钥匙或熄火后,允许进入自动设防做好准备
    ;clr    int_auto
    ;clr    f_key_auto
    ;clr    f_Goto_auto
    ;snz     f_start
    ;clr    [tmrc].ton
    JMP    MAIN

Automatism:           ;自动设防
    ;CLR    TurnOn_lock
    SNZ    F_Auto
    JMP    MAIN

    CLR    F_START    ;关钥匙熄火,进入自动设防
    CLR    CNT_Auto4s;COUNT_4s
    CLR    CNT_Auto;COUNT_30s  
    MOV    A,3d;1d;3D          ;12s
    MOV    CNT_Auto10s,A;CNT10s_30s,A
    CLR    F_Auto
    SET   INT_Auto       ;进入自动设防中断体
    MOV   A,87H
    MOV   [TMRC],A
    CLR   [TMR]
    MOV   A,05H
    MOV   [INTC],A
    SET    [TMRC].TON
    JMP    MAIN
    
CH_Lockon:
    SNZ   Lockon
    JMP   MAIN
    JMP   KEY3           ;解除

RIGHT:

 ;-----------------   
  SET    PB.7;SET    PB.4   ; TX提供电源
    CALL   READBYTE
    ;MOV   A,[DATA3];CALL   READBYTE
    ;AND   A,0F0H

    ;MOV   [CHKDATA3],A  ;不存按键码
    ;MOV   A,[DATA2]
    ;MOV   [CHKDATA2],A
    ;MOV   A,[DATA1]
    ;MOV   [CHKDATA1],A
;-------------
    CALL   KEY_BY_KEY
    SZ     F_KEY1
    JMP    KEY1
    SZ     F_KEY2
    JMP    KEY2
    SZ     F_KEY3
    JMP    KEY3
    SZ     F_KEY4
    JMP    KEY4

    SZ     F_KEY5
    JMP    KEY5
    SZ     F_KEY6
    JMP    KEY6
    ;SZ     F_KEY7
    ;JMP    KEY7
    ;SZ     F_KEY8
    ;JMP    KEY8

    JMP   MAIN


Alarm1:                     ;LOCK ON
    ;**************************************************************************
    ;SNZ    Free  ;紧急解除
    ;JMP    KEY3             ;备用    
    ;**************************************************************************
    SET    F_glom ;偷
    SZ     PB.1   ;防止长发射,且不再进入初始化中断值,让灯闪烁
    JMP    MAIN
    SET    PB.1  ;打开喇叭   ;	在 MAIN 里,LOCK OFF 时,关喇叭
   ;SET   Light ;;;;;;;;;;;;
   CLR   Vdd_sta             ;关闭引擎
   SET   Flameout
    CLR   Relay_Stop      ;Relay stop 释放,延时,防止自身振动连续响应
   CLR   Un_Light
   CLR   COUNT_240ms
      MOV   A,87H
     MOV   [TMRC],A
     CLR   [TMR]
     MOV   A,05H
     MOV   [INTC],A
    CLR   COUNT_4s
    CLR   COUNT_30s
    MOV   A,7D      ;30s
    MOV   CNT10s_30s,A
    CLR   INT_Auto       ;退出自动设防中断体
    SET   [TMRC].TON    

;$$$$$$$$$$$$$$$$$$$$$$$$$

    CLR   Come_vib
    SET   Come_Lockon        ; 来自Lockon 的重新发射

L_TX_again:
    clr   Tx_ComeLock         ;发射后清除,等8s过后中断再置1,再次发射
;$$$$$$$$$$$$$$$$$$$$$$$$$

;=== 回传 ============

 SET    PB.7;SET    PB.4   ; TX提供电源
    MOV    A,60d;120D;13d;3D   ;6s
    MOV    CNT_TX,A
Alarm1_1:
    CALL   TX
    CALL   TX0             ;盗窃回传 07h ;08H
    CALL   TX1
    CALL   TX1
    CALL   TX1
    SDZ    CNT_TX
    JMP    Alarm1_1

    JMP    MAIN
;=======================
;Alarm1_out:         ;在报警下 LockOff,时关
;    CLR    [TMRC].TON
;    CLR    F_run 
;    CLR    F_glom
;    CLR    Bugle
;    CLR    Light
;    CLR    Flameout
;    CALL   DELAY240ms   ;防止自身继电器振动
;    JMP    MAIN


Alarm2:
   SET    PB.7          ; TX提供电源
   CLR   Vdd_sta             ;关闭引擎
   SET   Flameout
   CLR   F_START      ;
    CLR   Relay_Stop      ;Relay stop 释放,延时,防止自身振动连续响应

  ;-------------- 前发 -----------------
    MOV   A,13d;120D;13d;3D     ;6s
    MOV   CNT_TX,A
Alarm2_2:
    CALL   TX
    CALL  TX0
    CALL  TX1            ;振动回传 06H
    CALL  TX1
    CALL  TX0
    SDZ   CNT_TX
    JMP   Alarm2_2
  ;------------------------------------

;$$$$$$$$$$$$$$$$$$$$$$$$$

    SET   Come_vib       ;来自振动的 重新发射
    CLR   Come_Lockon

;;Vib_TX_again:

;$$$$$$$$$$$$$$$$$$$$$$$$$

    SZ     F_first
    JMP    Secend_Vib

    MOV    A,3d;5D                   ;第一次振动
    MOV    COUNT_Vib,A
Alarm2_1:
    SNZ    Un_Bugle
    SET    PB.1
    SET    Light
    CALL   DELAY240ms
    CALL   DELAY240ms
    CLR    PB.1
    CLR    Light
    CALL   DELAY240ms
    CALL   DELAY240ms
    SDZ    COUNT_Vib
    JMP    Alarm2_1
    
    SET   Un_Light

    MOV   A,87H
    MOV   [TMRC],A
    CLR   [TMR]
    MOV   A,05H
    MOV   [INTC],A
    CLR   COUNT_4s
    CLR   COUNT_30s
    MOV   A,4D      ;10s
    MOV   CNT10s_30s,A
    CLR   INT_Auto       ;退出自动设防中断体
    SET   [TMRC].TON
    
    SET   F_first
    CLR   Vdd_sta             ;恢复引擎
    CLR   Flameout
 ;/   CALL  DELAY240ms          ;继电器关闭后等待,防止自身振动报警

Vib_TX_again:
    SET    PB.7          ; TX提供电源
    clr   Tx_ComeVib        ;发射后清除,等8s过后中断再置1,再次发射
;/Quit:
  ;----------  后发射 --------------------
    MOV   A,60d;120D;13d;3D     ;6s
    MOV   CNT_TX,A
Alarm2_2L:
    CALL   TX
    CALL  TX0
    CALL  TX1            ;振动回传 06H
    CALL  TX1
    CALL  TX0
    SDZ   CNT_TX
    JMP   Alarm2_2L
  ;---------------------------------------

   JMP   MAIN

Secend_Vib:                     ;第二次振动
        MOV   A,87H
    MOV   [TMRC],A
    CLR   [TMR]
    MOV   A,05H
    MOV   [INTC],A

    CLR   Un_Light
    CLR   COUNT_240ms  
    
    CLR   COUNT_4s
    CLR   COUNT_30s
    MOV   A,7D      ;30s
    MOV   CNT10s_30s,A
    CLR   INT_Auto       ;退出自动设防中断体
    SET   [TMRC].TON
   
    SNZ   Un_Bugle
    SET   Bugle
    ;SET   Light;;;;;;;;;;;;
    jmp   Vib_TX_again ;quit;JMP   MAIN


KEY_Auto:                ;自动有声设防  
   ;--------------------------
    ;清除所有再次发射
    clr   come_lockon
    clr   come_vib
   ;--------------------------

    CLR   F_KEY_Auto   
    SZ    F_START
    JMP   GoAuto
    SZ    lockon ;f_start;F_guard
    jmp   main        ;插上钥匙后,也计时但不进入自动设防
GoAuto:
    SZ    F_guard
    JMP   MAIN
    ;SZ    TurnOn_Lock;F_Auto      ;插上钥匙后,就不再进入自动设防
    ;JMP   MAIN
    ;/snz   f_start   ;启动时,不扫描 LOCK ON
    ;/CLR   F_START    ;设防或防抢后转为扫描 LOCK ON,以便盗窃报警
    ;/SZ    F_guard
    ;/JMP   KEY1
    ;/SZ    LockOn     ;遥控启动时,LockOn=1
    ;/JMP   ROB        ;在解除状态下,接收到这个键时,进入防抢
    ;SZ    F_run
    ;JMP   Unchain    ;解除报警
    SET   F_guard
    CLR   Relay_Stop      ;Relay stop 释放,延时,防止自身振动连续响应
    CLR    F_glom    ;偷
    CLR   Un_Bugle   ;有声

    SET   Bugle
    SET   Light
    CALL  DELAY_Auto;DELAY240ms
    CLR   Bugle

⌨️ 快捷键说明

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