⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ir_rx.asm

📁 用89S51做的红外编码解码程序。载波用555做
💻 ASM
字号:
;-----------------------------------------------------------------	
;--------------------红外接收程序---------------------------------
;-----------------用外部中断INT0脚输入----------------------------
;引导码9mS低,4.5mS高+用户码16位00FF+操作码8位反码+操作码8位
;0.56mS低+0.56mS高=0;0.56mS低+0.56*3mS高=1
;-----------------------------------------------------------------
	G_IR_TX	BIT	P3.2
;-----------------------------------------------------------------
	ORG	0000H
	AJMP	G_Main
	ORG	0003H
	AJMP	G_INT0
	ORG	0030H
	MOV	SP,#50H
G_Main:	SETB	IT0		;选择INT0为边沿触发方式
	SETB	EA		;开全局中断使能位
	SETB	EX0		;开INT0中断使能位
	SJMP	$
;-----------------------------------------------------------------
G_INT0:	PUSH	ACC
	PUSH	PSW	
	MOV	R3,#10		;延时8800
G_LOOP:	LCALL	G_Delay880	;延时880uS
	JB	G_IR_TX,G_Exit	;为1跳出中断继续检测
	DJNZ	R3,G_LOOP	;循环10次
	JNB	G_IR_TX,$	;等待上升沿的到来延时200uS
	LCALL	G_Delay4780	;延时4500uS+280uS
	CLR	P2.0
	MOV	R0,#40H
	MOV	R5,#04		;计数4x8次
G_LOOP3:MOV	R4,#08		;计数8次
G_LOOP2:JNB	G_IR_TX,$
	LCALL	G_Delay840	;进入用户码检测
	MOV	C,G_IR_TX	;把值放入C
	RRC	A		;带进位C右移
	JNB	G_IR_TX,G_LOOP1	;为0说明接收的是0码
	LCALL	G_Delay1120	;为1延时1120uS
	CLR	P2.3
G_LOOP1:DJNZ	R4,G_LOOP2	;循环8次
	CLR	P2.1
	MOV	@R0,A		;第一个用户码放进40H单元中		
	INC	R0		;寄存器加1
	DJNZ	R5,G_LOOP3	;循环4x8次
	CLR	P2.2
	MOV	A,41H		;第二个用户码放进41H单元中
	CPL	A		;
	CJNE	A,40H,G_Fial	;两个用户码想比较不相等接收是错的		
	MOV	A,43H		;第二个操作码放入43H单元中
	CPL	A		;取反和操作码反码比较
	CJNE	A,42H,G_Fial	;不相等说明操作码接收错误
	MOV	P0,42H		;相等说明接收操作码是正确的
	LJMP	G_Exit
G_Fial:	MOV	P2,#00H		;错误p2口灯全亮
	MOV	P1,#00H
G_Exit:	POP	PSW
	POP	ACC
	RETI
;-----------------------------------------------------------------延时880uS=1+(((3+((1+(2x108)+2))x4)))+1+2
G_Delay880:
	MOV	R6,#4		;1
G_D880:	MOV	R7,#108		;1
	DJNZ	R7,$ 		;2x108
	DJNZ	R6,G_D880	;	
	NOP
	RET
;-----------------------------------------------------------------延时4780uS
G_Delay4780:
	MOV	R6,#25
G_D4780:MOV	R7,#94
	DJNZ	R7,$
	DJNZ	R6,G_D4780
	RET
;-----------------------------------------------------------------延时840uS
G_Delay840:
	MOV	R6,#5
G_D840:	MOV	R7,#82
	DJNZ	R7,$
	DJNZ	R6,G_D840
	RET
;------------------------------------------------------------------延时1120uS
G_Delay1120:
	MOV	R6,#5
G_D1120:MOV	R7,#110
	DJNZ	R7,$
	DJNZ	R6,G_D1120
	RET
;-----------------------------------------------------------------
	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -