|
11.2 PWM碼簡介及解碼原理
PWM 碼是一種脈寬調(diào)制碼,它的組成為9MS 高電平和4MS 低電平引導(dǎo)脈沖,16 位系統(tǒng)識(shí)別碼,8 位數(shù)據(jù)正碼和8 位數(shù)據(jù)反碼。我們要解的就數(shù)據(jù)碼。一個(gè)PWM碼的0是由一個(gè)0.58ms的低電平和一個(gè)0.58ms的高電平87組成,1是由一個(gè)0.58ms的低電平地和一個(gè)1.58ms 的高電平組成。解碼原理是這樣的。首先通過延時(shí)來丟開引導(dǎo)碼,然后通過解碼丟掉16位系統(tǒng)識(shí)別碼,最后解系統(tǒng)正碼和反碼。解開后將正碼取反看是否與反碼相同,如果相同,即解開保存其值。解碼0或1是這樣的。在低電平的時(shí)候等待,直到為高了后,用一個(gè)0.882ms 的延時(shí)去量,量完后,如果為低了,證明前面是一個(gè)0.58ms 低電平和一個(gè)0.58ms 高電平地組成,即保存一個(gè)0.如果為高,則證明是由一個(gè)0.58ms 低電平地和一個(gè)1.58ms 高電平組成,即保存一個(gè)1 .為1則再調(diào)一個(gè)延時(shí),讓它延到低電平。等待到高電平后重復(fù)上述過程解碼。
11.3 遙控器解碼
程序介紹:通過上述的解碼原理,利用單片機(jī)的中斷口來測PWM碼的寬度,通過本實(shí)驗(yàn)儀配備的遙控,單片機(jī)解碼在數(shù)碼管上顯示(圖20)。實(shí)際應(yīng)用例如:紅外遙控。圖20
程序?qū)嵗?SPAN lang=EN-US>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 ;關(guān)所有中斷
MOV R6,#10
SB: ACALL YS1 ;延時(shí)882m
89
JB P3.3,EXIT ;為高退出
DJNZ R6,SB ;延時(shí)9ms
JNB P3.3,$ ;避開9ms高電平引導(dǎo)
脈沖
ACALL YS2 ;避開4ms低電平引導(dǎo)脈沖
MOV R7,#16 ;忽略16位系統(tǒng)碼
JJJJA: JNB P3.3,$
LCALL YS1
MOV C,P3.3
JNC UUUA
LCALL YS3 ;延時(shí)1ms
UUUA: DJNZ R7,JJJJA
;解系統(tǒng)正碼和反碼,取反后比較相等保存//////////
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 |