51单片机红外数据收发程序(NEC标准)


发射部分程序:

/*********************************************************
FUNCTION: 红外数据发送 *
DESCRIPTION: *
HARDWAER: *
PROGRAMMER: XXC *
DATE: 2010-9-6 *
COPYRIGHT: no *
**********************************************************/

;----------------------------------------------------------
;存储空间定义
DSEG AT 30H
Send BIT P2.0
LedSend BIT P2.1

;----------------------------------------------------------
;主程序
CSEG AT 0000H
ORG 0000H
AJMP L_Main
ORG 0030H
L_Main: MOV SP,#60H
MOV DPTR,#T_SendBuffer
MOV R1,#08H ;发送1字节数据(先低位 后高位)
MOV R2,#00H

;发送4字节
L_Loop1:
CLR LedSend ;开LED指示
NOP
NOP
SETB Send
LCALL F_Delay4500us ;引导码
LCALL F_Delay4500us
CLR Send
LCALL F_Delay4500us
L_Loop2:
MOV A,R2
MOVC A,@A+DPTR
L_Loop3:
SETB Send
LCALL F_Delay560us ;560us
CLR Send
RRC A
JC L_Next1
LCALL F_Delay560us
LJMP L_Next2
L_Next1:
LCALL F_Delay1680us
L_Next2:
DJNZ R1,L_Loop3
INC R2
CJNE R2,#04H,L_Loop2
SETB Send ;560us高电平结束
LCALL F_Delay560us
CLR Send
SETB LedSend ;关LED指示
LJMP $
/*
INT_Int0:

PUSH ACC
PUSH PSW

CPL LED1

POP PSW
POP ACC
RETI
*/
;----------------------------------------------------------
;延时约4500us
F_Delay4500us:
MOV R7,#20
L_Delay4500:
MOV R6,#225
DJNZ R6,$
DJNZ R7,L_Delay4500
RET

;----------------------------------------------------------
;延时约560us
F_Delay560us:
MOV R7,#2
L_Delay560:
MOV R6,#140
DJNZ R6,$
DJNZ R7,L_Delay560
RET

;----------------------------------------------------------
;延时约1680us
F_Delay1680us:
LCALL F_Delay560us
LCALL F_Delay560us
LCALL F_Delay560us
RET


;----------------------------------------------------------
;延时约1s
F_Delay1s:
MOV R7,#5
L_Delay1s1:
MOV R6,#200
L_Delay1s2:
MOV R5,#250
DJNZ R5,$
DJNZ R6,L_Delay1s2
DJNZ R7,L_Delay1s1
RET

;-----------------------------------------------
;红外发送区数据
T_SendBuffer:
DB 0FH,0F0H ;用户码及反码
DB 56H,0A9H ;操作码及反码

END ;结束


接收部分程序:

/*********************************************************
FUNCTION: 红外数据接收程序 *
DESCRIPTION: *
HARDWAER: *
PROGRAMMER: XXC *
DATE: 2010-9-7 *
COPYRIGHT: no *
**********************************************************/

;---------------------------------------------

-------------
;存储空间定义
DSEG AT 30H
F_Re BIT P3.2
LED1 BIT P2.6
R_Receive: DS 4 ;红外数据接收空间


;----------------------------------------------------------
;主程序
CSEG AT 0000H
ORG 0000H
AJMP L_Main
ORG 0003H ;INT0入口
LJMP INT_Int0
ORG 0030H
L_Main: MOV SP,#60H
SETB EA
SETB EX0
SETB IE0 ;下降沿触发
MOV DPTR,#T_Code
L_LoopMain:
;------------------------
MOV R1,#R_Receive+2
MOV A,@R1
ANL A,#0FH ;屏蔽高4位
MOVC A,@A+DPTR
MOV P1,A
;------------------------
;CPL P2.5
;LCALL F_Delay300ms
LJMP L_LoopMain

;----------------------------------------------------------
;外部中断0
;Function: NEC红外解码.黑色遥控器用户码FFH,00H
;P3.2接外部中断
INT_Int0:
PUSH ACC
PUSH PSW

MOV R0,#R_Receive
MOV R3,#08H
MOV R4,#04H
LCALL F_Delay8000us
JB F_Re,L_ExitINT0 ;非引导码退出
JNB F_Re,$
LCALL F_Delay2500us
JNB F_Re,L_ExitINT0 ;遇简码退出
JB F_Re,$
CLR LED1 ;open LED1
L_NextBit:
JNB F_Re,$
LCALL F_Delay840us
JB F_Re,L_Next1
MOV C,F_Re
LJMP L_Next2
L_Next1:
MOV C,F_Re
LCALL F_Delay1100us
L_Next2:
RRC A ;先收低位
DJNZ R3,L_NextBit
MOV @R0,A
INC R0
MOV R3,#08H
DJNZ R4,L_NextBit
L_ExitINT0:
SETB LED1 ;close LED1
POP PSW
POP ACC
RETI

;----------------------------------------------------------
;延时约8000us
F_Delay8000us:
MOV R7,#20
L_Delay8000:
MOV R6,#200
DJNZ R6,$
DJNZ R7,L_Delay8000
RET

;----------------------------------------------------------
;延时约840us
F_Delay840us:
MOV R7,#2
L_Delay840:
MOV R6,#210
DJNZ R6,$
DJNZ R7,L_Delay840
RET

;----------------------------------------------------------
;延时约1100us
F_Delay1100us:
MOV R7,#5
L_Delay1100:
MOV R6,#110
DJNZ R6,$
DJNZ R7,L_Delay1100
RET

;----------------------------------------------------------
;延时约2500us
F_Delay2500us:
MOV R7,#5
L_Delay2500:
MOV R6,#250
DJNZ R6,$
DJNZ R7,L_Delay2500
RET

;----------------------------------------------------------
;延时约300ms
F_Delay300ms:
MOV R7,#3
L_Delay300ms1:
MOV R6,#200
L_Delay300ms2:
MOV R5,#250
DJNZ R5,$
DJNZ R6,L_Delay300ms2
DJNZ R7,L_Delay300ms1
RET

;--------------------------------------------------------
;共阳数码管编码表(0-F)
T_Code: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;0-9
DB 88H,83H,0C6H,0A1H,86H,8EH ;A-F
END ;结束


相关文档
最新文档