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

📄 51+Ҧ

📁 AT89C51汇编语言例子大全
💻
字号:
/***************************************************************************
标题:	NEC红外线接收解码程序
效果:	运行程序,按遥控器按键,在数码管上显示相应的地址码-控制码(以16进制显示)用点隔开,
本店网站      http://xxdpj.taobao.com/
以芯换心  竭诚为您服务 您学习单片机的好帮手
近期本店有很多优惠活动 有空就进来看看吧
http://xxdpj.taobao.com/
技术支持QQ:412150384
说明:	外部中断 1  本中断的响应是P33脚有下降沿触发,板子将此引脚引入红外IC数据脚,由红外IC来触发中断
	红外IC接收NEC制编码波是:引导码1位,地址码8位加反码8位(或地址码16位),指令码8位加反码8位(或指令码16位),总共33位
******************************************************************************/

;脚功能定义

	SMG_q EQU P1.0	;定义数码管阳级控制脚,千位
	SMG_b EQU P1.1	;定义数码管阳级控制脚,百位
	SMG_s EQU P1.2	;定义数码管阳级控制脚,十位
	SMG_g EQU P1.3	;定义数码管阳级控制脚,个位	   
	HWX EQU P3.3	;红外接收数据引脚
	JDQ EQU P1.4	;继电器控制引脚
;----------------定义数据RAM空间-------------------------------
	LY_FLAG BIT 20H	;
	LHJHW1 EQU 30H	;使用4字节来接收NEC制地址码和控制码
	LHJHW2 EQU 31H
	LHJHW3 EQU 32H
	LHJHW4 EQU 33H

ORG 0050H
TABLE: DB 0C0h,0F9H,0A4H,0b0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH	
			;表:共阳数码管 0-9 A-F

ORG 0000H
LJMP MAIN
ORG 0013H	;中断1入口
LJMP INT

ORG 0100H
MAIN:	CLR A
	MOV LHJHW1,A	;
	MOV LHJHW2,A
	MOV LHJHW3,A
	MOV LHJHW4,A
	SETB EA		;首先开启总中断
	SETB EX1	;开启外部中断 1,即P33引脚
	SETB IT1	;设置成 下降沿触发方式
	MOV TMOD,#0X10	;定时器1的方式1,16位计数器,用来计数时间	

M1:	LCALL DISPLAY	;调用显示
	JNB LY_FLAG,M1	;接收成功位为1,则判断是否接收的按钮为00H,是则启动继电器
	CLR LY_FLAG	;
	MOV A,LHJHW3	;
	CJNE A,#0,M1	;
	MOV A,LHJHW4	;
	CJNE A,#0XFF,M1	;
	CPL JDQ		;
	SJMP M1	



INT:	;外中断子程序入口
;**************开始判断是否为NEC波形引导码的前9MS和后4.5MS******************************
	MOV R0,#LHJHW1	;接收准备存放的地数据址
	MOV TL1,#0
	MOV TH1,#0
	SETB TR1	;定时器以12M晶振12分频计数,即1us计数
	JNB HWX,$	;低电平开始	

I03:	JNB HWX,I1	;高电平开始
	LCALL DELAY	;
	MOV A,TH1	;
	CJNE A,#57,I04	;NEC引导码前13.5MS,计数约13500,TH1约等于52,给个误差值,用47-57之间来判断
	SJMP IRET	;
I04:	JNC IRET
	SJMP I03	;
I1:	CLR TR1		;
	MOV A,TH1	;
	CJNE A,#47,I2	;
	SJMP IRET	;
I2:	JC IRET	;
	
;***********开始接收四个字节内容**************************************

	MOV R6,#4	;四个字节数据
I3:	MOV R5,#8	;接收8位
I4:	MOV TL1,#0
	MOV TH1,#0
	SETB TR1	;

I10:	JNB HWX,$	;低电平开始,不对低电平进行处理
	
I12:	MOV TL1,#0	;低电平结束
	MOV TH1,#0
I13:	JNB HWX,I14	;//高电平开始,
	LCALL DELAY	;
	MOV A,TH1	;
	CJNE A,#15,I3A	;超出位的最高电平时间则退出
	SJMP IRET	;
I3A:	JNC IRET
	SJMP I13	;
I14:	CLR TR1		;

	MOV A,TH1	;//高电平判断结束,保存数据,从高位移入低位		
	CJNE A,#5,I15	;			
I15:	JNC I15A	;
	CLR C		;
	SJMP I16	;	
I15A:	SETB C
I16:	MOV A,@R0	;
	RRC A		;
	MOV @R0,A	;
	DJNZ R5,I4	;
	
	INC R0		;
	DJNZ R6,I3	;
	SETB LY_FLAG	;
IRET:	RETI


;数码管显示子程序-------------------------------------
DISPLAY:MOV DPTR,#TABLE	;数码管显示子程序,16进制显示
	MOV A,LHJHW1	;
	MOV B,#16
	DIV AB 
	CLR SMG_q	;千位数码管
	MOVC A,@A+DPTR	;
	MOV P0,A
	LCALL DELAY	;
	MOV P0,#0FFH	;
	SETB SMG_q	;

	CLR SMG_b	;百位数码管
	MOV A,B		;
	MOVC A,@A+DPTR	;
	ANL A,#0X7F	;加入小数点
	MOV P0,A
	LCALL DELAY	;
	MOV P0,#0FFH	;
	SETB SMG_b	;

	MOV A,LHJHW3	;
	MOV B,#16
	DIV AB 
	CLR SMG_s	;十位数码管
	MOVC A,@A+DPTR	;
	MOV P0,A
	LCALL DELAY	;
	MOV P0,#0FFH	;
	SETB SMG_s	;

	CLR SMG_g	;个位数码管
	MOV A,B		;
	MOVC A,@A+DPTR	;
	MOV P0,A
	LCALL DELAY	;
	MOV P0,#0FFH	;
	SETB SMG_g	;
	RET

;短延时子程序,-----------------------------------------
DELAY:	MOV R7,#10	;延时子程序
	DJNZ R7,$
	RET

	END	

⌨️ 快捷键说明

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