📄 sle4442_b.lst
字号:
221 1
222 1 rst_ans();
223 1 sendcommand(0x30,0x20,0);
224 1 for(i=0;i<0x20;i++)
225 1 ICDATA[i]=cardrbyte();
226 1 }
227 /********************************************************************
228 函 数 名:rdpm()
229 功 能:读保护存储区
230 说 明:
231 入口参数:
232 返 回 值:
233 设 计:蓝海微芯
234 ***********************************************************************/
235 void rdpm()
236 {
237 1 uchar i;
238 1
239 1 rst_ans();
240 1 sendcommand(0x34,0,0);
241 1 for(i=0;i<0x4;i++)
C51 COMPILER V7.08 SLE4442_B 09/27/2006 09:14:02 PAGE 5
242 1 ICDATA[i]=cardrbyte();
243 1 }
244 /********************************************************************
245 函 数 名:wrmm()
246 功 能:写主存储区
247 说 明:
248 入口参数:
249 返 回 值:
250 设 计:蓝海微芯
251 ***********************************************************************/
252 void wrmm()
253 {
254 1 uchar i,j;
255 1 uchar addr=0;
256 1
257 1 rst_ans();
258 1 for(i=0;i<0x20;i++)
259 1 {
260 2 addr=0x20+i;
261 2 sendcommand(0x38,addr,ICDATA[i]);
262 2 for(j=0xff;j>0;j--) /*256个时钟脉冲擦除数据*/
263 2 cardpulse();
264 2 }
265 1 }
266 /********************************************************************
267 函 数 名:wrpm()
268 功 能:写保护存储区
269 说 明:
270 入口参数:
271 返 回 值:
272 设 计:蓝海微芯
273 ***********************************************************************/
274 void wrpm()
275 {
276 1 uchar i;
277 1
278 1 rst_ans();
279 1 for(i=0;i<0x20;i++)
280 1 {
281 2 sendcommand(0x3c,i,ICDATA[i]);
282 2 for(i=0;i<0xff;i++) /*256个时钟脉冲擦除数据*/
283 2 cardpulse();
284 2 }
285 1 }
286 /********************************************************************
287 函 数 名:rdsm()
288 功 能:读保密存储区
289 说 明:
290 入口参数:
291 返 回 值:
292 设 计:蓝海微芯
293 ***********************************************************************/
294 void rdsm()
295 {
296 1 uchar i;
297 1
298 1 rst_ans();
299 1 for(i=0;i<0x20;i++)
300 1 sendcommand(0x31,0,0);
301 1 for(i=0;i<0x4;i++)
302 1 ICDATA[i]=cardrbyte();
303 1 }
C51 COMPILER V7.08 SLE4442_B 09/27/2006 09:14:02 PAGE 6
304 /********************************************************************
305 函 数 名:rdsm_ec()
306 功 能:读错误计数器
307 说 明:
308 入口参数:
309 返 回 值:erro
310 设 计:蓝海微芯
311 ***********************************************************************/
312 uchar rdsm_ec()
313 {
314 1 uchar erro;
315 1
316 1 rst_ans(); /*RSTANSER[]={0xa2,0x13,0x10,0x91}*/
317 1 sendcommand(0x31,0,0);
318 1 erro=cardrbyte();
319 1 return erro;
320 1 }
321 /********************************************************************
322 函 数 名:wrsm()
323 功 能:更新保密存储区
324 说 明:
325 入口参数:uchar ec
326 返 回 值:
327 设 计:蓝海微芯
328 ***********************************************************************/
329 void wrsm(uchar ec)
330 {
331 1 uchar i;
332 1
333 1 rst_ans();
334 1 sendcommand(0x39,0,ec);
335 1 for(i=0xff;i>0;i--) /*256个时钟脉冲擦除数据*/
336 1 cardpulse();
337 1 }
338 /********************************************************************
339 函 数 名:updatepsc()
340 功 能:更新密码
341 说 明:
342 入口参数:
343 返 回 值:
344 设 计:蓝海微芯
345 ***********************************************************************/
346 void updatepsc()
347 {
348 1 uchar i;
349 1 uchar j;
350 1
351 1 rst_ans();
352 1 for(i=0;i<0x03;i++)
353 1 {
354 2 sendcommand(0x39,(i+1),ICCODE[i]);
355 2 for(j=0xff;j>0;j--) /*256个时钟脉冲擦除数据*/
356 2 cardpulse();
357 2 }
358 1 }
359 /********************************************************************
360 函 数 名:sendpsc()
361 功 能:比较校验数据
362 说 明:
363 入口参数:
364 返 回 值:
365 设 计:蓝海微芯
C51 COMPILER V7.08 SLE4442_B 09/27/2006 09:14:02 PAGE 7
366 ***********************************************************************/
367 void sendpsc()
368 {
369 1 uchar i;
370 1 uchar j;
371 1
372 1 uchar adrs=0;
373 1 rst_ans();
374 1 for(i=0;i<0x03;i++)
375 1 {
376 2 adrs=i+1;
377 2 sendcommand(0x33,adrs,ICCODE[i]);
378 2 for(j=123;j>0;j--)
379 2 cardpulse();
380 2 }
381 1 }
382 /********************************************************************
383 函 数 名:verifi()
384 功 能:校验密码
385 说 明:
386 入口参数:
387 返 回 值:uchar EC
388 设 计:蓝海微芯
389 ***********************************************************************/
390 uchar verifi()
391 {
392 1 uchar EC=0;
393 1 uchar temp;
394 1
395 1 EC=rdsm_ec(); /*读错误计数器*/
396 1 EC=EC&0x07;
397 1
398 1 switch(EC)
399 1 {
400 2 case 0x00:
401 2 break;
402 2 case 0x07:
403 2 temp=0x03;
404 2 break;
405 2 case 0x06:
406 2 temp=0x02;
407 2 break;
408 2 case 0x05:
409 2 temp=0x01;
410 2 break;
411 2 case 0x04:
412 2 temp=0x00;
413 2 break;
414 2 case 0x03:
415 2 temp=0x01;
416 2 break;
417 2 temp=0;
418 2 }
419 1 if(!EC==0)
420 1 {
421 2 wrsm(temp); /*更新保密存储区*/
422 2 sendpsc(); /*比较验证数据*/
423 2 wrsm(0x07); /*更新保密存储区*/
424 2 EC=rdsm_ec(); /*读错误计数器*/
425 2 EC=EC&0x07;
426 2 }
427 1 return EC;
C51 COMPILER V7.08 SLE4442_B 09/27/2006 09:14:02 PAGE 8
428 1 }
429
430
431
432
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 477 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 46 1
IDATA SIZE = ---- ----
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 + -