基于單片機(jī)的韋根信號(hào)的接收
摘要:介紹了韋根的概念和標(biāo)準(zhǔn)韋根26-bit信號(hào)的定義格式,依據(jù)其特點(diǎn)設(shè)計(jì)了一個(gè)韋根接收讀卡器電路,并提供了程序?qū)崿F(xiàn)的部分代碼。該設(shè)計(jì)的電路和程序均已通過(guò)調(diào)試并在實(shí)際項(xiàng)目中得到應(yīng)用。
關(guān)鍵詞:讀卡器;讀卡控制器;韋根信號(hào);單片機(jī)
Wiegand,即韋根傳感器是一種當(dāng)交變磁場(chǎng)經(jīng)過(guò)時(shí)產(chǎn)生輸出電壓脈沖的傳感器。脈沖的幅度是由激勵(lì)磁場(chǎng)的場(chǎng)強(qiáng)決定的。因此,韋根傳感器不需要外界電源供電。由于韋根傳感器非常容易和數(shù)字系統(tǒng)相匹配,并且系統(tǒng)沒(méi)有可動(dòng)的部件或半導(dǎo)體器件,這使得它們能適用于惡劣的環(huán)境和長(zhǎng)期無(wú)人監(jiān)控的場(chǎng)所。
在設(shè)計(jì)讀卡器時(shí),讀卡控制器既需要與上位機(jī)串行通信,又需要與讀卡器串行通信。大多數(shù)單片機(jī)只有一個(gè)串行通信口,而設(shè)計(jì)者希望控制器與讀卡器的通信不占用串行接口,因此,應(yīng)用韋根信號(hào)是一個(gè)不錯(cuò)的選擇。文章介紹了一種基于單片機(jī)的韋根信號(hào)接收的實(shí)現(xiàn)方法。
1 韋根信號(hào)的格式說(shuō)明
韋根信號(hào)在數(shù)據(jù)的傳輸中只需要兩條數(shù)據(jù)線(xiàn),分別是DATA0和DATA1。當(dāng)空閑時(shí),兩線(xiàn)相對(duì)于0 V的電源都是TTL電平的水平,即5 V;當(dāng)有數(shù)據(jù)傳輸時(shí),兩線(xiàn)交替發(fā)送400μs的低脈沖。當(dāng)DATA0線(xiàn)發(fā)送脈沖時(shí),數(shù)據(jù)輸出是‘0’;當(dāng)DATA1線(xiàn)發(fā)送脈沖時(shí),數(shù)據(jù)輸出是‘1’。兩根線(xiàn)不可同時(shí)發(fā)送脈沖。脈沖的間隔是1ms,寬度是100μs,周期是600μs。圖1中脈沖寬度在20μs~200μs之間,兩個(gè)脈沖間的時(shí)間間隔在200μs~200ms之間。
由于標(biāo)準(zhǔn)韋根26-bit格式是一個(gè)開(kāi)放式的格式,這就意味著任何人都可以購(gòu)買(mǎi)某一特定格式的HID卡,并且這些特定格式的種類(lèi)是公開(kāi)可選的。26-bit格式就是一個(gè)廣泛使用的工業(yè)標(biāo)準(zhǔn),并且對(duì)所有HID的用戶(hù)開(kāi)放。
韋根的數(shù)據(jù)一般由三部分組成:校驗(yàn)位、出廠(chǎng)碼和數(shù)據(jù)位。不同的韋根格式有不同的組成。Weigand協(xié)議是國(guó)際上統(tǒng)一的標(biāo)準(zhǔn),格式有很多種,標(biāo)準(zhǔn)的weigand26,即26-bit是最常用的格式。標(biāo)準(zhǔn)的26位韋根輸出是由26位二進(jìn)制數(shù)組成,其中第1位和第26位是校驗(yàn)位,2-9位是廠(chǎng)家碼,10-25位是卡號(hào)位,其輸出格式如下:
12 9 10 25 26
E XXXX XXXX XXXX…XXXX 0
第1位是前12bit的偶校驗(yàn)位;前12位(第2-9位)對(duì)應(yīng)電子卡HID碼的低8位,后12位(第10-25位)對(duì)應(yīng)電子卡的PID碼,第26位是后12bit的奇校驗(yàn)位。數(shù)據(jù)從左至右順序發(fā)送,高位在前。
如果電卡的地區(qū)碼位2個(gè)字符,即8位則可用那設(shè)置255個(gè)地區(qū)碼((15×16)+15=255);電子卡的卡號(hào)位4個(gè)字符,即16位則可設(shè)置65 536個(gè)卡號(hào)((15×16×16×16)+(15×16×16)+(15×16)+15=65 535)。
例如:一個(gè)HID:16 385,PID:00004的電子卡其26位韋根輸出為:
10000000100000000000001000
檢驗(yàn)位HID=16 385(二進(jìn)制的低8位)PID=4(二進(jìn)制)檢驗(yàn)位。
這26位數(shù)據(jù)在讀出器的韋根輸出線(xiàn)DATA0,DATA1上輸出。
2 接收電路的設(shè)計(jì)
韋根信號(hào)的接受有兩種方法,分別是查詢(xún)法和中斷法,如果用查詢(xún)的方法接收會(huì)出現(xiàn)丟幀的現(xiàn)象;所以作者選擇外部中斷的方法來(lái)實(shí)現(xiàn)韋根信號(hào)的接受,接收電路如圖2所示。接收電路選用了美國(guó)Atmel公司的89S51作為主控芯片。讀卡器使用了遠(yuǎn)距離125 kHz射頻讀卡器,讀卡控制器為自行設(shè)計(jì)。讀卡控制器與上位機(jī)通信選用RS485總線(xiàn);單片機(jī)為含WDT的89S51;存儲(chǔ)器為128 k字節(jié)的非易失存儲(chǔ)芯片HK1245-7,讀卡控制器還配置實(shí)時(shí)時(shí)鐘電路、門(mén)禁控制電路、數(shù)碼管顯示驅(qū)動(dòng)電路等等。
3 程序代碼的實(shí)現(xiàn)
中斷接收韋根碼程序如下:
;外中斷0服務(wù)程序,接收DATA0
DTO: PUSH PSW
USH ACC
SETB RS1
CLR RS0 ;第二組寄存器
CLR C ;DATA0
MOV R7,#4 ;26位碼用4字節(jié)
MOV R0,#WGBUF ;緩沖器首地址
DTO1:MOV A,@R0
RLC A
MOV@R0,A
INC R0
DJNZ R7,DTO1
DJNZ WXH0,DTOE
MOV WXH0,#26 ;韋根數(shù)據(jù)位數(shù)
ACALL WG26 ;26位接收完畢?
DTOE:POP ACC
POP PSW
RETI
;外中斷1服務(wù)程序,接收DATA1
DT1: PUSH PSW ;
PUSH ACC
SETB RS1
CLR RS0 ;第二組寄存器
SETB C ;DATA1
MOV R7,#4 ;26位用4字節(jié)
MOV R0,#WGBUF ;緩沖器首地址
DT11:MOV A,@R0
RLC A
MOV@R0,A
INC R0
DJNZ R7,DT11
DJNZ WXH0,DTlE ;26位接收完畢?
MOV WXH0,#26 ;韋根數(shù)據(jù)位數(shù)
ACALL WG26 ;韋根處理
DT1E:POP ACC
POP PSW
RETI ;中斷返回
提供的兩個(gè)中斷服務(wù)程序可共同完成26位韋根碼的接收。其中,外中斷0負(fù)責(zé)DATA0的接收;外中斷1負(fù)責(zé)DATA1的接收。
當(dāng)26位的韋根碼接收完整后調(diào)用子程序WG26,在子程序中進(jìn)行韋根碼的奇偶校驗(yàn)、存儲(chǔ)、發(fā)送等處理。程序使用4個(gè)字節(jié)作為韋根碼存儲(chǔ)單元,即前三個(gè)字節(jié)的全部和第四字節(jié)的最低2位。
4 結(jié)束語(yǔ)
應(yīng)用單片機(jī)的中斷技術(shù)實(shí)現(xiàn)了韋根信號(hào)的接受,設(shè)計(jì)的電路和程序均已通過(guò)調(diào)試,并設(shè)計(jì)調(diào)試方案如圖3所示。
經(jīng)測(cè)試,讀卡成功率100%,未發(fā)現(xiàn)差錯(cuò),通信正確率100%。設(shè)計(jì)完全達(dá)到預(yù)期效果,并在實(shí)際項(xiàng)目實(shí)施過(guò)程中運(yùn)行正常。文章中給出了完整的接收程序。由于篇幅所限,初始化程序、信號(hào)處理程序未與列出,需要者可與作者聯(lián)系,愿予提供、交流。