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

📄 lsp(70917).asm

📁 这是一个摩托车防盗报警程序,请大家看后提出宝藏的意
💻 ASM
字号:
;刘思平2007年9月14号编订
;*********************************************
;具体功能说明:
;本程序在基本功能上和其他四键防盗器相同。
;可以设置开钥匙和关钥匙语音,此两段语音。
;六音报警:
;*********************************************
;单片机解码模块原代码
 /* TCC             EQU        0x01
  R2              equ        0x02    
  R3              EQU        0x03
  port5           EQU        0x05      
  port6           EQU        0x06    ;状态标志位    
  KEY_STATUS      EQU        0X10    ;低半字节为按键标志,高半字节为控制标志
  SIGNAL_LOW      EQU        0X11    ;信号电平低计数器
  SIGNAL_HIGH     EQU        0X12    ;信号电平高计数器
  DATA_RECORDER   EQU        0X13    ;接收码数据字节
  CODE_RECORDER2  EQU        0X14    ;接收码地址高字节
  CODE_RECORDER1  EQU        0X15    ;接收码地址低字节
  CODE_TOTAL      EQU        0X16    ;接收数据位计数器
  KEY_COUNTER     EQU        0X17    ;两次按键检测计数器
  DELAYL          equ        0x18    ;暂用延时寄存器标志
  NUMBER          equ        0x19    ;暂用振动数据寄存器标志
  DELAY0          equ        0x20    ;暂用振动数据寄存器标志
  SEN             equ        0x21    ;暂用振动状态寄存器标志
  TIME1           equ        0x22    ;暂用声音状态寄存器标志
;******************KEY_STATUS标志位定义
;**************************************
  AUTORUN_KEY     EQU        0        ;遥控键标志
  LOCK_KEY        EQU        1        ;防盗键标志
  SEARCH_KEY      EQU        2        ;寻车键标志
  OPEN_KEY        EQU        3        ;解除键标志
  PRESS_FLAG      EQU        4        ;有键按下标志
  CHECK_FLAG      EQU        5        ;校验标志
 ;*********************************************************
 ;*********************************************************
  CODE_ADDRESS1   EQU    0B10001100;遥控器地址码,更改常数即可实现其他遥控器收码
  CODE_ADDRESS2   EQU    0B00101100
  AUTORUN_VALUE   EQU    0B00000011;遥控器相应键值,改变相应数值即可更改其功能
  LOCK_VALUE      EQU    0B00001100
  SEARCH_VALUE    EQU    0B00110000
  OPEN_VALUE      EQU    0B11000000  
 ;**********当PORT6.2口电平为高时调用该程序收码
 ;************PORT6.1为信号输入口
 colleck_2262:
    mov     a,@0xf0
    and     KEY_STATUS,a
    clr     CODE_TOTAL
    clr     signal_high
collectL:
    inc     signal_high
    mov     a,SIGNAL_HIGH
    SUB     A,@30
    JBS     R3,0
    RET
    CLR     signal_low
    call    delay20us
    jbs     port6,1
    jmp     colleck_low
    jmp     collectL
colleck_low:  
    mov   a,signal_high ;信号高电平宽度<80US时滤除
    sub   a,@4
    jbc   r3,0  
    ret 
    mov   a,@20         ;信号高电平宽度在80-400US时为采集为0
    sub   a,signal_high ;信号高电平宽度在400US以上时为采集为1
    rrc   data_recorder
    rrc   code_recorder2
    rrc   code_recorder1
    inc   CODE_TOTAL
    clr   signal_high
    mov   a,@24
    xor   a,CODE_TOTAL
    jbc   r3,2
    jmp   collect_end
 input_low:
    inc   signal_low 
    mov   a,signal_low          ;信号低电平宽度大于800US时滤除
    sub   a,@40
    jbs   r3,0
    ret
    call  delay20us
    jbs   port6,2               ;3
    jmp   input_low
    jmp   collectl
 collect_end:
    mov   a,code_recorder1      ;校验低字节地址
    xor   a,@code_address1
    jbs   r3,2
    ret
    mov   a,code_recorder2      ;校验高字节地址
    xor   a,@code_address2
    jbs   r3,2
    ret
    jbs   key_status,check_flag ;是否是第一串收码?
    jmp   storage_data
    bc    key_status,check_flag
    mov   a,com_data_rec
    xor   a,data_recorder
    jbs   r3,2
    jmp   storage_data
    mov   a,data_recorder
    xor   a,@autorun_value      ;是启动键?  
    jbs   r3,2
    jmp   key1
    bs    KEY_STATUS,autorun_key ;置启动键标志
    bs    KEY_STATUS,press_flag  ;置有键按下标志
    clr   key_counter            ;清除按键间隔计数器
    ret
 key1:
    mov   a,data_recorder
    xor   a,@open_value     ;是解除键?
    jbs   r3,2
    jmp   key2
    bs    KEY_STATUS,open_key
    bs    KEY_STATUS,press_flag
    clr   key_counter
    ret
 key2:
    mov  a,data_recorder
    and  a,@0x0c           ;同时有两个键按下时不为0X30
    xor  a,@lock_value     ;是防盗键?
    jbs  r3,2
    jmp  key3
    bs   KEY_STATUS,lock_key
    bs   KEY_STATUS,press_flag
    clr  key_counter
 key3:
    mov  a,data_recorder
    and  a,@0x30
    xor  a,@search_value  ;是寻车键?
    jbs  r3,2
    ret
    bs    KEY_STATUS,open_key
    bs    KEY_STATUS,press_flag
    clr   key_counter
    ret
storage_data:              ;第一次收码存储数据字节
     bs    KEY_STATUS,press_flag
     mov  a,data_recorder  
     mov  com_data_rec,a
     ret
delay20us:
     wdtc
     mov    a,@3           ;9
     mov    DELAYL,a
delay20us_1:
     nop
     djz    DELAYL
     JMP    delay20us_1
     ret
;*********************************
; 检测振动模块原代码:
         ; 数据寄存器定义
     NUMBER0       EQU   0X1D      ;振动宽度计数器  
     GRADEDATA     EQU   0X1E      ;当前灵敏度
     COM_DATA_REC  EQU   0X1F      ;上一次数据寄存器
;********************************************
          ;PSW位定义
     TCINTBIT      EQU   0         ;中断计数标志位,约为750ms(TCC Rate=1:256)
     VIBRABIT      EQU   1         ;是否达到当前灵敏度宽度,即是否有振动
CHECK_Vibra:
     CLR    NUMBER
     CLR    TCC
     CLR    NUMBER0
     BC     R2,TCINTBIT
CELLECTION_L:                      ;采集数据子程序
     MOV    A,@89                  ;730ms
     SUB    A,NUMBER
     JBC    R3,0
     BS     R2,TCINTBIT          
     JBC    R2,TCINTBIT   
     JMP    CELLECTION_CN4         ;是否超时
     jbs    port6,5
     jmp    cellection_l
CELLECTION:
     JBS    PORT6,5
     JMP    CELLECTION_END
     MOV    A,@53                  ;DELAY  60us
     call   delay0
     inc    number0
     jmp    CELLECTION
CELLECTION_END:
     MOV    A,GRADEDATA            ;比较振动灵敏度
     SUB    A,NUMBER0
     JBS    R3,0
     JMP    CLRNUMBER0
     CLR    NUMBER0
     BS     R2,VibraBIT          ;置检测到振动标志
     RET
CELLECTION_CN4:
     CLR    NUMBER0
     BC     R2,TCINTBIT
     BC     R2,VibraBIT
     RET
CLRNUMBER0:
     CLR    NUMBER0
     JMP    CELLECTION_L
;**********************************
  */
; 警报发声模块原代码
;注:警报音频率为1.8K到3.5K之间,具体请查资料
  ; OSCILLATION:R/C=晶振   CLOCK=2
  ; Frequency=4MHZ
;****************************
;****************************
     Fre_COUNT   EQU     0X37  ;声音频率变化计数器,从1.8~3.55KHZ
     Fre_Repeat  EQU     0X38  ;同一频率的重复次数
     SOUND_TEMP  EQU     0X39
     S_Loop      EQU     67
     S_MAX       EQU     138
     S_MIN       EQU     71
     S_Repeat    EQU     4
;开始0.2秒发音************************
SOUND200ms:
SOUND_LH:      ;1.8-3.55KHz
      MOV    A,@S_Loop         ;66=134-68
      MOV    Fre_COUNT,A
SOUND_LH_LP:
      MOV    A,@S_Repeat
      mov    Fre_Repeat,A
      MOV    A,Fre_COUNT
      ADD    A,@S_MIN         
REPEAT0_LP:
      BS     PORT6,0
      CALL   SOUNDDELAY0
      BC     PORT6,0
      CALL   SOUNDDELAY0
      DJZ    Fre_repeat
      JMP    repeat0_lp
      DJZ    Fre_COUNT
      JMP    SOUND_LH_LP
SOUND_HL:                      ;3.55-1.8KHz
      MOV     A,@S_Loop       ;66=134-68
      MOV     Fre_COUNT,A 
SOUND_HL_LP:                   ;3.55-1.8KHz
      MOV    A,@S_Repeat
      MOV    Fre_Repeat,A
      MOV    A, Fre_COUNT
      SUB    A,@S_MAX          
REPEAT1_LP:
      BS     PORT6,0
      CALL   SOUNDDELAY0
      BC     PORT6,0
      CALL   SOUNDDELAY0
      DJZ    Fre_Repeat
      JMP    repeat1_lp
      DJZ    Fre_COUNT
      JMP    SOUND_HL_LP
SOUND_END:
      RET
 ;*******************************************
 Sound2s:            ;2S内短鸣两声
 WARNING1:
        CALL     Sound200ms 
        CALL     Delay800ms 
        CALL     Sound200ms 
        CALL     Delay800ms 
        RET
Delay800ms :
        CLR      TIME1    ;get ready for 0.8 second delay.
Sound_delay:
        MOV      A,@196   ;delay0.8second
        SUB      A,TIME1
        JBS      R3,0
        JMP      Sound_delay
        RET
;********************************************
 Sound15s:                   ;连续报警15S
 WARNING2:
          MOV  A,@73
          MOV  SOUND_TEMP,A
Soundls_lp:
          CALL Sound200ms    
          JBC  PORT6,4       ;SDT上电立即中断报警
          RET
          DJZ  SOUND_TEMP
          JMP  Soundls_lp
          ret
 ;***************************
 ;***************************
         SOUNDDELAY1   EQU   0X3A
sounddelay:
         mov    a,@18          
         mov    sounddelay1,a   ;=(A*9)+3
  SOUNDDELAY0:
         wdtc
sounddelayus_1: 
        nop
        nop
        nop
        nop
        nop
        nop
        djz   sounddelay1
        jmp   sounddelayus_1
        ret























⌨️ 快捷键说明

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