日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

基于STC89C52的韦根数据接收

發(fā)布時(shí)間:2023/12/20 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于STC89C52的韦根数据接收 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

韋根是一種開放的通訊協(xié)議,具體官方介紹如下:


Wiegand協(xié)議是國際上統(tǒng)一的標(biāo)準(zhǔn),有很多格式,標(biāo)準(zhǔn)的26-bit 應(yīng)該是最常用的格式。此外,還有34-bit 、37-bit 等格式。格式的含義如下:當(dāng)給出這一串?dāng)?shù)字,用戶并不知道這串?dāng)?shù)字的含義,但如果說這是一個(gè)電話號(hào)碼的時(shí)候,那么你可能就會(huì)說:哦,028是成都的區(qū)號(hào),而88888888是電話號(hào)碼。但是安防行業(yè)并不愿意把這些格式公開,而安防公司也常常變化這些格式來保證產(chǎn)品的保密性。


而標(biāo)準(zhǔn)26-bit 格式是一個(gè)開放式的格式,這就意味著任何人都可以購買某一特定格式的HID卡,并且這些特定格式的種類是公開可選的。26-Bit格式就是一個(gè)廣泛使用的工業(yè)標(biāo)準(zhǔn),并且對(duì)所有HID的用戶開放。幾乎所有的門禁控制系統(tǒng)都接受標(biāo)準(zhǔn)的26-Bit格式。


Wiegand(韋根)協(xié)議是由摩托羅拉公司制定的一種通訊協(xié)議,它適用于涉及門禁控制系統(tǒng)的讀卡器和卡片的許多特性;其協(xié)議并沒有定義通訊的波特率、也沒有定義數(shù)據(jù)。長度韋根格式主要定義是數(shù)據(jù)傳輸方式:Data0和Data1兩根數(shù)據(jù)線分別傳輸0和1.現(xiàn)應(yīng)用最多的是26bit,34bit,36bit,44bit等等。

通俗的來說,韋根(Wiegand)協(xié)議又稱韋根碼,可以理解為是一種通信工具,其主要應(yīng)用于讀卡器(讀頭)到門禁控制器。當(dāng)讀卡器識(shí)別到有效卡后,將卡片的鑰匙信息以韋根協(xié)議的方式傳輸,再而轉(zhuǎn)換成數(shù)據(jù)發(fā)送給控制器,控制器驗(yàn)證鑰匙信息有效后打開門。


韋根數(shù)據(jù)輸出由二根線組成,分別是DATA0 和 DATA1 ,使用TTL電平傳輸,二根線分別為‘0’或‘1’輸出。


輸出‘0’時(shí):DATA0線上出現(xiàn)負(fù)脈沖;
輸出‘1’時(shí):DATA1線上出現(xiàn)負(fù)脈沖;
負(fù)脈沖寬度TP=100微秒;周期TW=1600微秒;也就是說,無論傳輸“0”還是“1”,兩條數(shù)據(jù)線上的電平都是“異或”關(guān)系。




一般門禁常用的韋根協(xié)議是26/34,本次樓主想用STC89C52RC實(shí)現(xiàn)對(duì)韋根數(shù)據(jù)的接收,恰巧此單片機(jī)具有2路外部中斷IO(具體為P3.2與P3.3)。


本次,將韋根讀頭的D0接在MCU的P3.2,D1接在MCU的P3.3上,GND接在一起,之后就可以與韋根讀頭或者韋根其他設(shè)備對(duì)接了。



外部中斷初始化程序如下:

void?InterruptInit() {IT0?=?1;?//??外部中斷源選擇為下降沿觸發(fā)EX0?=?1;?//??開外部中斷?0IT1?=?1;EX1?=?1;EA?=?1;??//?開總中斷 }

外部中斷處理函數(shù)如下:

void GetD0 () interrupt 0 {if(count == 0) // 獲取偶校驗(yàn)碼{firstbit = 0;}else if(count < 9) // 獲取前八位 HID碼{CardId[0] = (CardId[0] << 1) & 0xfe;}else if(count < 17) // 獲取 PID的前八位{CardId[1] = (CardId[1] << 1) & 0xfe;}else if(count < 25) // 獲取 PID的后八位{CardId[2] = (CardId[2] << 1) & 0xfe;}else{lastbit = 0; // 獲取奇校驗(yàn)碼,使能標(biāo)志位r_done = 1;}count++;if(count == 26)count = 0; } void GetD1 () interrupt 2 {if(count == 0){firstbit = 1;}else if(count < 9){CardId[0] = (CardId[0] << 1) | 0x01;}else if(count < 17){CardId[1] = (CardId[1] << 1) | 0x01;}else if(count < 25){CardId[2] = (CardId[2] << 1) | 0x01;}else{lastbit = 1;r_done = 1;}count++;if(count == 26)count = 0; }

將獲取到的數(shù)據(jù),可以通過串口發(fā)出來,也可以正常通過程序處理數(shù)據(jù)。本次使用串口將數(shù)據(jù)打印出來。

串口初始化程序如下:

void UartInit(void) {TMOD = 0x20;TL1 = 0xfd;TH1 = 0xfd;TR1 = 1;SCON = 0xd0;EA = 1; }

最終,將韋根獲取到的數(shù)據(jù)通過串口打印出來。


前三個(gè)字節(jié)是16進(jìn)制的數(shù)據(jù),后五個(gè)字節(jié)是通過程序轉(zhuǎn)換的BCD碼。


至此,基于51單片機(jī)的韋根數(shù)據(jù)接收已經(jīng)完成了,那么,你看懂了么?歡迎在下方評(píng)論區(qū)討論哦。

END

本文系21ic論壇yangjiaxu原創(chuàng)撰寫



推薦閱讀:

專輯|Linux文章匯總

專輯|程序人生

專輯|C語言

我的知識(shí)小密圈

關(guān)注公眾號(hào),后臺(tái)回復(fù)「1024」獲取學(xué)習(xí)資料網(wǎng)盤鏈接。

歡迎點(diǎn)贊,關(guān)注,轉(zhuǎn)發(fā),在看,您的每一次鼓勵(lì),我都將銘記于心~

總結(jié)

以上是生活随笔為你收集整理的基于STC89C52的韦根数据接收的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。