作者:未知 来源:http://honggeng.spaces.live.com
遥控码在电脑上显示出来的单片机上的程序
;这是一个89C51单片机向PC串口单向发送数据AF的程序
;通过MAX232专用芯片作RS232/TTL电平转换.
;波特率4800KBPS,只要P3.2引脚变成低电平(也就是按下红外遥控器的任意键),就连续发送16进制的AF字符(就是一个8位2进制的数值)
START:MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
mov a,#00H
MOV R0,#0H
MOV R1,#0H
MOV R2,#0H
MOV R3,#0H
MOV R4,#0H
MOV R5,#0H
MOV R6,#0H
MOV R7,#0H
;等行低电平信号
JB P3.2,$
;查验是否为9ms引导信号
MOV R5,#25
YDM: MOV R6,#3
ACALL BZYS
JB P3.2,START
DJNZ R5, YDM
;等待低电平信号结束
JNB P3.2,$
;验证结束果是否正确
MOV R5,#11
JGM: MOV R6,#3
ACALL BZYS
JNB P3.2,START
DJNZ R5, JGM
;等待高电平结束
JB P3.2,$
;数据存放地址设定
MOV R1,#1AH
MOV R2,#4
PP: MOV R3,#8
JJJJ: JNB P3.2, $
MOV R6,#08
ACALL BZYS
MOV C,P3.2
JNC LLLL
JB P3.2,$
LLLL: MOV A,@R1
RLC A
MOV @R1,A
DJNZ R3,JJJJ
INC R1
DJNZ R2,PP
MOV A,1AH
XRL A,#00000000B
JNZ START
MOV A,1BH
XRL A,#11111111B
JNZ START
MOV A,1CH
CPL A
XRL A,1DH
JNZ START
mov p1,1ch
acall ys2
acall INT
ajmp start
INT: CLR EA ;暂时关闭CPU的所有中断请求
MOV SCON,#50H;设置成串口1方式
MOV TMOD,#20H;波特率发生器T1工作在模式2上
MOV PCON,#80H;波特率翻倍为2400x2=4800BPS
MOV TH1,#0F3H;预置初值(按照波特率2400BPS预置初值)
MOV TL1,#0F3H;预置初值(按照波特率2400BPS预置初值)
SETB TR1;启动定时器T1
setb es
MOV A,1cH;将16进制的字符AF发送到串口去
MOV SBUF,A;将遥控器键值通过串口发送出去
JNB TI,$
CLR TI
SETB EA ;允许中断
RET ;退出解码子程序
YS1: MOV R7,#0Ah
D1: MOV R6,#4
DJNZ R6,$
DJNZ R7,D1
RET
YS2: MOV R7,#290
D2: MOV R6,#235
DJNZ R6,$
DJNZ R7,D2
RET
ONE38KHZ:SETB P3.7
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR P3.7
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,ONE38KHZ
RET
BZYS:MOV R7,#50
DJNZ R7,$
DJNZ R6,BZYS
RET