下位機(單片機)電路原理圖:
上位機delphi源碼與說明資料:
IC讀寫器使用說明
一、讀寫器連接
1.1 把通訊線“DB9”端插到PC 機的串口1/2 上
1.2 把通訊線2510端插到讀寫器的插座,使讀寫器和PC 機的串口良好連接
1.2 把電源線的“圓柱”端插到讀寫器的電源座子上
1.3讀寫器上電以后可以聽到一聲風鳴器的響聲,如果沒有聽到風鳴器聲,表明讀寫器沒有正常上電.
二、啟動Demo 軟件
2.1 雙擊啟動測試軟件
2.2 如果串口良好連接的話可以聽到一聲風鳴器的響聲,如果啟動測試軟件以后并沒有聽到風鳴器聲表明串口通訊沒有連接好,請檢查串口連接線是否連接正確
三、M1卡片讀寫測試
3.1 把一張Mifare One 卡片放在天線區域范圍內
3.2 進入功能選項“低級操作”里面點擊“尋卡”,如果出現“尋卡成功!”表明尋卡正常,如果出現“執行失敗!”表明出現異常,請檢查卡片是否在尋卡范圍內,如果確認卡片沒有問題,那讀寫器有異常
3.3 點擊“防沖突”,如果出現“執行成功”表明防沖突正常,如果出現“執行失敗”表明讀寫器出現異常或者卡片沒有在天線區域范圍內
3.4 點擊“選擇”,如果出現“執行成功”表明選擇正常,如果出現“執行失敗”表明讀寫器出現異常或者卡片沒有在天線區域范
圍內
3.5 進入功能選項“密碼下載”里面下載卡片密碼,比如需要測試卡片扇區1 數據的讀寫,那么就在扇區1后面填上密碼A/B(注:卡片的初始密碼A/B 均為全‘F’),然后選擇“A 組密碼”或者“B 組密碼”,最后點擊“下載”,如果出現“密碼下載成
功”表明密碼下載成功,如果出現異常請按照錯誤提示更改后再下載一次,直至“下載成功”為止
3.6 進入功能選項“數據讀寫”里面,“請選擇扇區號”下面的可拉選項里面選擇第5步下載密碼的扇區號(比如扇區1),然后點擊“讀出”,如果提示“第*扇區數據讀出成功”表明讀數據正確。如果出現“第*扇區數據讀出失敗”表明密碼校驗出錯或者出現其他異常,請返回第5 步重新下載密碼
3.7 如果讀數據正確,在塊0、塊1、塊2 后面修改數據,比如改成
“塊0:12345678901234567890123456789012”
“塊1:23456789012345678901234567890123”
“塊2:34567890123456789012345678901234”
然后點擊“寫入”,如果出現“第*扇區數據寫入成功”表明寫入數據正確。如果出現“第*扇區寫入失敗”表明密碼校驗出錯或者出現其他異常,請返回第5 步重新下載密碼
3.8 再次點擊“讀出”鍵,然后點擊“讀出”,如果提示“第*扇區數據讀出成功”表明讀數據正確,再對比塊0、塊1、塊2 是否和第7 步寫入的數據一樣,如果數據一樣,證明寫入成功了。如果出現“第*扇區數據讀出失敗”表明密碼校驗出錯或者出現其他異常,請返回第5 步重新下載密碼。
四、Mifare One 卡片塊值測試
4.1 進入功能選項“塊值操作”里面,在“扇區號”下面的可拉選項里面選擇第3.5 步下載密碼的扇區號(比如扇區1),在“塊號”下面的可拉選項里面選擇你想測試的塊號(比如第1 塊)
4.2 在“操作值”后面填上你所希望的初始值(比如“11111111”),然后點擊“初始化”,如果出現“數據初始化成功”表明操作成功。如果出現“數據初始化失敗”表明操作失敗,請檢查密碼是否正確,返回第3.1 步重新操作一次。
4.3 點擊“讀出”,如果在“當前值”后面出現是你原來寫進去的初始值,證明操作正確,如果“數據讀出失敗”表明塊值操作有異常,請重新初始化。
4.4 在“操作值:”后面填上你所希望的操作值(比如“22222222”),然后點擊“加值”,如果出現“數值加操作成功”,表明操作成功。如果出現其他提示表明操作失敗
4.4 點擊“讀出”,如果在“當前值:”后面出現是你初始值加上加值(11111111+22222222=33333333)表明操作正確,如果是其他的值表明失敗
4.5 在“操作值:”后面填上你所希望的操作值(比如“11111111”),然后點擊“減值”,如果出現“數值減操作成功”,表明操作成功。如果出現其他提示表明操作失敗
4.6 點擊“讀出”,如果在“當前值:”后面出現是你當前值減去操作值(33333333-11111111=22222222),表明操作正確,如果是其他值表明失敗
五、修改密碼和控制位
5.1 進入功能選項“修改密碼”里面,在“扇區號”下面的可拉選項里面選擇第3.5步下載密碼的扇區號(比如扇區1)
5.2 在“密碼A”和“密碼B”后面分別寫入你想修改的密碼A 和密碼B
5.3 卡片控制位修改之前請詳細閱讀卡片資料,因為控制位修改不正確,就會導致卡片
不能再使用,請務必小心使用
5.4 在控制位后面填上該扇區的控制位
5.3 點擊“修改密碼”,如果出現“修改密碼成功”,表示操作正確,如果出現出錯提示,
請按照出錯提示做相應的處理。(注:密碼修改后請務必記住,密碼遺忘卡片就不
能再次是使用了)
六、參數設置
6.1 進入功能選項“參數設置”里面,可以設置串口通訊參數:串口號、波特率、校驗位、數據位、停止位等等,設置玩了以后點擊“修改串口”,如果出現“串口參數設置成功”,表明串口設置成功,如果出現異常,請按照提示做出改動。
6.2 設置完畢以后可以點擊“測試讀卡器”,如果出現“讀卡器連接成功”,并且聽到讀卡器的風鳴器響聲,證明串口設置正確,如果出現“讀卡器連接失敗”,表明串口設置有問題,請重新設置。
6.3 讀寫器默認參數:Com1、9600bps、N、8、1
七、調試信息
7.1 進入功能選項“調試信息”里面,在“串口信息發送與接受”處可以看到PC 機和讀卡器之間通訊的詳細過程,對調試非常有幫助
單片機(下位機)源程序如下:
#include #include "reg52.h" #include "main.h" #include "mfrc522.h" #include #define MAXRLEN 18 ///////////////////////////////////////////////////////////////////// //功 能:尋卡 //參數說明: req_code[IN]:尋卡方式 // 0x52 = 尋感應區內所有符合14443A標準的卡 // 0x26 = 尋未進入休眠狀態的卡 // pTagType[OUT]:卡片類型代碼 // 0x4400 = Mifare_UltraLight // 0x0400 = Mifare_One(S50) // 0x0200 = Mifare_One(S70) // 0x0800 = Mifare_Pro(X) // 0x4403 = Mifare_DESFire //返 回: 成功返回MI_OK ///////////////////////////////////////////////////////////////////// char PcdRequest(unsigned char req_code,unsigned char *pTagType) { char status; unsigned int unLen; unsigned char ucComMF522Buf[MAXRLEN]; // unsigned char xTest ; ClearBitMask(Status2Reg,0x08); WriteRawRC(BitFramingReg,0x07); // xTest = ReadRawRC(BitFramingReg); // if(xTest == 0x07 ) // { LED_GREEN =0 ;} // else {LED_GREEN =1 ;while(1){}} SetBitMask(TxControlReg,0x03); ucComMF522Buf[0] = req_code; status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen); // if(status == MI_OK ) // { LED_GREEN =0 ;} // else {LED_GREEN =1 ;} if ((status == MI_OK) && (unLen == 0x10)) { *pTagType = ucComMF522Buf[0]; *(pTagType+1) = ucComMF522Buf[1]; } else { status = MI_ERR; } return status; } ///////////////////////////////////////////////////////////////////// //功 能:防沖撞 //參數說明: pSnr[OUT]:卡片序列號,4字節 //返 回: 成功返回MI_OK ///////////////////////////////////////////////////////////////////// char PcdAnticoll(unsigned char *pSnr) { char status; unsigned char i,snr_check=0; unsigned int unLen; unsigned char ucComMF522Buf[MAXRLEN]; ClearBitMask(Status2Reg,0x08); WriteRawRC(BitFramingReg,0x00); ClearBitMask(CollReg,0x80); ucComMF522Buf[0] = PICC_ANTICOLL1; ucComMF522Buf[1] = 0x20; status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen); if (status == MI_OK) { for (i=0; i<4; i++) { *(pSnr+i) = ucComMF522Buf[i]; snr_check ^= ucComMF522Buf[i]; } if (snr_check != ucComMF522Buf[i]) { status = MI_ERR; } } SetBitMask(CollReg,0x80); return status; } ///////////////////////////////////////////////////////////////////// //功 能:選定卡片 //參數說明: pSnr[IN]:卡片序列號,4字節 //返 回: 成功返回MI_OK ///////////////////////////////////////////////////////////////////// char PcdSelect(unsigned char *pSnr) { char status; unsigned char i; unsigned int unLen; unsigned char ucComMF522Buf[MAXRLEN]; ucComMF522Buf[0] = PICC_ANTICOLL1; ucComMF522Buf[1] = 0x70; ucComMF522Buf[6] = 0; for (i=0; i<4; i++) { ucComMF522Buf[i+2] = *(pSnr+i); ucComMF522Buf[6] ^= *(pSnr+i); } CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf[7]); ClearBitMask(Status2Reg,0x08); status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen); if ((status == MI_OK) && (unLen == 0x18)) { status = MI_OK; } else { status = MI_ERR; } return status; } ///////////////////////////////////////////////////////////////////// //功 能:驗證卡片密碼 //參數說明: auth_mode[IN]: 密碼驗證模式 // 0x60 = 驗證A密鑰 // 0x61 = 驗證B密鑰 // addr[IN]:塊地址 // pKey[IN]:密碼 // pSnr[IN]:卡片序列號,4字節 //返 回: 成功返回MI_OK ///////////////////////////////////////////////////////////////////// char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr) { char status; unsigned int unLen; unsigned char i,ucComMF522Buf[MAXRLEN]; ucComMF522Buf[0] = auth_mode; ucComMF522Buf[1] = addr; for (i=0; i<6; i++) { ucComMF522Buf[i+2] = *(pKey+i); } for (i=0; i<6; i++) { ucComMF522Buf[i+8] = *(pSnr+i); } // memcpy(&ucComMF522Buf[2], pKey, 6); // memcpy(&ucComMF522Buf[8], pSnr, 4); status = PcdComMF522(PCD_AUTHENT,ucComMF522Buf,12,ucComMF522Buf,&unLen); if ((status != MI_OK) || (!(ReadRawRC(Status2Reg) & 0x08))) { status = MI_ERR; } return status; } ///////////////////////////////////////////////////////////////////// //功 能:讀取M1卡一塊數據 //參數說明: addr[IN]:塊地址 // pData[OUT]:讀出的數據,16字節 //返 回: 成功返回MI_OK ///////////////////////////////////////////////////////////////////// char PcdRead(unsigned char addr,unsigned char *pData) { char status; unsigned int unLen; unsigned char i,ucComMF522Buf[MAXRLEN]; ucComMF522Buf[0] = PICC_READ; ucComMF522Buf[1] = addr; CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]); status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen); if ((status == MI_OK) && (unLen == 0x90)) // { memcpy(pData, ucComMF522Buf, 16); } { for (i=0; i<16; i++) { *(pData+i) = ucComMF522Buf[i]; } } else { status = MI_ERR; } return status; } /////////////////////////////////////////////////////////////////////
上一篇:nRF24L01單片機通信的總結--看了就會用了
下一篇:TM1650模塊單片機源程序(子函數)
推薦閱讀
史海拾趣
隨著電子行業的不斷發展,新技術和新應用層出不窮。BNS Solutions公司緊跟時代步伐,不斷加大研發投入,推動技術創新。公司團隊不斷探索新技術、新材料的應用,開發出了一系列具有創新性和前瞻性的電子產品。這些產品不僅提高了行業的整體技術水平,還引領了行業變革的潮流。通過持續創新,BNS Solutions公司在電子行業中保持了領先地位,成為了行業的佼佼者。
在快速發展的過程中,BNS Solutions公司始終注重品質管理和品牌建設。公司建立了一套完善的質量管理體系,從原材料采購到產品生產、銷售等各個環節都嚴格把控質量。同時,公司還注重品牌形象的塑造和維護,通過廣告宣傳、公關活動等方式不斷提升品牌知名度和美譽度。這些舉措使得BNS Solutions公司的產品在市場上具有更高的競爭力,贏得了消費者的信賴和喜愛。
面對日益激烈的全球競爭,First Switchtech公司(或類似公司)制定了積極的國際化戰略。公司首先在歐洲市場設立了分支機構,通過深入了解當地市場需求和文化背景,成功推出了符合歐洲標準的電子開關產品。隨后,公司進一步拓展北美、亞洲等市場,通過本地化生產和營銷策略,實現了全球市場的覆蓋。這一過程中,公司不僅提升了品牌知名度,還積累了豐富的國際市場運營經驗。
隨著市場需求的不斷增長,FILTRONIC開始著手拓展產品線,從單一的濾波器產品擴展到包括射頻模塊、天線等在內的多種無線通信產品。同時,公司也積極實施國際化戰略,通過參加國際展會、設立海外辦事處等方式,逐步打開了國際市場的大門。FILTRONIC的產品以其卓越的性能和可靠的質量贏得了全球客戶的信賴,公司也因此實現了業務的快速增長。
附件是用KEIL建立的工程項目,在P3口跑了個流水燈,可以在純軟件仿真下觀察效果。 系統使用資源: Program Size: data=84.0 xdata=423 code=3263 STC89C58的資源:ROM 32K,RAM:1280 BYTE,可以容納。 從51其他型號到STC89C58RD+移植要點: ...… 查看全部問答∨ |
有用過轉接卡的嗎?pcmcia轉串口 在超級終端中輸入的字符混亂 使用的是華塑的pcmcia轉串口卡,XP系統自帶超級端連mini2440 波特率:115200 數據位:8 奇偶校驗:無 停止位:1 數據流控制:無 在設置中的"本地回顯鍵入的字符",沒有勾選. 可以連上mini2440,之前刷的是"缺省Linux系統",在超級終端 ...… 查看全部問答∨ |
最近公司接了個項目,是自來水公司的,要求研發一件產品能夠檢測出管道是否漏水(地下管道:壓力應該挺大),現在還沒有想到合適的方法,希望大家幫忙想想啊!比如說傳感器之類。可以考慮每隔多少米方一個設備也行。我想過用濕度傳感器,但是傳感器 ...… 查看全部問答∨ |
|
本帖最后由 paulhyde 于 2014-9-15 09:01 編輯 我是新手,最近調了個AD574,感覺時序都沒問題,可出來的數就是不變。不知道AD這塊還要注意點什么啊? … 查看全部問答∨ |