📄 de2262.asm
字号:
REM EQU P3.2
EnableFlag equ 20H.0
dat equ 21H
add2 equ 22H
add1 equ 23H
pro_dat equ 24h
pro_add2 equ 25h
pro_add1 equ 26h
;CODE_ADDRESS1 EQU 01111101B
;CODE_ADDRESS2 EQU 01110001B
;CODE_DATA EQU 00000011B
CODE_ADDRESS1 EQU 7DH ;地址高字节
CODE_ADDRESS2 EQU 71H ;地址低字节
CODE_CF_DATA EQU 00000011B ;撤防
CODE_LS_DATA EQU 00001100B ;留守
CODE_JJ_DATA EQU 00110000B ;紧急
CODE_BF_DATA EQU 11000000B ;布防
org 00H
ajmp startup
org 100H
startup:
mov SP,#0C0H
main: acall remote
jnc main
; mov a,dat
; anl a,#03h
; xrl a,#1
; jnz main
; mov p1,#0
; ajmp main
mov a,add1
xrl a,#CODE_ADDRESS1
jnz main0
mov p1,#0
mov a,add2
xrl a,#CODE_ADDRESS2
jnz main
mov p1,#0
ajmp main
main0: mov a,add2
xrl a,#CODE_ADDRESS1
jnz main1
mov p1,#0
mov a,add1
xrl a,#CODE_ADDRESS2
jnz main
mov p1,#0
ajmp main
main1: mov a,add1
xrl a,#CODE_ADDRESS2
jnz main2
mov p1,#0
ajmp main
main2: mov a,add2
xrl a,#CODE_ADDRESS2
jnz main
mov p1,#0
ajmp main
remote: ;检测50ms内有没有编码接收
push 5
push 6
push 7
mov r6,#50
remote_0: mov r7,#125 ;8us x 125 = 1ms
remote_1: jb REM,rem0 ;4 clock
djnz r7,remote_1 ;4 clock
djnz r6,remote_0
clr EnableFlag
remote_end: clr c
pop 7
pop 6
pop 5
ret
rem0: jb EnableFlag,remote_end ;按键没有放开则返回
mov r5,#24 ;接收24位编码
;mov r5,#2
;解码
;先找出接收码的开头,即5ms左右的低电平
;设置高电平时间为4--6ms
;检测和等待4ms的低电平
rem1: mov r6,#45;40
rem2: mov r7,#125
rem3: jb REM,rem1
djnz r7,rem3
djnz r6,rem2
;等待在2ms内接收到的低电平
mov r6,#10;20
rem4: mov r7,#125
rem5: ;4ms到6ms内接收到下降沿,则跳去解码,否则返回
jb REM,rem6
djnz r7,rem5
djnz r6,rem4
;超出6ms, 接收错误,返回
clr EnableFlag
ajmp remote_end
rem6: ;等待300us后, 采集接收信号
mov r7,#75
djnz r7,$
;采集接收信号,并记录
; mov p1,#0
mov c,REM
mov a,dat
rlc a
mov dat,a
mov a,add2
rlc a
mov add2,a
mov a,add1
rlc a
mov add1,a
;等待第二个上升烟
jb REM,$
jnb REM,$
djnz r5,rem6
setb EnableFlag
setb c
pop 7
pop 6
pop 5
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -