📄 sle4442.lst
字号:
0203 EE08 LDI R16,0xE8
0204 E013 LDI R17,3
0205 DE64 RCALL _DelayMs
(0264) Voice(1);
0206 E001 LDI R16,1
0207 DE38 RCALL _Voice
(0265) DelayMs(1000);}
0208 EE08 LDI R16,0xE8
0209 E013 LDI R17,3
020A DE5F RCALL _DelayMs
020B 9543 INC R20
020C 3042 CPI R20,2
020D F398 BCS 0x0201
(0266) }
020E D3F3 RCALL pop_gset1
020F 9508 RET
_Buzzle_Card:
i --> R20
0210 D3EE RCALL push_gset1
(0267)
(0268) //**********非法卡错误报警*************************//
(0269) void Buzzle_Card(void)
(0270) {uchar i;
(0271) for(i=0;i<2;i++)
0211 2744 CLR R20
0212 C006 RJMP 0x0219
(0272) {Voice(0);
0213 2700 CLR R16
0214 DE2B RCALL _Voice
(0273) DelayMs(3000);}
0215 EB08 LDI R16,0xB8
0216 E01B LDI R17,0xB
0217 DE52 RCALL _DelayMs
0218 9543 INC R20
0219 3042 CPI R20,2
021A F3C0 BCS 0x0213
(0274) }
021B D3E6 RCALL pop_gset1
021C 9508 RET
_Buzzle_Money:
i --> R20
021D D3E1 RCALL push_gset1
(0275)
(0276) //*************余额不足报警**********************//
(0277) void Buzzle_Money(void)
(0278) {uchar i;
(0279) for(i=0;i<1;i++)
021E 2744 CLR R20
021F C003 RJMP 0x0223
(0280) {Buzzle_Password();
0220 DFDD RCALL _Buzzle_Password
(0281) Buzzle_Card();}
0221 DFEE RCALL _Buzzle_Card
0222 9543 INC R20
0223 3041 CPI R20,1
0224 F3D8 BCS 0x0220
(0282) }
0225 D3DC RCALL pop_gset1
0226 9508 RET
_Read_Card:
temp --> Y+1
tag --> R20
i --> R22
p --> R10
0227 D3F1 RCALL push_gset3
0228 2EA0 MOV R10,R16
0229 2EB1 MOV R11,R17
022A 9725 SBIW R28,5
(0283)
(0284) //*********************读卡函数********************//
(0285) //说明:
(0286) //函数使用的数组参数用来存放读出的余额值;
(0287) //返回值信息:
(0288) //0:卡坏!
(0289) //1:非法卡(特征值不正确)
(0290) //2:非法卡(特征值正确,帐号不正确)
(0291) //3:读卡成功!
(0292) uchar Read_Card(uchar *p)
(0293) {uchar i,tag=0,temp[4];
022B 2744 CLR R20
(0294) ReadSafeMemory(temp);
022C 2F0C MOV R16,R28
022D 2F1D MOV R17,R29
022E 5F0F SUBI R16,0xFF
022F 4F1F SBCI R17,0xFF
0230 DF4C RCALL _ReadSafeMemory
(0295) if(temp[0]==0x07)
0231 8189 LDD R24,Y+1
0232 3087 CPI R24,7
0233 F009 BEQ 0x0235
0234 C032 RJMP 0x0267
(0296) {ReadMainMemory(32,p,14);//读主存储器14字节:32-35特征码;36-3A帐号;3B-3F余额
0235 E08E LDI R24,0xE
0236 8388 STD Y+0,R24
0237 2D2A MOV R18,R10
0238 2D3B MOV R19,R11
0239 E200 LDI R16,0x20
023A DEF9 RCALL _ReadMainMemory
(0297) if(p[0]==0x00&&p[1]==0x0f&&p[2]==0xf0&&p[3]==0xff)//特征码:0x00,0x0f,0xf0,0xff
023B 2DEA MOV R30,R10
023C 2DFB MOV R31,R11
023D 8020 LDD R2,Z+0
023E 2022 TST R2
023F F529 BNE 0x0265
0240 8181 LDD R24,Z+1
0241 308F CPI R24,0xF
0242 F511 BNE 0x0265
0243 2DEA MOV R30,R10
0244 2DFB MOV R31,R11
0245 8182 LDD R24,Z+2
0246 3F80 CPI R24,0xF0
0247 F4E9 BNE 0x0265
0248 2DEA MOV R30,R10
0249 2DFB MOV R31,R11
024A 8183 LDD R24,Z+3
024B 3F8F CPI R24,0xFF
024C F4C1 BNE 0x0265
(0298) {for(i=0;i<10;i++)
024D 2766 CLR R22
024E C00E RJMP 0x025D
(0299) if((p[i+4]>=0&&p[i+4]<=9)) tag=tag+1;
024F 2FE6 MOV R30,R22
0250 27FF CLR R31
0251 0DEA ADD R30,R10
0252 1DFB ADC R31,R11
0253 8024 LDD R2,Z+4
0254 2433 CLR R3
0255 2D82 MOV R24,R2
0256 3080 CPI R24,0
0257 F020 BCS 0x025C
0258 E089 LDI R24,0x9
0259 1582 CP R24,R2
025A F008 BCS 0x025C
025B 9543 INC R20
025C 9563 INC R22
025D 306A CPI R22,0xA
025E F380 BCS 0x024F
(0300) if(tag!=10) return(2);
025F 304A CPI R20,0xA
0260 F011 BEQ 0x0263
0261 E002 LDI R16,2
0262 C005 RJMP 0x0268
(0301) else return(3);
0263 E003 LDI R16,3
0264 C003 RJMP 0x0268
(0302) }
(0303) else
(0304) return(1);
0265 E001 LDI R16,1
0266 C001 RJMP 0x0268
(0305) }
(0306) else return(0);
0267 2700 CLR R16
0268 9625 ADIW R28,5
0269 D391 RCALL pop_gset3
026A 9508 RET
_Initial_Card:
Psw --> Y+20
j --> R20
tp --> Y+0
temp --> R22
i --> R10
p --> R12
026B D3B0 RCALL push_gset4
026C 2EC0 MOV R12,R16
026D 2ED1 MOV R13,R17
026E 9767 SBIW R28,0x17
(0307) }
(0308)
(0309) //*********************卡初始化函数********************//
(0310) //说明:
(0311) //函数使用的数组参数用来存放写入的的ID值;
(0312) //返回值信息:
(0313) //2:初始化失败!
(0314) //3:初始化成功!
(0315) uchar Initial_Card(uchar *p)
(0316) {uchar Psw[3]={0xff,0xff,0xff};
026F E282 LDI R24,0x22
0270 E090 LDI R25,0
0271 2FEC MOV R30,R28
0272 2FFD MOV R31,R29
0273 9674 ADIW R30,0x14
0274 E003 LDI R16,3
0275 E010 LDI R17,0
0276 93FA ST R31,-Y
0277 93EA ST R30,-Y
0278 939A ST R25,-Y
0279 938A ST R24,-Y
027A D3D8 RCALL asgncblk
(0317) uchar i,j,temp=0;
027B 2766 CLR R22
(0318) uchar tp[20];
(0319) // ResetIC(ICcode);//IC卡复位,读出复位后的厂家信息代码A2131091;
(0320) j=VerifyPassword(Psw);
027C 2F0C MOV R16,R28
027D 2F1D MOV R17,R29
027E 5E0C SUBI R16,0xEC
027F 4F1F SBCI R17,0xFF
0280 DF1F RCALL _VerifyPassword
0281 2F40 MOV R20,R16
(0321) WriteMainMemory(32,0x00);//写特征码:
0282 2722 CLR R18
0283 E200 LDI R16,0x20
0284 DEE0 RCALL _WriteMainMemory
(0322) WriteMainMemory(33,0x0f);
0285 E02F LDI R18,0xF
0286 E201 LDI R16,0x21
0287 DEDD RCALL _WriteMainMemory
(0323) WriteMainMemory(34,0xf0);
0288 EF20 LDI R18,0xF0
0289 E202 LDI R16,0x22
028A DEDA RCALL _WriteMainMemory
(0324) WriteMainMemory(35,0xff);
028B EF2F LDI R18,0xFF
028C E203 LDI R16,0x23
028D DED7 RCALL _WriteMainMemory
(0325) for(i=0;i<5;i++)//写帐号
028E 24AA CLR R10
028F C009 RJMP 0x0299
(0326) WriteMainMemory(36+i,p[i]);//从32+i地址开始写5字节帐号;
0290 2DEA MOV R30,R10
0291 27FF CLR R31
0292 0DEC ADD R30,R12
0293 1DFD ADC R31,R13
0294 8120 LDD R18,Z+0
0295 2D0A MOV R16,R10
0296 5D0C SUBI R16,0xDC
0297 DECD RCALL _WriteMainMemory
0298 94A3 INC R10
0299 2D8A MOV R24,R10
029A 3085 CPI R24,5
029B F3A0 BCS 0x0290
(0327) for(i=0;i<5;i++)
029C 24AA CLR R10
029D C005 RJMP 0x02A3
(0328) WriteMainMemory(41+i,0);//从32+i地址开始写5字节初始化金额0000.0
029E 2722 CLR R18
029F 2D0A MOV R16,R10
02A0 5D07 SUBI R16,0xD7
02A1 DEC3 RCALL _WriteMainMemory
02A2 94A3 INC R10
02A3 2D8A MOV R24,R10
02A4 3085 CPI R24,5
02A5 F3C0 BCS 0x029E
(0329) j=Read_Card(tp);
02A6 2F0C MOV R16,R28
02A7 2F1D MOV R17,R29
02A8 DF7E RCALL _Read_Card
02A9 2F40 MOV R20,R16
(0330) if(j==3)
02AA 3003 CPI R16,3
02AB F4B1 BNE 0x02C2
(0331) {for(i=0;i<10;i++)
02AC 24AA CLR R10
02AD C011 RJMP 0x02BF
(0332) if(p[i]==tp[i+4]) temp=temp+1;
02AE 2F8C MOV R24,R28
02AF 2F9D MOV R25,R29
02B0 9604 ADIW R24,4
02B1 2DEA MOV R30,R10
02B2 27FF CLR R31
02B3 0FE8 ADD R30,R24
02B4 1FF9 ADC R31,R25
02B5 8020 LDD R2,Z+0
02B6 2DEA MOV R30,R10
02B7 27FF CLR R31
02B8 0DEC ADD R30,R12
02B9 1DFD ADC R31,R13
02BA 8030 LDD R3,Z+0
02BB 1432 CP R3,R2
02BC F409 BNE 0x02BE
02BD 9563 INC R22
02BE 94A3 INC R10
02BF 2D8A MOV R24,R10
02C0 308A CPI R24,0xA
02C1 F360 BCS 0x02AE
(0333) }
(0334) if(temp==10) return(3);
02C2 306A CPI R22,0xA
02C3 F411 BNE 0x02C6
02C4 E003 LDI R16,3
02C5 C001 RJMP 0x02C7
(0335) else return(2);
02C6 E002 LDI R16,2
02C7 9667 ADIW R28,0x17
02C8 D334 RCALL pop_gset4
02C9 9508 RET
_Repair_Card:
temp --> Y+1
j --> Y+1
i --> R20
Psw --> Y+0
02CA D334 RCALL push_gset1
02CB 9723 SBIW R28,3
(0336) }
(0337)
(0338) //***************卡修复函数********************//
(0339) //说明:
(0340) //返回值信息:
(0341) //0:修复失败!
(0342) //1:修复成功!
(0343) uchar Repair_Card(void)
(0344) {uchar Psw[3]={0xff,0xff,0xff};
02CC E285 LDI R24,0x25
02CD E090 LDI R25,0
02CE 2FEC MOV R30,R28
02CF 2FFD MOV R31,R29
02D0 E003 LDI R16,3
02D1 E010 LDI R17,0
02D2 93FA ST R31,-Y
02D3 93EA ST R30,-Y
02D4 939A ST R25,-Y
02D5 938A ST R24,-Y
02D6 D37C RCALL asgncblk
(0345) uchar i,j,temp;
(0346) i=VerifyPassword(Psw);
02D7 2F0C MOV R16,R28
02D8 2F1D MOV R17,R29
02D9 DEC6 RCALL _VerifyPassword
02DA 2F40 MOV R20,R16
(0347) return(i);
02DB 9623 ADIW R28,3
02DC D325 RCALL pop_gset1
02DD 9508 RET
_Add_Card:
i --> R22
temp --> Y+0
p --> R20
02DE D337 RCALL push_gset2
02DF 2F40 MOV R20,R16
02E0 2F51 MOV R21,R17
02E1 972E SBIW R28,0xE
(0348) }
(0349)
(0350) //********************加卡函数***********//
(0351) void Add_Card(uchar *p)
(0352) {uchar i;
(0353) uchar temp[14];
(0354) i=Read_Card(temp);
02E2 2F0C MOV R16,R28
02E3 2F1D MOV R17,R29
02E4 DF42 RCALL _Read_Card
02E5 2F60 MOV R22,R16
(0355) if(i==3)
02E6 3003 CPI R16,3
02E7 F009 BEQ 0x02E9
02E8 C04B RJMP 0x0334
(0356) {temp[13]=temp[13]+p[4];
02E9 2FE4 MOV R30,R20
02EA 2FF5 MOV R31,R21
02EB 8024 LDD R2,Z+4
02EC 843D LDD R3,Y+13
02ED 0C32 ADD R3,R2
02EE 863D STD Y+13,R3
(0357) if(temp[13]>9) {temp[13]=temp[13]-10;temp[12]=temp[12]+1;}
02EF E089 LDI R24,0x9
02F0 1583 CP R24,R3
02F1 F430 BCC 0x02F8
02F2 2D83 MOV R24,R3
02F3 508A SUBI R24,0xA
02F4 878D STD Y+13,R24
02F5 858C LDD R24,Y+12
02F6 5F8F SUBI R24,0xFF
02F7 878C STD Y+12,R24
(0358) temp[12]=temp[12]+p[3];
02F8 2FE4 MOV R30,R20
02F9 2FF5 MOV R31,R21
02FA 8023 LDD R2,Z+3
02FB 843C LDD R3,Y+12
02FC 0C32 ADD R3,R2
02FD 863C STD Y+12,R3
(0359) if(temp[12]>9) {temp[12]=temp[12]-10;temp[11]=temp[11]+1;}
02FE E089 LDI R24,0x9
02FF 1583 CP R24,R3
0300 F430 BCC 0x0307
0301 2D83 MOV R24,R3
0302 508A SUBI R24,0xA
0303 878C STD Y+12,R24
0304 858B LDD R24,Y+11
0305 5F8F SUBI R24,0xFF
0306 878B STD Y+11,R24
(0360) temp[11]=temp[11]+p[2];
0307 2FE4 MOV R30,R20
0308 2FF5 MOV R31,R21
0309 8022 LDD R2,Z+2
030A 843B LDD R3,Y+11
030B 0C32 ADD R3,R2
030C 863B STD Y+11,R3
(0361) if(temp[11]>9) {temp[11]=temp[11]-10;temp[10]=temp[10]+1;}
030D E089 LDI R24,0x9
030E 1583 CP R24,R3
030F F430 BCC 0x0316
0310 2D83 MOV R24,R3
0311 508A SUBI R24,0xA
0312 878B STD Y+11,R24
0313 858A LDD R24,Y+10
0314 5F8F SUBI R24,0xFF
0315 878A STD Y+10,R24
(0362) temp[10]=temp[10]+p[1];
0316 2FE4 MOV R30,R20
0317 2FF5 MOV R31,R21
0318 8021 LDD R2,Z+1
0319 843A LDD R3,Y+10
031A 0C32 ADD R3,R2
031B 863A STD Y+10,R3
(0363) if(temp[10]>9) {temp[10]=temp[10]-10;temp[9]=temp[9]+1;}
031C E089 LDI R24,0x9
031D 1583 CP R24,R3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -