这是网友"剑龙"用汇编写的,他向我请教过,我在他的同意下公开他的源码。
ORG 0000H
MOV SCON,#50H;工作在串口方式1
MOV PCON,#00H
MOV TMOD,#20H;9600波特率
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1
LOOP1:
MOV P2,#0FFH
MOV R0,#50H;第一个数据存储器为50H
MOV R6,#4;NEC码一共有4个字节的数据
MOV R1,#25
D1:JB P2.0,$
D2:LCALL YS300US
JB P2.0,LOOP1
DJNZ R1,D2
MOV R1,#12
JNB P2.0,$
D3:LCALL YS300US
JNB P2.0,LOOP1
DJNZ R1,D3;以上为起始码检测
JB P2.0,$
D5:MOV R7,#8
D4:JNB P2.0,$
ACALL YS540US
MOV C,P2.0
JNC D6
JB P2.0,$
D6:MOV A,@R0
RLC A
MOV @R0,A
DJNZ R7,D4
INC R0
DJNZ R6,D5;以上为4个字节数据的接收
(分别为2个字节用户码和2个字节地址码)
MOV P1,#0FFH
MOV A,50H
CPL A
XRL A,51H
JZ DDD1
AJMP LOOP1;以上为用户码检测
DDD1:
MOV A,52H
CPL A
XRL A,53H
JZ DA0
AJMP LOOP1;以上为地址码检测
DA0:
MOV R2,#6;如果检测通过,
就向串口发送6次最后一位地址码
DA1:
MOV A,53H
MOV SBUF,A
JNB TI,$
CLR TI
DJNZ R2,DA1
DA8:AJMP LOOP1;返回
YS540US: ;延时540微秒
MOV R5,#1
DD1:MOV R4,#250
DJNZ R4,$
DJNZ R5,DD1
RET
YS300US: ;延时300微秒
MOV R3,#139
DJNZ R3,$
RET
END
注:必须向串口发送6次才行,否则当你重启机子时就不能用了。
本机的红外解码部分参照"电子制作试验室"
作者:剑龙
发表时间:2003年7月17日13:44:37