韋根26經(jīng)典講解_第1頁
韋根26經(jīng)典講解_第2頁
韋根26經(jīng)典講解_第3頁
韋根26經(jīng)典講解_第4頁
韋根26經(jīng)典講解_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、韋根26經(jīng)典講解目 錄第一章 韋根協(xié)議簡介31傳感器原理介紹32數(shù)據(jù)輸出的基本概念33韋根6位輸出格式44韋根26接收45韋根接口定義46特別說明:5第二章 韋根協(xié)議的應(yīng)用61wiegand接口硬件設(shè)計62流程圖63發(fā)送源程序7第一章 韋根協(xié)議簡介wiegand(韋根)協(xié)議是由摩托羅拉公司制定的一種通訊協(xié)議,它適用于涉及門禁控制系統(tǒng)的讀卡器和卡片的許多特性,其協(xié)議并沒有定義通訊的波特率、也沒有定義數(shù)據(jù)長度韋根格式主要定義是數(shù)據(jù)傳輸方式:data0和data1兩根數(shù)據(jù)線分別傳輸0和1,現(xiàn)在應(yīng)用最多的是26bit,34bit,36bit,44bit等等,其中標準26-bit 格式是一個開放式的格式

2、,任何人都可以購買某一特定格式的hid卡,并且這些特定格式的種類是公開可選的,26-bit格式就是一個廣泛使用的工業(yè)標準,并且對所有hid的用戶開放,現(xiàn)在幾乎所有的門禁控制系統(tǒng)都接受26-bit格式的標準。1傳感器原理介紹韋根傳感器是由一根雙穩(wěn)態(tài)磁敏感功能合金絲和纏繞其外的感應(yīng)線圈組成的。其工作原理是:在交變磁場中,當平行于敏感絲的某極性(例如n極)磁場達到觸發(fā)磁感應(yīng)強度時,敏感絲中的磁疇受到激勵會發(fā)生運動,磁化方向瞬間轉(zhuǎn)向同一方向,同時在敏感絲周圍空間磁場也發(fā)生瞬間變化,由此在感應(yīng)線圈中感生出一個電脈沖。此后若該磁場減弱,敏感絲磁化方向?qū)⒈3址€(wěn)定不變,感應(yīng)線圈也無電脈沖輸出,但當相反極性(s

3、極)磁場增強觸發(fā)磁感應(yīng)強度時,敏感絲磁化方向又瞬間發(fā)生翻轉(zhuǎn),并在感應(yīng)線圈中感生出一個方向相反的電脈沖。如此反復(fù),韋根傳感器便將交變磁場的磁信號轉(zhuǎn)換成交變電信號。2數(shù)據(jù)輸出的基本概念韋根協(xié)議又稱韋根碼,韋根碼在數(shù)據(jù)的傳輸中只需兩條數(shù)據(jù)線,一條為data0,另一條為data1。協(xié)議規(guī)定,兩條數(shù)據(jù)線在無數(shù)據(jù)時均為高電平,如果data0為低電平代表數(shù)據(jù)0,data1為低電平代表數(shù)據(jù)1(低電平信號低于1v,高電平信號大于4v),數(shù)據(jù)信號波形如圖1.1所示。圖1.1中脈沖寬度在20s到200s之間,兩個脈沖間的時間間隔在200s到20ms之間。圖1.1 數(shù)據(jù)信號波形圖3韋根6位輸出格式標準韋根輸出是由26

4、位二進制數(shù)組成,每一位的含義如下: e xxxx xxxx xxxx xxxx xxxx xxxx o二進制第1位為2-13位的偶校驗位第2-9位對應(yīng)與電子卡hid碼的低8位第10-25位對應(yīng)電子卡的pid號碼第26位為14-25位的奇校驗位以上數(shù)據(jù)從左至右順序發(fā)送,高位在前。如果電卡的地區(qū)碼位2個字符,即8位則可用那設(shè)置255個地區(qū)碼(15×16)+15=255);電子卡的卡號位4個字符,即16位則可設(shè)置65536個卡號(15×16×16×16)+(15×16×16)+(15×16)+15=65,535)。例如:一個hid

5、:16385,pid:00004的電子卡其26位韋根輸出為:10000000100000000000001000檢驗位hid=16385(二進制的低8位)pid=4(二進制)檢驗位這26位數(shù)據(jù)在讀出器的韋根輸出線data0,data1上輸出。data0,data1在沒有數(shù)據(jù)輸出時都保持+5v高電平。若輸出為0,則data0拉低一段時間,若輸出為1,則data1拉低一段時間。兩個電子卡韋根輸出之間的最小間隔為0.25秒。4韋根26接收韋根的接收對時間的實時性要求比較高,如果用查詢的方法接收會出現(xiàn)丟幀的現(xiàn)象:假設(shè)查詢到data0為0時主程序正在指向其它任務(wù),等主程序執(zhí)行完該任務(wù)時data0已經(jīng)變?yōu)?/p>

6、1了,那么這樣就導致了一個0bit丟了,這樣讀出的卡號肯定奇偶校驗通不過,所以表現(xiàn)出mcu接收不到i c模塊發(fā)送的卡號。唯一的辦法是在外部中斷里接收每個bit(僅僅在中斷里獲得開始接收wiegand數(shù)據(jù)還不行,因為這是盡管給開始接收wiegand數(shù)據(jù)標志位置位了,但是主程序還在執(zhí)行其它代碼而沒有到達查詢開始接收wiegand數(shù)據(jù)標志位這條指令)。5韋根接口定義 wiegand接口界面由三條導線組成: data0:暫定,蘭色,p2.5(通常為綠色)。data1:暫定,白色,p2.6(通常為白色)。gnd:(通常為黑色),暫定信號地。當安裝讀卡器時,在讀卡器和門禁控制面板的連接點(終端)上都能夠看

7、到這三個名稱。目前所有的標準型讀卡器都提供可選擇的wiegand接口,這三條線負責傳送wiegand數(shù)據(jù),也被稱為wiegand信號。6特別說明:在上述標準26位韋根格式中,只包含了電子卡hid碼的低8位,即對應(yīng)于韋根輸出的第2位到第9位,實際上電子卡的hid碼為16位。除非特別說明,所售census產(chǎn)品的韋根通訊協(xié)議均為上述標準協(xié)議。奇/偶校驗(ecc)是數(shù)據(jù)傳送時采用的一種校正數(shù)據(jù)錯誤的一種方式,分為奇校驗和偶校驗兩種,其原理如下:如果是采用奇校驗,在傳送每一個字節(jié)的時候另外附加一位作為校驗位,當實際數(shù)據(jù)中“1”的個數(shù)為偶數(shù)的時候,這個校驗位就是“1”,否則,這個校驗位就是“0”,這樣就可

8、以保證傳送的數(shù)據(jù)滿足奇校驗的要求。在接收方收到數(shù)據(jù)時,將按照奇校驗的要求檢測數(shù)據(jù)中“1”的個數(shù),如果為奇數(shù),表示傳送正確,反之,表示傳送錯誤。偶校驗的過程和奇校驗一樣,只不過是檢測數(shù)據(jù)中的“1”的個數(shù)為偶數(shù)。第二章 韋根協(xié)議的應(yīng)用1wiegand接口硬件設(shè)計將wiegand接口的data0和data1兩個輸出通過74ls573接到mcu的兩個io腳上,采用查詢的方式接收數(shù)據(jù),但這樣接收并不可靠。比較好的方法是將data0和data1兩個輸出通過74ls573接到mcu的兩個io腳上,并將它們通過74ls08接到mcu的外部中斷1上,采用中斷的方式接收數(shù)據(jù),其電路圖如圖2.1所示。圖2.1 ic

9、卡讀卡電路圖2流程圖開始字節(jié)調(diào)整奇偶校驗讀數(shù)據(jù)中斷初始化lcm初始化結(jié)束字符顯示中斷?圖2.2 工藝流程圖開始zijiezhuanhuan()data_check()int0_isr()init( )lcminit( )結(jié)束putchar()t=26?圖2.3 程序流程圖3發(fā)送源程序/*/模塊名稱:ic卡卡號顯示程序 /*/功能說明:讀取ic卡卡號,并予以lcm24064顯示;/連線說明:其中d0接mcu的p1.5,d1接mcu的p1.6,d0與d1相與輸出端接/ mcu的外部中斷1;/ 作者: */完成日期:2008年10月 */*#include <math.h>#includ

10、e <string.h>#include <absacc.h>#include <reg51.h>#include <intrins.h>#include <stdio.h>#include <huanyingguanglin.h>#include <lcm.h>/*函數(shù)定義*/#define uint unsigned int#define uchar unsigned charsbit d0=p16; /韋根數(shù)據(jù)0sbit d1=p15; /韋根數(shù)據(jù)1bit even; /前16位偶校驗bit odd; /

11、后16位奇校驗uint m=0;uchar t;uchar flag=1; /讀數(shù)次數(shù)uchar wiegand3=0xff,0xff,0xff; /ic卡卡號 韋根26數(shù)據(jù)包24位bit even_odd_ture=0; /奇偶校驗正確判斷位 uchar icno6; /*函數(shù)聲明*/void init( void );void zijiezhuanhuan(void);void int0_isr(void);bit data_check(void);/*into中斷服務(wù)程序*/void int0_isr(void) interrupt 0 /外部中斷0服務(wù)程序 bit sbuf0; /讀數(shù)

12、緩沖器 ex0=0; /關(guān)中斷 sbuf0=d0; /讀數(shù)據(jù)data0 switch(flag) case 1: if(sbuf0=0) even=0; /確定偶校驗位 else even=1; flag+; break; case 2: /第29位為區(qū)號碼 if(sbuf0=0) wiegand0&=0x7f; else wiegand0|=0x80; flag+; break; case 3: if(sbuf0=0) wiegand0&=0xbf; else wiegand0|=0x40; flag+; break; case 4: if(sbuf0=0) wiegand0

13、&=0xdf; else wiegand0|=0x20; flag+; break; case 5: if(sbuf0=0) wiegand0&=0xef; else wiegand0|=0x10; flag+; break; case 6: if(sbuf0=0) wiegand0&=0xf7; else wiegand0|=0x08; flag+; break; case 7: if(sbuf0=0) wiegand0&=0xfb; else wiegand0|=0x04; flag+; break; case 8: if(sbuf0=0) wiegand0

14、&=0xfd; else wiegand0|=0x02; flag+; break; case 9: if(sbuf0=0) wiegand0&=0xfe; else wiegand0|=0x01; flag+; break; case 10: /第1025位為卡號碼 if(sbuf0=0) wiegand1&=0x7f; else wiegand1|=0x80; flag+; break; case 11: if(sbuf0=0) wiegand1&=0xbf; else wiegand1|=0x40; flag+; break; case 12: if(sb

15、uf0=0) wiegand1&=0xdf; else wiegand1|=0x20; flag+; break; case 13: if(sbuf0=0) wiegand1&=0xef; else wiegand1|=0x10; flag+; break; case 14: if(sbuf0=0) wiegand1&=0xf7; else wiegand1|=0x08; flag+; break; case 15: if(sbuf0=0) wiegand1&=0xfb; else wiegand1|=0x04; flag+; break; case 16: i

16、f(sbuf0=0) wiegand1&=0xfd; else wiegand1|=0x02; flag+; break; case 17: if(sbuf0=0) wiegand1&=0xfe; else wiegand1|=0x01; flag+; break; case 18: if(sbuf0=0) wiegand2&=0x7f; else wiegand2|=0x80; flag+; break; case 19: if(sbuf0=0) wiegand2&=0xbf; else wiegand2|=0x40; flag+; break; case 2

17、0: if(sbuf0=0) wiegand2&=0xdf; else wiegand2|=0x20; flag+; break; case 21: if(sbuf0=0) wiegand2&=0xef; else wiegand2|=0x10; flag+; break; case 22: if(sbuf0=0) wiegand2&=0xf7; else wiegand2|=0x08; flag+; break; case 23: if(sbuf0=0) wiegand2&=0xfb; else wiegand2|=0x04; flag+; break; ca

18、se 24: if(sbuf0=0) wiegand2&=0xfd; else wiegand2|=0x02; flag+; break; case 25: if(sbuf0=0) wiegand2&=0xfe; else wiegand2|=0x01; flag+; break; case 26: if(sbuf0=0) odd=0; else odd=1; t=flag; flag=1; m+; break; default:break; ex0=1; /開中斷 /*ic卡號數(shù)據(jù)奇偶校驗*/偶校驗:bit "1"的個數(shù)為偶數(shù),則為0/ bit "

19、;1"的個數(shù)為奇數(shù),則為1 /奇校驗:bit "1"的個數(shù)為奇數(shù),則為0/ bit "1"的個數(shù)為偶數(shù),則為1bit data_check(void) uchar i,check_temp; / uchar one_num=0; /bit 1的個數(shù) bit even_temp; /偶校驗位緩沖器 bit odd_temp; /奇校驗位緩沖器 check_temp=wiegand0; /先進行偶校驗 for(i=0;i<8;i+) /前8位 if(check_temp&0x01)one_num+; /判斷是否為1,若為1,則one_

20、num加1 check_temp>>=1; /右移 check_temp=wiegand1; for(i=0;i<4;i+) /第912位 if(check_temp&0x80)one_num+; /判斷是否為1,若為1,則one_num加1 check_temp<<=1; /左移 one_num%2=0?(even_temp=0):(even_temp=1); / one_num=0; /bit 1的個數(shù)清零 if(even_temp=even) /若偶校驗正確,則進行奇校驗 check_temp=wiegand1; for(i=0;i<4;i+)

21、 /第1317位 if(check_temp&0x01)one_num+; check_temp>>=1; check_temp=wiegand2; /第1824位 for(i=0;i<8;i+) / if(check_temp&0x01)one_num+; check_temp>>=1; one_num%2=0?(odd_temp=1):(odd_temp=0);/ one_num=0; if(odd=odd_temp) return 1; /若奇偶校驗正確,則返回1 else return 0; /否則返回0void init( void ) lcminit( );it0=1; /外部中斷0,下降沿觸發(fā)有效 ex0=1; /允許外部中斷0中斷 ea=1; lcmc

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論