PWM 码是一种脉宽调制码,它的组成为9MS 高电 平和4MS 低电平引导脉冲,16 位系统识别码,8 位数据 正码和8 位数据反码。我们要解的就数据码。一个PWM 码的0是由一个0.58ms的低电平和一个0.58ms的高电平 组成,1 是由一个0.58ms 的低电平地和一个1.58ms 的高 电平组成。解码原理是这样的。首先通过延时来丢开引导 码,然后通过解码丢掉16 位系统识别码,最后解系统正 码和反码。解开后将正码取反看是否与反码相同,如果相 同,即解开保存其值。解码0 或1是这样的。在低电平的 时候等待,直到为高了后,用一个0.882ms 的延时去量, 量完后,如果为低了,证明前面是一个0.58ms 低电平和一 个0.58ms 高电平地组成,即保存一个0.如果为高,则证 明是由一个0.58ms 低电平地和一个1.58ms 高电平组成, 即保存一个1 .为1则再调一个延时,让它延到低电平。 等待到高电平后重复上述过程解码。 11.3 遥控器解码 程序介绍:通过上述的解码原理,利用单片机的中断 口来测PWM码的宽度,通过本实验仪配备的遥控,单片 机解码在数码管上显示(图20)。实际应用例如:红外遥 控。 图20 程序实例(disvcd.asm): ORG 0000H AJMP MAIN ORG 0013H AJMP INT ORG 0030H MAIN: 88 SETB EA ;开所有中断 SETB IT1 SETB EX1; MOV 33H,#00H TIN: ;显示///////////////////////////////////////// MOV A,33H ANL A,#0FH MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A D4: JNB TI,D4 CLR TI MOV A,33H ANL A,#0F0H SWAP A MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A D5: JNB TI,D5 CLR TI ACALL YS1 AJMP TIN ;///////////////////////////////////////////// INT: ;中断解码 CLR EA ;关所有中断 MOV R6,#10 SB: ACALL YS1 ;延时882m 89 JB P3.3,EXIT ;为高退出 DJNZ R6,SB ;延时9ms JNB P3.3,$ ;避开9ms高电平引导 脉冲 ACALL YS2 ;避开4ms低电平引导脉冲 MOV R7,#16 ;忽略16位系统码 JJJJA: JNB P3.3,$ LCALL YS1 MOV C,P3.3 JNC UUUA LCALL YS3 ;延时1ms UUUA: DJNZ R7,JJJJA ;解系统正码和反码,取反后比较相等保存////////// MOV R1,#1AH MOV R2,#2 PP: MOV R3,#8 JJJJ: JNB P3.3,$ LCALL YS1 MOV C,P3.3 JNC UUU LCALL YS3 UUU: MOV A,@R1 RRC A MOV @R1,A DJNZ R3,JJJJ INC R1 DJNZ R2,PP MOV A,1AH 90 CPL A CJNE A,1BH,EXIT ;///////////////////////////////////////////// MOV 33H,1AH EXIT: SETB EA RETI YS1: MOV R4,#20 D1: MOV R5,#20 DJNZ R5,$ DJNZ R4,D1 RET YS2: MOV R4,#10 D2: MOV R5,#235 DJNZ R5,$ DJNZ R4,D2 RET YS3: MOV R4,#2 D3: MOV R5,#248 DJNZ R5,$ DJNZ R4,D3 RET SETTAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H, 0FEH,0F6H DB 0EEH,3EH,9CH,7AH,9EH,8EH END |