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

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

📁 C51单片机和数码管显示的红外遥控读码器-定时中断数码管显示加遥控
💻 ASM
字号:
	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,#0FH	;关数码管
	ORL	P2,A
	MOV	A,LEDT0
	CJNE	A,#0,INT_T0_1
	MOV	A,LED1
	MOVC	A,@A+DPTR
	MOV	P0,A
	CLR	P2.1	
	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.0	
	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.3	
	MOV	LEDT0,#3
	LJMP	INT_T0_END
INT_T0_3:	MOV	A,LED4
	MOVC	A,@A+DPTR
	MOV	P0,A
	CLR	P2.2	
	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.5,IR
	LJMP	MAIN
	;以下为进入P3.2脚外部中断子程序,也就是解码程序
IR:	MOV	R6,#9
D2:	ACALL	DELAY882	;调用882微秒延时子程序
	JB	P2.5,EXIT	;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
	DJNZ	R6,D2	;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
	;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
	JNB	P2.5,$	;等待高电平避开9毫秒低电平引导脉冲
	ACALL	DELAY2400
	JNB	P2.5,IR_RP	;
	ACALL	DELAY2400	;延时4.74毫秒避开4.5毫秒的结果码
	MOV	R1,#IRDATAA	;设定1AH为起始RAM区
	MOV	R2,#4
PP:	MOV	R3,#8
JJJJ:	JNB	P2.5,$	;等待地址码第一位的高电平信号
	LCALL	DELAY882	;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
	MOV	C,P2.5	;将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.4	;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功
	LCALL	DELAY2400
	LCALL	DELAY2400
	LCALL	DELAY2400
	SETB	P2.4	;蜂鸣器停止
	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	0C0H	;0
	DB	0F9H	;1
	DB	0A4H	;2
	DB	0B0H	;3
	DB	099H	;4
	DB	092H	;5
	DB	082H	;6
	DB	0F8H	;7
	DB	080H	;8
	DB	090H	;9
	DB	088H	;A
	DB	083H	;B
	DB	0C6H	;C
	DB	0A1H	;D
	DB	086H	;E
	DB	08EH	;F
	DB	0BFH	;-
	DB	0FFH	;
	END

⌨️ 快捷键说明

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