📄 5048.asm
字号:
P_REMOTE BIT P3.5 ;*** VOL+ 输入脚
IBC_VOLS BIT P2.0 ;*** VOL- 输入脚
EXTRN BIT(ICW2_FLG) ;正转到位标志位(*作为函数返回值), 开机时清0 !!!
EXTRN BIT(ICCW2_FLG) ;反转到位标志位(*作为函数返回值), 开机时清0 !!!
EXTRN BIT(ICW1_FLG) ;正转起始标志位, 开机时清0 !!!
EXTRN BIT(ICCW1_FLG) ;反转起始标志位, 开机时清0 !!!
EXTRN DATA(IROTE_DIRECT) ;=1 为正向,=2为反向, 方向暂存
EXTRN DATA(RKEY_NUM) ;现键值寄存
EXTRN BIT(B_RKEY) ;有remote key时置1, 注:主程序检测该位后清0
EXTRN DATA(RKEY_SPEED) ;连发灵敏度计数, 开机时初始化
EXTRN DATA(RKEY_KEEP) ;连发的监控计时数
;遥控完整读入的4个字节存放数组 uchar rmbyte_in[4]
EXTRN DATA(RMBYTE_IN) ;第1字节 -- 用户码1存放 ,RMBYTE_IN
;第2字节 -- 用户码2存放 ,RMBYTE_IN+01H
;第3字节 -- 键码存放 ,RMBYTE_IN+02H
;第4字节 -- 键码的反码存放 ,RMBYTE_IN+03H
;************ 公共变量定义 ****************
PUBLIC GET_REMOTE
;************** 常数定义 ******************
USER_CODE1 EQU 20H ;remote user_code low 8bit(用户码1)
USER_CODE2 EQU 0DFH ;remote user_code high 8bit(用户码2)
CANT_FIND EQU 0AEH ;remote key not find(无键标识)
N_RKEY_KEEP EQU 02H ;允许连发的停顿时间 0.2ms
;;====================================================================
;; REMOTE READ
;;====================================================================
REMO_READ:
CLR EA
CLR ERR_DATA
READ_9MS:
MOV TH0,#00H
MOV TL0,#00H
SETB TR0
JUDGE2:
MOV A,TH0
CJNE A,#4,GREAT2 ;;2MS
GREAT2:
JNC REMO_EXIT ;; T>2MS EXIT
SETB P_REMOTE
NOP
JNB P_REMOTE,JUDGE2 ;;P_REMOTE=0 WAIT
MOV TH0,#0H
MOV TL0,#0H
JUDGE5:
MOV A,TH0
CJNE A,#04H,GREAT2 ;;~=1MS;;06H=1.536MS
GREAT2:
JNC REMO_EXIT
JNB P_REMOTE,JUDGE5
JNB F_REMOTE_P,REMO_EXIT
CLR TR0
MOV PRO_K_DELAY,#0FH
LJMP REMO_PRO
NEW_JUD:
CLR ERR_DATA
CODE1_READ:
LCALL READ_DATA
JB ERR_DATA,REMO_EXIT
MOV A,REMO_BUF
CHECK_CUS:
CJNE A,#CUS_CODE,REMO_EXIT
CODE2_READ:
LCALL READ_DATA
JB ERR_DATA,REMO_EXIT
MOV A,REMO_BUF
CHECK_CODE:
CPL A
CJNE A,#CUS_CODE,REMO_EXIT
DATA1_READ:
LCALL READ_DATA
JB ERR_DATA,REMO_EXIT
MOV REMO_DATA,REMO_BUF
DATA2_READ:
LCALL READ_DATA
JB ERR_DATA,REMO_EXIT
MOV A,REMO_BUF
CHECK_DATA:
CPL A
CJNE A,REMO_DATA,REMO_EXIT
CLR TR0
CLR F_REMOTE_P
SETB RK_S
SJMP REMO_PRO
REMO_EXIT:
SETB ERR_DATA
CLR TR0
RET
;;====================================================================
;; READ DATA
;;====================================================================
READ_DATA:
MOV B,#08H
READ_BYTE:
CLR TR0
MOV TH0,#00H ;;256US TIMING
MOV TL0,#00H ;;1US TIMING
SETB TR0 ;;START CT1
JB P_REMOTE,ERR_READ
JUDGE1:
MOV A,TH0
CJNE A,#04H,F_READ ;;1.0--1.3MS
F_READ:
JNC ERR_READ ;;>=1.2MS ERR_READ
JNB P_REMOTE,JUDGE1
MOV TH0,#0H
MOV TL0,#0H
JUDGE2:
MOV A,TH0
CJNE A,#09H,F1_READ ;;2.0--2.3MS
F1_READ:
JNC ERR_READ ;;>=2.3MS ERR_READ
JB P_REMOTE,JUDGE2
MOV A,TH0 ;;1.0--1.3MS
CJNE A,#04H,F0_READ ;;<=1.0MS READ0
F0_READ:
JC READ0
READ1:
SETB C ;;1.0<T<2.3 READ1
SJMP WRITEBUF
READ0:
CLR C
WRITEBUF:
MOV A,REMO_BUF
RRC A
MOV REMO_BUF,A
DJNZ B,READ_BYTE
RET
ERR_READ:
SETB ERR_DATA
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -