📄 sle4442.s
字号:
rcall _Key_Scan
mov R22,R16
.dbline 455
; switch(temp)
clr R23
cpi R22,33
ldi R30,0
cpc R23,R30
brne X7
rjmp L283
X7:
cpi R22,34
ldi R30,0
cpc R23,R30
brne X8
rjmp L286
X8:
cpi R22,36
ldi R30,0
cpc R23,R30
brne X9
rjmp L289
X9:
cpi R22,40
ldi R30,0
cpc R23,R30
brne X10
rjmp L292
X10:
ldi R24,40
ldi R25,0
cp R24,R22
cpc R25,R23
brlt L299
L298:
cpi R22,17
ldi R30,0
cpc R23,R30
brne X11
rjmp L282
X11:
cpi R22,18
ldi R30,0
cpc R23,R30
brne X12
rjmp L285
X12:
cpi R22,20
ldi R30,0
cpc R23,R30
brne X13
rjmp L288
X13:
cpi R22,24
ldi R30,0
cpc R23,R30
brne X14
rjmp L291
X14:
rjmp L279
L299:
cpi R22,65
ldi R30,0
cpc R23,R30
brne X15
rjmp L284
X15:
cpi R22,66
ldi R30,0
cpc R23,R30
brne X16
rjmp L287
X16:
cpi R22,68
ldi R30,0
cpc R23,R30
brne X17
rjmp L290
X17:
cpi R22,72
ldi R30,0
cpc R23,R30
brne X18
rjmp L295
X18:
cpi R22,65
ldi R30,0
cpc R23,R30
brge X19
rjmp L279
X19:
L300:
cpi R22,129
ldi R30,0
cpc R23,R30
brne X20
rjmp L296
X20:
cpi R22,130
ldi R30,0
cpc R23,R30
brne X21
rjmp L293
X21:
cpi R22,132
ldi R30,0
cpc R23,R30
brne X22
rjmp L294
X22:
cpi R22,136
ldi R30,0
cpc R23,R30
brne X23
rjmp L297
X23:
rjmp L279
X6:
.dbline 456
L282:
.dbline 456
; {case 0x11:value=9;Num_Flag=1;break;
ldi R22,9
.dbline 456
ldi R24,1
sts _Num_Flag,R24
.dbline 456
rjmp L280
L283:
.dbline 457
; case 0x21:value=8;Num_Flag=1;break;
ldi R22,8
.dbline 457
ldi R24,1
sts _Num_Flag,R24
.dbline 457
rjmp L280
L284:
.dbline 458
; case 0x41:value=7;Num_Flag=1;break;
ldi R22,7
.dbline 458
ldi R24,1
sts _Num_Flag,R24
.dbline 458
rjmp L280
L285:
.dbline 459
; case 0x12:value=6;Num_Flag=1;break;
ldi R22,6
.dbline 459
ldi R24,1
sts _Num_Flag,R24
.dbline 459
rjmp L280
L286:
.dbline 460
; case 0x22:value=5;Num_Flag=1;break;
ldi R22,5
.dbline 460
ldi R24,1
sts _Num_Flag,R24
.dbline 460
rjmp L280
L287:
.dbline 461
; case 0x42:value=4;Num_Flag=1;break;
ldi R22,4
.dbline 461
ldi R24,1
sts _Num_Flag,R24
.dbline 461
rjmp L280
L288:
.dbline 462
; case 0x14:value=3;Num_Flag=1;break;
ldi R22,3
.dbline 462
ldi R24,1
sts _Num_Flag,R24
.dbline 462
rjmp L280
L289:
.dbline 463
; case 0x24:value=2;Num_Flag=1;break;
ldi R22,2
.dbline 463
ldi R24,1
sts _Num_Flag,R24
.dbline 463
rjmp L280
L290:
.dbline 464
; case 0x44:value=1;Num_Flag=1;break;
ldi R22,1
.dbline 464
ldi R24,1
sts _Num_Flag,R24
.dbline 464
rjmp L280
L291:
.dbline 465
; case 0x18:value=0;Num_Flag=1;break;
clr R22
.dbline 465
ldi R24,1
sts _Num_Flag,R24
.dbline 465
rjmp L280
L292:
.dbline 466
; case 0x28:Point_Flag=1;break;
ldi R24,1
sts _Point_Flag,R24
.dbline 466
rjmp L280
L293:
.dbline 467
; case 0x82:Add_Flag=1;Sub_Flag=0;Key_Flag=1;break;
ldi R24,1
sts _Add_Flag,R24
.dbline 467
clr R2
sts _Sub_Flag,R2
.dbline 467
sts _Key_Flag,R24
.dbline 467
rjmp L280
L294:
.dbline 468
; case 0x84:Sub_Flag=1;Add_Flag=0;Key_Flag=1;break;
ldi R24,1
sts _Sub_Flag,R24
.dbline 468
clr R2
sts _Add_Flag,R2
.dbline 468
sts _Key_Flag,R24
.dbline 468
rjmp L280
L295:
.dbline 469
; case 0x48:Repair_Flag=1;Key_Flag=1;break;
ldi R24,1
sts _Repair_Flag,R24
.dbline 469
sts _Key_Flag,R24
.dbline 469
rjmp L280
L296:
.dbline 470
; case 0x81:Init_Flag=1;Key_Flag=1;break;
ldi R24,1
sts _Init_Flag,R24
.dbline 470
sts _Key_Flag,R24
.dbline 470
rjmp L280
L297:
.dbline 471
; case 0x88:Enter_Flag=1;Key_Flag=0;break;
ldi R24,1
sts _Enter_Flag,R24
.dbline 471
clr R2
sts _Key_Flag,R2
.dbline 471
rjmp L280
L279:
.dbline 472
; default: NOP();
nop
.dbline 473
; }
L280:
.dbline 474
; if(Num_Flag==1){p[4]=p[3];p[3]=p[2];p[2]=p[1];p[1]=value;Num_Flag=0;}
lds R24,_Num_Flag
cpi R24,1
brne L301
.dbline 474
.dbline 474
mov R30,R20
mov R31,R21
ldd R2,z+3
mov R30,R20
mov R31,R21
std z+4,R2
.dbline 474
mov R30,R20
mov R31,R21
ldd R2,z+2
mov R30,R20
mov R31,R21
std z+3,R2
.dbline 474
mov R30,R20
mov R31,R21
ldd R2,z+1
mov R30,R20
mov R31,R21
std z+2,R2
.dbline 474
mov R30,R20
mov R31,R21
std z+1,R22
.dbline 474
clr R2
sts _Num_Flag,R2
.dbline 474
L301:
.dbline 475
; if(Point_Flag==1){p[0]=value;Point_Flag=0;}
lds R24,_Point_Flag
cpi R24,1
brne L303
.dbline 475
.dbline 475
mov R30,R20
mov R31,R21
std z+0,R22
.dbline 475
clr R2
sts _Point_Flag,R2
.dbline 475
L303:
.dbline 476
; if(Add_Flag==1) {Add_Flag=1;Sub_Flag=0;}
lds R24,_Add_Flag
cpi R24,1
brne L305
.dbline 476
.dbline 476
ldi R24,1
sts _Add_Flag,R24
.dbline 476
clr R2
sts _Sub_Flag,R2
.dbline 476
L305:
.dbline 477
; if(Sub_Flag==1) {Sub_Flag=1;Add_Flag=0;}
lds R24,_Sub_Flag
cpi R24,1
brne L307
.dbline 477
.dbline 477
ldi R24,1
sts _Sub_Flag,R24
.dbline 477
clr R2
sts _Add_Flag,R2
.dbline 477
L307:
.dbline 478
; if(Init_Flag==1) {Init_Flag=1;}
lds R24,_Init_Flag
cpi R24,1
brne L309
.dbline 478
.dbline 478
ldi R24,1
sts _Init_Flag,R24
.dbline 478
L309:
.dbline 479
; if(Repair_Flag==1) {Repair_Card();Repair_Flag=0;}
lds R24,_Repair_Flag
cpi R24,1
brne L311
.dbline 479
.dbline 479
rcall _Repair_Card
.dbline 479
clr R2
sts _Repair_Flag,R2
.dbline 479
L311:
.dbline 480
; if(Enter_Flag==1)
lds R24,_Enter_Flag
cpi R24,1
brne L313
.dbline 481
; {if(Add_Flag==1) {Add_Card(p);Enter_Flag=0;Add_Flag=0;}
.dbline 481
lds R24,_Add_Flag
cpi R24,1
brne L315
.dbline 481
.dbline 481
mov R16,R20
mov R17,R21
rcall _Add_Card
.dbline 481
clr R2
sts _Enter_Flag,R2
.dbline 481
sts _Add_Flag,R2
.dbline 481
L315:
.dbline 482
; if(Sub_Flag==1) {Sub_Card(p);Enter_Flag=0;Sub_Flag=0;}
lds R24,_Sub_Flag
cpi R24,1
brne L317
.dbline 482
.dbline 482
mov R16,R20
mov R17,R21
rcall _Sub_Card
.dbline 482
clr R2
sts _Enter_Flag,R2
.dbline 482
sts _Sub_Flag,R2
.dbline 482
L317:
.dbline 483
lds R24,_Init_Flag
cpi R24,1
brne L319
.dbline 483
.dbline 483
mov R16,R20
mov R17,R21
rcall _Initial_Card
.dbline 483
clr R2
sts _Init_Flag,R2
.dbline 483
L319:
.dbline 483
L313:
.dbline -2
.dbline 484
; if(Init_Flag==1) {Initial_Card(p);Init_Flag=0;}}
; }
L278:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r value 22 c
.dbsym r temp 22 c
.dbsym r p 20 pc
.dbend
.area vector(rom, abs)
.org 16
rjmp _TIMER1_INT
.area text(rom, con, rel)
.dbfile J:\SLE4442-avr\sle4442.c
.dbfunc e TIMER1_INT _TIMER1_INT fV
; temp -> y+0
; i -> R20
.even
_TIMER1_INT::
rcall push_lset
rcall push_gset1
sbiw R28,5
.dbline -1
.dbline 490
;
; //***************中断处理********************//
; //**********定时器2:16ms中断显示一次*******//
; #pragma interrupt_handler TIMER1_INT:9
; void TIMER1_INT(void)
; {uchar temp[5],i;
.dbline 491
; for(i=0;i<5;i++)
clr R20
rjmp L325
L322:
.dbline 492
ldi R24,<_ICcontent+9
ldi R25,>_ICcontent+9
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
mov R24,R28
mov R25,R29
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R2
L323:
.dbline 491
inc R20
L325:
.dbline 491
cpi R20,5
brlo L322
.dbline 493
; temp[i]=ICcontent[9+i];
; if(IC_Flag==0) Display(EEEEE);
lds R2,_IC_Flag
tst R2
brne L327
.dbline 493
ldi R16,<_EEEEE
ldi R17,>_EEEEE
rcall _Display
L327:
.dbline 494
; if(IC_Flag==1) Display(FFFFF);
lds R24,_IC_Flag
cpi R24,1
brne L329
.dbline 494
ldi R16,<_FFFFF
ldi R17,>_FFFFF
rcall _Display
L329:
.dbline 495
; if(IC_Flag==3)
lds R24,_IC_Flag
cpi R24,3
brne L331
.dbline 496
; {if(Key_Flag==1)//显示此次操作金额;
.dbline 496
lds R24,_Key_Flag
cpi R24,1
brne L333
.dbline 497
; {Money[1]|=0x80;//显示时加上小数点;
.dbline 497
lds R24,_Money+1
ori R24,128
sts _Money+1,R24
.dbline 498
; Display(Money);}
ldi R16,<_Money
ldi R17,>_Money
rcall _Display
.dbline 498
rjmp L334
L333:
.dbline 500
; else //显示卡内余额;
; {temp[4]|=0x80;
.dbline 500
ldd R24,y+4
ori R24,128
std y+4,R24
.dbline 501
; Display(temp);}
mov R16,R28
mov R17,R29
rcall _Display
.dbline 501
L334:
.dbline 502
L331:
.dbline -2
.dbline 503
; }
; }
L321:
adiw R28,5
rcall pop_gset1
rcall pop_lset
.dbline 0 ; func end
reti
.dbsym l temp 0 A[5:5]c
.dbsym r i 20 c
.dbend
.dbfunc e Initial_System _Initial_System fV
.even
_Initial_System::
.dbline -1
.dbline 507
;
; //*************系统初始化*************//
; void Initial_System(void)
; {//系统初始化
.dbline 511
; //SPL=0x5f;//AT90S8535的堆栈指针指向最高RAM地址;
; //SPH=0x02;
; //IO口初始化;
; DDRA=0xff; //A口输出高电平
ldi R24,255
out 0x1a,R24
.dbline 512
; PORTA=0xff;
out 0x1b,R24
.dbline 513
; DDRB=0xff; //B口输出低电平
out 0x17,R24
.dbline 514
; PORTB=0x00;
clr R2
out 0x18,R2
.dbline 515
; DDRC=0x0f; //C口高四位输入(不带上拉电阻)低四位输出0
ldi R24,15
out 0x14,R24
.dbline 516
; PORTC=0xf0;
ldi R24,240
out 0x15,R24
.dbline 517
; DDRD=0xff; //D口输出低电平
ldi R24,255
out 0x11,R24
.dbline 518
; PORTD=0x00;
out 0x12,R2
.dbline 520
; //中断系统初始化(定时器1中断)
; SREG=SREG|0x80; //I(SREG^7)全局中断使能置位
bset 7
.dbline 521
; TIMSK=TIMSK|0x40;//TOIE1(TIMSK^2)T/C1溢出中断使能置位
in R24,0x39
ori R24,64
out 0x39,R24
.dbline 522
; TIFR=TIFR|0x40;//TOV1(TIFR^2)T/C1溢出中断标志位写"1"清0
in R24,0x38
ori R24,64
out 0x38,R24
.dbline 524
; //定时器初始化
; TCCR1B=TCCR1B|0x20;//定时器时钟分频=CLK/8 (1uS计数)
in R24,0x2e
ori R24,32
out 0x2e,R24
.dbline 525
; TCNT1H=0xc1;//需要计数16000=0x3E80次,
ldi R24,193
out 0x2d,R24
.dbline 526
; TCNT1L=0x7f;//计数初值0xff-0x3e80=0xc17f;
ldi R24,127
out 0x2c,R24
.dbline 528
; //显示系统初始化
; IC_Flag=0;//如果IC卡没有上电,则显示的是8.8.8.8.,否则显示IC卡的内容
sts _IC_Flag,R2
.dbline -2
.dbline 529
; }
L337:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; j -> <dead>
; i -> R20
.even
_main::
.dbline -1
.dbline 532
;
; void main(void)
; {uchar i,j;
.dbline 533
; Initial_System();
rcall _Initial_System
rjmp L340
L339:
.dbline 535
; while(IC_Flag==1)
; {DelayMs(5);
.dbline 535
ldi R16,5
ldi R17,0
rcall _DelayMs
.dbline 536
; ResetIC(ICcode);
ldi R16,<_ICcode
ldi R17,>_ICcode
rcall _ResetIC
.dbline 537
; i=Read_Card(ICcontent);
ldi R16,<_ICcontent
ldi R17,>_ICcontent
rcall _Read_Card
mov R20,R16
.dbline 538
; if(i==0) {IC_Flag=0; Buzzle_Password();} //显示EEEE,提示卡坏
tst R16
brne L342
.dbline 538
.dbline 538
clr R2
sts _IC_Flag,R2
.dbline 538
rcall _Buzzle_Password
.dbline 538
L342:
.dbline 539
; if((i==1)|(i==2)) {IC_Flag=1;Buzzle_Card();} //显示FFFF,提示非法卡
cpi R20,1
brne L346
ldi R24,1
ldi R25,0
mov R10,R24
mov R11,R25
rjmp L347
L346:
clr R10
clr R11
L347:
cpi R20,2
brne L348
ldi R22,1
ldi R23,0
rjmp L349
L348:
clr R22
clr R23
L349:
mov R2,R10
mov R3,R11
or R2,R22
or R3,R23
tst R2
brne X24
tst R3
breq L344
X24:
.dbline 539
.dbline 539
ldi R24,1
sts _IC_Flag,R24
.dbline 539
rcall _Buzzle_Card
.dbline 539
L344:
.dbline 540
; if(i==3)
cpi R20,3
brne L350
.dbline 541
; {if(ICcontent[12]<5)
.dbline 541
lds R24,_ICcontent+12
cpi R24,5
brsh L352
.dbline 542
; {IC_Flag=3;Buzzle_Money();}
.dbline 542
ldi R24,3
sts _IC_Flag,R24
.dbline 542
rcall _Buzzle_Money
.dbline 542
rjmp L353
L352:
.dbline 544
L355:
.dbline 544
; else
; {do Key_Process(Money);
ldi R16,<_Money
ldi R17,>_Money
rcall _Key_Process
L356:
.dbline 545
; while(Enter_Flag!=0);
lds R2,_Enter_Flag
tst R2
brne L355
.dbline 546
; Enter_Flag=0;}
clr R2
sts _Enter_Flag,R2
.dbline 546
L353:
.dbline 547
; }
L350:
.dbline 548
L340:
.dbline 534
lds R24,_IC_Flag
cpi R24,1
brne X25
rjmp L339
X25:
.dbline -2
.dbline 549
; }
; }
L338:
.dbline 0 ; func end
ret
.dbsym l j 1 c
.dbsym r i 20 c
.dbend
.area bss(ram, con, rel)
.dbfile J:\SLE4442-avr\sle4442.c
_Key_Flag::
.blkb 1
.dbsym e Key_Flag _Key_Flag c
_Point_Flag::
.blkb 1
.dbsym e Point_Flag _Point_Flag c
_Enter_Flag::
.blkb 1
.dbsym e Enter_Flag _Enter_Flag c
_Repair_Flag::
.blkb 1
.dbsym e Repair_Flag _Repair_Flag c
_Init_Flag::
.blkb 1
.dbsym e Init_Flag _Init_Flag c
_Sub_Flag::
.blkb 1
.dbsym e Sub_Flag _Sub_Flag c
_Add_Flag::
.blkb 1
.dbsym e Add_Flag _Add_Flag c
_Num_Flag::
.blkb 1
.dbsym e Num_Flag _Num_Flag c
_IC_Flag::
.blkb 1
.dbsym e IC_Flag _IC_Flag c
_Money::
.blkb 5
.dbsym e Money _Money A[5:5]c
_ICcontent::
.blkb 14
.dbsym e ICcontent _ICcontent A[14:14]c
_ICcode::
.blkb 4
.dbsym e ICcode _ICcode A[4:4]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -