曼徹斯特解碼原則+125K-EM4100系列RFID卡解碼源程序分析38頁_第1頁
曼徹斯特解碼原則+125K-EM4100系列RFID卡解碼源程序分析38頁_第2頁
曼徹斯特解碼原則+125K-EM4100系列RFID卡解碼源程序分析38頁_第3頁
曼徹斯特解碼原則+125K-EM4100系列RFID卡解碼源程序分析38頁_第4頁
曼徹斯特解碼原則+125K-EM4100系列RFID卡解碼源程序分析38頁_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、曼徹斯特解碼原則+125K EM4100系列RFID卡解碼源程序分析曼徹斯特解碼原則1. 曼徹斯特編碼曼徹斯特編碼(Manchester Encoding),也叫做相位編碼(PE),是一個同步時鐘編碼技術(shù),被物理層使用來編碼一個同步位流的時鐘和數(shù)據(jù)。曼徹斯特編碼被用在以太網(wǎng)媒介系統(tǒng)中。曼徹斯特編碼提供一個簡單的方式給編碼簡單的二進制序列而沒有長的周期沒有轉(zhuǎn)換級別,因而防止時鐘同步的丟失,或來自低頻率位移在貧乏補償?shù)哪M鏈接位錯誤。在這個技術(shù)下,實際上的二進制數(shù)據(jù)被傳輸通過這個電纜,不是作為一個序列的邏輯1或0來發(fā)送的(技術(shù)上叫做反向不歸零制(NRZ))。相反地,這些位被轉(zhuǎn)換為一個稍微不同的格式

2、,它通過使用直接的二進制編碼有很多的優(yōu)點。曼徹斯特編碼,常用于局域網(wǎng)傳輸。在曼徹斯特編碼中,每一位的中間有一跳變,位中間的跳變既作時鐘信號,又作數(shù)據(jù)信號;從高到低跳變表示"1",從低到高跳變表示"0"。還有一種是差分曼徹斯特編碼,每位中間的跳變僅提供時鐘定時,而用每位開始時有無跳變表示"0"或"1",有跳變?yōu)?quot;0",無跳變?yōu)?quot;1"。 對于以上電平跳變觀點有歧義:關(guān)于曼徹斯特編碼電平跳變,在雷振甲編寫的網(wǎng)絡(luò)工程師教程中對曼徹斯特編碼的解釋為:從低電平到高電平的轉(zhuǎn)換表示1,從高電

3、平到低電平的轉(zhuǎn)換表示0,模擬卷中的答案也是如此,張友生寫的考點分析中也是這樣講的,而計算機網(wǎng)絡(luò)(第4版)中(P232頁)則解釋為高電平到低電平的轉(zhuǎn)換為1,低電平到高電平的轉(zhuǎn)換為0。清華大學(xué)的計算機通信與網(wǎng)絡(luò)教程計算機網(wǎng)絡(luò)(第4版)采用如下方式:曼徹斯特編碼從高到低的跳變是 0 從低到高的跳變是 1 。兩種曼徹斯特編碼是將時鐘和數(shù)據(jù)包含在數(shù)據(jù)流中,在傳輸代碼信息的同時,也將時鐘同步信號一起傳輸?shù)綄Ψ剑课痪幋a中有一跳變,不存在直流分量,因此具有自同步能力和良好的抗干擾性能。但每一個碼元都被調(diào)成兩個電平,所以數(shù)據(jù)傳輸速率只有調(diào)制速率的1/2。 就是說主要用在數(shù)據(jù)同步傳輸?shù)囊环N編碼方式。【在曼徹斯特

4、編碼中,用電壓跳變的相位不同來區(qū)分1和0,即用正的電壓跳變表示0,用負的電壓跳變表示1。因此,這種編碼也稱為相應(yīng)編碼。由于跳變都發(fā)生在每一個碼元的中間,接收端可以方便地利用它作為位同步時鐘,因此,這種編碼也稱為自同步編碼。】2. 曼徹斯特編碼(Manchester Encoding),也叫做相位編碼(PE);常用于局域網(wǎng)傳輸。在曼徹斯特編碼中,每一位的中間有一跳變,位中間的跳變既作時鐘信號,又作數(shù)據(jù)信號。但在不同的書籍中,曼徹斯特編碼中,電平跳動表示的值不同,這里產(chǎn)生很多歧義:1、在網(wǎng)絡(luò)工程師考試以及與其相關(guān)的資料中:位中間電平從高到低跳變表示"0";位中間電平從低到高跳變

5、表示"1"。2、在一些計算機網(wǎng)絡(luò)書籍中:位中間 電平從高到低跳變表示"1";位中間電平從低到高跳變表示"0"。在清華大學(xué)出版的計算機通信與網(wǎng)絡(luò)教程計算機網(wǎng)絡(luò)(第4版)也是這么說的,就以此為標準,我們就叫這為標準曼徹斯編碼。至于第一種,我們在這里就叫它曼徹斯特編碼。但是要記住,在不同的情況下懂得變通哦,否則會被老師扣分數(shù)的哦 。這兩者恰好相反,千萬別弄混淆了。現(xiàn)在我們要講的 就是差分曼徹斯特編碼:在信號位開始時不改變信號極性,表示輯"1" 在信號位開始時改變信號極性,表示邏輯"0" ;【注意】:如

6、果在最初信號的時候,即第一個信號時:如果中間位電平從低到高,則表示0;如果中間位電平從高到低,則表示1;后面的(從第二個開始)就看每個信號位開始時有沒有跳變來決定:下面我們來舉個例子,來比較標準曼徹斯特編碼、曼徹斯特編碼、差分曼徹斯特編碼:EM4100系列用的是:曼徹斯特編碼!125K;EM4100系列RFID卡解碼源程序分析1. 我們知道了曼徹斯特編碼原則,那么反過來的過程就是解碼了。EM4100系列用的是:曼徹斯特編碼!2. 傳統(tǒng)只讀射頻卡讀卡器的設(shè)計一般采用U2270B或EM4095讀寫基站芯片加MCU模式,其成本高、功耗大。本文介紹一種采用一片74HC4060+LM258/358加少量

7、普通元件構(gòu)成的讀卡器電路和處理的程序設(shè)計方案,電路簡單、功耗小、成本低。 74HC4060+LM258/358 電路為市面上已非常成熟 RFID-125KHZ-I卡且廣泛采用的低功耗、低成本方案。該方案在門禁、保安、考勤、展覽會、公園、旅店、餐廳等公共場所的門票、優(yōu)惠卡以及生產(chǎn)過程、郵政包裹、航空鐵路運輸、產(chǎn)品包裝、交通等部門的物流、電子標簽、防偽標 志、一次性票證等眾多領(lǐng)域上占據(jù)半壁江山。3. 推挽式放大電路輸出後接LC串聯(lián)諧振電路,當(dāng)回路固有諧振頻率與輸入訊號頻率相等時,電路發(fā)生串聯(lián)諧振。本文只要求對125kHz頻率的訊號放大,所以根據(jù)串聯(lián)諧振公式計算電路中元件參數(shù),可得L=737uH,C

8、=2200pF。4. 包絡(luò)檢波電路 感應(yīng)線圈產(chǎn)生諧振電壓約有20V,所以載波訊號的電壓也約為20V。對輸入電壓高於500mV檢波,稱為大訊號檢波,利用二極體單向?qū)щ娞匦约皺z波負載RC充放電過程實現(xiàn)。RC參數(shù)的確定需要滿足兩個條件:1.不產(chǎn)生隋性失真,一般工程上按計算,f為載波頻率。2.不產(chǎn)生負峰切割失真,即,m為調(diào)幅系數(shù),R1是交流阻值,R0是直流阻值。聯(lián)立上述兩個條件,確定檢波電路中R12、C36分別為470k、4700pF。5. 波形整形電路 在單晶片處理之前,整形電路將檢波後的訊號變成單片機可以識別的高低電平。LM358 (LM258) 內(nèi)部整合兩個運放,經(jīng)過兩次整形後可以得到很好的方波

9、訊號。電路中R16、R17、R18、R19起到分壓作用,確定輸出翻轉(zhuǎn)門限為2.5V;R15、R21將同向輸入的電壓疊加在反向輸入端;C54、C55為耦合電容,能夠隔離直流分量,傳遞交流訊號。當(dāng)U+大於U-+2.5V時,輸出高電平;當(dāng)U+小於U-+2.5V時,輸出低電平。6. 讀卡程序是根據(jù)EM4100、EM4001系列射頻卡的特點量身定做的一段程序,射頻卡以曼徹斯特編碼,傳輸一個資料的時間t=64/125kHz=512s。實際使用中,一般傳輸時間為,230s<0.5t<280s。280s<定時器取樣時間<512s。所以本文中取樣波形時,定時器時間設(shè)定為400s,保證為取

10、樣留有足夠的時間。原程序分析:1. 定時器時間設(shè)定為400s#defineTH0_H 0xfe/ 定時器0 取樣定時值設(shè)定為400us#defineTL0_L 0x8f/8f2. 定時器0中斷優(yōu)先級最高: PT0=1;3. /曼徹斯特碼同步頭檢測,9個1采用逐個前移檢測法/逐個前移檢測法,即每檢測到一個數(shù)據(jù),如果是"1",并向數(shù)據(jù)庫寫入1,/如果是"0",就放棄當(dāng)前檢測的數(shù)據(jù),并向當(dāng)前數(shù)據(jù)流方向移動一位,/這樣一來,就保證了不管數(shù)據(jù)流是在何種狀態(tài)下,都能正確無誤地抓取9個1,/同步頭9個1的提取成功,曼徹斯特碼譯碼器即和當(dāng)前的數(shù)據(jù)流保持了同步,/并把余下

11、的55位數(shù)據(jù)全部譯完。4. uchar REM_Buffer14;/曼徹斯特碼解碼后得到最終數(shù)據(jù)的緩存013/*曼徹斯特碼解碼后的數(shù)據(jù)放在 REM_Buffer013;REM_Buffer0=0xff 數(shù)據(jù)格式:1111 1111 同步頭,8個1REM_Buffer1=0x8x 數(shù)據(jù)格式:1xxx xxxx 同步頭,1個1,x表示無意義REM_Buffer2= 數(shù)據(jù)格式:D00D01D02D03 P0xxx 八個版本位或廠商信息的前四位,x表示無意義;P0為行效驗位REM_Buffer3= 數(shù)據(jù)格式:D10D11D12D13 P1xxx 八個版本位或廠商信息的后四位,x表示無意義;P1為行效驗

12、位REM_Buffer4= 數(shù)據(jù)格式:D20D21D22D23 P2xxx 三十二個數(shù)據(jù),x表示無意義;P2為行效驗位REM_Buffer5= 數(shù)據(jù)格式:D30D31D32D33 P3xxx 三十二個數(shù)據(jù),x表示無意義;P3為行效驗位REM_Buffer6= 數(shù)據(jù)格式:D40D41D42D43 P4xxx 三十二個數(shù)據(jù),x表示無意義;P4為行效驗位REM_Buffer7= 數(shù)據(jù)格式:D50D51D52D53 P5xxx 三十二個數(shù)據(jù),x表示無意義;P5為行效驗位REM_Buffer8= 數(shù)據(jù)格式:D60D61D62D63 P6xxx 三十二個數(shù)據(jù),x表示無意義;P6為行效驗位REM_Buffe

13、r9= 數(shù)據(jù)格式:D70D71D72D73 P7xxx 三十二個數(shù)據(jù),x表示無意義;P7為行效驗位REM_Buffer10= 數(shù)據(jù)格式:D80D81D82D83 P8xxx 三十二個數(shù)據(jù),x表示無意義;P8為行效驗位REM_Buffer11= 數(shù)據(jù)格式:D90D91D92D93 P9xxx 三十二個數(shù)據(jù),x表示無意義;P9為行效驗位REM_Buffer12= 數(shù)據(jù)格式:PC0PC1PC2PC3 0xxx 四個列效驗位,x表示無意義;0為停止位原程序:/2008.10.15/125K;EM4100系列RFID卡解碼/#include <reg52.h>/使用AT89S51/52等系列

14、單片機頭文件#include <STC12C5410AD.h>/stc系列單片機專用頭文件#include <intrins.h>#define uint unsigned int/定義 #define uchar unsigned char/定義 #define ulong unsigned long/定義 sbit REM=P21;/ 曼徹斯特編碼輸入端sbit CLK=P33;/產(chǎn)生125KHZ 時鐘信號端sbit LED=P25;/ 紅燈sbit SPP=P10;/ 喇叭bit REM_BIT;/ 曼徹斯特碼高、低邊沿跳變標志位,bit Efficacy_BIT

15、; /待效驗標志位,bit P_PC_BIT; /行,列效驗標志位bit YES_NO_BIT; /效驗正確,或效驗錯誤標志位,/YES_NO_BIT=1 表示效驗正確;/YES_NO_BIT=0 表示效驗錯誤。#defineTH0_H 0xfe/ 定時器0 取樣定時值設(shè)定為400us#defineTL0_L 0x8f/8f/350420us/375450usuchar U_D_Buffer5;/User_Data/用戶數(shù)據(jù)緩存,ulong long_D;/方法1,卡號在 long_D 中,不足10位,則在高位前面加 0uchar char_D;/方法2,前兩位卡號在 char_D 中,uin

16、t int_D;/方法2,卡號后4位卡號在 int_D 中,uchar volue;/volue 為曼徹斯特碼譯碼時的臨時運算緩存uchar REM_Buffer14;/曼徹斯特碼解碼后得到最終數(shù)據(jù)的緩存013/*曼徹斯特碼解碼后的數(shù)據(jù)放在 REM_Buffer013;REM_Buffer0=0xff 數(shù)據(jù)格式:1111 1111 同步頭,8個1REM_Buffer1=0x8x 數(shù)據(jù)格式:1xxx xxxx 同步頭,1個1,x表示無意義REM_Buffer2= 數(shù)據(jù)格式:D00D01D02D03 P0xxx 八個版本位或廠商信息的前四位,x表示無意義;P0為行效驗位REM_Buffer3= 數(shù)

17、據(jù)格式:D10D11D12D13 P1xxx 八個版本位或廠商信息的后四位,x表示無意義;P1為行效驗位REM_Buffer4= 數(shù)據(jù)格式:D20D21D22D23 P2xxx 三十二個數(shù)據(jù),x表示無意義;P2為行效驗位REM_Buffer5= 數(shù)據(jù)格式:D30D31D32D33 P3xxx 三十二個數(shù)據(jù),x表示無意義;P3為行效驗位REM_Buffer6= 數(shù)據(jù)格式:D40D41D42D43 P4xxx 三十二個數(shù)據(jù),x表示無意義;P4為行效驗位REM_Buffer7= 數(shù)據(jù)格式:D50D51D52D53 P5xxx 三十二個數(shù)據(jù),x表示無意義;P5為行效驗位REM_Buffer8= 數(shù)據(jù)格

18、式:D60D61D62D63 P6xxx 三十二個數(shù)據(jù),x表示無意義;P6為行效驗位REM_Buffer9= 數(shù)據(jù)格式:D70D71D72D73 P7xxx 三十二個數(shù)據(jù),x表示無意義;P7為行效驗位REM_Buffer10= 數(shù)據(jù)格式:D80D81D82D83 P8xxx 三十二個數(shù)據(jù),x表示無意義;P8為行效驗位REM_Buffer11= 數(shù)據(jù)格式:D90D91D92D93 P9xxx 三十二個數(shù)據(jù),x表示無意義;P9為行效驗位REM_Buffer12= 數(shù)據(jù)格式:PC0PC1PC2PC3 0xxx 四個列效驗位,x表示無意義;0為停止位*/uchar code DispTab='

19、0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'uchar code Data="Data: "/數(shù)據(jù)uchar code UserData="User Data: "/用戶數(shù)據(jù)uchar code Card_1="Metho

20、ds 1 Decimal Card Number: "/方法1:掐頭留尾法提取10位十進制卡號:uchar code Card_2="Methods 2 Decimal Card Number: "/方法2:前兩位后4位的微根格式,段間以小數(shù)點或豆號隔開uchar code DispTab_2=' ','H',','void init()/TMOD=0x21;TH1=0xfd;/11.0592MHz 波特率: 9600TL1=0xfd;PCON&=0x80;SCON=0x40;/AUXR=0x40;/波特率倍

21、增 /11.0592MHz 115200TH0=0x00;/TL0=0x00;/EA=1;ET0=1;TR0=0;TR1=1;ES=0;REN=1;PT0=1;/PT0H=1;/定時器0中斷優(yōu)先級最高:第三/PT0H是 stc單片機特有的寄存器REM=1;CLK=1;SPP=1;LED=1;REM_BIT=1;void delay1(uint z)/ delay(10); 10次為1msuchar x;for(;z>0;z-)for(x=0;x<160;x+)/*void delay()/ _nop_();_nop_();_nop_();*/void Time_interrupt(

22、void) interrupt 1 /定時器0中斷TR0=0;/關(guān)閉定時器0,為曼徹斯特碼提取數(shù)據(jù)定時器void RS232_in(void) interrupt 4/串口中斷EA=0;if(RI=1)/接收 RI=0; /SBUF_RI_Buffer0=SBUF;/RS2323接收緩沖區(qū)/else /if(TI=1)/發(fā)送TI=0;EA=1;void RS232()/通信轉(zhuǎn)輸數(shù)據(jù),發(fā)給 PCuchar i;ulong mm;/ES=0;if(REM_Buffer0=0xff)&&(REM_Buffer1=0x80)/同步頭9個1的判斷,同步頭正確,進入數(shù)據(jù)發(fā)送,否則退出for

23、(i=0;i<6;i+)SBUF=Datai;/" "while(TI=0);TI=0;for(i=0;i<13;i+)SBUF=DispTab(REM_Bufferi/16);/SBUF=REM_Bufferi;/給 PC 發(fā)送REM_Buffer013個數(shù)據(jù)while(TI=0);/TI=1,表示數(shù)據(jù)發(fā)送完畢,TI=0;/TI清零,并把余下的數(shù)據(jù)繼續(xù)發(fā)送,直到13個數(shù)據(jù)全部發(fā)送完。SBUF=DispTab(REM_Bufferi%16);while(TI=0);TI=0;SBUF=DispTab_21;/'H'while(TI=0);TI=0

24、;SBUF=DispTab_20;/' 'while(TI=0);TI=0;for(i=0;i<94;i+)SBUF=DispTab_20;/" "while(TI=0);TI=0;/U_D_Buffer5;/User_Data/用戶數(shù)據(jù)緩存,for(i=0;i<11;i+)SBUF=UserDatai;/" "while(TI=0);TI=0;for(i=0;i<5;i+)SBUF=DispTab(U_D_Bufferi/16);while(TI=0);TI=0;SBUF=DispTab(U_D_Bufferi%16)

25、;while(TI=0);TI=0;SBUF=DispTab_21;/'H'while(TI=0);TI=0;SBUF=DispTab_20;/' 'while(TI=0);TI=0;for(i=0;i<120;i+)SBUF=DispTab_20;/" "while(TI=0);TI=0;for(i=0;i<31;i+)SBUF=Card_1i;/" "while(TI=0);TI=0;/10位十進制卡號 Card_1SBUF=DispTablong_D/1000000000;/10while(TI=0);T

26、I=0;mm=long_D%1000000000;SBUF=DispTabmm/100000000;/9while(TI=0);TI=0;mm=long_D%100000000;SBUF=DispTabmm/10000000;/8while(TI=0);TI=0;mm=long_D%10000000;SBUF=DispTabmm/1000000;/7while(TI=0);TI=0; mm=long_D%1000000;SBUF=DispTabmm/100000;/6while(TI=0);TI=0; mm=mm%100000;SBUF=DispTabmm/10000;/5while(TI=0

27、);TI=0;mm=long_D%10000;SBUF=DispTabmm/1000;/4while(TI=0);TI=0;mm=long_D%1000;SBUF=DispTabmm/100;/3while(TI=0);TI=0;mm=long_D%100;SBUF=DispTabmm/10;/2while(TI=0);TI=0;SBUF=DispTabmm%10;/1while(TI=0);TI=0;/Card_2for(i=0;i<106;i+)SBUF=DispTab_20;/" "while(TI=0);TI=0;for(i=0;i<31;i+)SBUF

28、=Card_2i;/" "while(TI=0);TI=0;SBUF=DispTabchar_D/100;/while(TI=0);TI=0;char_D=char_D%100;SBUF=DispTabchar_D/10;/while(TI=0);TI=0;SBUF=DispTabchar_D%10;/while(TI=0);TI=0;SBUF=DispTab_22;/while(TI=0);TI=0;SBUF=DispTabint_D/10000;/while(TI=0);TI=0;int_D=int_D%10000;SBUF=DispTabint_D/1000;/whi

29、le(TI=0);TI=0;int_D=int_D%1000;SBUF=DispTabint_D/100;/while(TI=0);TI=0;int_D=int_D%100;SBUF=DispTabint_D/10;/while(TI=0);TI=0;SBUF=DispTabint_D%10;/while(TI=0);TI=0;for(i=0;i<109;i+)SBUF=DispTab_20;/" "while(TI=0);TI=0;/ES=0;void REM_init()/射頻接口初始化CLK=0;/為74HC4060 提供+5V電源,74HC4060得電后輸出1

30、25KHZ信號void REM_Processing()/曼徹斯特碼數(shù)據(jù)提取uchar i,ii;loop:TR0=0;volue=0;for(i=0;i<9;i+)/曼徹斯特碼同步頭檢測,9個1采用逐個前移檢測法/逐個前移檢測法,即每檢測到一個數(shù)據(jù),如果是"1",并向數(shù)據(jù)庫寫入1,/如果是"0",就放棄當(dāng)前檢測的數(shù)據(jù),并向當(dāng)前數(shù)據(jù)流方向移動一位,/這樣一來,就保證了不管數(shù)據(jù)流是在何種狀態(tài)下,都能正確無誤地抓取9個1,/同步頭9個1的提取成功,曼徹斯特碼譯碼器即和當(dāng)前的數(shù)據(jù)流保持了同步,/并把余下的55位數(shù)據(jù)全部譯完。while(REM=1)if(

31、TR0=0)goto loop;/break;TR0=0;TH0=TH0_H;/開啟400us定時器,TL0=TL0_L;TR0=1;while(TR0=1);TH0=TH0_H;/開啟400us定時器,同步頭逐個前移檢測TL0=TL0_L;TR0=1;if(REM=0)goto loop;if(i<8)volue<<=1;volue|=0x01;if(i=7)REM_Buffer0=volue;REM_Buffer1=0x80;TR0=0;REM_BIT=0;volue=0x00;TH0=TH0_H;/400usTL0=TL0_L; /下降TR0=1;for(i=2;i&l

32、t;13;i+)/曼徹斯特碼解碼 for(ii=0;ii<5;ii+)/曼徹斯特碼解碼while(TR0=1);if(REM=1)if(REM_BIT=0)while(REM=1);/曼徹斯特碼跳變?yōu)楦唠娖絖nop_();_nop_();_nop_();_nop_();/抗抖動while(REM=1);/_nop_();_nop_();_nop_();_nop_();/抗抖動while(REM=1);/volue<<=1;/用左移指令把"1"移入voluevolue|=0x08;/跳變的瞬間提取數(shù)據(jù),TH0=TH0_H;/開啟400us定時器,為下次提取數(shù)

33、據(jù)提供參考TL0=TL0_L;TR0=1;REM_BIT=0;/曼徹斯特碼標志位置"0"else /if(REM_BIT=1)while(REM=1);/曼徹斯特碼跳變?yōu)楦唠娖絖nop_();_nop_();_nop_();_nop_();/抗抖動while(REM=1);_nop_();_nop_();_nop_();_nop_();/抗抖動while(REM=1);volue<<=1;/用左移指令把"1"移入voluevolue|=0x08;/跳變的瞬間提取數(shù)據(jù),TH0=TH0_H;/開啟400us定時器,為下次提取數(shù)據(jù)提供參考TL0=T

34、L0_L;TR0=1;REM_BIT=0;/曼徹斯特碼標志位置"0"else /if(REM=0)if(REM_BIT=0)while(REM=0);/曼徹斯特碼跳變?yōu)橄陆笛豞nop_();_nop_();_nop_();_nop_();/抗抖動while(REM=0);_nop_();_nop_();_nop_();_nop_();/抗抖動while(REM=0);volue<<=1;/用左移指令把"0"移入volueTH0=TH0_H;/開啟400us定時器,為下次提取數(shù)據(jù)提供參考TL0=TL0_L;TR0=1;REM_BIT=1;/曼徹

35、斯特碼標志位置"1"else /if(REM_BIT=1)while(REM=0);/曼徹斯特碼跳變?yōu)橄陆笛豞nop_();_nop_();_nop_();_nop_();/抗抖動while(REM=0);_nop_();_nop_();_nop_();_nop_();/抗抖動while(REM=0);volue<<=1;/用左移指令把"0"移入volueTH0=TH0_H;/開啟400us定時器,為下次提取數(shù)據(jù)提供參考TL0=TL0_L;TR0=1;REM_BIT=1;/曼徹斯特碼標志位置"1"REM_Bufferi=v

36、olue;volue=0x00;void Efficacy()/數(shù)據(jù)效驗uchar i,ii,cache,cache_1,counter;/counter=0;for(i=2;i<12;i+)/行效驗counter=0;cache=REM_Bufferi;cache_1=REM_Bufferi;for(ii=0;ii<4;ii+)cache&=0x80;if(cache=0x80)counter+;cache_1<<=1;cache=cache_1;if(counter=0)|(counter=2)|(counter=4)Efficacy_BIT=0;else

37、if(counter=1)|(counter=3)Efficacy_BIT=1;cache=REM_Bufferi;cache&=0x08;if(cache=0x08)P_PC_BIT=1;else P_PC_BIT=0;if(Efficacy_BIT=P_PC_BIT)YES_NO_BIT=1; /表示效驗正確elseYES_NO_BIT=0; /表示效驗錯誤if(YES_NO_BIT=0)/效驗錯誤,無條件返回return;cache_1=0x80;for(i=0;i<4;i+)/列效驗counter=0;for(ii=2;ii<12;ii+)cache=REM_Bufferi;cache&=cache_1;if(cache=cache_1)counter+=1;if(counter=0)|(counter=2)|(counter=4)|(counter=6)|(counter=8)|(counter=10)Efficacy_BIT=0;else if(counter=1)|(counter=3)|(counter=5)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論