基于STC89C52的韦根数据接收
韋根是一種開放的通訊協議,具體官方介紹如下:
Wiegand協議是國際上統一的標準,有很多格式,標準的26-bit 應該是最常用的格式。此外,還有34-bit 、37-bit 等格式。格式的含義如下:當給出這一串數字,用戶并不知道這串數字的含義,但如果說這是一個電話號碼的時候,那么你可能就會說:哦,028是成都的區號,而88888888是電話號碼。但是安防行業并不愿意把這些格式公開,而安防公司也常常變化這些格式來保證產品的保密性。
而標準26-bit 格式是一個開放式的格式,這就意味著任何人都可以購買某一特定格式的HID卡,并且這些特定格式的種類是公開可選的。26-Bit格式就是一個廣泛使用的工業標準,并且對所有HID的用戶開放。幾乎所有的門禁控制系統都接受標準的26-Bit格式。
Wiegand(韋根)協議是由摩托羅拉公司制定的一種通訊協議,它適用于涉及門禁控制系統的讀卡器和卡片的許多特性;其協議并沒有定義通訊的波特率、也沒有定義數據。長度韋根格式主要定義是數據傳輸方式:Data0和Data1兩根數據線分別傳輸0和1.現應用最多的是26bit,34bit,36bit,44bit等等。
通俗的來說,韋根(Wiegand)協議又稱韋根碼,可以理解為是一種通信工具,其主要應用于讀卡器(讀頭)到門禁控制器。當讀卡器識別到有效卡后,將卡片的鑰匙信息以韋根協議的方式傳輸,再而轉換成數據發送給控制器,控制器驗證鑰匙信息有效后打開門。
韋根數據輸出由二根線組成,分別是DATA0 和 DATA1 ,使用TTL電平傳輸,二根線分別為‘0’或‘1’輸出。
輸出‘0’時:DATA0線上出現負脈沖;
輸出‘1’時:DATA1線上出現負脈沖;
負脈沖寬度TP=100微秒;周期TW=1600微秒;也就是說,無論傳輸“0”還是“1”,兩條數據線上的電平都是“異或”關系。
一般門禁常用的韋根協議是26/34,本次樓主想用STC89C52RC實現對韋根數據的接收,恰巧此單片機具有2路外部中斷IO(具體為P3.2與P3.3)。
本次,將韋根讀頭的D0接在MCU的P3.2,D1接在MCU的P3.3上,GND接在一起,之后就可以與韋根讀頭或者韋根其他設備對接了。
外部中斷初始化程序如下:
外部中斷處理函數如下:
void GetD0 () interrupt 0 {if(count == 0) // 獲取偶校驗碼{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; // 獲取奇校驗碼,使能標志位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; }將獲取到的數據,可以通過串口發出來,也可以正常通過程序處理數據。本次使用串口將數據打印出來。
串口初始化程序如下:
最終,將韋根獲取到的數據通過串口打印出來。
前三個字節是16進制的數據,后五個字節是通過程序轉換的BCD碼。
至此,基于51單片機的韋根數據接收已經完成了,那么,你看懂了么?歡迎在下方評論區討論哦。
END
本文系21ic論壇yangjiaxu原創撰寫
推薦閱讀:
專輯|Linux文章匯總
專輯|程序人生
專輯|C語言
我的知識小密圈
關注公眾號,后臺回復「1024」獲取學習資料網盤鏈接。
歡迎點贊,關注,轉發,在看,您的每一次鼓勵,我都將銘記于心~
總結
以上是生活随笔為你收集整理的基于STC89C52的韦根数据接收的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大地测量学笔记 : 高斯克吕格投影
- 下一篇: 笔记本显卡未连接计算机,电脑提示当前未使