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

📄 sle4442.s

📁 基于AVR单片机实现了食堂IC卡售饭机系统
💻 S
📖 第 1 页 / 共 4 页
字号:
	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 + -