這是51單片機(jī)并行口rc632讀卡程序
單片機(jī)源程序如下:
#include #include #include #include "main.h" #include "slrc632.h" #include "iso14443a.h" #include "iso14443b.h" #include "iso15693.h" /*Declare SFR associated with the IAP */ sfr IAP_DATA = 0xE2; //Flash data register sfr IAP_ADDRH = 0xE3; //Flash address HIGH sfr IAP_ADDRL = 0xE4; //Flash address LOW sfr IAP_CMD = 0xE5; //Flash command register sfr IAP_TRIG = 0xE6; //Flash command trigger sfr IAP_CONTR = 0xE7; //Flash control register //硬件版本號(hào) unsigned char code hardmodel[12] = {"SL601F-0512"}; bit g_bReceOk; //正確接收到上位機(jī)指令標(biāo)志 bit g_bReceAA; //接收到上位機(jī)發(fā)送的AA字節(jié)標(biāo)志 bit g_bRc632Ok; //RC632復(fù)位正常標(biāo)志 bit g_bIblock; void outputconvery (); unsigned char Readcard_flag,start_flag=0,startnum=0; unsigned int idata g_cReceNum; //接收到上位機(jī)的字節(jié)數(shù) unsigned int data g_cCommand; //接收到的命令碼 unsigned char data g_cSNR[4]; //M1卡序列號(hào) unsigned char g_cIcdevH; //設(shè)備標(biāo)記 unsigned char g_cIcdevL; //設(shè)備標(biāo)記 unsigned char g_cFWI; // unsigned char idata g_cCidNad,huankuaiflag=0; // unsigned char idata g_cReceBuf[64]; //和上位機(jī)通訊時(shí)的緩沖區(qū) unsigned char idata canshu[5]={0x00,0x00,0x00,0x10,0x01};//0:扇區(qū),1:塊,2-3:卡號(hào)首尾位置,4:讀卡方式 unsigned char idata key[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};//密碼 unsigned char idata canshuflag=0,timenum=0,UID[4]; struct TranSciveBuffer{unsigned char MfCommand; unsigned int MfLength; unsigned char MfData[64]; }; /***************************定時(shí)器0初始化********************************/ void timer0init (void)//22.1184MHZ,20ms { TH0=0x70; TL0=0x00; ET0=1; TR0=1; TMOD=0x21; } /*****************************定時(shí)器0中斷函數(shù)********************************/ void timer0(void) interrupt 1 { TH0=0x70; TL0=0x00; timenum++; if(timenum==100) canshuflag=1,timenum=0; } void gonggongdaima(void) { IAP_TRIG = 0x46;//發(fā)送46h到觸發(fā)寄存器 IAP_TRIG = 0xB9;//發(fā)送B9h到觸發(fā)寄存器 _nop_();//延時(shí) IAP_CONTR = 0;//關(guān)閉IAP功能 IAP_CMD = 0;//清空命令寄存器 IAP_TRIG = 0;//清空命令觸發(fā)寄存器 IAP_ADDRH = 0;//清空地址高位 IAP_ADDRL = 0;//清空地址低位 } /**************************字節(jié)讀函數(shù)***************************************/ unsigned char Byte_Read(unsigned int add) { IAP_DATA = 0x00;//清空數(shù)據(jù) IAP_CONTR = 0x81;//打開(kāi)IAP,設(shè)置操作等待時(shí)間 IAP_CMD = 0x01;//字節(jié)讀命令 IAP_ADDRH = add>>8;//設(shè)置高8位地址 IAP_ADDRL = add&0x00ff;//設(shè)置低8位地址 gonggongdaima(); return (IAP_DATA);//返回讀到的數(shù)據(jù) } /*****************************字節(jié)編程函數(shù)*****************************/ void Byte_Program(unsigned int add, unsigned char dat) { IAP_CONTR = 0x81;//打開(kāi)IAP,設(shè)置操作等待時(shí)間 IAP_CMD = 0x02;//字節(jié)編程命令 IAP_ADDRH = add>>8;//設(shè)置高8位地址 IAP_ADDRL = add&0x00ff;//設(shè)置低8位地址 IAP_DATA = dat;//要編程的數(shù)據(jù)先送進(jìn)IAP_DATA寄存器 gonggongdaima(); } /*****************************扇區(qū)擦除函數(shù)****************************/ void Sector_Erase(unsigned int add) { IAP_CONTR = 0x81;//打開(kāi)IAP,設(shè)置操作等待時(shí)間 IAP_CMD = 0x03;//扇區(qū)擦除命令 IAP_ADDRH = add>>8;//設(shè)置高8位地址 IAP_ADDRL = add&0x00ff;//設(shè)置低8位地? gonggongdaima(); } /****************************讀取參數(shù)函數(shù)************************/ void Read_canshu(void) { canshu[0]=Byte_Read(0x8000); canshu[1]=Byte_Read(0x8001); canshu[2]=Byte_Read(0x8002); canshu[3]=Byte_Read(0x8003); canshu[4]=Byte_Read(0x8004); } void Read_Akey(void) { key[0]=Byte_Read(0x8200); key[1]=Byte_Read(0x8201); key[2]=Byte_Read(0x8202); key[3]=Byte_Read(0x8203); key[4]=Byte_Read(0x8204); key[5]=Byte_Read(0x8205); } void Read_Bkey(void) { key[0]=Byte_Read(0x8400); key[1]=Byte_Read(0x8401); key[2]=Byte_Read(0x8402); key[3]=Byte_Read(0x8403); key[4]=Byte_Read(0x8404); key[5]=Byte_Read(0x8405); } /****************************保存參數(shù)函數(shù)****************************/ void Save_canshu(void) { Sector_Erase(0x8000);//擦除扇區(qū) Byte_Program(0x8000,canshu[0]); Byte_Program(0x8001,canshu[1]); Byte_Program(0x8002,canshu[2]); Byte_Program(0x8003,canshu[3]); Byte_Program(0x8004,canshu[4]); } void Save_Akey(void) { Sector_Erase(0x8200);//擦除扇區(qū) Byte_Program(0x8200,key[0]); Byte_Program(0x8201,key[1]); Byte_Program(0x8202,key[2]); Byte_Program(0x8203,key[3]); Byte_Program(0x8204,key[4]); Byte_Program(0x8205,key[5]); } void Save_Bkey(void) { Sector_Erase(0x8400);//擦除扇區(qū) Byte_Program(0x8400,key[0]); Byte_Program(0x8401,key[1]); Byte_Program(0x8402,key[2]); Byte_Program(0x8403,key[3]); Byte_Program(0x8404,key[4]); Byte_Program(0x8405,key[5]); } void delay(unsigned int i) { unsigned char j; while(i--) for(j=0;j<200;j++); } void BEEP(unsigned char i) { unsigned char k; k=100; sond = 0; redled = 1; blueled = 0; delay(k); sond =1; blueled = 1; redled = 0; } void REDON(void) { redled = 1; } void REDOFF(void) { redled = 0; } void BLUEON(void) { blueled = 1; } void BLUEOFF(void) { blueled = 0; } void main( ) { InitializeSystem( ); Rc632Ready( ); PcdConfigISOType( '1' ); BEEP(2); DelayMs(1000); RC632_CE=0;
上一篇:51單片機(jī)pwm調(diào)制 產(chǎn)生多路分頻信號(hào) 倍頻
下一篇:基于51單片機(jī)8音鍵電子琴DIY制作
- 熱門(mén)資源推薦
- 熱門(mén)放大器推薦
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- 【下載】LAT1526 利用SPI的下溢實(shí)現(xiàn)回顯功能
- 【下載】LAT1509 STM32G0B1的FDCAN進(jìn)行通信丟包和多包案例分享
- 【下載】LAT1511 運(yùn)行Ux_Host_HUB_HID_MSC通過(guò)Hub連接U盤(pán)讀寫(xiě)不穩(wěn)定問(wèn)題分析
- 【下載】LAT1466 USB x Device HID Standalone的移植
- 【下載】LAT1488 STM32 USBxDevice MSC standalone移植示例
- 【下載】LAT1482 STM32G0單線(xiàn)串口通信幀錯(cuò)誤問(wèn)題解析
- 人形機(jī)器人馬拉松背后的思考,兆易創(chuàng)新如何賦能機(jī)器人產(chǎn)業(yè)
- 一種基于STM32的智能柜控制器設(shè)計(jì)
- 小型傾轉(zhuǎn)旋翼機(jī)的無(wú)刷直流電機(jī)驅(qū)動(dòng)器設(shè)計(jì)
- 超高速攝影機(jī)電控系統(tǒng)設(shè)計(jì)
- 基于GPS自動(dòng)授時(shí)的無(wú)線(xiàn)智能控制器的設(shè)計(jì)
- 基于PTR2000的無(wú)線(xiàn)氣象信息采集系統(tǒng)設(shè)計(jì)
- Microchip推出MEC175xB系列器件,為嵌入式控制器引入硬件 抗量子攻擊能力
- 無(wú)人飛行器機(jī)載穩(wěn)定云臺(tái)控制系統(tǒng)的設(shè)計(jì)
- 匠芯創(chuàng)推出面向具身智能高性能實(shí)時(shí)處理器M7000
- EVAL-ADG5248FEBZ,ADG5248F 過(guò)壓保護(hù) 8:1 多路復(fù)用器評(píng)估板
- EVAL-ADF7021DBZ3,基于 ADF7021 431 - 470 MHz ISM 頻段收發(fā)器的子板
- 使用 Analog Devices 的 LTC4162EUFD-SADM 的參考設(shè)計(jì)
- LT3091MPFE 產(chǎn)生極低輸出電壓的典型應(yīng)用
- 使用 Analog Devices 的 LT1173CN8 的參考設(shè)計(jì)
- AD9649-65EBZ,用于 AD9649BCPZ-65、單通道、14 位、65 MSPS 模數(shù)轉(zhuǎn)換器的評(píng)估板
- 帶有用于 NCV3063 1.5A 升壓開(kāi)關(guān)穩(wěn)壓器的外部 NMOS 晶體管的典型升壓應(yīng)用原理圖
- NE555八音電子琴
- KITPF4210EPEVB: Evaluation board- PF4210, Power Management IC for i.MX 8M
- 使用 NXP Semiconductors 的 ISP1582 的參考設(shè)計(jì)
- 蘋(píng)果App Store政策變化被指不痛不癢 未涉及核心
- 迅為4412開(kāi)發(fā)板項(xiàng)目實(shí)戰(zhàn)-制作支持百度AI和opencv的文件系統(tǒng)
- 對(duì)傳感器的未來(lái)需求:用于實(shí)施狀態(tài)監(jiān)控的智能傳感器
- 小米官方回復(fù)“小米11穩(wěn)定版充電慢”等等10個(gè)問(wèn)題
- 【C51自學(xué)筆記】實(shí)時(shí)時(shí)鐘芯片DS1302
- 數(shù)字萬(wàn)用表測(cè)量電容的四個(gè)小方法
- 意法半導(dǎo)體高性能 5V運(yùn)放系列上新款,節(jié)省空間、低失調(diào)電壓的20MHz產(chǎn)品
- 什么是位邏輯指令?plc位邏輯指令有哪些?plc位邏輯指令應(yīng)用方法圖解
- e絡(luò)盟開(kāi)售TE Connectivity最新系列連接和傳感器解決方案
- 開(kāi)啟軟件定義汽車(chē)全新未來(lái)征程,紅帽車(chē)用操作系統(tǒng)即將全面上市
- 車(chē)廠(chǎng)&零部件廠(chǎng)大咖說(shuō):48V先進(jìn)電源系統(tǒng)創(chuàng)新技術(shù)及產(chǎn)業(yè)化突破
- ROHM開(kāi)發(fā)出適用于AI服務(wù)器48V電源熱插拔電路的100V功率MOSFET
- 納芯微高壓半橋驅(qū)動(dòng)NSD2622N:為E-mode GaN量身打造高可靠性、高集成度方案
- 3核A7+單核M0多核異構(gòu),米爾全新低功耗RK3506核心板發(fā)布
- 自動(dòng)化控制中智能技術(shù)的應(yīng)用研究
- OEM機(jī)器制造商利用仿真軟件提高效率
- 基于機(jī)器視覺(jué)的帶鋼焊縫定位
- 米爾RK3576核心板適配多種系統(tǒng),解鎖多樣化應(yīng)用
- 實(shí)時(shí)控制和通信領(lǐng)域的IT/OT融合如何推動(dòng)工業(yè)自動(dòng)化
- 樂(lè)森機(jī)器人首家自營(yíng)店開(kāi)業(yè),“娛樂(lè)+零售”撬動(dòng)商業(yè)新格局
- 搶占新能源技術(shù)制高點(diǎn) 東風(fēng)航盛順利破殼
- 伺服器訂單劇減?ODM怎么看
- 難以置信,特斯拉Model S為何連撞五車(chē)?
- 米文動(dòng)力完成數(shù)千萬(wàn)人民幣A+輪融資
- 人類(lèi)首次在太空3D打印出生物器官:為人體器官做準(zhǔn)備
- STM32f407系統(tǒng)定時(shí)器時(shí)鐘配置、計(jì)算
- stm32 定時(shí)器響應(yīng)時(shí)間計(jì)算
- 解決STM32開(kāi)啟定時(shí)器時(shí)立即進(jìn)入一次中斷程序問(wèn)題
- 蘋(píng)果AirPower新專(zhuān)利曝光!可顯示多個(gè)設(shè)備充電狀態(tài)