|
測(cè)試的時(shí)候發(fā)現(xiàn)有兩個(gè)結(jié)果 一個(gè)是正確的解碼了 一個(gè)是錯(cuò)誤的解碼 然后錯(cuò)誤的解碼好像少接收了兩位 不知道哪里出錯(cuò)了 應(yīng)該不是因?yàn)楦蓴_ 我沒(méi)有弄驗(yàn)證數(shù)據(jù)的 因?yàn)槲矣脛e人的程序的時(shí)候 感覺(jué)沒(méi)有任何出錯(cuò) 每次都是解碼成功 我的這個(gè)錯(cuò)誤的解碼得到的結(jié)果也是反碼補(bǔ)碼是對(duì)的上的 錯(cuò)誤的和正確的差兩位 比如一個(gè)是00000000(正確的) 一個(gè)是00000011(錯(cuò)誤的) 都是少偏移了兩位一樣
單片機(jī)源程序如下:
- ORG 000H
- MOV TMOD,#20H
- MOV TH1,#0FDH
- MOV TL1,#0FDH
- SETB TR1
- MOV SCON,#01000000B
- MAIN:
- JB P3.2,$;等待遙控信號(hào)出現(xiàn)
- MOV R6,#8
- SB: ACALL YS1 ;調(diào)用888微秒延時(shí)子程序
- JB P3.2,MAIN ;延時(shí)888微秒后判斷P3.2腳是否出現(xiàn)高電平如果有就退出解碼程序
- DJNZ R6, SB;重復(fù)10次,目的是檢測(cè)在8880微秒內(nèi)如果出現(xiàn)高電平就退出解碼程序
- ;以上完成對(duì)遙控信號(hào)的9000微秒的初始低電平信號(hào)的識(shí)別。
- JNB P3.2, $ ;等待高電平避開9毫秒低電平引導(dǎo)脈沖
- JB P3.2,$;等待高電平的引導(dǎo)碼過(guò)去
- ;CALL YS2 ;延時(shí)4.74毫秒避開4.5毫秒的結(jié)果碼
- MOV R1,#24H ;設(shè)定24H為起始RAM區(qū)
- MOV R2,#4
- PP: MOV R3,#8
- JJJJ:JNB P3.2,$;等待地址碼第一位的高電平信號(hào)
- ACALL YS3 ;高電平開始后用882微秒的時(shí)間尺去判斷信號(hào)此時(shí)的高低電平狀態(tài)
- MOV C,P3.2 ;將P3.2引腳此時(shí)的電平狀態(tài)0或1存入C中
- JNC UUU;如果為0就跳轉(zhuǎn)到UUU
- JB P3.2,$;如果為1就等待高電平信號(hào)結(jié)束
- UUU: MOV A,@R1 ;將R1中地址的給A
- RRC A;將C中的值0或1移入A中的最低位
- MOV @R1,A ;將A中的數(shù)暫時(shí)存放在R1中
- DJNZ R3,JJJJ;接收地址碼的高8位
- INC R1;對(duì)R1中的值加1,換成下一個(gè)RAM
- DJNZ R2,PP ;接收完16位地址碼和8位數(shù)據(jù)碼和8位數(shù)據(jù)反碼,存放在24H/25H/26H/27H的RAM中
- CPL P1.1
- LCALL SEND3
- JMP MAIN
- YS1: MOV R4,#20 ;
- D1: MOV R5,#19 ;
- DJNZ R5,$;
- DJNZ R4,D1;
- RET;延時(shí)888us左右
- YS3: MOV R4,#35 ;
- D3: MOV R5,#10 ;
- DJNZ R5,$;
- DJNZ R4,D3;
- RET;一共846.9us
- YS2: MOV R4,#17 ;
- D2: MOV R5,#125;
- DJNZ R5,$;
- DJNZ R4,D2;
- RET;大概921us
- SEND3:
- MOV A,26H
- MOV SBUF,A
- JNB TI,$
- CLR TI
- RET
- END
復(fù)制代碼
|
|