📄 reader.lst
字号:
198 2 }
199 1 SCL = 0;
200 1 return SUCCESS;
201 1 }
202 /*****************************************************************************
203 *function: IIC send ACK
204 *****************************************************************************/
205 void I2CSendAck(void)
206 {
207 1 SDA = 0;
208 1 _nop_();
209 1 SCL = 1;
210 1 SCL = 0;
211 1 }
212 /*****************************************************************************
213 *function: IIC send Not ACK
214 *****************************************************************************/
215 void I2CSendNotAck(void)
216 {
217 1 SDA = 1;
218 1 _nop_();
219 1 SCL = 1;
220 1 SCL = 0;
221 1 }
222 /*****************************************************************************
223 *function: send a byte over IIC bus
224 *****************************************************************************/
225 void I2CSendByte(unsigned char cSendByte)
226 {
227 1 unsigned char data i = 8;
228 1 while (i--)
229 1 {
230 2 SCL = 0;
231 2 SDA = (bit)(cSendByte & 0x80);
232 2 cSendByte += cSendByte;
233 2 _nop_();
234 2 SCL = 1;
235 2 }
236 1 SCL = 0;
237 1 }
238 /*****************************************************************************
239 *function: receive a byte over IIC bus
C51 COMPILER V8.12 READER 03/07/2009 23:13:12 PAGE 5
240 *****************************************************************************/
241 unsigned char I2CReceiveByte(void)
242 {
243 1 unsigned char data i = 8;
244 1 unsigned char data cR_Byte = 0;
245 1 SDA = 1;
246 1 while (i--)
247 1 {
248 2 cR_Byte += cR_Byte;
249 2 SCL = 0;
250 2 _nop_();
251 2 _nop_();
252 2 SCL = 1;
253 2 cR_Byte |= (unsigned char)SDA;
254 2 }
255 1 SCL = 0;
256 1 return cR_Byte;
257 1 }
258 /*****************************************************************************
259 *function: read data from HY502 over IIC bus
260 *****************************************************************************/
261 unsigned char IicReadHY502(unsigned char *cP)
262 {
263 1 unsigned char cCnt;
264 1 unsigned char cCheckSum = 0;
265 1 for (cCnt=0; cCnt<0xFF; cCnt++) // wait HY502 working, while it's working, it will send "not ACK" to IIC
-master
266 1 {
267 2 delay(1);
268 2 I2CStart();
269 2 I2CSendByte(READ_HY502);
270 2 if (I2CWaitAck() == SUCCESS)
271 2 {
272 3 break;
273 3 }
274 2 }
275 1 if (0xFF == cCnt)
276 1 {
277 2 return FAILURE;
278 2 }
279 1 cP[0]=2;
280 1 for (cCnt=0; cCnt<cP[0]; cCnt++) // in the protocol, cP[0] is the length of this data package
281 1 {
282 2 cP[cCnt] = I2CReceiveByte();
283 2 I2CSendAck();
284 2 cCheckSum ^= cP[cCnt];
285 2 }
286 1 cP[cCnt] = I2CReceiveByte();
287 1 I2CSendNotAck();
288 1 I2CStop();
289 1 if (cCheckSum != cP[cCnt])
290 1 {
291 2 return FAILURE;
292 2 }
293 1 else
294 1 {
295 2 return SUCCESS;
296 2 }
297 1 }
298 /*****************************************************************************
299 *function: send data to HY502 over IIC bus
300 *****************************************************************************/
C51 COMPILER V8.12 READER 03/07/2009 23:13:12 PAGE 6
301 unsigned char IicSendHY502(unsigned char *cP)
302 {
303 1 unsigned char i;
304 1 unsigned char cCheckSum = 0;
305 1 I2CStart();
306 1 I2CSendByte(WRITE_HY502);
307 1 if (I2CWaitAck() == SUCCESS)
308 1 {
309 2 for(i=0; i<cP[0]; i++) // in the protocol, cP[0] is the length of this data package
310 2 {
311 3 cCheckSum ^= cP[i];
312 3 I2CSendByte(cP[i]);
313 3 if (I2CWaitAck() != SUCCESS)
314 3 {
315 4 return FAILURE;
316 4 }
317 3 }
318 2 I2CSendByte(cCheckSum);
319 2 if (I2CWaitAck() != SUCCESS)
320 2 {
321 3 return FAILURE;
322 3 }
323 2 I2CStop();
324 2 return SUCCESS;
325 2 }
326 1 else
327 1 {
328 2 return FAILURE;
329 2 }
330 1 }
331
332 void send_str(unsigned char *str)
333 {
334 1 unsigned char i = 0;
335 1
336 1 while (str[i] != '\0')
337 1 {
338 2 SBUF = str[i++];
339 2 while (!TI)
340 2 ;
341 2 //等待数据传送完毕
342 2 TI = 0; //清中断标志
343 2 }
344 1 }
345
346 void main(void)
347 {
348 1 unsigned char idata cStatus;
349 1 P2=0xff;
350 1 InitializeSystem(); // 初始化系统
351 1
352 1
353 1 IT0 = 0; //低电平触发
354 1 // IT0=1; //下降沿触发
355 1 //IT1 = 0; //低电平触发
356 1 // IT1=1; //下降沿触发
357 1
358 1 EA = 1; //总中断允许
359 1 //EX1 = 1; //开启INT1中断
360 1 EX0 = 1; //开启INT0中断
361 1 cp[0]='f';
362 1 cp[1]='u';
C51 COMPILER V8.12 READER 03/07/2009 23:13:12 PAGE 7
363 1 cp[2]='c';
364 1 cp[3]='k';
365 1 cp[4]=' ';
366 1 cp[5]='y';
367 1 cp[6]='o';
368 1 cp[7]='u';
369 1 send_str(cp);
370 1 g_cReceBuf[0]=0x2;
371 1 g_cReceBuf[1]=0x20;
372 1 cStatus =IicSendHY502(g_cReceBuf);//ComSearchCard); // 发送寻卡命令
373 1 if(cStatus==0)
374 1 P2=0x00;
375 1 cStatus =IicReadHY502(cp); // 读取卡号并存入到cP
376 1 send_str(cp);
377 1 while(1);
378 1 }
379
380 void INT0_Proc(void) interrupt 0
381 {
382 1 EX0=0;
383 1 P2=0x00;
384 1 delay_1ms(2000);
385 1 P2=0xff;
386 1 EX0=1;
387 1
388 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 652 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 31 11
IDATA SIZE = 34 1
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -