📄 sle4442.lst
字号:
218 修 改: 日期:
219 ***********************************************************************/
220 void BreakOperate(void)
221 {
222 1 IC_CLK = 0;
223 1 IC_RST = 0;
224 1 IC_IO = 0;
225 1 Delay5us();
226 1 IC_RST = 1;
227 1 IC_IO = 1;
228 1 Delay5us();
229 1 IC_RST = 0;
230 1 Delay5us();
231 1 }
232 /*********************************************************************
233
234 函 数 名: ReadByte()
235 功 能: 从SLE4442读一个字节
236 说 明: (内部函数)
237 调 用:
238 全局变量:
239 入口参数: 无
240 出口参数:无
241 返 回 值: uchar
C51 COMPILER V6.23a SLE4442 08/23/2003 10:33:26 PAGE 5
242 设 计:zhaojunjie 日期:2002-04-24
243 修 改: 日期:
244 ***********************************************************************/
245 uchar ReadByte(void)
246 {
247 1 uchar i,ch;
248 1 ch = 0;
249 1 for (i = 8; i > 0; i--)
250 1 {
251 2 IC_CLK = 0;
252 2 ch = ch >> 1; //从低位读起
253 2 if((uchar)IC_IO)
254 2 ch |= 0x80;
255 2 Delay5us();
256 2 IC_CLK = 1;
257 2 Delay5us();
258 2 }
259 1 return ch;
260 1 }
261 /*********************************************************************
262
263 函 数 名: WriteByte()
264 功 能: 往SLE4442写一个字节
265 说 明: (内部函数)
266 调 用:
267 全局变量:
268 入口参数: uchar
269 出口参数:无
270 返 回 值: 无
271 设 计:zhaojunjie 日期:2002-04-24
272 修 改: 日期:
273 ***********************************************************************/
274 void WriteByte(uchar ch)
275 {
276 1 uchar i;
277 1 for(i = 8; i > 0; i--)
278 1 {
279 2 IC_CLK = 0;
280 2 IC_IO = (bit)(ch & 0x01);
281 2 Delay5us();
282 2 IC_CLK = 1;
283 2 Delay10us();
284 2 ch = ch >> 1; //右移一位
285 2 }
286 1 }
287 /*********************************************************************
288
289 函 数 名: ReadMode()
290 功 能: 连续输入i(=<255)个字节,存放到以pt开头的内部单元中,必须在某一读数据命令模式之后使用
291 说 明: (内部函数)
292 调 用:
293 全局变量:
294 入口参数: pt: 起始地址, count: 数据个数
295 出口参数:无
296 返 回 值: 无
297 设 计:zhaojunjie 日期:2002-04-24
298 修 改: 日期:
299 *********************************************************************/
300 void ReadMode(uchar idata *pt,uchar count)
301 {
302 1 IC_CLK=0;
303 1 Delay5us();
C51 COMPILER V6.23a SLE4442 08/23/2003 10:33:26 PAGE 6
304 1 do
305 1 {
306 2 *pt = ReadByte(); //读入一个字节
307 2 pt++; //指针加一
308 2 }while(--count); //计数器减一,判断
309 1 }
310 /*********************************************************************
311
312 函 数 名: ProcessMode()
313 功 能: 处理模式,开始处理模式后,卡片将输入口拉低,处理完后输入口变成高电平
314 说 明: (内部函数)
315 调 用:
316 全局变量:
317 入口参数: 无
318 出口参数:无
319 返 回 值: 无
320 设 计:zhaojunjie 日期:2002-04-24
321 修 改: 日期:
322 *********************************************************************/
323 void ProcessMode(void)
324 {
325 1 uint i;
326 1 IC_CLK = 0;
327 1 Delay5us();
328 1 IC_IO = 0;
329 1 for (i = 255; i > 0; i--)
330 1 {
331 2 IC_CLK = 1;
332 2 Delay5us();
333 2 IC_CLK = 0;
334 2 Delay5us();
335 2 }
336 1 IC_IO = 1;
337 1 }
338 /*********************************************************************
339
340 函 数 名: Verify()
341 功 能: 校验密码
342 说 明:
343 调 用:
344 全局变量:
345 入口参数: 指向存放密码的内部直接寻址RAM地址,
346 密码:BCD 码,从低往高放,比如:114086 *pt = 0x11 *pt+1 = 0x40 *pt+2 = 0x86
347 出口参数:无
348 返 回 值: 成功返回1,失败返回0,卡片已锁也返回0
349 设 计:zhaojunjie 日期:2002-04-24
350 修 改: 日期:
351 *********************************************************************/
352 bit Verify(uchar idata *pt)
353 {
354 1 uchar idata temp[4]; //暂存4字节的保密区内容
355 1 uchar i;
356 1
357 1 SendComm(RSM_COMM,0xff,0xff); //读密码存储区的命令字,第2,3个参数在此命令中被忽略
358 1 ReadMode(temp, 4); //读出
359 1 if((temp[0] & 0x07) != 0) //第一字节是错误计数器,如果错误计数器为0,直接退出
360 1 {
361 2 if((temp[0] & 0x07)==0x07) // 00000111
362 2 i = 0x06;
363 2 else if((temp[0] & 0x07)==0x06)// 00000110
364 2 i = 0x04;
365 2 else if((temp[0] & 0x07)==0x04)// 00000100
C51 COMPILER V6.23a SLE4442 08/23/2003 10:33:26 PAGE 7
366 2 i = 0x00; //将其中一位为1的改为0
367 2 SendComm(WSM_COMM,0,i); //修改错误计数器
368 2 ProcessMode(); //处理
369 2 for (i = 1; i < 4; i++, pt++) //校对3字节的密码
370 2 {
371 3 SendComm(VER_COMM,i,*pt); //发出校对命令,
372 3 ProcessMode(); //处理
373 3 }
374 2 SendComm(WSM_COMM,0,0xff); //擦除计数器恢复错误计数器
375 2 ProcessMode(); //处理
376 2 SendComm(RSM_COMM,0xff,0xff); //读密码存储区的命令字,第2,3个参数在此命令中被忽略
377 2 ReadMode(temp, 4); //读错误计数器的内容
378 2 if((temp[0] & 0x07)==0x07) //如果没有被成功擦除,表明校对失败
379 2 return 1 ;
380 2 }
381 1 return 0;
382 1 }
383 /********************************************************************
384
385 函 数 名:Delay10us()
386 功 能:延时10微秒(包括调用和返回的时间),f = 11.0592Mhz
387 说 明:
388 调 用:
389 入口参数:无
390 出口参数:无
391 返 回 值:无
392 设 计:zhaojunjie 日 期:2002-04-24
393 修 改: 日 期:
394 ***********************************************************************/
395 void Delay10us(void)
396 {
397 1 _nop_();
398 1 _nop_();
399 1 _nop_();
400 1 _nop_();
401 1 _nop_();
402 1 _nop_();
403 1 }
404
405 /********************************************************************
406
407 函 数 名: Delay5us()
408 功 能:延时10微秒(包括调用和返回的时间),f = 11.0592Mhz
409 说 明:
410 调 用:
411 入口参数:无
412 出口参数:无
413 返 回 值:无
414 设 计:zhaojunjie 日 期:2002-04-24
415 修 改: 日 期:
416 ***********************************************************************/
417 void Delay5us(void)
418 {
419 1 _nop_();
420 1 _nop_();
421 1 _nop_();
422 1 }
423 /*//////////////////////////////////////////////////////////////////////*/
424
425
C51 COMPILER V6.23a SLE4442 08/23/2003 10:33:26 PAGE 8
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 530 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 21
IDATA SIZE = ---- 4
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -