Rf500fun.c
上传用户:shyuanyi
上传日期:2008-05-24
资源大小:69k
文件大小:9k
源码类别:

RFID编程

开发平台:

C/C++

  1. #include  "my_head.h"
  2. #include  "RFIC.h"
  3. /*************************************/
  4. #define   RF_RST     P2_5
  5. #define   RF_CS      P3_2       //INT0
  6. #define   RF_SCLK    P3_4
  7. #define   RF_SDAT    P3_5
  8. /*************************************/
  9. #define   RF_OPEN()  IE0=0;EX0=1;
  10. #define   RF_CLOSE() EX0=0;
  11. BYTE   idata  rf_buffer[26];
  12. bit    newdata  = 0;
  13. void  Rf_Int0(void) interrupt 0 using 1  //rf_rcv(rf_buffer);
  14. {
  15.    BYTE  Rf_count;
  16.    BYTE  ii,jj,ch;
  17.    RF_SCLK = 0;
  18.    RF_SDAT = 1;
  19.    for(ii=10;ii--;);//delay;
  20.    Rf_count= 0;
  21.    while(!RF_CS)
  22.    {
  23.     for(ii=0;ii<8;ii++)
  24.       {
  25.    RF_SCLK = 1;ch <<=1;
  26.    ch |= RF_SDAT;for(jj=2;jj--;);//delay;
  27.    RF_SCLK = 0;for(jj=2;jj--;);//delay;
  28.   }
  29.     rf_buffer[Rf_count]= ch;
  30. if(++Rf_count==26)break;
  31.    }
  32.    RF_SDAT = 0;
  33.    newdata = 1;
  34. }
  35. void  Rf_Init(void)
  36. {
  37.   EA  =  0;
  38.   IP  &= ~0X01;     //X0优先级0
  39.   //IPH &= ~0X01;
  40.   IT0   = 1;        //INT1 is falling edg trig
  41.   RF_CLOSE();
  42.   EA  =  1;
  43.   RF_CS   = 1;
  44.   RF_SCLK = 0;
  45.   RF_SDAT = 0;
  46.   RF_RST = 0; delay_ms(45);
  47.   RF_RST = 1; delay_ms(45);
  48. }
  49. BYTE  rf_send(BYTE *buf,BYTE count)
  50. {
  51.     BYTE  ii,jj,ch;
  52.     RF_CLOSE();
  53. RF_SDAT  = 1;
  54. RF_SCLK  = 0;
  55.     Set_Timer20ms(3);
  56.     while(RF_SDAT)if(!Get_Timer20ms())return(RF_ERR);
  57. RF_CS  = 0;
  58.     Set_Timer20ms(3);
  59.     while(!RF_SDAT)if(!Get_Timer20ms())return(RF_ERR);
  60. for(ii=0;ii<count;ii++)
  61.     {
  62.  ch=buf[ii];
  63.  for(jj=0;jj<8;jj++)
  64.   {
  65.    RF_SDAT = (bit)(ch&0x80);do_nop(1);
  66.    RF_SCLK = 1;do_nop(3);
  67.    RF_SCLK = 0;ch<<=1;do_nop(1);
  68.   }
  69. }
  70. RF_CS    = 1;
  71. RF_SDAT  = 0;
  72. //TR1    = 0;
  73.     return(RF_OK);
  74. }
  75. BYTE rf500cmd(BYTE length)
  76. {
  77. BYTE i,BCC_sum,rf_wdg=10;
  78. rf_buffer[length]=rf_buffer[0];
  79. for(i=1;i<length;i++)
  80. {
  81.   rf_buffer[length]^=rf_buffer[i];
  82. }
  83. rf_buffer[length]=~rf_buffer[length];
  84. if(rf_send(rf_buffer,length+1)!=RF_OK)
  85. {
  86.    SendStr("test1n",7);//for test!
  87.    return RF_ERR;
  88. }
  89. RF_OPEN();
  90. while(!newdata && rf_wdg)
  91. {
  92.       if(!Get_Timer20ms())
  93.         {
  94.   Set_Timer20ms(3);
  95.   rf_wdg--;
  96. }
  97. }
  98. RF_CLOSE();
  99. if(newdata==0)
  100. {
  101.    //SendStr("test2n",7);//for test!
  102.    return RF_ERR;
  103. }
  104. newdata=0;
  105. BCC_sum= rf_buffer[0];
  106. rf_wdg = rf_buffer[LENGTH]+3;
  107. for(i=1;i<rf_wdg;i++)
  108. {
  109. BCC_sum^=rf_buffer[i];
  110. }
  111. if(BCC_sum==~rf_buffer[rf_wdg])
  112. {
  113.       //SendStr("test3n",7);//for test!
  114.       return RF_OK;
  115.     }
  116.     //SendStr(rf_buffer,Rf_count);//for test!
  117.     //SendStr("test4n",7);//for test!
  118. return MI_CRCERR;
  119. }
  120. BYTE mifs_request(BYTE _Mode,BYTE idata *_TagType)
  121. {
  122. rf_buffer[SEQNR]=0;
  123. rf_buffer[COMMAND]=0x41;
  124. rf_buffer[LENGTH]=0x01;
  125. rf_buffer[MODE]=_Mode;
  126. if(rf500cmd(4)!=RF_OK)return RF_ERR;
  127. if(rf_buffer[STATUS]==MI_OK)
  128. {
  129.   _TagType[0]=rf_buffer[TAGTYPE];
  130.   _TagType[1]=rf_buffer[TAGTYPE+1];
  131. }
  132. return rf_buffer[STATUS];
  133. }
  134. BYTE mifs_anticoll(BYTE _Bcnt,BYTE idata *_SNR)
  135. {
  136. rf_buffer[SEQNR]=0;
  137. rf_buffer[COMMAND]=0x42;
  138. rf_buffer[LENGTH]=0x01;
  139. rf_buffer[MODE]=_Bcnt;
  140. if(rf500cmd(4)!=RF_OK)return RF_ERR;
  141. if(rf_buffer[STATUS]==MI_OK)
  142. {
  143. memcpy(_SNR,&rf_buffer[SERNR],4);
  144. }
  145. return rf_buffer[STATUS];
  146. }
  147. BYTE mifs_select(BYTE idata *_SNR,BYTE idata *_Size)
  148. {
  149. rf_buffer[SEQNR]=0;
  150. rf_buffer[COMMAND]=0x43;
  151. rf_buffer[LENGTH]=0x04;
  152. memcpy(&rf_buffer[SERNR],_SNR,4);
  153. if(rf500cmd(7)!=RF_OK)return RF_ERR;
  154. if(rf_buffer[STATUS]==MI_OK)
  155. {
  156. *_Size=rf_buffer[SIZE];
  157. }
  158. return rf_buffer[STATUS];
  159. }
  160. BYTE mifs_authentication(BYTE _Mode,BYTE _SecNr)
  161. {
  162. rf_buffer[SEQNR]=0;
  163. rf_buffer[COMMAND]=0x44;
  164. rf_buffer[LENGTH]=0x02;
  165. rf_buffer[MODE]=_Mode;
  166. rf_buffer[SECNR]=_SecNr;
  167. if(rf500cmd(5)!=RF_OK)return RF_ERR;
  168. return rf_buffer[STATUS];
  169. }
  170. /*
  171. BYTE mifs_authentication2(BYTE _Mode,BYTE _SecNr,BYTE _KeyNr)
  172. {
  173. rf_buffer[SEQNR]=0;
  174. rf_buffer[COMMAND]=0x72;
  175. rf_buffer[LENGTH]=0x03;
  176. rf_buffer[MODE]=_Mode;
  177. rf_buffer[SECNR]=_SecNr;
  178. rf_buffer[DATA+2]=_KeyNr;
  179. if(rf500cmd(6)!=RF_OK)return RF_ERR;
  180. return rf_buffer[STATUS];
  181. }
  182. */
  183. BYTE mifs_authKey(BYTE _Mode,BYTE _SecNr,BYTE *_Key)
  184. {
  185. rf_buffer[SEQNR]=0;
  186. rf_buffer[COMMAND]=0x73;
  187. rf_buffer[LENGTH]=0x08;
  188. rf_buffer[DATA]=_Mode;
  189. rf_buffer[DATA+1]=_SecNr;
  190. memcpy(&rf_buffer[DATA+2],_Key,6);
  191. if(rf500cmd(11)!=RF_OK)return RF_ERR;
  192. return rf_buffer[STATUS];
  193. }
  194. BYTE mifs_halt(void)
  195. {
  196. rf_buffer[SEQNR]=0;
  197. rf_buffer[COMMAND]=0x45;
  198. rf_buffer[LENGTH]=0x00;
  199. if(rf500cmd(3)!=RF_OK)return RF_ERR;
  200. return rf_buffer[STATUS];
  201. }
  202. BYTE mifs_read(BYTE _Adr,BYTE idata *_Data)
  203. {
  204. rf_buffer[SEQNR]=0;
  205. rf_buffer[COMMAND]=0x46;
  206. rf_buffer[LENGTH]=0x01;
  207. rf_buffer[ADR]=_Adr;
  208. if(rf500cmd(4)!=RF_OK)return RF_ERR;
  209. if(rf_buffer[STATUS]==MI_OK)
  210. {
  211. memcpy(_Data,&rf_buffer[DATABYTES-1],16);
  212. }
  213. return rf_buffer[STATUS];
  214. }
  215. BYTE mifs_write(BYTE _Adr,BYTE idata *_Data)
  216. {
  217. rf_buffer[SEQNR]=0;
  218. rf_buffer[COMMAND]=0x47;
  219. rf_buffer[LENGTH]=17;
  220. rf_buffer[ADR]=_Adr;
  221. memcpy(&rf_buffer[DATABYTES],_Data,16);
  222. if(rf500cmd(20)!=RF_OK)return RF_ERR;
  223. return rf_buffer[STATUS];
  224. }
  225. /*
  226. BYTE mifs_increment(BYTE _Adr,long idata *_Value)
  227. {
  228.     BYTE *temp=(BYTE *)_Value;
  229. rf_buffer[SEQNR]=0;
  230. rf_buffer[COMMAND]=0x48;
  231. rf_buffer[LENGTH]=5;
  232. rf_buffer[ADR]=_Adr;
  233. rf_buffer[VALUE]=*(temp+3);
  234. rf_buffer[VALUE+1]=*(temp+2);
  235. rf_buffer[VALUE+2]=*(temp+1);
  236. rf_buffer[VALUE+3]=*temp;
  237. if(rf500cmd(8)!=RF_OK)return RF_ERR;
  238. return rf_buffer[STATUS];
  239. }
  240. BYTE mifs_decrement(BYTE _Adr,long idata *_Value)
  241. {
  242. BYTE *temp=(BYTE *)_Value;
  243. rf_buffer[SEQNR]=0;
  244. rf_buffer[COMMAND]=0x49;
  245. rf_buffer[LENGTH]=5;
  246. rf_buffer[ADR]=_Adr;
  247. rf_buffer[VALUE]=*(temp+3);
  248. rf_buffer[VALUE+1]=*(temp+2);
  249. rf_buffer[VALUE+2]=*(temp+1);
  250. rf_buffer[VALUE+3]=*temp;
  251. if(rf500cmd(8)!=RF_OK)return RF_ERR;
  252. return rf_buffer[STATUS];
  253. }
  254. BYTE mifs_restore(BYTE _Adr)
  255. {
  256. rf_buffer[SEQNR]=0;
  257. rf_buffer[COMMAND]=0x4A;
  258. rf_buffer[LENGTH]=1;
  259. rf_buffer[ADR]=_Adr;
  260. if(rf500cmd(4)!=RF_OK)return RF_ERR;
  261. return rf_buffer[STATUS];
  262. }
  263. BYTE mifs_transfer(BYTE _Adr)
  264. {
  265. rf_buffer[SEQNR]=0;
  266. rf_buffer[COMMAND]=0x4B;
  267. rf_buffer[LENGTH]=1;
  268. rf_buffer[ADR]=_Adr;
  269. if(rf500cmd(4)!=RF_OK)return RF_ERR;
  270. return rf_buffer[STATUS];
  271. }
  272. */
  273. BYTE mifs_load_key(BYTE _Mode,BYTE _SecNr,BYTE *_Nkey)
  274. {
  275. rf_buffer[SEQNR]=0;
  276. rf_buffer[COMMAND]=0x4C;
  277. rf_buffer[LENGTH]=0x08;
  278. rf_buffer[MODE]=_Mode;
  279. rf_buffer[SECNR]=_SecNr;
  280. memcpy(&rf_buffer[NKEY],_Nkey,6);
  281. if(rf500cmd(11)!=RF_OK)return RF_ERR;
  282. return rf_buffer[STATUS];
  283. }
  284. BYTE mifs_reset(BYTE _Msec)
  285. {
  286. rf_buffer[SEQNR]=0;
  287. rf_buffer[COMMAND]=0x4E;
  288. rf_buffer[LENGTH]=1;
  289. rf_buffer[TIME]=_Msec;
  290. if(rf500cmd(4)!=RF_OK)return RF_ERR;
  291. return rf_buffer[STATUS];
  292. }
  293. /*
  294. BYTE mifs_get_info(BYTE idata *_Info)
  295. {
  296. rf_buffer[SEQNR]=0;
  297. rf_buffer[COMMAND]=0x4F;
  298. rf_buffer[LENGTH]=0;
  299. if(rf500cmd(3)!=RF_OK)return RF_ERR;
  300. if(rf_buffer[STATUS]==MI_OK)
  301. {
  302. memcpy(_Info,&rf_buffer[INFO],rf_buffer[LENGTH]);
  303. }
  304. return rf_buffer[STATUS];
  305. }
  306. BYTE mifs_close(void)
  307. {
  308. rf_buffer[SEQNR]=0;
  309. rf_buffer[COMMAND]=0x3F;
  310. rf_buffer[LENGTH]=0;
  311. if(rf500cmd(3)!=RF_OK)return RF_ERR;
  312. return rf_buffer[STATUS];
  313. }
  314. */
  315. BYTE mifs_config(void)
  316. {
  317. rf_buffer[SEQNR]=0;
  318. rf_buffer[COMMAND]=0x52;
  319. rf_buffer[LENGTH]=0;
  320. if(rf500cmd(3)!=RF_OK)return RF_ERR;
  321. return rf_buffer[STATUS];
  322. }
  323. /*
  324. BYTE mifs_check_write(BYTE idata *_SNR,BYTE _Authmode,BYTE _Adr,BYTE idata *_Data)
  325. {
  326. rf_buffer[0]=0;
  327. rf_buffer[COMMAND]=0x53;
  328. rf_buffer[LENGTH]=22;
  329. memcpy(&rf_buffer[SERNR],_SNR,4);
  330. rf_buffer[AUTHMODE]=_Authmode;
  331. rf_buffer[ADRCHKWR]=_Adr;
  332. memcpy(&rf_buffer[DATACHKWR],_Data,16);
  333. if(rf500cmd(25)!=RF_OK)return RF_ERR;
  334. return rf_buffer[STATUS];
  335. }
  336. BYTE mifs_set_control_bit()
  337. {
  338. rf_buffer[0]=0;
  339. rf_buffer[COMMAND]=0x50;
  340. rf_buffer[LENGTH]=0;
  341. if(rf500cmd(3)!=RF_OK)return RF_ERR;
  342. return rf_buffer[STATUS];
  343. }
  344. BYTE mifs_clr_control_bit()
  345. {
  346. rf_buffer[0]=0;
  347. rf_buffer[COMMAND]=0x51;
  348. rf_buffer[LENGTH]=0;
  349. if(rf500cmd(3)!=RF_OK)return RF_ERR;
  350. return rf_buffer[STATUS];
  351. }
  352. BYTE mifs_buzzer(BYTE _Frquence,BYTE _10ms)
  353. {
  354. rf_buffer[0]=0;
  355. rf_buffer[COMMAND]=0x60;
  356. rf_buffer[LENGTH]=2;
  357. rf_buffer[3]=_Frquence;
  358. rf_buffer[4]=_10ms;
  359. if(rf500cmd(5)!=RF_OK)return RF_ERR;
  360. return rf_buffer[STATUS];
  361. }
  362. BYTE mifs_read_E2(BYTE _Adr,BYTE _Length,BYTE idata *_Data)
  363. {
  364. rf_buffer[0]=0;
  365. rf_buffer[COMMAND]=0x61;
  366. rf_buffer[LENGTH]=2;
  367. rf_buffer[ADR]=_Adr;
  368. rf_buffer[4]=_Length;
  369. if(rf500cmd(5)!=RF_OK)return RF_ERR;
  370. if(rf_buffer[STATUS]==MI_OK)
  371. {
  372. memcpy(_Data,&rf_buffer[INFO],_Length);
  373. }
  374. return rf_buffer[STATUS];
  375. }
  376. BYTE mifs_write_E2(BYTE _Adr,BYTE _Length,BYTE idata *_Data)
  377. {
  378. rf_buffer[0]=0;
  379. rf_buffer[COMMAND]=0x62;
  380. rf_buffer[LENGTH]=_Length+2;
  381. rf_buffer[ADR]=_Adr;
  382. rf_buffer[4]=_Length;
  383. memcpy(&rf_buffer[5],_Data,_Length);
  384. if(rf500cmd(_Length+5)!=RF_OK)return RF_ERR;
  385. return rf_buffer[STATUS];
  386. }
  387. BYTE mifs_value(BYTE _Mode,BYTE _Adr,long *_Value,BYTE _Trans_Adr)
  388. {
  389. BYTE *temp=(BYTE *)_Value;
  390. rf_buffer[SEQNR]=0;
  391. rf_buffer[COMMAND]=0x70;
  392. rf_buffer[LENGTH]=7;
  393. rf_buffer[DATA]  =_Mode;
  394. rf_buffer[DATA+1]=_Adr;
  395. rf_buffer[DATA+2]=*(temp+3);
  396. rf_buffer[DATA+3]=*(temp+2);
  397. rf_buffer[DATA+4]=*(temp+1);
  398. rf_buffer[DATA+5]=*temp;
  399. rf_buffer[DATA+6]=_Trans_Adr;
  400. if(rf500cmd(10)!=RF_OK)return RF_ERR;
  401. return rf_buffer[STATUS];
  402. }
  403. */