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

📄 11红外遥控读码器-定时中断数码管显示加遥控.asm

📁 本原码是51单片机的实验原程序
💻 ASM
字号:
;=================================================
; 红外遥控读码器-定时中断数码管显示加遥控
;=================================================
;              可用来测试常用家电遥控器的码
;=================================================
;
;	zsMCU51实验板配套学习例程
;
;	中山单片机学习网	智佳科技
;
;	作者:逸风	QQ:105558851
;
;	http://www.zsmcu.com
;	E-mail:info@zsmcu.com
;=================================================
LED1	EQU	10H
LED2	EQU	11H
LED3	EQU	12H
LED4	EQU	13H
LED5	EQU	14H
LED6	EQU	15H
LED7	EQU	16H
LED8	EQU	17H
LED9	EQU	18H
LED10	EQU	19H

IrDataA	EQU	1AH
IrDataB	EQU	1BH
IrDataC	EQU	1CH
IrDataD	EQU	1DH

LedT0	EQU	1EH
LedJS	EQU	1FH

	ORG 0000H 
	LJMP START;转入主程序


	ORG	000BH			;定时器0中断入口

INT_TO:
	PUSH	ACC
	PUSH	PSW
	SETB 	RS0


	CLR	TF0		;清定时0中断标?
	MOV	TH0,#0F6H		;2.5MS
	MOV	TL0,#03DH		;

	INC	LedJS
	MOV	A,LedJS
	CJNE	A,#200,INT_TO_JS	;500MS
	MOV	LedJS,#00H

	MOV	R0,#LED1
	MOV	R1,#9
 INT_T0_DDD:
	INC	R0
	MOV	A,@R0
	DEC	R0
	XCH	A,@R0
	INC	R0
	MOV	@R0,A
	DJNZ	R1,INT_T0_DDD
	
 INT_TO_JS:

	MOV	A,#11110000B	;关数码管
	ORL	P2,A

	MOV	A,LedT0
	CJNE	A,#0,INT_T0_1
	MOV	A,LED1
	MOVC	A,@A+DPTR
	MOV	P0,A
	CLR	P2.7	
	MOV	LedT0,#1
	LJMP	INT_T0_END
 INT_T0_1:
  	
	MOV	A,LedT0
	CJNE	A,#1,INT_T0_2
	MOV	A,LED2
	MOVC	A,@A+DPTR
	MOV	P0,A
	CLR	P2.6	
	MOV	LedT0,#2
	LJMP	INT_T0_END
 INT_T0_2:
  	
 	MOV	A,LedT0
	CJNE	A,#2,INT_T0_3
	MOV	A,LED3
	MOVC	A,@A+DPTR
	MOV	P0,A
	CLR	P2.5	
	MOV	LedT0,#3
	LJMP	INT_T0_END
 INT_T0_3:
  	
	MOV	A,LED4
	MOVC	A,@A+DPTR
	MOV	P0,A
	CLR	P2.4	
	MOV	LedT0,#0
	LJMP	INT_T0_END
  	
 INT_T0_END:

	POP	PSW	
	POP	ACC

RETI




START:
	MOV	SP,#60H
	

	MOV	TMOD,#01H		;设定T0为十六位定时模式。
	MOV	TH0,#0F6H		;2MS
	MOV	TL0,#03DH		;
	SETB	TR0		;开定时器0
	SETB	ET0		;致能定时0中断
	CLR	TF0		;清定时0中断标志
	SETB	EA			;开总中断

	MOV	LedT0,#00H
	MOV	LedJS,#00H
	MOV	DPTR,#TABLE

	MOV	LED1,#0EH
	MOV	LED2,#0EH
	MOV	LED3,#5H
	MOV	LED4,#1H
	MOV	LED5,#10H
	MOV	LED6,#08H
	MOV	LED7,#08H
	MOV	LED8,#08H
	MOV	LED9,#08H
	MOV	LED10,#11H

MAIN:
	

JNB	P2.2,IR

LJMP	MAIN


				;以下为进入P3.2脚外部中断子程序,也就是解码程序
IR: 
  	MOV 	R6,#9
SB:
	ACALL 	DELAY882	;调用882微秒延时子程序
	JB 	P2.2,EXIT	;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
 	DJNZ 	R6, SB		;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
               			;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
	JNB	P2.2, $ 	;等待高电平避开9毫秒低电平引导脉冲
	ACALL	DELAY2400
	JNB	P2.2,IR_Rp	;
	ACALL	DELAY2400   	;延时4.74毫秒避开4.5毫秒的结果码
	MOV	R1,#IrDataA 	;设定1AH为起始RAM区
	MOV	R2,#4 
PP: 	
	MOV	R3,#8
JJJJ:	
	JNB	P2.2,$		;等待地址码第一位的高电平信号
	LCALL DELAY882		;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
	MOV	C,P2.2		;将P3.2引脚此时的电平状态0或1存入C中
	JNC	UUU		;如果为0就跳转到UUU
	LCALL DELAY1000
UUU: 
	MOV	A,@R1		;将R1中地址的给A
	RRC	A		;将C中的值0或1移入A中的最低位
	MOV	@R1,A		;将A中的数暂时存放在R1中
	DJNZ	R3,JJJJ		;接收地址码的高8位
	INC	R1		;对R1中的值加1,换下一个RAM
	DJNZ	R2,PP 		;接收完16位地址码和8位数据码和8位数据,存放在1AH/1BH/1CH/1DH的RA中

	CLR	P2.3		;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功
	LCALL DELAY2400
	LCALL DELAY2400
	LCALL DELAY2400
	SETB P2.3;蜂鸣器停止


	MOV	A,IrDataA
	ANL	A,#11110000B
	SWAP	A	
	MOV	LED1,A

	MOV	A,IrDataA
	ANL	A,#00001111B
	MOV	LED2,A

	MOV	A,IrDataB
	ANL	A,#11110000B
	SWAP	A	
	MOV	LED3,A

	MOV	A,IrDataB
	ANL	A,#00001111B
	MOV	LED4,A

	MOV	A,IrDataC
	ANL	A,#11110000B
	SWAP	A	
	MOV	LED6,A

	MOV	A,IrDataC
	ANL	A,#00001111B
	MOV	LED7,A

	MOV	A,IrDataD
	ANL	A,#11110000B
	SWAP	A	
	MOV	LED8,A

	MOV	A,IrDataD
	ANL	A,#00001111B
	MOV	LED9,A

	MOV	LED5,#10H
	MOV	LED10,#11H

	MOV	LedJS,#201	

	LJMP	MAIN

IR_Rp:
	LJMP	MAIN

EXIT:
	LJMP	MAIN ;退出解码子程序


;=============================882
DELAY882: ;1.085x ((202x4)+5)=882
	MOV	R7,#202
    DELAY882_A:
    	NOP
	NOP
	DJNZ	R7,DELAY882_A
RET
;=============================1000
DELAY1000: ;1.085x ((229x4)+5)=999.285
	MOV	R7,#229
    DELAY1000_A:
    	NOP
	NOP
	DJNZ	R7,DELAY1000_A
RET
;=============================2400
DELAY2400: ;1.085x ((245x9)+5)=2397.85
	MOV	R7,#245
    DELAY2400_A:
    	NOP
	NOP
    	NOP
	NOP
	NOP
   	NOP
	NOP
	DJNZ	R7,DELAY2400_A
RET


TABLE:
	DB	00101000B	;0
	DB	11101011B	;1
	DB	00110010B	;2
	DB	10100010B	;3
	DB	11100001B	;4
	DB	10100100B	;5
	DB	00100100B	;6
	DB	11101010B	;7
	DB	00100000B	;8
	DB	10100000B	;9
	DB	01100000B	;A
	DB	00100101B	;b
	DB	00111100B	;C
	DB	00100011B	;d
	DB	00110100B	;E
	DB	01110100B	;F
	DB	11110111B	;-
	DB	11111111B	;
END

⌨️ 快捷键说明

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