该程序运转成果为 :
P1.0,P1.1, P1.2,P1.3, P1.4,P1.5, P1.6,P1.7, 顺次点亮然后轮番点亮 ;
蜂鸣器鸣响一声;
继电器J1吸合一次;
继电器J2吸合一次;
千位数码管显现8;
百位数码管显现8;
十位数码管显现8;
个位数码管显现8,重复循环;
随时按遥控器能够中止,并将遥控解码出的数据经过RS232传出,一起也经过P1口显现出来。
留意:此程序的对遥控器的编码芯片为50462才能够。
ORG 0000H
AJMP MAIN;转入主程序
ORG 0003H;外部中止P3.2脚INT0进口地址
AJMP INT;转入外部中止服务子程序(红外遥控解码程序)
;以下为主程序进行CPU中止方法设置
MAIN: LCALL YS3;等候硬件上电安稳
SETB EA;翻开CPU总中止请求
SETB IT0;设定INT0的触发方法为脉冲负边缘触发
SETB EX0;翻开INT0中止请求
MOV SCON,#50H;设置成串口1方法
MOV TMOD,#20H;波特率产生器T1作业在形式2上
MOV PCON,#80H;波特率翻倍为2400×2=4800BPS
MOV TH1,#0F3H;预置初值(依照波特率2400BPS预置初值)
MOV TL1,#0F3H;预置初值(依照波特率2400BPS预置初值)
SETB TR1;发动定时器T1
;以上完结串口通讯初始化设置
START: MOV P1,#01111111B
LCALL DELAY
MOV P1,#10111111B
LCALL DELAY
MOV P1,#11011111B
LCALL DELAY
MOV P1,#11101111B
LCALL DELAY
MOV P1,#11110111B
LCALL DELAY
MOV P1,#11111011B
LCALL DELAY
MOV P1,#11111101B
LCALL DELAY
MOV P1,#11111110B;P1口的LED循环由下往上点亮一次,延时约250毫秒
LCALL DELAY
MOV P1,#0FFH
MOV P3,#01111111B;蜂鸣器鸣响一声
LCALL DELAY
MOV P3,#11011111B;继电器J1吸合一次
LCALL DELAY
MOV P3,#10111111B;继电器J2吸合一次
LCALL DELAY
MOV P3,#0FFH
MOV P1,#00H
LCALL DELAY
LCALL DELAY
MOV P1,#0FFH
MOV P2,#11111110B
MOV P1,#00H;数码管个位显现8
LCALL DELAY
MOV P2,#11111101B
MOV P1,#00H;数码管十位显现8
LCALL DELAY
MOV P1,#00H
MOV P2,#11111011B;数码管百位显现8
LCALL DELAY
MOV P1,#00H
MOV P2,#11110111B;数码管千位显现8
LCALL DELAY
MOV P2,#0FFH
AJMP START;重复循环
;以下为进入P3.3脚外部中止子程序,也便是解码程序
INT: CLR EA ;暂时封闭CPU的一切中止请求
MOV R6,#10
SB: CALL YS1 ;转到882微秒延时判别子程序
JB P3.2,EXIT
;SBB: DJNZ R6, SB ;重复R6次,意图是检测在8820微秒内假如呈现高电平就退出解码程序
;JNB P3.2, $ ;等候高电平避开9毫秒低电平引导脉冲
; ACALL YS2 ;延时4.74毫秒避开4.5毫秒的成果码
MOV R1,#1AH ;设定1AH为开端RAM区
MOV R2,#4
PP: MOV R3,#8
JJJJ: JNB P3.2,$ ;等候地址码第一位的高电平信号
CALL YS1 ;高电平开端后用882微秒的时刻尺去判别信号此刻的凹凸电平状况
MOV C,P3.2 ;将P3.3引脚此刻的电平状况0或1存入C中
JNC UUU ;假如为0就跳转到UUU
CALL YS3
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位数据反码,存放在5CH/5DH/5EH/5FH的RAM中
MOV A,1AH
; CPL A ;对5EH取反后和5FH比较
CJNE A,#8FH,EXIT ;假如不等表明接纳数据产生过错,抛弃
MOV P1,1AH
MOV SBUF,1BH;经过串口在电脑屏幕上显现出来
CLR P3.7
LCALL YS2
LCALL YS2
LCALL YS2
SETB P3.7;蜂鸣器中止
CJNE A,#0FFH,IR_REC ;跳开#0FFh,假如按时刻长,解出的码是#0FFh
SJMP EXIT
IR_REC: ;mov ir_code,5fh
CLR P0.0
; call ir_key_code
EXIT: SETB EA ;答应中止
RETI ;退出解码子程序
YS1: MOV R4,#20 ;延时子程序1,准确延时882微秒
IRD1: MOV R5,#21
DJNZ R5,$
NOP
DJNZ R4,IRD1
RET
YS2: MOV R4,#10 ;延时子程序2,准确延时4740微秒
IRD2: MOV R5,#235
DJNZ R5,$
DJNZ R4,IRD2
RET
YS3: MOV R4,#2;延时程序3,准确延时1000微秒
IRD3: MOV R5,#248
DJNZ R5,$
DJNZ R4,IRD3
RET
DELAY: MOV R1,#08H;(占用R1/R2/R3)延时子程序,12M晶振延时约250毫秒
L3: MOV R2 ,#0FAH
L1: MOV R3 ,#0FAH
L2: DJNZ R3 ,L2
DJNZ R2 ,L1
DJNZ R1 ,L3
RET
YANSHI: MOV R4,#1 ;(占用R4/R5)延时子程序1,准确延时882微秒
DS1: MOV R5,#5
DJNZ R5,$
DJNZ R4,DS1
RET
END