⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sle4442.lis

📁 avr单片机读写ic卡程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0290           L72:
 0290                   .dbline 217
 0290                   .dbline 217
 0290 F5DE              rcall _ReceiveData
 0292 E62F              mov R30,R22
 0294 F72F              mov R31,R23
 0296 0083              std z+0,R16
 0298                   .dbline 218
 0298 6F5F              subi R22,255  ; offset = 1
 029A 7F4F              sbci R23,255
 029C                   .dbline 218
 029C           L73:
 029C                   .dbline 216
 029C 4395              inc R20
 029E           L75:
 029E                   .dbline 216
 029E 4430              cpi R20,4
 02A0 B8F3              brlo L72
 02A2                   .dbline -2
 02A2                   .dbline 219
 02A2           ;       {*p=ReceiveData();
 02A2           ;        p++;}
 02A2           ; }
 02A2           L71:
 02A2 2196              adiw R28,1
 02A4 00D0              rcall pop_gset2
 02A6                   .dbline 0 ; func end
 02A6 0895              ret
 02A8                   .dbsym r i 20 c
 02A8                   .dbsym r p 22 pc
 02A8                   .dbend
 02A8                   .dbfunc e WriteSafeMemory _WriteSafeMemory fV
 02A8           ;           Data -> R22
 02A8           ;        Address -> R20
                        .even
 02A8           _WriteSafeMemory::
 02A8 00D0              rcall push_gset2
 02AA 622F              mov R22,R18
 02AC 402F              mov R20,R16
 02AE 2197              sbiw R28,1
 02B0                   .dbline -1
 02B0                   .dbline 223
 02B0           ; 
 02B0           ; /*************写安全存储器***************/
 02B0           ; void WriteSafeMemory(uchar Address,uchar Data)
 02B0           ; {Command(0x39,Address,Data);//Address=0,1,2,3
 02B0                   .dbline 223
 02B0 6883              std y+0,R22
 02B2 242F              mov R18,R20
 02B4 09E3              ldi R16,57
 02B6 8BDF              rcall _Command
 02B8                   .dbline 224
 02B8           ;  Process();
 02B8 6DDF              rcall _Process
 02BA                   .dbline -2
 02BA                   .dbline 225
 02BA           ; }
 02BA           L76:
 02BA 2196              adiw R28,1
 02BC 00D0              rcall pop_gset2
 02BE                   .dbline 0 ; func end
 02BE 0895              ret
 02C0                   .dbsym r Data 22 c
 02C0                   .dbsym r Address 20 c
 02C0                   .dbend
 02C0                   .dbfunc e VerifyPassword _VerifyPassword fc
 02C0           ;           temp -> y+1
 02C0           ;              i -> R20
 02C0           ;              p -> R22,R23
                        .even
 02C0           _VerifyPassword::
 02C0 00D0              rcall push_gset2
 02C2 602F              mov R22,R16
 02C4 712F              mov R23,R17
 02C6 2597              sbiw R28,5
 02C8                   .dbline -1
 02C8                   .dbline 229
 02C8           ; 
 02C8           ; /**************校验密码*******************/
 02C8           ; uchar VerifyPassword(uchar *p)
 02C8           ; {uchar temp[4];//暂存4字节保护密码;
 02C8                   .dbline 231
 02C8           ;  uchar i;
 02C8           ;  ReadSafeMemory(temp);//读安全代码以取得错误计数器
 02C8 0C2F              mov R16,R28
 02CA 1D2F              mov R17,R29
 02CC 0F5F              subi R16,255  ; offset = 1
 02CE 1F4F              sbci R17,255
 02D0 D4DF              rcall _ReadSafeMemory
 02D2                   .dbline 232
 02D2           ;  if((temp[0]&0x07)!=0)
 02D2 8981              ldd R24,y+1
 02D4 8770              andi R24,7
 02D6 79F1              breq L78
 02D8                   .dbline 233
 02D8           ;       {if((temp[0]&0x07)==0x07)  i=0x06;
 02D8                   .dbline 233
 02D8 8981              ldd R24,y+1
 02DA 8770              andi R24,7
 02DC 8730              cpi R24,7
 02DE 09F4              brne L80
 02E0                   .dbline 233
 02E0 46E0              ldi R20,6
 02E2           L80:
 02E2                   .dbline 234
 02E2           ;        if((temp[0]&0x07)==0x06)  i=0x04;
 02E2 8981              ldd R24,y+1
 02E4 8770              andi R24,7
 02E6 8630              cpi R24,6
 02E8 09F4              brne L82
 02EA                   .dbline 234
 02EA 44E0              ldi R20,4
 02EC           L82:
 02EC                   .dbline 235
 02EC           ;      if((temp[0]&0x07)==0x04)  i=0x00;
 02EC 8981              ldd R24,y+1
 02EE 8770              andi R24,7
 02F0 8430              cpi R24,4
 02F2 09F4              brne L84
 02F4                   .dbline 235
 02F4 4427              clr R20
 02F6           L84:
 02F6                   .dbline 236
 02F6           ;        WriteSafeMemory(0,i);
 02F6 242F              mov R18,R20
 02F8 0027              clr R16
 02FA D6DF              rcall _WriteSafeMemory
 02FC                   .dbline 237
 02FC           ;        for(i=1;i<4;i++,p++)
 02FC 41E0              ldi R20,1
 02FE 0BC0              rjmp L89
 0300           L86:
 0300                   .dbline 238
 0300                   .dbline 238
 0300 E62F              mov R30,R22
 0302 F72F              mov R31,R23
 0304 2080              ldd R2,z+0
 0306 2882              std y+0,R2
 0308 242F              mov R18,R20
 030A 03E3              ldi R16,51
 030C 60DF              rcall _Command
 030E                   .dbline 239
 030E 42DF              rcall _Process
 0310                   .dbline 239
 0310           L87:
 0310                   .dbline 237
 0310 4395              inc R20
 0312 6F5F              subi R22,255  ; offset = 1
 0314 7F4F              sbci R23,255
 0316           L89:
 0316                   .dbline 237
 0316 4430              cpi R20,4
 0318 98F3              brlo L86
 031A                   .dbline 240
 031A           ;               {Command(0x33,i,*p);
 031A           ;                Process();}
 031A           ;      WriteSafeMemory(0,0xff);
 031A 2FEF              ldi R18,255
 031C 0027              clr R16
 031E C4DF              rcall _WriteSafeMemory
 0320                   .dbline 241
 0320           ;        ReadSafeMemory(temp);
 0320 0C2F              mov R16,R28
 0322 1D2F              mov R17,R29
 0324 0F5F              subi R16,255  ; offset = 1
 0326 1F4F              sbci R17,255
 0328 A8DF              rcall _ReadSafeMemory
 032A                   .dbline 242
 032A           ;        if((temp[0]&0x07)==0x07) return(0x1);
 032A 8981              ldd R24,y+1
 032C 8770              andi R24,7
 032E 8730              cpi R24,7
 0330 11F4              brne L90
 0332                   .dbline 242
 0332 01E0              ldi R16,1
 0334 01C0              rjmp L77
 0336           L90:
 0336                   .dbline 244
 0336           ;        
 0336           ;  }
 0336           L78:
 0336                   .dbline 245
 0336           ;  return(0);
 0336 0027              clr R16
 0338                   .dbline -2
 0338           L77:
 0338 2596              adiw R28,5
 033A 00D0              rcall pop_gset2
 033C                   .dbline 0 ; func end
 033C 0895              ret
 033E                   .dbsym l temp 1 A[4:4]c
 033E                   .dbsym r i 20 c
 033E                   .dbsym r p 22 pc
 033E                   .dbend
 033E                   .dbfunc e Change _Change fV
 033E           ;           temp -> R20
 033E           ;              i -> R22
 033E           ;              N -> R10
 033E           ;    Destination -> R18,R19
 033E           ;         Source -> R16,R17
                        .even
 033E           _Change::
 033E 00D0              rcall push_gset3
 0340 AE80              ldd R10,y+6
 0342                   .dbline -1
 0342                   .dbline 251
 0342           ; }
 0342           ; //*************SLE4442函数结束*****************//
 0342           ; 
 0342           ; //*************数据变换**********//
 0342           ; void Change(uchar *Source,uchar *Destination,uchar N)
 0342           ; {uchar i,temp;
 0342                   .dbline 252
 0342           ;  for(i=0;i<N;i++)
 0342 6627              clr R22
 0344 17C0              rjmp L96
 0346           L93:
 0346                   .dbline 253
 0346                   .dbline 253
 0346 E62F              mov R30,R22
 0348 FF27              clr R31
 034A E00F              add R30,R16
 034C F11F              adc R31,R17
 034E 4081              ldd R20,z+0
 0350                   .dbline 254
 0350 E62F              mov R30,R22
 0352 FF27              clr R31
 0354 E20F              add R30,R18
 0356 F31F              adc R31,R19
 0358 842F              mov R24,R20
 035A 8295              swap R24
 035C 8F70              andi R24,#0x0F
 035E 8083              std z+0,R24
 0360                   .dbline 255
 0360 E62F              mov R30,R22
 0362 FF27              clr R31
 0364 EE0F              lsl R30
 0366 FF1F              rol R31
 0368 E20F              add R30,R18
 036A F31F              adc R31,R19
 036C 842F              mov R24,R20
 036E 8F70              andi R24,15
 0370 8183              std z+1,R24
 0372                   .dbline 255
 0372           L94:
 0372                   .dbline 252
 0372 6395              inc R22
 0374           L96:
 0374                   .dbline 252
 0374 6A15              cp R22,R10
 0376 38F3              brlo L93
 0378                   .dbline -2
 0378                   .dbline 256
 0378           ;  {temp=Source[i];
 0378           ;   Destination[i]=temp>>4;
 0378           ;   Destination[2*i+1]=temp&0x0f;}
 0378           ; }
 0378           L92:
 0378 00D0              rcall pop_gset3
 037A                   .dbline 0 ; func end
 037A 0895              ret
 037C                   .dbsym r temp 20 c
 037C                   .dbsym r i 22 c
 037C                   .dbsym r N 10 c
 037C                   .dbsym r Destination 18 pc
 037C                   .dbsym r Source 16 pc
 037C                   .dbend
 037C                   .dbfunc e Buzzle_Password _Buzzle_Password fV
 037C           ;              i -> R20
                        .even
 037C           _Buzzle_Password::
 037C 00D0              rcall push_gset1
 037E                   .dbline -1
 037E                   .dbline 260
 037E           ; 
 037E           ; //***********密码错误报警***********************//
 037E           ; void Buzzle_Password(void)
 037E           ; {uchar i;
 037E                   .dbline 261
 037E           ;  for(i=0;i<2;i++)
 037E 4427              clr R20
 0380 0BC0              rjmp L101
 0382           L98:
 0382                   .dbline 262
 0382                   .dbline 262
 0382 0027              clr R16
 0384 3DDE              rcall _Voice
 0386                   .dbline 263
 0386 08EE              ldi R16,1000
 0388 13E0              ldi R17,3
 038A 64DE              rcall _DelayMs
 038C                   .dbline 264
 038C 01E0              ldi R16,1
 038E 38DE              rcall _Voice
 0390                   .dbline 265
 0390 08EE              ldi R16,1000
 0392 13E0              ldi R17,3
 0394 5FDE              rcall _DelayMs
 0396                   .dbline 265
 0396           L99:
 0396                   .dbline 261
 0396 4395              inc R20
 0398           L101:
 0398                   .dbline 261
 0398 4230              cpi R20,2
 039A 98F3              brlo L98
 039C                   .dbline -2
 039C                   .dbline 266
 039C           ;       {Voice(0);
 039C           ;      DelayMs(1000);
 039C           ;      Voice(1);
 039C           ;      DelayMs(1000);}
 039C           ; }
 039C           L97:
 039C 00D0              rcall pop_gset1
 039E                   .dbline 0 ; func end
 039E 0895              ret
 03A0                   .dbsym r i 20 c
 03A0                   .dbend
 03A0                   .dbfunc e Buzzle_Card _Buzzle_Card fV
 03A0           ;              i -> R20
                        .even
 03A0           _Buzzle_Card::
 03A0 00D0              rcall push_gset1
 03A2                   .dbline -1
 03A2                   .dbline 270
 03A2           ;  
 03A2           ; //**********非法卡错误报警*************************// 
 03A2           ; void Buzzle_Card(void)
 03A2           ; {uchar i;
 03A2                   .dbline 271
 03A2           ;  for(i=0;i<2;i++)
 03A2 4427              clr R20
 03A4 06C0              rjmp L106
 03A6           L103:
 03A6                   .dbline 272
 03A6                   .dbline 272
 03A6 0027              clr R16
 03A8 2BDE              rcall _Voice
 03AA                   .dbline 273
 03AA 08EB              ldi R16,3000
 03AC 1BE0              ldi R17,11
 03AE 52DE              rcall _DelayMs
 03B0                   .dbline 273
 03B0           L104:
 03B0                   .dbline 271
 03B0 4395              inc R20
 03B2           L106:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -