?? sle4442.s
字號:
.dbsym r Byte2 20 c
.dbsym r Byte1 22 c
.dbend
.dbfunc e ReadMainMemory _ReadMainMemory fV
; N -> R20
; p -> R22,R23
; addr -> R10
.even
_ReadMainMemory::
rcall push_gset3
mov R22,R18
mov R23,R19
mov R10,R16
sbiw R28,1
ldd R20,y+7
.dbline -1
.dbline 187
;
;
; /**********讀主存儲器**************/
; void ReadMainMemory(uchar addr,uchar *p,uchar N)
; {Command(0x30,addr,0xff);
.dbline 187
ldi R24,255
std y+0,R24
mov R18,R10
ldi R16,48
rcall _Command
L62:
.dbline 188
; do{*p=ReceiveData();
.dbline 188
rcall _ReceiveData
mov R30,R22
mov R31,R23
std z+0,R16
.dbline 189
subi R22,255 ; offset = 1
sbci R23,255
.dbline 189
L63:
.dbline 189
; p++;}while(--N);
mov R24,R20
subi R24,1
mov R20,R24
tst R24
brne L62
.dbline -2
.dbline 190
; }
L61:
adiw R28,1
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r N 20 c
.dbsym r p 22 pc
.dbsym r addr 10 c
.dbend
.dbfunc e ReadProtectMemory _ReadProtectMemory fV
; i -> R20
; p -> R22,R23
.even
_ReadProtectMemory::
rcall push_gset2
mov R22,R16
mov R23,R17
sbiw R28,1
.dbline -1
.dbline 194
;
; /**********讀保護存儲器***********/
; void ReadProtectMemory(uchar *p)
; {uchar i=4;
.dbline 194
ldi R20,4
.dbline 195
; Command(0x34,0xff,0xff);
ldi R24,255
std y+0,R24
ldi R18,255
ldi R16,52
rcall _Command
L66:
.dbline 196
; do{*p=ReceiveData();
.dbline 196
rcall _ReceiveData
mov R30,R22
mov R31,R23
std z+0,R16
.dbline 197
subi R22,255 ; offset = 1
sbci R23,255
.dbline 197
L67:
.dbline 197
; p++;}while(i--);
mov R2,R20
clr R3
subi R20,1
tst R2
brne L66
.dbline -2
.dbline 198
; }
L65:
adiw R28,1
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r p 22 pc
.dbend
.dbfunc e WriteMainMemory _WriteMainMemory fV
; Data -> R22
; Address -> R20
.even
_WriteMainMemory::
rcall push_gset2
mov R22,R18
mov R20,R16
sbiw R28,1
.dbline -1
.dbline 202
;
; /************寫主存儲器************/
; void WriteMainMemory(uchar Address,uchar Data)
; {Command(0x38,Address,Data);
.dbline 202
std y+0,R22
mov R18,R20
ldi R16,56
rcall _Command
.dbline 203
; Process();
rcall _Process
.dbline -2
.dbline 204
; }
L69:
adiw R28,1
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r Data 22 c
.dbsym r Address 20 c
.dbend
.dbfunc e WriteProtectMemory _WriteProtectMemory fV
; Data -> R22
; Address -> R20
.even
_WriteProtectMemory::
rcall push_gset2
mov R22,R18
mov R20,R16
sbiw R28,1
.dbline -1
.dbline 208
;
; /**************寫保護存儲器**********/
; void WriteProtectMemory(uchar Address,uchar Data)
; {Command(0x3c,Address,Data);
.dbline 208
std y+0,R22
mov R18,R20
ldi R16,60
rcall _Command
.dbline 209
; Process();
rcall _Process
.dbline -2
.dbline 210
; }
L70:
adiw R28,1
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r Data 22 c
.dbsym r Address 20 c
.dbend
.dbfunc e ReadSafeMemory _ReadSafeMemory fV
; i -> R20
; p -> R22,R23
.even
_ReadSafeMemory::
rcall push_gset2
mov R22,R16
mov R23,R17
sbiw R28,1
.dbline -1
.dbline 214
;
; /**************讀安全存儲器************/
; void ReadSafeMemory(uchar *p)
; {uchar i;
.dbline 215
; Command(0x31,0xff,0xff);
ldi R24,255
std y+0,R24
ldi R18,255
ldi R16,49
rcall _Command
.dbline 216
; for(i=0;i<4;i++)
clr R20
rjmp L75
L72:
.dbline 217
.dbline 217
rcall _ReceiveData
mov R30,R22
mov R31,R23
std z+0,R16
.dbline 218
subi R22,255 ; offset = 1
sbci R23,255
.dbline 218
L73:
.dbline 216
inc R20
L75:
.dbline 216
cpi R20,4
brlo L72
.dbline -2
.dbline 219
; {*p=ReceiveData();
; p++;}
; }
L71:
adiw R28,1
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r p 22 pc
.dbend
.dbfunc e WriteSafeMemory _WriteSafeMemory fV
; Data -> R22
; Address -> R20
.even
_WriteSafeMemory::
rcall push_gset2
mov R22,R18
mov R20,R16
sbiw R28,1
.dbline -1
.dbline 223
;
; /*************寫安全存儲器***************/
; void WriteSafeMemory(uchar Address,uchar Data)
; {Command(0x39,Address,Data);//Address=0,1,2,3
.dbline 223
std y+0,R22
mov R18,R20
ldi R16,57
rcall _Command
.dbline 224
; Process();
rcall _Process
.dbline -2
.dbline 225
; }
L76:
adiw R28,1
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r Data 22 c
.dbsym r Address 20 c
.dbend
.dbfunc e VerifyPassword _VerifyPassword fc
; temp -> y+1
; i -> R20
; p -> R22,R23
.even
_VerifyPassword::
rcall push_gset2
mov R22,R16
mov R23,R17
sbiw R28,5
.dbline -1
.dbline 229
;
; /**************校驗密碼*******************/
; uchar VerifyPassword(uchar *p)
; {uchar temp[4];//暫存4字節保護密碼;
.dbline 231
; uchar i;
; ReadSafeMemory(temp);//讀安全代碼以取得錯誤計數器
mov R16,R28
mov R17,R29
subi R16,255 ; offset = 1
sbci R17,255
rcall _ReadSafeMemory
.dbline 232
; if((temp[0]&0x07)!=0)
ldd R24,y+1
andi R24,7
breq L78
.dbline 233
; {if((temp[0]&0x07)==0x07) i=0x06;
.dbline 233
ldd R24,y+1
andi R24,7
cpi R24,7
brne L80
.dbline 233
ldi R20,6
L80:
.dbline 234
; if((temp[0]&0x07)==0x06) i=0x04;
ldd R24,y+1
andi R24,7
cpi R24,6
brne L82
.dbline 234
ldi R20,4
L82:
.dbline 235
; if((temp[0]&0x07)==0x04) i=0x00;
ldd R24,y+1
andi R24,7
cpi R24,4
brne L84
.dbline 235
clr R20
L84:
.dbline 236
; WriteSafeMemory(0,i);
mov R18,R20
clr R16
rcall _WriteSafeMemory
.dbline 237
; for(i=1;i<4;i++,p++)
ldi R20,1
rjmp L89
L86:
.dbline 238
.dbline 238
mov R30,R22
mov R31,R23
ldd R2,z+0
std y+0,R2
mov R18,R20
ldi R16,51
rcall _Command
.dbline 239
rcall _Process
.dbline 239
L87:
.dbline 237
inc R20
subi R22,255 ; offset = 1
sbci R23,255
L89:
.dbline 237
cpi R20,4
brlo L86
.dbline 240
; {Command(0x33,i,*p);
; Process();}
; WriteSafeMemory(0,0xff);
ldi R18,255
clr R16
rcall _WriteSafeMemory
.dbline 241
; ReadSafeMemory(temp);
mov R16,R28
mov R17,R29
subi R16,255 ; offset = 1
sbci R17,255
rcall _ReadSafeMemory
.dbline 242
; if((temp[0]&0x07)==0x07) return(0x1);
ldd R24,y+1
andi R24,7
cpi R24,7
brne L90
.dbline 242
ldi R16,1
rjmp L77
L90:
.dbline 244
;
; }
L78:
.dbline 245
; return(0);
clr R16
.dbline -2
L77:
adiw R28,5
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l temp 1 A[4:4]c
.dbsym r i 20 c
.dbsym r p 22 pc
.dbend
.dbfunc e Change _Change fV
; temp -> R20
; i -> R22
; N -> R10
; Destination -> R18,R19
; Source -> R16,R17
.even
_Change::
rcall push_gset3
ldd R10,y+6
.dbline -1
.dbline 251
; }
; //*************SLE4442函數結束*****************//
;
; //*************數據變換**********//
; void Change(uchar *Source,uchar *Destination,uchar N)
; {uchar i,temp;
.dbline 252
; for(i=0;i<N;i++)
clr R22
rjmp L96
L93:
.dbline 253
.dbline 253
mov R30,R22
clr R31
add R30,R16
adc R31,R17
ldd R20,z+0
.dbline 254
mov R30,R22
clr R31
add R30,R18
adc R31,R19
mov R24,R20
swap R24
andi R24,#0x0F
std z+0,R24
.dbline 255
mov R30,R22
clr R31
lsl R30
rol R31
add R30,R18
adc R31,R19
mov R24,R20
andi R24,15
std z+1,R24
.dbline 255
L94:
.dbline 252
inc R22
L96:
.dbline 252
cp R22,R10
brlo L93
.dbline -2
.dbline 256
; {temp=Source[i];
; Destination[i]=temp>>4;
; Destination[2*i+1]=temp&0x0f;}
; }
L92:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym r i 22 c
.dbsym r N 10 c
.dbsym r Destination 18 pc
.dbsym r Source 16 pc
.dbend
.dbfunc e Buzzle_Password _Buzzle_Password fV
; i -> R20
.even
_Buzzle_Password::
rcall push_gset1
.dbline -1
.dbline 260
;
; //***********密碼錯誤報警***********************//
; void Buzzle_Password(void)
; {uchar i;
.dbline 261
; for(i=0;i<2;i++)
clr R20
rjmp L101
L98:
.dbline 262
.dbline 262
clr R16
rcall _Voice
.dbline 263
ldi R16,1000
ldi R17,3
rcall _DelayMs
.dbline 264
ldi R16,1
rcall _Voice
.dbline 265
ldi R16,1000
ldi R17,3
rcall _DelayMs
.dbline 265
L99:
.dbline 261
inc R20
L101:
.dbline 261
cpi R20,2
brlo L98
.dbline -2
.dbline 266
; {Voice(0);
; DelayMs(1000);
; Voice(1);
; DelayMs(1000);}
; }
L97:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e Buzzle_Card _Buzzle_Card fV
; i -> R20
.even
_Buzzle_Card::
rcall push_gset1
.dbline -1
.dbline 270
;
; //**********非法卡錯誤報警*************************//
; void Buzzle_Card(void)
; {uchar i;
.dbline 271
; for(i=0;i<2;i++)
clr R20
rjmp L106
L103:
.dbline 272
.dbline 272
clr R16
rcall _Voice
.dbline 273
ldi R16,3000
ldi R17,11
rcall _DelayMs
.dbline 273
L104:
.dbline 271
inc R20
L106:
.dbline 271
cpi R20,2
brlo L103
.dbline -2
.dbline 274
; {Voice(0);
; DelayMs(3000);}
; }
L102:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e Buzzle_Money _Buzzle_Money fV
; i -> R20
.even
_Buzzle_Money::
rcall push_gset1
.dbline -1
.dbline 278
;
; //*************余額不足報警**********************//
; void Buzzle_Money(void)
; {uchar i;
.dbline 279
; for(i=0;i<1;i++)
clr R20
rjmp L111
L108:
.dbline 280
.dbline 280
rcall _Buzzle_Password
.dbline 281
rcall _Buzzle_Card
.dbline 281
L109:
.dbline 279
inc R20
L111:
.dbline 279
cpi R20,1
brlo L108
.dbline -2
.dbline 282
; {Buzzle_Password();
; Buzzle_Card();}
; }
L107:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e Read_Card _Read_Card fc
; temp -> y+1
; tag -> R20
; i -> R22
; p -> R10,R11
.even
_Read_Card::
rcall push_gset3
mov R10,R16
mov R11,R17
sbiw R28,5
.dbline -1
.dbline 293
;
; //*********************讀卡函數********************//
; //說明:
; //函數使用的數組參數用來存放讀出的余額值;
; //返回值信息:
; //0:卡壞!
; //1:非法卡(特征值不正確)
; //2:非法卡(特征值正確,帳號不正確)
; //3:讀卡成功!
; uchar Read_Card(uchar *p)
; {uchar i,tag=0,temp[4];
.dbline 293
clr R20
.dbline 294
; ReadSafeMemory(temp);
mov R16,R28
mov R17,R29
subi R16,255 ; offset = 1
sbci R17,255
rcall _ReadSafeMemory
.dbline 295
; if(temp[0]==0x07)
ldd R24,y+1
cpi R24,7
breq X2
rjmp L113
X2:
.dbline 296
; {ReadMainMemory(32,p,14);//讀主存儲器14字節:32-35特征碼;36-3A帳號;3B-3F余額
.dbline 296
ldi R24,14
std y+0,R24
mov R18,R10
mov R19,R11
ldi R16,32
rcall _ReadMainMemory
.dbline 297
; if(p[0]==0x00&&p[1]==0x0f&&p[2]==0xf0&&p[3]==0xff)//特征碼:0x00,0x0f,0xf0,0xff
mov R30,R10
mov R31,R11
ldd R2,z+0
tst R2
brne L115
ldd R24,z+1
cpi R24,15
brne L115
mov R30,R10
mov R31,R11
ldd R24,z+2
cpi R24,240
brne L115
mov R30,R10
mov R31,R11
ldd R24,z+3
cpi R24,255
brne L115
.dbline 298
; {for(i=0;i<10;i++)
.dbline 298
clr R22
rjmp L120
L117:
.dbline 299
; if((p[i+4]>=0&&p[i+4]<=9)) tag=tag+1;
mov R30,R22
clr R31
add R30,R10
adc R31,R11
ldd R2,z+4
clr R3
mov R24,R2
cpi R24,0
brlo L121
ldi R24,9
cp R24,R2
brlo L121
.dbline 299
inc R20
L121:
L118:
.dbline 298
inc R22
L120:
.dbline 298
cpi R22,10
brlo L117
.dbline 300
; if(tag!=10) return(2);
cpi R20,10
breq L123
.dbline 300
ldi R16,2
rjmp L112
L123:
.dbline 301
; else return(3);
ldi R16,3
rjmp L112
L115:
.dbline 304
; }
; else
; return(1);
ldi R16,1
rjmp L112
L113:
.dbline 306
; }
; else return(0);
clr R16
.dbline -2
L112:
adiw R28,5
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym l temp 1 A[4:4]c
.dbsym r tag 20 c
.dbsym r i 22 c
.dbsym r p 10 pc
.dbend
.area lit(rom, con, rel)
L126:
.byte 255,255
.byte 255
.area text(rom, con, rel)
.dbfile J:\SLE4442-avr\sle4442.c
.dbfunc e Initial_Card _Initial_Card fc
; Psw -> y+20
; j -> R20
; tp -> y+0
; temp -> R22
; i -> R10
; p -> R12,R13
.even
_Initial_Card::
rcall push_gset4
mov R12,R16
mov R13,R17
sbiw R28,23
.dbline -1
.dbline 316
; }
;
; //*********************卡初始化函數********************//
; //說明:
; //函數使用的數組參數用來存放寫入的的ID值;
; //返回值信息:
; //2:初始化失敗!
; //3:初始化成功!
; uchar Initial_Card(uchar *p)
; {uchar Psw[3]={0xff,0xff,0xff};
.dbline 316
ldi R24,<L126
ldi R25,>L126
mov R30,R28
mov R31,R29
adiw R30,20
ldi R16,3
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
rcall asgncblk
.dbline 317
; uchar i,j,temp=0;
clr R22
.dbline 320
; uchar tp[20];
; // ResetIC(ICcode);//IC卡復位,讀出復位后的廠家信息代碼A2131091;
; j=VerifyPassword(Psw);
mov R16,R28
mov R17,R29
subi R16,236 ; offset = 20
sbci R17,255
rcall _VerifyPassword
mov R20,R16
.dbline 321
; WriteMainMemory(32,0x00);//寫特征碼:
clr R18
ldi R16,32
rcall _WriteMainMemory
.dbline 322
; WriteMainMemory(33,0x0f);
ldi R18,15
ldi R16,33
rcall _WriteMainMemory
.dbline 323
; WriteMainMemory(34,0xf0);
ldi R18,240
ldi R16,34
rcall _WriteMainMemory
.dbline 324
; WriteMainMemory(35,0xff);
ldi R18,255
ldi R16,35
rcall _WriteMainMemory
.dbline 325
; for(i=0;i<5;i++)//寫帳號
clr R10
rjmp L130
L127:
.dbline 326
mov R30,R10
clr R31
add R30,R12
adc R31,R13
ldd R18,z+0
mov R16,R10
subi R16,220 ; addi 36
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -