本文中用到的PT2262/PT2272芯片是一對遙控收發的芯片,關于她的中文資料可以參考:http://m.zg4o1577.cn/bbs/dpj-44498-1.html
(一)、遙控器基本知識
遙控器種類很多,常見的有電視遙控器,汽車遙控器,卷簾門遙控器,空調遙控器,航模遙控器等等,按載波分類可以分為紅外線遙控器,無線電遙控器,超聲波遙控器等,紅外線遙控的特點適用于室內,短距離的情況,功耗小,成本低,無線電遙控適用于遠距離,室外情況下,成本高一些。其實我們每天都在和遙控器打交道,大部分人只知道使用這些遙控器,除非專業人員很少有人知道它的工作原理。 1、 遙控器的組成
下圖是用PT2262編碼的遙控器電路。 下圖是紅外線載波的電視機遙控器電路。 由上圖可知遙控器一般是由按鍵電路,編碼電路,發射電路及電源等組成。 無線發射電路是由三極管加上電阻,電容,三極管,聲表面濾波器,天線組成。紅外線發射電路比較簡單,由電阻、三極管和紅外線發射管組成。 編碼電路主要由編碼芯片完成,每個遙控器上面的編碼都是通過集成電路芯片來完成的。只要我們按下按鍵,編碼將通過發射電路以無線的形式發送出去。 2、編碼芯片分類:
(1)按編碼類別分
固定碼:所謂的固定碼,就是指每次發送出去的編碼都不會改變,因此使用這類芯片的遙控器比較容易被復制。如PT2262,PT2260 PT2240 Ev1527 FP527 HT6014 SMC918等芯片。
滾動碼:所謂滾動碼,就是指每次發出去的碼都不一樣,通過一系列算法,完成滾動輸出的功能。這類芯片的遙控器復制比較困難,可以通過移值,或者已破解過的遙控器來完成復制工作。如HCS301 HC300 HCS201 HCS200 HCS361等芯片。
(2)按編碼方式分
可變型:就是編碼可通過人工手動修改。如PT2262編碼集成電路,它有18個腳。它的1--8腳屬于地址編碼端,可以進行三態編碼,就是一只腳可以是三種狀態,即:接低電平(0)、高電平(1)、或懸空(F)三種狀態,編碼數有3的8次方,也就是共有6561種狀態。這是一般的用法。PT2262還有4支腳,就是10、11、12、13,一般它是用來做數據端。它也可以編碼,但是編碼就只有兩種狀態:低電平(0)、高電平(1),沒有懸空這種狀態了。下面1圖中的編碼區編碼是A0—A7都懸空,也就是A0=F,A1=F,A2=F,A3=F,A4=F,A5=F,A6=F,A7=F,下面2圖中的編碼是A0=0,A1=F,A2=0,A3=0,A4=1,A5=0,A6=1,A7=F,所以通過改變編碼器的焊點就改變了地址編碼。

固定型:指芯片出廠時由廠家固化好編碼在芯片里面。如PT2240 SMC918 EV1527等。
3、 遙控器的解碼 我們通常使用的遙控器是指發射編碼的一方,被遙控的物品應該是接收方,當接收方收到遙控信號后,需要解碼才能達到遙控的目的。接收端的解碼方式有硬件解碼和軟件解碼,比如PT2262是編碼芯片,PT2272是解碼芯片,當PT2262和PT2272配對使用時,要求發送端編碼芯片PT2262的地址編碼與接收端解碼芯片PT2272的地址編碼必須一致,而且振蕩頻率相匹配,才能達到遙控目的。參見下表PT2262的震蕩電阻如果采用1.2M,那么PT2272的震蕩電阻就要采用200K才行。 如果采用軟件解碼,就可以省去PT2272這個芯片了。用軟件編程的方法解碼,必須知道該編碼芯片的編碼格式。比如PT2262發出的編碼由地址碼、數據碼、同步碼組成。地址碼和數據碼都用寬度不同的脈沖來表示,兩個窄脈沖表示“0”;兩個寬脈沖表示“1”;一個窄脈沖和一個寬脈沖表示“F”(“懸空”)。
(二)、PT2262 編碼芯片的軟件解碼
1、單片機解碼電路

單片機解碼電路由128*64液晶顯示屏,AT89C51單片機,AT24C512存儲器,CD40106,315M收發模塊和433M收發模塊組成。液晶顯示屏用于顯示參數和解碼后的結果,存儲器用于保存解碼數據,CD40106由六個施密特觸發器電路組成。每個電路均為在兩輸入端具有施密特觸發器功能的反相器,CD40106用于改善波形并對波形反相的作用,因為大部分無線遙控器都是采用315MHZ和433Mhz的無線電頻率,所以采用了這2種頻率的收發模塊,用于接收待解碼的無線電信號,實物如下圖。 2、解碼原理 上圖是 PT2262編碼芯片的編碼格式,PT2262輸出數據的順序:A0A1A2A3A4A5A6A7D0D1D2D3同步碼 A0A1A2A3A4A5A6A7D0D1D2D3同步碼……,連續發四次。每組編碼之間由同步碼隔開,同步碼低電平寬度是窄脈沖寬度(4T)的31倍(124T),用單片機軟件解碼時,程序只要判斷出同步碼,然后對后面的字碼進行脈沖寬度識別即可。2262每次發射時至少發射4 組字碼,我們只需連續兩次檢測到相同的地址碼加數據碼就可以了。 不同公司的2262,振蕩電阻一樣,PT2262的振蕩頻率會有區別,估算公式f=2*1000*16/Rosc(kΩ) kHz其中Rosc 為振蕩電阻這里我們選用Rosc=4.7MΩ,頻率f≈6.8kHz,。T=1/f≈147微秒,同步脈沖的寬度是124T=18228微秒,由上圖可見數據“0”是2個(4T=588微秒)短脈沖,間隔(12T=1764微秒)低電平。數據“1”是2個12T的高電平寬脈沖,間隔一個4T的低電平窄脈沖,數據“F”是1個高電平窄脈沖間隔12T的低電平寬脈沖,再加一個12T的高電平寬脈沖。總結如下: 同步碼占用124T=18228微秒,時間較長,數據“0”,“1”,“F”是由2個脈沖組成,一個數據占用32T=4704微秒時間。數據“0”,“1”,“F”特點見下表: 上表中我們用“窄、窄”表示數據“0”,“寬、寬”表示數據“1”,“窄、寬”表示數據“F”,實際應用時是經過CD40106反相后的波形,所以數據“0”就變成“寬、寬”,數據“1”變成“窄、窄”,數據“F”變成“窄、寬”了。我們用51單片機的定時器來測量這些脈沖的寬度來確定數據是“0”,“1”,還是“F”。這就是解碼原理。 3、PT2262 軟件解碼的單片機程序 ORG0000H ;2011年9月1日通過,433Mhz無線發送模塊,2262解碼程序,單片機使用6兆晶體,震蕩電阻是4.7兆歐電阻
AJMP L0
ORG 000BH
ORG 0013H;外部中斷P3.3腳INT0入口地址
ORG 001BH
RETI
ORG 0025h
L0:
MOV TMOD, #11H
MOV 8CH, #3CH
MOV 8AH, #0B0H
CLR EA;打開CPU總中斷請求
QL: MOV A,#00H
MOV R2,#66D ;清數據區;;
MOV R0,#18H
QRAM: MOV @R0, A
INC R0
CLR A
DJNZ R2, QRAM
SS: MOVR6,#24; 查找同步碼,同步碼高電平長度是359微秒的31倍11129微秒=15BCH,所以TH1=15和10之間
SS1: JB P3.2, SS1 ;躲過前1組數據,共發射4組數據
JNB P3.2,$ ;
DJNZ R6,SS1
SSS0: JB P3.2,$ ; 編碼信號反相后送到單片機的P3.2口進行解碼
MOV 8DH,#00H ;定時器1時間常數
MOV 8BH,#00H
JNB P3.2,$ ;測量高電平時間
SETB TR1 ;高電平啟動定時器1
JB P3.2,$
CLR TR1
MOV A, TH1
MOV R2,A
CLR C
SUBBA,#15H ;同步碼高電平時長,比15h長返回
JNC SSS0
MOV A,R2
CLR C
SUBBA,#10H ;同步碼高電平時長,比10h短返回
JC SSS0
SS0: JB P3.2,$ ;找到同步碼后,開始解碼
MOV R0,#1AH
MOV R1,#18H
MOV R2,#2
S01: MOV R6,#49 ;判斷高電平時間常數,識別數據?
S0: MOV 8DH,#00H ;定時器1時間常數
MOV 8BH, #00H
S1: JNB P3.2,S1
SETB TR1 ;高電平啟動定時器1
S2: JB P3.2,S2 ;等待變低
CLR TR1
S3: MOV A,TH1 ;低電平停止定時,把數據放到@R0中
MOV@R0,A
INC R0
JS2: DJNZ R6,S0 ;校驗1AH及33H起始的24個數據,如果校驗成功說明解碼成功
MOV R2,#24
MOV R0,#1AH
MOV R1,#33h
BJ1: MOVA,@R0
XRL A,@R1
JNZ QL
INC R0
INC R1
DJNZ R2,BJ1
SSS: CLRP1.2;蜂鳴器鳴響嘀嘀嘀的聲音,表示解碼成功
LCALL DELAY2
SETB P1.2;蜂鳴器停止
MOV R2,#12
MOV R1,#4CH
MOV R0,#1AH
CZ: MOV A,@R0
ANL A,#0FH
SWAP A
MOV @R1,A
INC R0
MOV A,@R0
ANL A,#0FH
ADD A,@R1
MOV @R1,A
XRL A,#10H ;A0-A8懸浮時波形是一寬一窄兩個高電平波形
JNZ CZ1
MOV A,#0FH
MOV @R1,A
AJMP CZ4
CZ1: MOVA,@R1
XRLA,#11H ;A0-A8=0時波形是2個寬高電平波形
JNZ CZ2
MOV A,#0
MOV @R1,A
AJMP CZ4
CZ2: MOVA,@R1
XRL A,#00H
JNZ CZ4
MOVA,#01H ;A0-A8=1時波形是2個窄高電平波形
MOV @R1,A
CZ4: INCR1
INC R0
DJNZ R2,CZ
J01: MOVR1,#4CH;數碼管顯示解碼后的12個數據(略)
MOV R4,#12;49;10
;LCALL XS
AJMP QL
YS: MOV 7EH, #64H
YS1: MOV 7FH, #0FFH
YS22: DJNZ 7FH, YS22
RET
DELAY: MOV R5, #88H
DEL: NOP
DJNZ R5, DEL
RET
DELAY1: MOV R6, #10H
DELA: ACALL DELAY
DJNZ R6, DELA
RET
DELAY2: MOV R6, #0FFH
DE: ACALL DELAY
DJNZ R6,DE
RET
END
(三)、PT2262編碼芯片的軟件編碼
上圖是PT2262編碼芯片的編碼格式。根據PT2262編碼芯片的編碼格式可以看出同步碼時長=4T高+124T低+4T高;數據“0”=4T高+12T低+4T高+12T低;數據“1”=12T高+4T低+12T高+4T低;數據“F”=4T高+12T低+12T高+4T低。我們可以用單片機通過軟件來模擬PT2262的這個編碼過程,用軟件代替了硬件PT2262,由于通過軟件可以模擬不同的震蕩電阻,同時地址編碼也可以隨意更改,還可以選擇不同的發射模塊(315Mhz或433Mhz),所以更具有通用性。 我們把2262的地址碼用4個字節表示,如FFFF0101表示A0、A1、A2、A3(2262的1、2、3、4腳)開路,A4接地,A5接正電壓,A6接地,A7接正電壓。我們再用2個字節表示4個數據碼,如0001表示D3、D2、D1(2262的10、11、12腳)為低電平,D0為高電平。把這6個字節數據存到單片機38h單元起始的 RAM中,R6存發送次數,R4存發送字節數,主程序中調用VFSS0軟件編碼子程序如下: LED EQU0B7H ;P3.7 SDA EQU0B6H ;P3.6 SCL EQU 0B5H ;P3.5 JS433 EQU0B4H ;P3.4 JS315 EQU0B3H ;P3.3 JPSM EQU0B2H ;P3.2 FS433 EQU0B1H ;P3.1 FS315 EQU0B0H ;P3.0 XPOS EQU 1AH ;列方向地址指針(用于LCDPOS子程序) YPOS EQU 1BH ;行方向地址指針(用于LCDPOS子程序) DPHH EQU 1CH ;存512高位地址 DPLL EQU 1DH ;存512低位地址 RSPIN EQU 80h ;P0.0 RWPIN EQU 81h EPIN EQU 82h CS1PIN EQU 83h CS2PIN EQU 84h FSZ1: CALLVFSS0 ;調用VFSS0子程序發送數據
AJMP DIS
VFSS0: MOVR6,#5 ;發5次
VFKS0: MOVR0,#38H
MOVR4,#6 ;發送6個字節數據,其中4個字節地址,2字節數據
CALLFS0 ; 先發送同步碼:4T的高電平124T的低電平。
CALLFTB ;124低
VFSJ1: MOVR3,#2 ;發送一個字節,分2次發送,先發高4位,后發低4位
MOVA,@R0 ;取出要發送的編碼數據
ANL A,#0F0H
SWAP A
MOV B,A
VFS03: XRLA,#0FH ;先發高4位,低4位保存到B寄存器
JNZ FS04
VFSF: ACALL FS0 ; 發送F,4T高;F=4T高+12T低+12T高+4T低
ACALL FSC ;12T低 F=4T高+12T低+12T高+4T低
ACALL FS1 ;12T高
ACALL FSD ;4T低
AJMP VFS06
VFS04: MOVA,B
XRLA,#01H ;1=12T高+4T低+12T高+4T低
JNZ VFS05
ACALL FS1 ; 發送1,先發12T高
ACALL FSD ;4T低
ACALL FS1 ;12T高
ACALL FSD ;4T低
AJMP VFS06
VFS05: MOVA,B ;發送0,0=4T高+12T低+4T高+12T低,
XRL A,#0H
JNZ VFS08
ACALL FS0 ;4T高
ACALL FSC ;12T低
ACALL FS0 ;4T高
ACALL FSC ;12T低
AJMP VFS06
VFS08: ;MOVA,B ;0=4T高+12T低+4T高+12T低,
; XRL A,#04H
;JNZ VFS06
ACALL FS1 ;12T高
ACALL FSd ;4T低
ACALL FS0 ;4T高
ACALL FSC ;12T低
VFS06: MOVA,@R0
ANL A,#0FH
MOV B,A
DJNZR3,VFS03 ;一個字節發送完了沒有?沒完繼續
INC R0
DJNZR4,VFSJ1 ;6個字節全發送完了沒有?沒完繼續,發送完發同步
ACALL FS0 ;4T高 ;0=4T高+12T低+4T高+12T低,
ACALL FSC ;12T低
ACALL FS0 ;4T高
ACALL FSC ;12T低
VFS07: DJNZ R6,VFKS0 ;一共發送5遍,發送完了沒有?沒完繼續
RET
;發12T高電平
FS1: MOV A,35H;#01H
CPL A
MOV 8CH, A
MOV A,36H;#85H
CPL A
MOV 8AH,A
MOV A,R2
XRLA,#03H ;R2值選擇發送模塊是433MHZ還是315MHZ
JZ FS2
CLRFS433 ;經40106反相后變成高電平
AJMP FS3
FS2: CLR FS315
FS3: SETB TR0
FSF01: JBC TF0, FSF03
AJMP FSF01
FSF03: CLR TR0
SETB FS433
SETB FS315
RET
;發送4T高電平
FS0: MOV A,#00H
CPL A
MOV 8CH, A ; 給定時器0賦值,TH0=8CH,TL0=8AH,定時長度不同,模擬的震蕩電阻值就不同,脈寬就不一樣
MOV A,37H;#85H
CPL A
MOV 8AH, A
MOV A,R2
XRL A,#03H
JZ FS22
CLRFS433 ;經40106反相后變成高電平
AJMP FS33
FS22: CLR FS315
FS33: SETB TR0
FSF02: JBC TF0, FSF04
AJMP FSF02
FSF04: CLR TR0
SETB FS433
SETB FS315
RET
;發送12T低電平
FSC: MOV A,35H;#01H ;一位數據=32T,位0=4T,位1=12T合起來等于16T還得加16T低電平
CPL A
MOV 8CH, A
MOV A,36H;#85H
CPL A
MOV 8AH,A
SETBFS433 ;經40106反相后變成高電平
SETB FS315
SETB TR0
FSF01C: JBC TF0,FSF03C
AJMP FSF01C
FSF03C: CLR TR0
RET
;發送4T低
FSD: MOVA,#00H ;
CPL A
MOV 8CH, A
MOV A,37H;#85H
CPLA
MOV 8AH, A
SETBFS433 ;經40106反相后變成高電平
SETB FS315
SETB TR0
FSF02D: JBC TF0,FSF0D
AJMP FSF02D
FSF0D: CLR TR0
RET
;發同步
FTB: MOVA,34H;#0FH ;同步碼時長
CPL A
MOV TH0,A ;發同步信號
MOV A,37H;#85H
CPL A
MOV TL0,A
FS01: SETB TR0 ;發送124T低
SETB FS433
SETB FS315
FS02: JBC TF0, FSJ
AJMP FS02
FSJ: CLR TR0
RET
(四)、固定碼其它編碼芯片的軟件解碼
1、PT2260芯片 SC2260和PT2260是同一芯片,只不過生產廠家不一樣,參數略有區別。SC2260是CMOS工藝制造的低功耗通用編碼器,與SC2272配對使用。編碼器對地址腳和數據腳的狀態編碼組幀以射頻(RF)方式發送。SC2260 最多有10位三態地址編碼。
特 點
●CMOS工藝制造,低功耗
●地址碼最多可達59,049(310)種
●外部應用線路元器件少
●編碼發射由數據管腳的高電平輸入觸發
●單端電阻振蕩電路
●工作電壓范圍寬:2.4v ~13v
● 數據碼分2、4或6位三種
●DIP16或SOP16封裝
應用范圍
●車輛防盜系統
●遙控玩具
● 家庭防盜系統
● 其他工業遙控 管腳如下圖: PT2260芯片的解碼與PT2262芯片的解碼方法相同,由于震蕩電阻和震蕩頻率的不同,所以選擇時間常數T時略有不同。 2、VD5026芯片
VD5026,VD5027是CMOS大規模數字集成電路(見圖1)。前者是編碼器,后者是譯碼器。VD5026編碼器是一種8位編碼發射器。它的第1~8腳是編碼的輸入端,每個輸入端可以有3種狀態,即“0”、“1”或“開路”,其中“0”表示為低電平,“1”表示為高電平,因此8個腳可以組成38=6561個不同的編碼。如果需要更多的編碼,可將輸入端改為4態連接方式,這時第1腳是第4種狀態的公共連接腳,第2腳~第8腳與第1腳連接時為第4種狀態。所以第2腳~第8腳都可以有4種狀態,即“0”、“1”、“開路”、“接1腳”。在這種情況下可以組成47=16384個編碼。第10腳~第13腳也可作為編碼地址線,與第1~第8腳聯合起來組成12位編碼地址線,這時編碼數可高達411=4194304個。第10~第13腳用作數據輸入線,根據需要這幾個腳可以置“0”或置“1”。第14腳是發射指令端,當此腳接地時,VD5026輸出端則發出一組編碼脈沖。第15腳、第16腳是一個內置振蕩器,外接幾十到幾百千歐的電阻即可產生振蕩,振蕩頻率為fosc=1600/R(KHz),式中R為外接電阻,單位為千歐。第17腳是編碼輸出端,第18腳、第9腳分別是電源的正、負極。 VD5027接收解碼器有相應于VD5026的12位信息。第1腳~第8腳是地址線。當VD5026發出的地址編碼與VD5027預置的編碼相同時,則在VD5027的第10腳~13腳有數據輸出,該輸出信息與VD5026的第10~第13腳所置的數據相同。第14腳為輸入端,第15腳、第16腳是振蕩器,外接電阻值應與VD5026完全相同。第17腳是輸出端。編碼器VD5026發射時,如果密碼相同,VD5027就會輸出高電平。下圖是VD5026編碼格式,可以看出它的編碼格式與pt2262類似,除了“0”、“1”、“F”3種狀態,只不過多了第四種狀態“4TH”。 數據“0“=”窄、窄“,數據”1“=”寬、寬“,數據“F“=”寬、窄“,第四態=”窄、寬“,所以解碼時要多加一項判斷第四態。 3、LX2240、PT2240芯片 LX2240這款國產芯片,是根據PT2240的編碼格式進行設計,但與PT2240在脈沖寬度上略有差別,但只要配上適當的振蕩電阻,即可與PT2240互換通用。LX2240 是一片由 CMOS 設計制造的可預燒內碼的學習碼編碼 IC ,由軟件解碼;內碼共有 20 個位元可預燒 1048576 組內碼組合,降低使用上的重碼率。 (1)主要特點:
1 .低公耗靜態電流<1uA ;
2 .工作電壓 Vcc=2.4 -12.0V;
3 . 四個按鍵組合輸入,最多可組合至 15 個按鍵;
4 .單端振蕩電路,只需一個外接電阻。
5 .小體積 8 腳SSOP 封裝,是 LX2260 的升級產品;
6 .與 PT2240B完全兼容;
(2)腳位圖: (3)管腳說明: 符號 | 描述 | 管腳 | I/O | Vcc | 電源正 | 1 | - | Vss | 電源負 | 2 | - | Dout | 串行編碼輸出 | 3 | O | D0 | 按鍵輸入(內含下拉) | 4 | I | D1 | 按鍵輸入(內含下拉) | 5 | I | D2 | 按鍵輸入(內含下拉) | 6 | I | D3 | 按鍵輸入(內含下拉) | 7 | I | OSC | 振蕩電阻輸入,接電阻至正電源 | 8 | I |
(4)編碼格式: 內碼C0~C19(100萬組) | D0 | D1 | D2 | D3 | 同步碼 |
(5)應用電路: 4、eV1527芯片 eV1527 是一片由 CMOS設計制造的可預燒內碼的學習碼編碼 IC,由軟件解碼;內碼共有 20 個位元可預燒 1048576組(220)內碼組合,降低使用上編碼重復的機率。
(1)功能簡述: ◆低功耗靜態電流<1.0μA; ◆工作電壓 Vcc=3.0-13V; ◆四個按鍵輸入,最多可組合至 15個按健; ◆內含振蕩線路,只須外接一個電阻(推薦值 330K); ◆eV1527 可代替RT1527 以及升級 FP527、eV527; ◆eV1527 修正了上面那些型號的一些Bug; ◆小體積 8 腳貼片封裝。是PT2260、PT2262 理想的升級換代產品
(2)腳位圖: (3)腳位功能說明:
(4)編碼格式:



(5)部分振蕩阻值表:(此表僅供參考)
(6)應用電路

(五)、部分程序代碼 ;下面是數據采集代碼 PT2260: MOV10H,#03H ;2E-2F存頻率
MOV 11H,#15H
MOV 12H,#22H
MOV 13H,#60H
PTKSS0: JB JS315,$ ;找到同步碼后,開始解碼
MOV R0,#30H;1AH
PTS01: MOV R6,#49 ;判斷高電平時間常數,識別數據?
PTKS0: MOV TH0, #00H
MOV TL0, #64H;A
PTKS1: JNB JS315, PTKS1
SETB TR0 ;高電平啟動定時器1
PTKS2: JB JS315,PTKS2 ;等待變低
CLR TR0
PTKS3: MOV A,TH0 ;低電平停止定時,把數據放到@R0中
MOV @R0,A
INC R0
DJNZ R6,PTKS0
MOV14H,48H ;48H單元存同步碼時間常數128T
MOV R6,#24 ;判斷高電平時間常數,識別數據24+同步+24=49個 ,1527是20位內碼+4位數據=48+同步+48=97位
PTKS4: MOV TH0, #00H
MOV TL0, #64H;A
PTKS5: JNB JS315, PTKS5
SETB TR0 ;高電平啟動定時器1
PTKS6: JB JS315,PTKS6 ;等待變低
CLR TR0
MOV A,TH0 ;低電平停止定時,把數據放到@R0中
XRL A,#00H
JZ PTKS7
MOV A,TH0
MOV 15H,A
MOV A,TL0
MOV16H,A
AJMP PTKS8
PTKS7: MOV A,TL0
MOV 17H,A
PTKS8: DJNZ R6,PTKS4 ;采集49個數據
KS10: LCALL BJ0;比較2次采集的數據是否一致,不一致返回重新采集
JZ JS9
LJMP Q
JS9: MOV R2,#12
MOV R1,#22H;22-2DH顯示轉換后的地址和數據12個結果
MOV R0,#30h;顯示緩沖區也是數據采集區
CZ15: MOVA,@R0;采集的48個數據合成為24個,@R0中的數據合并到@R1
ANL A,#0FH
SWAP A
MOV @R1,A
INC R0
MOV A,@R0
ANL A,#0FH
ADD A,@R1
MOV @R1,A
;下面對24個數據進行判斷,數據=“10、20、30、40、50”時為“F”, 數據=“11、22、33、44、55”時為“0”, 數據=“00”時為 “1”,定時器0高位TH0的數據從10到50或從11到55擴展是為了擴大震蕩電阻的檢測范圍。
XRLA,#10H;10H ;判斷數據是否=”F”,波形是一寬一窄兩個高電平波形是“F”
JZ CZ30
MOV A,@R1
XRLA,#20H;10H ;A0-A8懸浮時波形是一寬一窄兩個高電平波形
JZ CZ30
MOV A,@R1
XRLA,#30H;10H ;A0-A8懸浮時波形是一寬一窄兩個高電平波形
JZ CZ30
MOV A,@R1
XRLA,#40H;10H ;A0-A8懸浮時波形是一寬一窄兩個高電平波形
JZ CZ30
MOV A,@R1
XRLA,#50H;10H ;A0-A8懸浮時波形是一寬一窄兩個高電平波形
JNZ CZ11
CZ30: MOVA,#0FH ;懸浮腳代碼F
MOV @R1,A
AJMP CZ14
CZ11: MOVA,@R1 ;判斷是否數據“0“
XRLA,#11H ;A0-A8=0時波形是2個寬高電平波形就是數據“0“
JZ CZ40
MOV A,@R1
XRLA,#22H;11H ;A0-A8=0時波形是2個寬高電平波形
JZ CZ40
MOV A,@R1
XRLA,#33H ;A0-A8=0時波形是2個寬高電平波形
JZ CZ40
MOV A,@R1
XRLA,#44H ;A0-A8=0時波形是2個寬高電平波形
JZ CZ40
MOV A,@R1
XRLA,#55H;11H ;A0-A8=0時波形是2個寬高電平波形
JNZ CZ12
CZ40: MOVA,#0 ;是數據“0”存@R1
MOV@R1,A
AJMP CZ14
CZ12: MOV A,@R1
XRL A,#00H;00H ;是數據“1”
JNZ CZ13
MOVA,#01H ;A0-A8=1時波形是2個窄高電平波形
MOV @R1,A
AJMP CZ14
CZ13: MOVA,@R1 ;數據是一窄一寬電平波形時為1527芯片
XRL A,#01H
JZ CZ50
MOVA,@R1 ;是一窄一寬電平波形時為1527芯片
XRL A,#02H
JZ CZ50
MOVA,@R1 ;是一窄一寬電平波形時為1527芯片
XRL A,#03H
JZ CZ50
MOVA,@R1 ;是一窄一寬電平波形時為1527芯片
XRL A,#04H
JZ CZ50
CZ14: INC R1
INCR0
DJNZR2,CZ15
CZ18: MOV R2,#6
MOV R1,#22H;4CH
MOV R0,#22h;1AH
CZ19: MOV A,@R0
ANL A,#0FH
SWAP A
MOV @R1,A
INC R0
MOV A,@R0
ANL A,#0FH
ADD A,@R1
MOV @R1,A
INC R0
INC R1
DJNZ R2,CZ19
AJMPXS;去顯示子程序
CZ50: MOV 12H,#15H
MOV13H,#27H
CZ5: MOVR2,#3 ;合成3字節 16進制數3B7C21,是反碼因三極管反相 MOV R1,#22H;4CH ;顯示緩沖器起始地址
MOV R0,#30H;1AH ;數據采集區起始地址
CZ6: MOVR3,#08H ;8位合成一個字節
CZ7: MOV A,#00h;采集的數據同步碼為17h,長脈沖02h,短脈沖00h,用00h判斷是寬脈沖還是短脈沖
CLR C
SUBB A,@R0 ;
JNC CZ8
MOV A,@R1
RLC A
MOV @R1,A
AJMP CZ9
CZ8: CLR C
MOV A,@R1
RLC A
MOV @R1,A
CZ9: INC R0
DJNZ R3,CZ7
INC R1
DJNZ R2,CZ6
;去顯示子程序
BJ0: MOVR2,#24 ;校驗30H及49H起始的24個數據,如果校驗成功說明解碼成功
MOV R0,#30h;1AH
MOV R1,#49H;33h
BJ1: MOV A,@R0
XRL A,@R1
JNZ QL8
INC R0
INC R1
DJNZ R2,BJ1
MOV A,#00H
QL8: RET
|