日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于STC89C52的韦根数据接收

發布時間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于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?InterruptInit() {IT0?=?1;?//??外部中斷源選擇為下降沿觸發EX0?=?1;?//??開外部中斷?0IT1?=?1;EX1?=?1;EA?=?1;??//?開總中斷 }

外部中斷處理函數如下:

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; }

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

串口初始化程序如下:

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

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


前三個字節是16進制的數據,后五個字節是通過程序轉換的BCD碼。


至此,基于51單片機的韋根數據接收已經完成了,那么,你看懂了么?歡迎在下方評論區討論哦。

END

本文系21ic論壇yangjiaxu原創撰寫



推薦閱讀:

專輯|Linux文章匯總

專輯|程序人生

專輯|C語言

我的知識小密圈

關注公眾號,后臺回復「1024」獲取學習資料網盤鏈接。

歡迎點贊,關注,轉發,在看,您的每一次鼓勵,我都將銘記于心~

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。