|
ORG 0000H AJMP MAIN ORG 0003H ;外部中断INT0入口地址 AJMP INT ;转中断服务子程序 MAIN: MOV SP,#40H MOV P1,#00H SETB EA ;开CPU中断 SETB IT0 ;设定INT0触发方式 SETB EX0 ;INT0请求中断
DSP: MOV R2,#9 ;将遥控器键值转化成A(0~9) MOV DPTR,#TAB1 VV: MOV A,R2 MOVC A,@A+DPTR XRL A,1CH JZ ABC DJNZ R2,VV ABC: MOV A,R2
MOV DPTR,#TAB ;将A的值通过数码管显示出来 MOVC A,@A+DPTR RX1: MOV P1,A CLR P0.1 AJMP DSP
INT: CLR EA MOV R6,#10 SB: ACALL YS1 JB P3.2,EXIT DJNZ R6, SB JNB P3.2, $ ;等待高电平避开9毫秒低电平引导脉冲 ACALL YS2 ;延时4。74毫秒判断是否连发 JB P3.2,EXIT CPL P0.0
MOV R1,#1AH ;将32位代码分别放在1AH/1BH/1CH/1DH中 MOV R2,#4 PP: MOV R3,#8 JJJJ: JNB P3.2,$ LCALL YS1 MOV C,P3.2 JNC UUU JB P3.2,$ UUU: MOV A,@R1 RRC A MOV @R1,A DJNZ R3,JJJJ INC R1 DJNZ R2,PP
MOV P2,1CH MOV A,1AH ;进行代码识别 XRL A,#0 ;判断1AH的值是否等于00000000 JNZ EXI ;如果不同则无效将1CH清零 CLR P0.1 MOV A,1BH XRL A,#11110111B ;再判断高8位地址是否正确 JNZ EXI MOV A,1CH CPL A XRL A,1DH ;将1CH的值取反后和1DH比较 不同则无效丢弃核对数据是否准确 JNZ EXI AJMP EXIT EXI: MOV 1CH,#0 EXIT: SETB EA ;允许中断 RETI
YS1: MOV R4,#20 ;精确延时882微秒 D1: MOV R5,#20 DJNZ R5,$ DJNZ R4,D1 RET YS2: MOV R4,#10 ;精确延时4740微秒 D2: MOV R5,#235 DJNZ R5,$ DJNZ R4,D2 RET TAB: DB 60H,7DH,0D0H,58H,4DH DB 4AH,42H,7CH,40H,48H TAB1:DB 0CH,09H,1DH,1FH,0DH DB 19H,1BH,11H,15H,17H END ;TAB LED数码管显示表 TAB1遥控器键值表
来源:网上转载 作者:不详 |