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

📄 sle4442.s

📁 基于AVR单片机实现了食堂IC卡售饭机系统
💻 S
📖 第 1 页 / 共 4 页
字号:
	rcall _WriteMainMemory
L128:
	.dbline 325
	inc R10
L130:
	.dbline 325
	mov R24,R10
	cpi R24,5
	brlo L127
	.dbline 327
;   WriteMainMemory(36+i,p[i]);//从32+i地址开始写5字节帐号;
;   for(i=0;i<5;i++)
	clr R10
	rjmp L134
L131:
	.dbline 328
	clr R18
	mov R16,R10
	subi R16,215    ; addi 41
	rcall _WriteMainMemory
L132:
	.dbline 327
	inc R10
L134:
	.dbline 327
	mov R24,R10
	cpi R24,5
	brlo L131
	.dbline 329
;   WriteMainMemory(41+i,0);//从32+i地址开始写5字节初始化金额0000.0
;   j=Read_Card(tp);
	mov R16,R28
	mov R17,R29
	rcall _Read_Card
	mov R20,R16
	.dbline 330
;   if(j==3)
	cpi R16,3
	brne L135
	.dbline 331
;    {for(i=0;i<10;i++)
	.dbline 331
	clr R10
	rjmp L140
L137:
	.dbline 332
;      if(p[i]==tp[i+4]) temp=temp+1;
	mov R24,R28
	mov R25,R29
	adiw R24,4
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	mov R30,R10
	clr R31
	add R30,R12
	adc R31,R13
	ldd R3,z+0
	cp R3,R2
	brne L141
	.dbline 332
	inc R22
L141:
L138:
	.dbline 331
	inc R10
L140:
	.dbline 331
	mov R24,R10
	cpi R24,10
	brlo L137
	.dbline 333
;   }
L135:
	.dbline 334
;   if(temp==10)  return(3);
	cpi R22,10
	brne L144
	.dbline 334
	ldi R16,3
	rjmp L125
L144:
	.dbline 335
;   else return(2);
	ldi R16,2
	.dbline -2
L125:
	adiw R28,23
	rcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym l Psw 20 A[3:3]c
	.dbsym r j 20 c
	.dbsym l tp 0 A[20:20]c
	.dbsym r temp 22 c
	.dbsym r i 10 c
	.dbsym r p 12 pc
	.dbend
	.area lit(rom, con, rel)
L147:
	.byte 255,255
	.byte 255
	.area text(rom, con, rel)
	.dbfile J:\SLE4442-avr\sle4442.c
	.dbfunc e Repair_Card _Repair_Card fc
;           temp -> <dead>
;              j -> <dead>
;              i -> R20
;            Psw -> y+0
	.even
_Repair_Card::
	rcall push_gset1
	sbiw R28,3
	.dbline -1
	.dbline 344
; }
; 
; //***************卡修复函数********************//
; //说明:
; //返回值信息:
; //0:修复失败!
; //1:修复成功!												 
; uchar Repair_Card(void)
; {uchar Psw[3]={0xff,0xff,0xff};
	.dbline 344
	ldi R24,<L147
	ldi R25,>L147
	mov R30,R28
	mov R31,R29
	ldi R16,3
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	rcall asgncblk
	.dbline 346
;  uchar i,j,temp;
;  i=VerifyPassword(Psw);
	mov R16,R28
	mov R17,R29
	rcall _VerifyPassword
	mov R20,R16
	.dbline 347
;  return(i);
	.dbline -2
L146:
	adiw R28,3
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym l temp 1 c
	.dbsym l j 1 c
	.dbsym r i 20 c
	.dbsym l Psw 0 A[3:3]c
	.dbend
	.dbfunc e Add_Card _Add_Card fV
;              i -> R22
;           temp -> y+0
;              p -> R20,R21
	.even
_Add_Card::
	rcall push_gset2
	mov R20,R16
	mov R21,R17
	sbiw R28,14
	.dbline -1
	.dbline 352
; }
; 
; //********************加卡函数***********//
; void Add_Card(uchar *p)
; {uchar i;
	.dbline 354
;  uchar temp[14];
;  i=Read_Card(temp);
	mov R16,R28
	mov R17,R29
	rcall _Read_Card
	mov R22,R16
	.dbline 355
;  if(i==3)
	cpi R16,3
	breq X3
	rjmp L149
X3:
	.dbline 356
;  	{temp[13]=temp[13]+p[4];
	.dbline 356
	mov R30,R20
	mov R31,R21
	ldd R2,z+4
	ldd R3,y+13
	add R3,R2
	std y+13,R3
	.dbline 357
; 	 if(temp[13]>9) {temp[13]=temp[13]-10;temp[12]=temp[12]+1;}
	ldi R24,9
	cp R24,R3
	brsh L153
	.dbline 357
	.dbline 357
	mov R24,R3
	subi R24,10
	std y+13,R24
	.dbline 357
	ldd R24,y+12
	subi R24,255    ; addi 1
	std y+12,R24
	.dbline 357
L153:
	.dbline 358
; 	 temp[12]=temp[12]+p[3];
	mov R30,R20
	mov R31,R21
	ldd R2,z+3
	ldd R3,y+12
	add R3,R2
	std y+12,R3
	.dbline 359
; 	 if(temp[12]>9) {temp[12]=temp[12]-10;temp[11]=temp[11]+1;}
	ldi R24,9
	cp R24,R3
	brsh L162
	.dbline 359
	.dbline 359
	mov R24,R3
	subi R24,10
	std y+12,R24
	.dbline 359
	ldd R24,y+11
	subi R24,255    ; addi 1
	std y+11,R24
	.dbline 359
L162:
	.dbline 360
; 	 temp[11]=temp[11]+p[2];
	mov R30,R20
	mov R31,R21
	ldd R2,z+2
	ldd R3,y+11
	add R3,R2
	std y+11,R3
	.dbline 361
; 	 if(temp[11]>9) {temp[11]=temp[11]-10;temp[10]=temp[10]+1;}
	ldi R24,9
	cp R24,R3
	brsh L171
	.dbline 361
	.dbline 361
	mov R24,R3
	subi R24,10
	std y+11,R24
	.dbline 361
	ldd R24,y+10
	subi R24,255    ; addi 1
	std y+10,R24
	.dbline 361
L171:
	.dbline 362
; 	 temp[10]=temp[10]+p[1];
	mov R30,R20
	mov R31,R21
	ldd R2,z+1
	ldd R3,y+10
	add R3,R2
	std y+10,R3
	.dbline 363
; 	 if(temp[10]>9) {temp[10]=temp[10]-10;temp[9]=temp[9]+1;}
	ldi R24,9
	cp R24,R3
	brsh L180
	.dbline 363
	.dbline 363
	mov R24,R3
	subi R24,10
	std y+10,R24
	.dbline 363
	ldd R24,y+9
	subi R24,255    ; addi 1
	std y+9,R24
	.dbline 363
L180:
	.dbline 365
	ldd R18,y+9
	ldi R16,41
	rcall _WriteMainMemory
	.dbline 366
	ldd R18,y+10
	ldi R16,42
	rcall _WriteMainMemory
	.dbline 367
	ldd R18,y+11
	ldi R16,43
	rcall _WriteMainMemory
	.dbline 368
	ldd R18,y+12
	ldi R16,44
	rcall _WriteMainMemory
	.dbline 369
	ldd R18,y+13
	ldi R16,45
	rcall _WriteMainMemory
	.dbline 370
L149:
	.dbline -2
	.dbline 371
; 	 
; 	 WriteMainMemory(41,temp[9]);
; 	 WriteMainMemory(42,temp[10]);
; 	 WriteMainMemory(43,temp[11]);
; 	 WriteMainMemory(44,temp[12]);
;      WriteMainMemory(45,temp[13]);
; 	}
; }
L148:
	adiw R28,14
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 22 c
	.dbsym l temp 0 A[14:14]c
	.dbsym r p 20 pc
	.dbend
	.dbfunc e Sub_Card _Sub_Card fV
;              i -> R22
;         B_Flag -> R22
;           temp -> y+0
;              p -> R20,R21
	.even
_Sub_Card::
	rcall push_gset2
	mov R20,R16
	mov R21,R17
	sbiw R28,14
	.dbline -1
	.dbline 375
; 
; //********************减卡函数***********//
; void Sub_Card(uchar *p)
; {uchar i,B_Flag;
	.dbline 377
;  uchar temp[14];
;  i=Read_Card(temp);
	mov R16,R28
	mov R17,R29
	rcall _Read_Card
	mov R22,R16
	.dbline 378
;  if((i==3)&&(!(temp[9]<p[0])))
	cpi R16,3
	breq X4
	rjmp L193
X4:
	mov R30,R20
	mov R31,R21
	ldd R2,z+0
	ldd R3,y+9
	cp R3,R2
	brsh X5
	rjmp L193
X5:
	.dbline 379
;  	{if(temp[13]<p[4]) {temp[13]=temp[13]+10-p[4];B_Flag=1;}
	.dbline 379
	ldd R2,z+4
	ldd R3,y+13
	cp R3,R2
	brsh L196
	.dbline 379
	.dbline 379
	mov R30,R20
	mov R31,R21
	ldd R2,z+4
	mov R24,R3
	subi R24,246    ; addi 10
	sub R24,R2
	std y+13,R24
	.dbline 379
	ldi R22,1
	.dbline 379
	rjmp L197
L196:
	.dbline 380
; 	 else temp[13]=temp[13]-p[4];
	mov R30,R20
	mov R31,R21
	ldd R2,z+4
	ldd R3,y+13
	sub R3,R2
	std y+13,R3
L197:
	.dbline 382
; 	 //以上处理小数点右边的数字;
; 	 if(B_Flag==1)
	cpi R22,1
	brne L203
	.dbline 383
; 	  {if(temp[12]==0) {temp[12]=9;B_Flag=0;}
	.dbline 383
	ldd R2,y+12
	tst R2
	brne L205
	.dbline 383
	.dbline 383
	ldi R24,9
	std y+12,R24
	.dbline 383
	clr R22
	.dbline 383
	rjmp L206
L205:
	.dbline 384
	ldd R24,y+12
	subi R24,1
	std y+12,R24
L206:
	.dbline 384
; 	   else temp[12]=temp[12]-1;}
L203:
	.dbline 386
; 	 //以上对存在借位情况时对小数点左边第一位进行预处理;
; 	 if(temp[12]<p[3]) {temp[12]=temp[12]+10-p[3];B_Flag=1;}
	mov R30,R20
	mov R31,R21
	ldd R2,z+3
	ldd R3,y+12
	cp R3,R2
	brsh L211
	.dbline 386
	.dbline 386
	mov R30,R20
	mov R31,R21
	ldd R2,z+3
	mov R24,R3
	subi R24,246    ; addi 10
	sub R24,R2
	std y+12,R24
	.dbline 386
	ldi R22,1
	.dbline 386
	rjmp L212
L211:
	.dbline 387
; 	 else temp[12]=temp[12]-p[3];
	mov R30,R20
	mov R31,R21
	ldd R2,z+3
	ldd R3,y+12
	sub R3,R2
	std y+12,R3
L212:
	.dbline 389
; 	 //以上处理小数点小数点左边第一位数字; 
; 	  if(B_Flag==1)
	cpi R22,1
	brne L218
	.dbline 390
; 	  {if(temp[11]==0) {temp[11]=9;B_Flag=0;}
	.dbline 390
	ldd R2,y+11
	tst R2
	brne L220
	.dbline 390
	.dbline 390
	ldi R24,9
	std y+11,R24
	.dbline 390
	clr R22
	.dbline 390
	rjmp L221
L220:
	.dbline 391
	ldd R24,y+11
	subi R24,1
	std y+11,R24
L221:
	.dbline 391
; 	   else temp[11]=temp[11]-1;}
L218:
	.dbline 393
; 	 //以上对存在借位情况时对小数点左边第二位进行预处理;
; 	  if(temp[11]<p[2]) {temp[11]=temp[11]+10-p[2];B_Flag=1;}
	mov R30,R20
	mov R31,R21
	ldd R2,z+2
	ldd R3,y+11
	cp R3,R2
	brsh L226
	.dbline 393
	.dbline 393
	mov R30,R20
	mov R31,R21
	ldd R2,z+2
	mov R24,R3
	subi R24,246    ; addi 10
	sub R24,R2
	std y+11,R24
	.dbline 393
	ldi R22,1
	.dbline 393
	rjmp L227
L226:
	.dbline 394
; 	  else temp[11]=temp[11]-p[2];
	mov R30,R20
	mov R31,R21
	ldd R2,z+2
	ldd R3,y+11
	sub R3,R2
	std y+11,R3
L227:
	.dbline 396
; 	 //以上处理小数点小数点左边第二位数字; 
; 	  if(B_Flag==1)
	cpi R22,1
	brne L233
	.dbline 397
; 	  {if(temp[10]==0) {temp[10]=9;B_Flag=0;}
	.dbline 397
	ldd R2,y+10
	tst R2
	brne L235
	.dbline 397
	.dbline 397
	ldi R24,9
	std y+10,R24
	.dbline 397
	clr R22
	.dbline 397
	rjmp L236
L235:
	.dbline 398
	ldd R24,y+10
	subi R24,1
	std y+10,R24
L236:
	.dbline 398
; 	   else temp[10]=temp[10]-1;}
L233:
	.dbline 400
; 	 //以上对存在借位情况时对小数点左边第三位进行预处理;
; 	  if(temp[10]<p[1]) {temp[10]=temp[10]+10-p[1];B_Flag=1;}
	mov R30,R20
	mov R31,R21
	ldd R2,z+1
	ldd R3,y+10
	cp R3,R2
	brsh L241
	.dbline 400
	.dbline 400
	mov R30,R20
	mov R31,R21
	ldd R2,z+1
	mov R24,R3
	subi R24,246    ; addi 10
	sub R24,R2
	std y+10,R24
	.dbline 400
	ldi R22,1
	.dbline 400
	rjmp L242
L241:
	.dbline 401
; 	  else temp[10]=temp[10]-p[1];
	mov R30,R20
	mov R31,R21
	ldd R2,z+1
	ldd R3,y+10
	sub R3,R2
	std y+10,R3
L242:
	.dbline 403
; 	 //以上处理小数点小数点左边第三位数字;
; 	  if(B_Flag==1)
	cpi R22,1
	brne L248
	.dbline 404
; 	  {if(temp[9]==0) {temp[9]=0;B_Flag=0;}
	.dbline 404
	ldd R2,y+9
	tst R2
	brne L250
	.dbline 404
	.dbline 404
	clr R2
	std y+9,R2
	.dbline 404
	clr R22
	.dbline 404
	rjmp L251
L250:
	.dbline 405
	ldd R24,y+9
	subi R24,1
	std y+9,R24
L251:
	.dbline 405
; 	   else temp[9]=temp[9]-1;}
L248:
	.dbline 407
	mov R30,R20
	mov R31,R21
	ldd R2,z+0
	ldd R3,y+9
	sub R3,R2
	std y+9,R3
	.dbline 410
	mov R18,R3
	ldi R16,41
	rcall _WriteMainMemory
	.dbline 411
	ldd R18,y+10
	ldi R16,42
	rcall _WriteMainMemory
	.dbline 412
	ldd R18,y+11
	ldi R16,43
	rcall _WriteMainMemory
	.dbline 413
	ldd R18,y+12
	ldi R16,44
	rcall _WriteMainMemory
	.dbline 414
	ldd R18,y+13
	ldi R16,45
	rcall _WriteMainMemory
	.dbline 415
L193:
	.dbline -2
	.dbline 416
; 	 //以上对存在借位情况时对小数点左边第二位进行预处理;
; 	  temp[9]=temp[9]-p[0];
; 	 //以上处理小数点小数点左边第二位数字;
;      
; 	 WriteMainMemory(41,temp[9]);
; 	 WriteMainMemory(42,temp[10]);
; 	 WriteMainMemory(43,temp[11]);
; 	 WriteMainMemory(44,temp[12]);
;      WriteMainMemory(45,temp[13]);
; 	}
; }
L192:
	adiw R28,14
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 22 c
	.dbsym r B_Flag 22 c
	.dbsym l temp 0 A[14:14]c
	.dbsym r p 20 pc
	.dbend
	.dbfunc e Display _Display fV
;              i -> R20
;            sel -> R22
;              p -> R10,R11
	.even
_Display::
	rcall push_gset3
	mov R10,R16
	mov R11,R17
	.dbline -1
	.dbline 420
;  
; //*****************数码管显示函数********************//
; void Display(uchar *p)
; {uchar sel,i;
	.dbline 421
;  sel=0x01;
	ldi R22,1
	.dbline 422
;  for(i=0;i<6;i++)
	clr R20
	rjmp L267
L264:
	.dbline 423
	.dbline 423
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	ldd R30,z+0
	clr R31
	ldi R24,<_table
	ldi R25,>_table
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0x1b,R2
	.dbline 424
	out 0x18,R22
	.dbline 425
	ldi R16,2
	ldi R17,0
	rcall _DelayMs
	.dbline 426
	lsl R22
	.dbline 426
L265:
	.dbline 422
	inc R20
L267:
	.dbline 422
	cpi R20,6
	brlo L264
	.dbline -2
	.dbline 427
;    {PORTA=table[p[i]];
;     PORTB=sel;
; 	DelayMs(2);
; 	sel=sel<<1;}
; }
L263:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r sel 22 c
	.dbsym r p 10 pc
	.dbend
	.dbfunc e Key_Scan _Key_Scan fc
;         recode -> R20
;         sccode -> R22
	.even
_Key_Scan::
	rcall push_gset2
	.dbline -1
	.dbline 432
;  
; 
; //****************键盘扫描函数***********************//
; uchar Key_Scan(void)
; {uchar sccode,recode;
	.dbline 433
;  PORTC=0xf0;
	ldi R24,240
	out 0x15,R24
	.dbline 434
;  if((PINC&0xf0)!=0xf0)
	in R24,0x13
	andi R24,240
	cpi R24,240
	breq L269
	.dbline 435
;  	{DelayMs(10);
	.dbline 435
	ldi R16,10
	ldi R17,0
	rcall _DelayMs
	.dbline 436
; 	 if((PINC&0xf0)!=0xf0)
	in R24,0x13
	andi R24,240
	cpi R24,240
	breq L271
	.dbline 437
; 	   {sccode=0xfe;
	.dbline 437
	ldi R22,254
	rjmp L274
L273:
	.dbline 439
; 	    while(sccode&0x10!=0x00)
;          {PORTC=sccode; //对第一行键盘测试
	.dbline 439
	out 0x15,R22
	.dbline 440
; 		  if((PINC&0xf0)!=0xf0)
	in R24,0x13
	andi R24,240
	cpi R24,240
	breq L276
	.dbline 441
; 		   {recode=(PINC&0xf0)|0x0f;
	.dbline 441
	in R20,0x13
	andi R20,240
	ori R20,15
	.dbline 442
; 		    return((~sccode)+(~recode));}
	mov R2,R20
	com R2
	mov R16,R22
	com R16
	add R16,R2
	rjmp L268
L276:
	.dbline 444
	lsl R22
	ori R22,1
	.dbline 445
L274:
	.dbline 438
	sbrc R22,0
	rjmp L273
	.dbline 446
; 		  else 
; 		   sccode=(sccode<<1)|0x01;
; 	     }
; 	   }
L271:
	.dbline 447
; 	 }
L269:
	.dbline 448
;  return(0x00);
	clr R16
	.dbline -2
L268:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r recode 20 c
	.dbsym r sccode 22 c
	.dbend
	.dbfunc e Key_Process _Key_Process fV
;          value -> R22
;           temp -> R22
;              p -> R20,R21
	.even
_Key_Process::
	rcall push_gset2
	mov R20,R16
	mov R21,R17
	.dbline -1
	.dbline 453
; }
; 		 
; //******************按键处理函数*******************//
; void Key_Process(uchar *p)
; {uchar temp,value;
	.dbline 454
;  temp=Key_Scan();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -