REMOTE: CLR RECEIVE ; ;检测50ms 内有没有编码接收 ; MOV 3AH,#55 ; REMOTEA: MOV 3BH,#250 ; REMOTEB: JB REM,REMOTE0 ;有码发送则跳转 DJNZ 3BH,REMOTEB ; DJNZ 3AH,REMOTEA ; REMOTE_END_1: CLR ENABLE_DETE ; REMOTE_END: CLR REMOTING ;清除探头检测标志 RET ; REMOTE0: JB ENABLE_DETE,REMOTE_END_1;按键没有放开则返回 REMOTES: MOV 34H,#12 ;接收12位编码 ;先找出接收码的开头即10ms左右的高电平 ; MOV TH1,#00H ;设置高电平时间为8~12ms; 检测和等待8ms的低电平,70ms门限 ; CLR T_OVER ; MOV TL1,#00H ; SETB TR1 ; REMOTE1: MOV 3AH,#50 ; REMOTE2: MOV 3BH,#25 ; REMOTE3: JB REM,REMOTE1 ; JB T_OVER,REMOTE_END ; DJNZ 3BH,REMOTE3 ; DJNZ 3AH,REMOTE2 ; ; ;等待在4ms 内接收到的高电平 ; CLR T_OVER ; MOV TH1,#0F1H ; MOV TL1,#0F0H ; SETB TR1 ; REMOTE_4: JB T_OVER,REMOTE_5 ; JNB REM,REMOTE_4 ; CLR TR1 ; AJMP REMOTE6 ; ;超出12ms 接收错误返回 ; REMOTE_5: AJMP REMOTE_END ; REMOTE6: MOV 3AH,#00 ; 等待550us 后采集接收信号 ; DJNZ 3AH,$ ; ;采集接收信号并记录 ; MOV C,REM ; MOV A,33H ; RLC A ; MOV 33H,A ; MOV A,31H ; RLC A ; MOV 31H,A ; ;等待第二个上升沿,限时1.5ms ; CLR T_OVER ; MOV TH1,#0FAH ; MOV TL1,#099H ; SETB TR1 ; RM1: JB T_OVER,REMOTE_END ; JB REM,RM1 ; CLR TR1 ; ; CLR T_OVER ; MOV TH1,#0FAH ; MOV TL1,#099H ; SETB TR1 ; RM2: JB T_OVER,REMOTE_END ; JNB REM,RM2 ; CLR TR1 ; ;等待550us 后采集接收信号 ; MOV 3AH,#00 ; DJNZ 3AH,$ ; MOV C,REM ; MOV A,30H ; RLC A ; MOV 30H,A ; MOV A,32H ; RLC A ; MOV 32H,A ; ;等待第二个码值的上升沿 ; 下面的程序没有记录数据可以吗??????? CLR T_OVER ; MOV TH1,#0FAH ; MOV TL1,#099H ; SETB TR1 ; RM3: JB T_OVER,RM5 ; JB REM,RM3 ; CLR TR1 ; ; CLR T_OVER ; MOV TH1,#0FAH ; MOV TL1,#099H ; SETB TR1 ; RM4: JB T_OVER,RM5 ; JNB REM,RM4 ; CLR TR1 ; DJNZ 34H,REMOTE6 ; 返回,准备记录下一数据。
|