#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 //硬件版本號 unsigned char code hardmodel[12] = {"SL601F-0512"}; bit g_bReceOk; //正確接收到上位機指令標志 bit g_bReceAA; //接收到上位機發送的AA字節標志 bit g_bRc632Ok; //RC632復位正常標志 bit g_bIblock; void outputconvery (); unsigned char Readcard_flag,start_flag=0,startnum=0; unsigned int idata g_cReceNum; //接收到上位機的字節數 unsigned int data g_cCommand; //接收到的命令碼 unsigned char data g_cSNR[4]; //M1卡序列號 unsigned char g_cIcdevH; //設備標記 unsigned char g_cIcdevL; //設備標記 unsigned char g_cFWI; // unsigned char idata g_cCidNad,huankuaiflag=0; // unsigned char idata g_cReceBuf[64]; //和上位機通訊時的緩沖區 unsigned char idata canshu[5]={0x00,0x00,0x00,0x10,0x01};//0:扇區,1:塊,2-3:卡號首尾位置,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]; }; /***************************定時器0初始化********************************/ void timer0init (void)//22.1184MHZ,20ms { TH0=0x70; TL0=0x00; ET0=1; TR0=1; TMOD=0x21; } /*****************************定時器0中斷函數********************************/ void timer0(void) interrupt 1 { TH0=0x70; TL0=0x00; timenum++; if(timenum==100) canshuflag=1,timenum=0; } void gonggongdaima(void) { IAP_TRIG = 0x46;//發送46h到觸發寄存器 IAP_TRIG = 0xB9;//發送B9h到觸發寄存器 _nop_();//延時 IAP_CONTR = 0;//關閉IAP功能 IAP_CMD = 0;//清空命令寄存器 IAP_TRIG = 0;//清空命令觸發寄存器 IAP_ADDRH = 0;//清空地址高位 IAP_ADDRL = 0;//清空地址低位 } /**************************字節讀函數***************************************/ unsigned char Byte_Read(unsigned int add) { IAP_DATA = 0x00;//清空數據 IAP_CONTR = 0x81;//打開IAP,設置操作等待時間 IAP_CMD = 0x01;//字節讀命令 IAP_ADDRH = add>>8;//設置高8位地址 IAP_ADDRL = add&0x00ff;//設置低8位地址 gonggongdaima(); return (IAP_DATA);//返回讀到的數據 } /*****************************字節編程函數*****************************/ void Byte_Program(unsigned int add, unsigned char dat) { IAP_CONTR = 0x81;//打開IAP,設置操作等待時間 IAP_CMD = 0x02;//字節編程命令 IAP_ADDRH = add>>8;//設置高8位地址 IAP_ADDRL = add&0x00ff;//設置低8位地址 IAP_DATA = dat;//要編程的數據先送進IAP_DATA寄存器 gonggongdaima(); } /*****************************扇區擦除函數****************************/ void Sector_Erase(unsigned int add) { IAP_CONTR = 0x81;//打開IAP,設置操作等待時間 IAP_CMD = 0x03;//扇區擦除命令 IAP_ADDRH = add>>8;//設置高8位地址 IAP_ADDRL = add&0x00ff;//設置低8位地? gonggongdaima(); } /****************************讀取參數函數************************/ 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); } /****************************保存參數函數****************************/ void Save_canshu(void) { Sector_Erase(0x8000);//擦除扇區 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);//擦除扇區 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);//擦除扇區 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單片機pwm調制 產生多路分頻信號 倍頻
下一篇:基于51單片機8音鍵電子琴DIY制作
- 熱門資源推薦
- 熱門放大器推薦
設計資源 培訓 開發板 精華推薦
- EVAL-ADG5248FEBZ,ADG5248F 過壓保護 8:1 多路復用器評估板
- EVAL-ADF7021DBZ3,基于 ADF7021 431 - 470 MHz ISM 頻段收發器的子板
- 使用 Analog Devices 的 LTC4162EUFD-SADM 的參考設計
- LT3091MPFE 產生極低輸出電壓的典型應用
- 使用 Analog Devices 的 LT1173CN8 的參考設計
- AD9649-65EBZ,用于 AD9649BCPZ-65、單通道、14 位、65 MSPS 模數轉換器的評估板
- 帶有用于 NCV3063 1.5A 升壓開關穩壓器的外部 NMOS 晶體管的典型升壓應用原理圖
- NE555八音電子琴
- KITPF4210EPEVB: Evaluation board- PF4210, Power Management IC for i.MX 8M
- 使用 NXP Semiconductors 的 ISP1582 的參考設計