📄 sle4442.lst
字号:
044A 077E CPC R23,R30
044B F409 BNE 0x044D
044C C048 RJMP 0x0495
044D 3164 CPI R22,0x14
044E E0E0 LDI R30,0
044F 077E CPC R23,R30
0450 F409 BNE 0x0452
0451 C052 RJMP 0x04A4
0452 3168 CPI R22,0x18
0453 E0E0 LDI R30,0
0454 077E CPC R23,R30
0455 F409 BNE 0x0457
0456 C05C RJMP 0x04B3
0457 C089 RJMP 0x04E1
0458 3461 CPI R22,0x41
0459 E0E0 LDI R30,0
045A 077E CPC R23,R30
045B F409 BNE 0x045D
045C C033 RJMP 0x0490
045D 3462 CPI R22,0x42
045E E0E0 LDI R30,0
045F 077E CPC R23,R30
0460 F409 BNE 0x0462
0461 C03D RJMP 0x049F
0462 3464 CPI R22,0x44
0463 E0E0 LDI R30,0
0464 077E CPC R23,R30
0465 F409 BNE 0x0467
0466 C047 RJMP 0x04AE
0467 3468 CPI R22,0x48
0468 E0E0 LDI R30,0
0469 077E CPC R23,R30
046A F409 BNE 0x046C
046B C062 RJMP 0x04CE
046C 3461 CPI R22,0x41
046D E0E0 LDI R30,0
046E 077E CPC R23,R30
046F F40C BGE 0x0471
0470 C070 RJMP 0x04E1
0471 3861 CPI R22,0x81
0472 E0E0 LDI R30,0
0473 077E CPC R23,R30
0474 F409 BNE 0x0476
0475 C05E RJMP 0x04D4
0476 3862 CPI R22,0x82
0477 E0E0 LDI R30,0
0478 077E CPC R23,R30
0479 F409 BNE 0x047B
047A C041 RJMP 0x04BC
047B 3864 CPI R22,0x84
047C E0E0 LDI R30,0
047D 077E CPC R23,R30
047E F409 BNE 0x0480
047F C045 RJMP 0x04C5
0480 3868 CPI R22,0x88
0481 E0E0 LDI R30,0
0482 077E CPC R23,R30
0483 F409 BNE 0x0485
0484 C055 RJMP 0x04DA
0485 C05B RJMP 0x04E1
(0456) {case 0x11:value=9;Num_Flag=1;break;
0486 E069 LDI R22,0x9
0487 E081 LDI R24,1
0488 9380007F STS _Num_Flag,R24
048A C057 RJMP 0x04E2
(0457) case 0x21:value=8;Num_Flag=1;break;
048B E068 LDI R22,0x8
048C E081 LDI R24,1
048D 9380007F STS _Num_Flag,R24
048F C052 RJMP 0x04E2
(0458) case 0x41:value=7;Num_Flag=1;break;
0490 E067 LDI R22,7
0491 E081 LDI R24,1
0492 9380007F STS _Num_Flag,R24
0494 C04D RJMP 0x04E2
(0459) case 0x12:value=6;Num_Flag=1;break;
0495 E066 LDI R22,6
0496 E081 LDI R24,1
0497 9380007F STS _Num_Flag,R24
0499 C048 RJMP 0x04E2
(0460) case 0x22:value=5;Num_Flag=1;break;
049A E065 LDI R22,5
049B E081 LDI R24,1
049C 9380007F STS _Num_Flag,R24
049E C043 RJMP 0x04E2
(0461) case 0x42:value=4;Num_Flag=1;break;
049F E064 LDI R22,4
04A0 E081 LDI R24,1
04A1 9380007F STS _Num_Flag,R24
04A3 C03E RJMP 0x04E2
(0462) case 0x14:value=3;Num_Flag=1;break;
04A4 E063 LDI R22,3
04A5 E081 LDI R24,1
04A6 9380007F STS _Num_Flag,R24
04A8 C039 RJMP 0x04E2
(0463) case 0x24:value=2;Num_Flag=1;break;
04A9 E062 LDI R22,2
04AA E081 LDI R24,1
04AB 9380007F STS _Num_Flag,R24
04AD C034 RJMP 0x04E2
(0464) case 0x44:value=1;Num_Flag=1;break;
04AE E061 LDI R22,1
04AF E081 LDI R24,1
04B0 9380007F STS _Num_Flag,R24
04B2 C02F RJMP 0x04E2
(0465) case 0x18:value=0;Num_Flag=1;break;
04B3 2766 CLR R22
04B4 E081 LDI R24,1
04B5 9380007F STS _Num_Flag,R24
04B7 C02A RJMP 0x04E2
(0466) case 0x28:Point_Flag=1;break;
04B8 E081 LDI R24,1
04B9 93800079 STS _Point_Flag,R24
04BB C026 RJMP 0x04E2
(0467) case 0x82:Add_Flag=1;Sub_Flag=0;Key_Flag=1;break;
04BC E081 LDI R24,1
04BD 9380007E STS _Add_Flag,R24
04BF 2422 CLR R2
04C0 9220007D STS _Sub_Flag,R2
04C2 93800078 STS _Key_Flag,R24
04C4 C01D RJMP 0x04E2
(0468) case 0x84:Sub_Flag=1;Add_Flag=0;Key_Flag=1;break;
04C5 E081 LDI R24,1
04C6 9380007D STS _Sub_Flag,R24
04C8 2422 CLR R2
04C9 9220007E STS _Add_Flag,R2
04CB 93800078 STS _Key_Flag,R24
04CD C014 RJMP 0x04E2
(0469) case 0x48:Repair_Flag=1;Key_Flag=1;break;
04CE E081 LDI R24,1
04CF 9380007B STS _Repair_Flag,R24
04D1 93800078 STS _Key_Flag,R24
04D3 C00E RJMP 0x04E2
(0470) case 0x81:Init_Flag=1;Key_Flag=1;break;
04D4 E081 LDI R24,1
04D5 9380007C STS _Init_Flag,R24
04D7 93800078 STS _Key_Flag,R24
04D9 C008 RJMP 0x04E2
(0471) case 0x88:Enter_Flag=1;Key_Flag=0;break;
04DA E081 LDI R24,1
04DB 9380007A STS _Enter_Flag,R24
04DD 2422 CLR R2
04DE 92200078 STS _Key_Flag,R2
04E0 C001 RJMP 0x04E2
(0472) default: NOP();
04E1 0000 NOP
(0473) }
(0474) if(Num_Flag==1){p[4]=p[3];p[3]=p[2];p[2]=p[1];p[1]=value;Num_Flag=0;}
04E2 9180007F LDS R24,_Num_Flag
04E4 3081 CPI R24,1
04E5 F4C1 BNE 0x04FE
04E6 2FE4 MOV R30,R20
04E7 2FF5 MOV R31,R21
04E8 8023 LDD R2,Z+3
04E9 2FE4 MOV R30,R20
04EA 2FF5 MOV R31,R21
04EB 8224 STD Z+4,R2
04EC 2FE4 MOV R30,R20
04ED 2FF5 MOV R31,R21
04EE 8022 LDD R2,Z+2
04EF 2FE4 MOV R30,R20
04F0 2FF5 MOV R31,R21
04F1 8223 STD Z+3,R2
04F2 2FE4 MOV R30,R20
04F3 2FF5 MOV R31,R21
04F4 8021 LDD R2,Z+1
04F5 2FE4 MOV R30,R20
04F6 2FF5 MOV R31,R21
04F7 8222 STD Z+2,R2
04F8 2FE4 MOV R30,R20
04F9 2FF5 MOV R31,R21
04FA 8361 STD Z+1,R22
04FB 2422 CLR R2
04FC 9220007F STS _Num_Flag,R2
(0475) if(Point_Flag==1){p[0]=value;Point_Flag=0;}
04FE 91800079 LDS R24,_Point_Flag
0500 3081 CPI R24,1
0501 F431 BNE 0x0508
0502 2FE4 MOV R30,R20
0503 2FF5 MOV R31,R21
0504 8360 STD Z+0,R22
0505 2422 CLR R2
0506 92200079 STS _Point_Flag,R2
(0476) if(Add_Flag==1) {Add_Flag=1;Sub_Flag=0;}
0508 9180007E LDS R24,_Add_Flag
050A 3081 CPI R24,1
050B F431 BNE 0x0512
050C E081 LDI R24,1
050D 9380007E STS _Add_Flag,R24
050F 2422 CLR R2
0510 9220007D STS _Sub_Flag,R2
(0477) if(Sub_Flag==1) {Sub_Flag=1;Add_Flag=0;}
0512 9180007D LDS R24,_Sub_Flag
0514 3081 CPI R24,1
0515 F431 BNE 0x051C
0516 E081 LDI R24,1
0517 9380007D STS _Sub_Flag,R24
0519 2422 CLR R2
051A 9220007E STS _Add_Flag,R2
(0478) if(Init_Flag==1) {Init_Flag=1;}
051C 9180007C LDS R24,_Init_Flag
051E 3081 CPI R24,1
051F F419 BNE 0x0523
0520 E081 LDI R24,1
0521 9380007C STS _Init_Flag,R24
(0479) if(Repair_Flag==1) {Repair_Card();Repair_Flag=0;}
0523 9180007B LDS R24,_Repair_Flag
0525 3081 CPI R24,1
0526 F421 BNE 0x052B
0527 DDA2 RCALL _Repair_Card
0528 2422 CLR R2
0529 9220007B STS _Repair_Flag,R2
(0480) if(Enter_Flag==1)
052B 9180007A LDS R24,_Enter_Flag
052D 3081 CPI R24,1
052E F511 BNE 0x0551
(0481) {if(Add_Flag==1) {Add_Card(p);Enter_Flag=0;Add_Flag=0;}
052F 9180007E LDS R24,_Add_Flag
0531 3081 CPI R24,1
0532 F441 BNE 0x053B
0533 2F04 MOV R16,R20
0534 2F15 MOV R17,R21
0535 DDA8 RCALL _Add_Card
0536 2422 CLR R2
0537 9220007A STS _Enter_Flag,R2
0539 9220007E STS _Add_Flag,R2
(0482) if(Sub_Flag==1) {Sub_Card(p);Enter_Flag=0;Sub_Flag=0;}
053B 9180007D LDS R24,_Sub_Flag
053D 3081 CPI R24,1
053E F441 BNE 0x0547
053F 2F04 MOV R16,R20
0540 2F15 MOV R17,R21
0541 DDF5 RCALL _Sub_Card
0542 2422 CLR R2
0543 9220007A STS _Enter_Flag,R2
0545 9220007D STS _Sub_Flag,R2
(0483) if(Init_Flag==1) {Initial_Card(p);Init_Flag=0;}}
0547 9180007C LDS R24,_Init_Flag
0549 3081 CPI R24,1
054A F431 BNE 0x0551
054B 2F04 MOV R16,R20
054C 2F15 MOV R17,R21
054D DD1D RCALL _Initial_Card
054E 2422 CLR R2
054F 9220007C STS _Init_Flag,R2
(0484) }
0551 D0A7 RCALL pop_gset2
0552 9508 RET
_TIMER1_INT:
temp --> Y+0
i --> R20
0553 D0CB RCALL push_lset
0554 D0AA RCALL push_gset1
0555 9725 SBIW R28,5
(0485)
(0486) //***************中断处理********************//
(0487) //**********定时器2:16ms中断显示一次*******//
(0488) #pragma interrupt_handler TIMER1_INT:9
(0489) void TIMER1_INT(void)
(0490) {uchar temp[5],i;
(0491) for(i=0;i<5;i++)
0556 2744 CLR R20
0557 C00F RJMP 0x0567
(0492) temp[i]=ICcontent[9+i];
0558 E88F LDI R24,0x8F
0559 E090 LDI R25,0
055A 2FE4 MOV R30,R20
055B 27FF CLR R31
055C 0FE8 ADD R30,R24
055D 1FF9 ADC R31,R25
055E 8020 LDD R2,Z+0
055F 2F8C MOV R24,R28
0560 2F9D MOV R25,R29
0561 2FE4 MOV R30,R20
0562 27FF CLR R31
0563 0FE8 ADD R30,R24
0564 1FF9 ADC R31,R25
0565 8220 STD Z+0,R2
0566 9543 INC R20
0567 3045 CPI R20,5
0568 F378 BCS 0x0558
(0493) if(IC_Flag==0) Display(EEEEE);
0569 90200080 LDS R2,_IC_Flag
056B 2022 TST R2
056C F419 BNE 0x0570
056D E60E LDI R16,0x6E
056E E010 LDI R17,0
056F DE73 RCALL _Display
(0494) if(IC_Flag==1) Display(FFFFF);
0570 91800080 LDS R24,_IC_Flag
0572 3081 CPI R24,1
0573 F419 BNE 0x0577
0574 E703 LDI R16,0x73
0575 E010 LDI R17,0
0576 DE6C RCALL _Display
(0495) if(IC_Flag==3)
0577 91800080 LDS R24,_IC_Flag
0579 3083 CPI R24,3
057A F499 BNE 0x058E
(0496) {if(Key_Flag==1)//显示此次操作金额;
057B 91800078 LDS R24,_Key_Flag
057D 3081 CPI R24,1
057E F449 BNE 0x0588
(0497) {Money[1]|=0x80;//显示时加上小数点;
057F 91800082 LDS R24,_Money+1
0581 6880 ORI R24,0x80
0582 93800082 STS _Money+1,R24
(0498) Display(Money);}
0584 E801 LDI R16,0x81
0585 E010 LDI R17,0
0586 DE5C RCALL _Display
0587 C006 RJMP 0x058E
(0499) else //显示卡内余额;
(0500) {temp[4]|=0x80;
0588 818C LDD R24,Y+4
0589 6880 ORI R24,0x80
058A 838C STD Y+4,R24
(0501) Display(temp);}
058B 2F0C MOV R16,R28
058C 2F1D MOV R17,R29
058D DE55 RCALL _Display
(0502) }
(0503) }
058E 9625 ADIW R28,5
058F D072 RCALL pop_gset1
0590 D0A5 RCALL pop_lset
0591 9518 RETI
(0504)
(0505) //*************系统初始化*************//
(0506) void Initial_System(void)
(0507) {//系统初始化
(0508) //SPL=0x5f;//AT90S8535的堆栈指针指向最高RAM地址;
(0509) //SPH=0x02;
(0510) //IO口初始化;
(0511) DDRA=0xff; //A口输出高电平
_Initial_System:
0592 EF8F LDI R24,0xFF
0593 BB8A OUT 0x1A,R24
(0512) PORTA=0xff;
0594 BB8B OUT 0x1B,R24
(0513) DDRB=0xff; //B口输出低电平
0595 BB87 OUT 0x17,R24
(0514) PORTB=0x00;
0596 2422 CLR R2
0597 BA28 OUT 0x18,R2
(0515) DDRC=0x0f; //C口高四位输入(不带上拉电阻)低四位输出0
0598 E08F LDI R24,0xF
0599 BB84 OUT 0x14,R24
(0516) PORTC=0xf0;
059A EF80 LDI R24,0xF0
059B BB85 OUT 0x15,R24
(0517) DDRD=0xff; //D口输出低电平
059C EF8F LDI R24,0xFF
059D BB81 OUT 0x11,R24
(0518) PORTD=0x00;
059E BA22 OUT 0x12,R2
(0519) //中断系统初始化(定时器1中断)
(0520) SREG=SREG|0x80; //I(SREG^7)全局中断使能置位
059F 9478 BSET 7
(0521) TIMSK=TIMSK|0x40;//TOIE1(TIMSK^2)T/C1溢出中断使能置位
05A0 B789 IN R24,0x39
05A1 6480 ORI R24,0x40
05A2 BF89 OUT 0x39,R24
(0522) TIFR=TIFR|0x40;//TOV1(TIFR^2)T/C1溢出中断标志位写"1"清0
05A3 B788 IN R24,0x38
05A4 6480 ORI R24,0x40
05A5 BF88 OUT 0x38,R24
(0523) //定时器初始化
(0524) TCCR1B=TCCR1B|0x20;//定时器时钟分频=CLK/8 (1uS计数)
05A6 B58E IN R24,0x2E
05A7 6280 ORI R24,0x20
05A8 BD8E OUT 0x2E,R24
(0525) TCNT1H=0xc1;//需要计数16000=0x3E80次,
05A9 EC81 LDI R24,0xC1
05AA BD8D OUT 0x2D,R24
(0526) TCNT1L=0x7f;//计数初值0xff-0x3e80=0xc17f;
05AB E78F LDI R24,0x7F
05AC BD8C OUT 0x2C,R24
(0527) //显示系统初始化
(0528) IC_Flag=0;//如果IC卡没有上电,则显示的是8.8.8.8.,否则显示IC卡的内容
05AD 92200080 STS _IC_Flag,R2
(0529) }
05AF 9508 RET
(0530)
(0531) void main(void)
(0532) {uchar i,j;
(0533) Initial_System();
_main:
j --> Y+1
i --> R20
05B0 DFE1 RCALL _Initial_System
05B1 C041 RJMP 0x05F3
(0534) while(IC_Flag==1)
(0535) {DelayMs(5);
05B2 E005 LDI R16,5
05B3 E010 LDI R17,0
05B4 DAB5 RCALL _DelayMs
(0536) ResetIC(ICcode);
05B5 E904 LDI R16,0x94
05B6 E010 LDI R17,0
05B7 DB06 RCALL _ResetIC
(0537) i=Read_Card(ICcontent);
05B8 E806 LDI R16,0x86
05B9 E010 LDI R17,0
05BA DC6C RCALL _Read_Card
05BB 2F40 MOV R20,R16
(0538) if(i==0) {IC_Flag=0; Buzzle_Password();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -