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

📄 rx.asm

📁 本代码 只要配上射频发射和接收模块既可使用
💻 ASM
字号:
;------------------------------------------
;接收电路,汇编源代码
;------------------------------------------
;型号:PIC12C508A  configuration=00001110
;------------------------------------------
     ORG   0
     MOVLW   0xC5  ;设定时方式
     OPTION
     MOVLW   0x38  ;设I\O口
     TRIS     6
     MOVLW   0x00  ;输出0
     MOVWF   6
     MOVLW  0xAA  ;设码1
     MOVWF  7
     MOVLW  0xAA   ;设码2
     MOVWF  8
     MOVLW   0x06  ;输出报警1
     MOVWF   6
     CALL    LD6
     MOVLW   0x00  ;输出报警0
     MOVWF   6
     MOVLW   0x02   ;报警倒计时
     MOVWF    13
     MOVLW   0x05   ;灭灯定时次数
     MOVWF    25
     CLRF    6
     CLRF    9
     CLRF    11
     BTFSS   6,4    ;=1就跳
     GOTO   LOOB   ;寻找模式
     GOTO   LOOA   ; 监控工作模式
;----------------------------
;子程序区
;-----------------------------
;0.8秒等待带报警输出程序   OK
;----------------------------
LOOC  MOVF   13,1
      BTFSS  3,2    ;Z=1 既F13=0 就跳
      GOTO   LV1
      BTFSS   6,1   ;是否在报警 是就跳
      GOTO   ADE
      MOVLW   0x00  ;输出报警0
      MOVWF   6
      GOTO   LV2
ADE   MOVLW   0x06  ;输出报警1   80MS
      MOVWF   6
      CALL   LD6
      CALL   LD6
      CALL   LD6
      CALL   LD6
      MOVLW   0x00  ;输出报警0
      MOVWF   6
LV2   MOVLW   0x2   ;定时次数   0.5S
      MOVWF    17
      GOTO    POP
LV1   MOVLW   0x3   ;定时次数   1S
      MOVWF    17
POP   MOVLW   0xA   ;200MS 定时
      MOVWF    18
LOD   CALL    LD6
      DECFSZ  18,1
      GOTO    LOD   ;200ms定时末到
      DECFSZ  17,1  ;-1等于0就跳
      GOTO    POP   ;1秒末到
      BTFSS   6,4    ;=1 跳A模式
      GOTO   LOOB   ;寻找模式
      DECFSZ  25,1  ;-1等于0就跳
      GOTO    LPQ
      BSF   6,2     ;开灯
      MOVLW   0x05   ;灭灯定时次数
      MOVWF    25
LPQ   MOVF   13,1  ;是否该报警
      BTFSC  3,2    ;Z=0 既F13=1 就跳
      GOTO   LOFD
      DECFSZ  13,1  ;-1等于0就跳
      GOTO   LOOA
      GOTO   LOFD   ;去报警程序
;----------------------------------------------
;存储程序区   OK
;---------------------------------------------
LOOE  RRF   9,1    ;右移
      BCF   9,7
      RETLW  0x00
LOOF  RRF   9,1    ;右移
      BSF   9,7
      RETLW  0x00
LOAB  RRF   11,1    ;右移
      BCF   11,7
      RETLW  0x00
LOAC  RRF   11,1    ;右移
      BSF   11,7
      RETLW  0x00

;-------------------------------------
;结果对比
;-----------------------------------------
LOAA  MOVF   7,0  ;F30到F27
      MOVWF  12
      MOVF   8,0  ;F29到F26
      MOVWF  14
      MOVF  12,0    ;F到W
      SUBWF  9,0
      BTFSS  3,2    ;Z=1 既结果相等 就跳
      GOTO   LC1
      MOVF  14,0    ;F到W
      SUBWF 11,0
      BTFSS  3,2    ;Z=1 既结果相等 就跳
      GOTO   LC1
      BTFSS   6,4    ;=1就跳
      GOTO   LC3     ;寻找模式
      MOVLW  0x00   ;收到码 清报警
      MOVWF   6
      MOVLW  0x02   ;收到码 清报警
      MOVWF  13
      GOTO   LOOC
LC3   MOVLW  0x0    ;收到码 清报警
      MOVWF  13
      GOTO   LOOC
LC1   BTFSS   6,4    ;=1就跳
      GOTO   LC4     ;寻找模式
      GOTO   LOOC
LC4   MOVLW  0x02    ;收到码 清报警
      MOVWF  13
      GOTO   LOOC

;----------------------------------------------
;定时程序   OK
;----------------------------------------------
LD1   CLRF    1     ;定时器清零
      MOVLW  0xC7   ;定时器分频比1:256
      OPTION
      MOVLW   0x38  ;设I\O口
      TRIS     6
LS1   MOVLW   0x14  ;定时时间 5ms
      CLRWDT        ;清狗
      SUBWF  1,0    ;F减W
      BTFSS  3,2    ;Z=1 既结果相等 就跳
      BTFSC  3,0    ;C=0 即结果为负 就跳
      RETLW  0x00   ;时间到
      GOTO   LS1    ;时间末到

LD2   CLRF    1     ;定时器清零
      MOVLW  0xC7   ;定时器分频比1:256
      OPTION
      MOVLW   0x38  ;设I\O口
      TRIS     6
LS2   MOVLW   0x5  ;定时时间 1.5ms
      CLRWDT        ;清狗
      SUBWF  1,0    ;F减W
      BTFSS  3,2    ;Z=1 既结果相等 就跳
      BTFSC  3,0    ;C=0 即结果为负 就跳
      RETLW  0x00   ;时间到
      GOTO   LS2    ;时间末到

LD3   CLRF    1     ;定时器清零
      MOVLW  0xC7   ;定时器分频比1:256
      OPTION
      MOVLW   0x38  ;设I\O口
      TRIS     6
LS3   MOVLW   0xB  ;定时时间 3ms
      CLRWDT        ;清狗
      SUBWF  1,0    ;F减W
      BTFSS  3,2    ;Z=1 既结果相等 就跳
      BTFSC  3,0    ;C=0 即结果为负 就跳
      RETLW  0x00   ;时间到
      GOTO   LS3    ;时间末到

LD4   CLRF    1     ;定时器清零
      CLRWDT        ;清狗
      MOVLW  0xC6   ;定时器分频比1:128
      OPTION
      MOVLW   0x38  ;设I\O口
      TRIS     6
LS4   MOVLW   0x7  ;定时时间  1ms
      SUBWF  1,0    ;F减W
      BTFSS  3,2    ;Z=1 既结果相等 就跳
      BTFSC  3,0    ;C=0 即结果为负 就跳
      RETLW  0x00   ;时间到
      GOTO   LS4    ;时间末到

LD5   CLRF    1     ;定时器清零
      CLRWDT        ;清狗
      MOVLW  0xC7   ;定时器分频比1:256
      OPTION
      MOVLW   0x38  ;设I\O口
      TRIS     6
LS5   MOVLW   0x5  ;定时时间  1.3ms
      SUBWF  1,0    ;F减W
      BTFSS  3,2    ;Z=1 既结果相等 就跳
      BTFSC  3,0    ;C=0 即结果为负 就跳
      RETLW  0x00   ;时间到
      GOTO   LS5    ;时间末到

LD6   CLRF    1     ;定时器清零
      MOVLW   0x38  ;设I\O口
      TRIS     6
      MOVLW  0xC7   ;定时器分频比1:256
      OPTION
LS6   MOVLW   0x4E  ;定时时间 20ms
      CLRWDT        ;清狗
      SUBWF  1,0    ;F减W
      BTFSS  3,2    ;Z=1 既结果相等 就跳
      BTFSC  3,0    ;C=0 即结果为负 就跳
      RETLW  0x00   ;时间到
      GOTO   LS6    ;时间末到
;------------------------------
;主程序区
;------------------------------
LOOB  BCF   6,2     ;关灯
      MOVLW  0x02    ;收到码 清报警
      MOVWF  13
LOOA  MOVLW   0x27  ;倒数次数前 定时1900ms
      MOVWF    17
LH2   MOVLW   0x2A  ;倒数次数后 定时50ms
      MOVWF    18
LH3   MOVLW   0xC8  ;倒数次数后 定时1.2ms
      MOVWF    19
LH4   BTFSC   6,3   ;测信号,无输入就跳
      GOTO    LH1
      DECFSZ  19,1  ;-1等于0就跳
      GOTO    LH4
      CLRWDT        ;清狗
LH5   DECFSZ  18,1  ;-1等于0就跳
      GOTO   LH3    ;时间末到
LL1   BCF   6,2     ;关灯
      DECFSZ  17,1  ;-1等于0就跳
      GOTO    LH2
      BTFSS   6,4    ;=1就跳
      GOTO   LOB     ;寻找模式
      GOTO   LOFD  ;1.8秒没信号去报警
LOB   BSF   6,2     ;开灯
      MOVLW   0x27  ;倒数次数前 定时1900ms
      MOVWF    17
      MOVLW   0x2A  ;倒数次数后 定时50ms
      MOVWF    18
BA3   MOVLW   0xC8  ;倒数次数后 定时1.2ms
      MOVWF    19
BA4   BTFSC   6,3   ;测信号,无输入就跳
      GOTO    LH1
      DECFSZ  19,1  ;-1等于0就跳
      GOTO    BA4
      CLRWDT        ;清狗
BA5   DECFSZ  18,1  ;-1等于0就跳
      GOTO   BA3    ;时间末到
      GOTO  LOOB

LH1   CALL    LD5   ;定时时间 1.3ms
      BTFSC   6,3   ;测信号=0就跳
      GOTO    LH5   ;去报警
      CALL    LD4   ;定时时间 1024us
      BTFSS   6,3   ;测信号,=1就跳
      GOTO    LH5   ;去报警
      CALL   LD2    ;定时时间 1.5ms
      MOVLW   0x08  ;接收次数
      MOVWF    15
      MOVLW   0x08  ;接收次数
      MOVWF    16
LH6   MOVLW   0x64  ;倒数次数前 定时3ms
      MOVWF    17
LH8   MOVLW   0x3C  ;倒数次数后 定时0.3ms
      MOVWF    18
LH7   BTFSC   6,3   ;测信号,=0就跳
      GOTO    LH9
      DECFSZ  18,1  ;-1等于0就跳
      GOTO   LH7    ;时间末到
      DECFSZ  17,1  ;-1等于0就跳
      GOTO   LH8    ;时间末到
      GOTO   LL1
LH9   CALL   LD1    ;定时时间 5ms
      BTFSS   6,3   ;测信号,=1就跳
      GOTO   LL1   ;去报警
      CALL   LD4    ;定时时间 1ms
      BTFSC   6,3   ;测信号=0就跳
      GOTO   LL1    ;去报警
      MOVLW   0xCC  ;倒数次数前 定时1ms
      MOVWF    17
LK2   BTFSC   6,3   ;测信号,=0就跳
      GOTO    LK1
      DECFSZ  17,1  ;-1等于0就跳
      GOTO    LK2
      GOTO   LOOC
LK1   CALL    LD3  ;定时时间 3ms
LAD   BTFSS  6,3    ;测信号,=1就跳
      GOTO    KK1   ;D0=0
      GOTO   KK2   ;D0=1
KK1   CALL  LOOE
      GOTO  LOOG
KK2   CALL  LOOF
LOOG  CALL   LD3
      DECFSZ  15,1  ;-1等于0就跳
      GOTO   LH6
      BCF    6,2    ;关灯
LG6   MOVLW   0x64  ;倒数次数前 定时3ms
      MOVWF    17
LG8   MOVLW   0x3C  ;倒数次数后 定时0.3ms
      MOVWF    18
LG7   BTFSC   6,3   ;测信号,=0就跳
      GOTO    LG9
      DECFSZ  18,1  ;-1等于0就跳
      GOTO   LG7    ;时间末到
      DECFSZ  17,1  ;-1等于0就跳
      GOTO   LG8    ;时间末到
      GOTO   LOOC
LG9   CALL   LD1    ;定时时间 5ms
      BTFSS   6,3   ;测信号,=1就跳
      GOTO   LOOC   ;去报警
      CALL   LD4    ;定时时间 1ms
      BTFSC   6,3   ;测信号=0就跳
      GOTO   LOOC   ;去报警
      MOVLW   0xCC  ;倒数次数前 定时1ms
      MOVWF    17
LG2   BTFSC   6,3   ;测信号,=0就跳
      GOTO    LG1
      DECFSZ  17,1  ;-1等于0就跳
      GOTO    LG2
      GOTO   LOOC
LG1   CALL    LD3  ;定时时间 3ms
      BTFSS  6,3    ;测信号,=1就跳
      GOTO    KK3   ;D1=0
      GOTO    KK4   ;D1=1
KK3   CALL   LOAB
      GOTO   LOAD
KK4   CALL   LOAC
LOAD  CALL   LD3
      DECFSZ  16,1  ;-1等于0就跳
      GOTO    LG6
      GOTO   LOAA  ;收完,去对比
;--------------------------------------------
;报警程序
;--------------------------------------------
LOFD  MOVLW   0x06  ;输出报警1
      MOVWF   6
      MOVLW   0x32  ;输出报警 定时60ms
      MOVWF   17
LA1   MOVLW   0xFF  ;输出报警 定时1.2ms
      MOVWF   18
LCB   BTFSC   6,3   ;测信号,无输入就跳
      GOTO    LCD
      DECFSZ  18,1  ;-1等于0就跳
      GOTO    LCB
      CLRWDT        ;清狗
LA4   DECFSZ  17,1  ;-1等于0就跳
      GOTO    LA1
LA5   MOVLW   0x01  ;输出报警0
      MOVWF    6
      MOVLW   0xFA  ;输出报警0 定时 500ms
      MOVWF   17
LA3   MOVLW   0xFF  ;输出报警 定时2ms
      MOVWF   18
LA2   BTFSC   6,3   ;测信号,无输入就跳
      GOTO    LCD
      NOP
      NOP
      NOP
      DECFSZ  18,1  ;-1等于0就跳
      GOTO    LA2
      CLRWDT        ;清狗
LA8   DECFSZ  17,1  ;-1等于0就跳
      GOTO    LA3
      GOTO   LOFD   ;时间到
LCD   CALL    LD5   ;定时时间 1.3ms
      BTFSC   6,3   ;测信号=0就跳
      GOTO    LA9     ;去报警
      CALL    LD4   ;定时时间 1024us
      BTFSS   6,3   ;测信号,=1就跳
      GOTO    LA9   ;去报警
      CALL   LD2    ;定时时间 1.5ms
      MOVLW   0x08  ;接收次数
      MOVWF    15
      MOVLW   0x08  ;接收次数
      MOVWF    16
LC6   MOVLW   0x64  ;倒数次数前 定时3ms
      MOVWF    17
LC8   MOVLW   0x3C  ;倒数次数后 定时0.3ms
      MOVWF    18
LC7   BTFSC   6,3   ;测信号,=0就跳
      GOTO    LC9
      DECFSZ  18,1  ;-1等于0就跳
      GOTO   LC7    ;时间末到
      DECFSZ  17,1  ;-1等于0就跳
      GOTO   LC8    ;时间末到
      GOTO   LA9
LC9   CALL   LD1    ;定时时间 5ms
      BTFSS   6,3   ;测信号,=1就跳
      GOTO   LA8    ;去报警
      CALL   LD4    ;定时时间 1ms
      BTFSC   6,3   ;测信号=0就跳
      GOTO   LA8    ;去报警
      MOVLW   0xCC  ;倒数次数前 定时1ms
      MOVWF    17
LT2   BTFSC   6,3   ;测信号,=0就跳
      GOTO    LT1
      DECFSZ  17,1  ;-1等于0就跳
      GOTO    LT2
      GOTO   LOOC
LT1   CALL    LD3  ;定时时间 3ms
      BTFSS  6,3    ;测信号,=1就跳
      GOTO   AK1   ;D0=0
      GOTO   AK2   ;D0=1
AK1   CALL  LOOE
      GOTO  LOGG
AK2   CALL  LOOF
LOGG  CALL   LD3
      DECFSZ  15,1  ;-1等于0就跳
      GOTO   LC6
      MOVLW   0x00  ;输出报警0
      MOVWF    6
LQ6   MOVLW   0x64  ;倒数次数前 定时3ms
      MOVWF    17
LQ8   MOVLW   0x3C  ;倒数次数后 定时0.3ms
      MOVWF    18
LQ7   BTFSC   6,3   ;测信号,=0就跳
      GOTO    LQ9
      DECFSZ  18,1  ;-1等于0就跳
      GOTO   LQ7    ;时间末到
      DECFSZ  17,1  ;-1等于0就跳
      GOTO   LQ8    ;时间末到
      GOTO   LOOC
LQ9   CALL   LD1    ;定时时间 5ms
      BTFSS   6,3   ;测信号,=1就跳
      GOTO   LOOC   ;去报警
      CALL   LD4    ;定时时间 1ms
      BTFSC   6,3   ;测信号=0就跳
      GOTO   LOOC   ;去报警
      MOVLW   0xCC  ;倒数次数前 定时1ms
      MOVWF    17
LQ2   BTFSC   6,3   ;测信号,=0就跳
      GOTO    LQ1
      DECFSZ  17,1  ;-1等于0就跳
      GOTO    LQ2
      GOTO   LOOC
LQ1   CALL    LD3  ;定时时间 3ms
      BTFSS  6,3    ;测信号,=1就跳
      GOTO    AK3   ;D1=0
      GOTO    AK4   ;D1=1
AK3   CALL   LOAB
      GOTO   LODD
AK4   CALL   LOAC
LODD  CALL   LD3
      DECFSZ  16,1  ;-1等于0就跳
      GOTO    LQ6
      GOTO    LOAA  ;收完,去对比
LA9   BTFSS   6,1   ;是否在报警 是就跳
      GOTO   LA8
      GOTO   LA4
      END





⌨️ 快捷键说明

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