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

📄 251.s

📁 卡车仪表的单片机程序
💻 S
📖 第 1 页 / 共 5 页
字号:
	.dbline 427
; 	 }
; 	 //invert
; 	 clockwise |= ClockwiseCmd&ClockwiseMotor;
	mov R24,R12
	andi R24,128
	or R22,R24
	.dbline 428
; 	 anticlockwise |= ClockwiseCmd&(~ClockwiseMotor);
	mov R24,R12
	andi R24,127
	or R20,R24
	.dbline 429
; 	 anticlockwise |= AnticlockwiseCmd&(ClockwiseMotor);
	mov R24,R10
	andi R24,128
	or R20,R24
	.dbline 430
; 	 clockwise |= AnticlockwiseCmd&(~ClockwiseMotor); 
	mov R24,R10
	andi R24,127
	or R22,R24
	.dbline 434
; 	 
; 	 //CLOCKWISE 
; 	   //set DAD1(PB7)
; 	   PORTB |= BIT(7);
	sbi 0x18,7
	.dbline 436
; 	   //set DAC1-8 through SPI
; 	   SPIOutput(clockwise);
	mov R16,R22
	rcall _SPIOutput
	.dbline 437
;  	   PORTB |= BIT(0);		 	//SET OUTCS
	sbi 0x18,0
	.dbline 438
; 	   _NOP();
	nop
	.dbline 439
; 	   PORTB &= ~BIT(0);		//CLEAR OUTCS
	cbi 0x18,0
	.dbline 441
; 	   //clear DAC1-8
; 	   SPIOutput(0);
	clr R16
	rcall _SPIOutput
	.dbline 442
; 	   PORTB |= BIT(0);		 	//SET OUTCS
	sbi 0x18,0
	.dbline 443
; 	   _NOP();
	nop
	.dbline 444
; 	   PORTB &= ~BIT(0);		//CLEAR OUTCS
	cbi 0x18,0
	.dbline 449
; 
; 	 
; 	 //ANTICLOCKWISE
; 	   //clear DAD1(PB7)
; 	   PORTB &= ~BIT(7);
	cbi 0x18,7
	.dbline 451
; 	   //set DAC1-8 through SPI
; 	   SPIOutput(anticlockwise);
	mov R16,R20
	rcall _SPIOutput
	.dbline 452
; 	   PORTB |= BIT(0);		 	//SET OUTCS
	sbi 0x18,0
	.dbline 453
; 	   _NOP();
	nop
	.dbline 454
; 	   PORTB &= ~BIT(0);		//CLEAR OUTCS	   
	cbi 0x18,0
	.dbline 456
; 	   //clear DAC1-8
; 	   SPIOutput(0);
	clr R16
	rcall _SPIOutput
L96:
	.dbline 457
L97:
	.dbline 457
; 	   while ( !(SPSR & BIT(7)) )	;	  	//wait		 
	sbis 0xe,7
	rjmp L96
	.dbline 458
; 	   PORTB |= BIT(0);		 	//SET OUTCS
	sbi 0x18,0
	.dbline 459
; 	   _NOP();
	nop
	.dbline 460
; 	   PORTB &= ~BIT(0);		//CLEAR OUTCS	   
	cbi 0x18,0
	.dbline 463
; 
; 	 //BLOCK
; 	 MotorBlocked = 1;
	ldi R24,1
	sts _MotorBlocked,R24
	.dbline -2
L75:
	rcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r anticlockwise 20 c
	.dbsym r clockwise 22 c
	.dbsym r AnticlockwiseCmd 10 c
	.dbsym r ClockwiseCmd 12 c
	.dbsym r i 14 c
	.dbend
	.dbfunc e Parallel _Parallel fV
	.even
_Parallel::
	.dbline -1
	.dbline 468
; 	 
; }
; 
; void Parallel(void)
; {
	.dbline 469
;   ParallelOutput();
	rcall _ParallelOutput
	.dbline 470
;   KeyMileageCurrentClear();//注意,小计清零的输入只能放在这里!!!
	rcall _KeyMileageCurrentClear
	.dbline 471
;   ParallelBlocked = 1;
	ldi R24,1
	sts _ParallelBlocked,R24
	.dbline -2
L99:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ParallelOutput _ParallelOutput fV
	.even
_ParallelOutput::
	.dbline -1
	.dbline 476
; }
; 
; 
; void ParallelOutput(void)
; {
	.dbline 477
;   SPIOutput( *((char*)&ParallelOutputCmd+1) );
	lds R16,_ParallelOutputCmd+1
	rcall _SPIOutput
	.dbline 478
;   SPIOutput( *((char*)&ParallelOutputCmd+0) );
	ldi R30,<_ParallelOutputCmd
	ldi R31,>_ParallelOutputCmd
	ldd R16,z+0
	rcall _SPIOutput
	.dbline 479
;   PORTD |= BIT(7);
	sbi 0x12,7
	.dbline 480
;   _NOP();
	nop
	.dbline 481
;   PORTD &= ~BIT(7);   
	cbi 0x12,7
	.dbline -2
L100:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCDDecoding _LCDDecoding fV
;          temp2 -> y+4
;          temp1 -> y+0
;              i -> R10
	.even
_LCDDecoding::
	rcall push_gset3
	sbiw R28,8
	.dbline -1
	.dbline 485
; }
; 
; void LCDDecoding(void)//mileage,MileageCurrent --> LCDContent
; {
	.dbline 488
;  unsigned long temp1,temp2;
;  uchar i;
;  temp1 = mileage/10;
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_mileage+2
	lds R5,_mileage+2+1
	lds R2,_mileage
	lds R3,_mileage+1
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R2
	movw R18,R4
	rcall div32u
	movw R30,R28
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 490
;  //累计
;  for(i=0;i<=6;i++)
	clr R10
	rjmp L106
L103:
	.dbline 491
;  {
	.dbline 492
;   temp2 = temp1/10;
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R2
	movw R18,R4
	rcall div32u
	movw R30,R28
	std z+4,R16
	std z+5,R17
	std z+6,R18
	std z+7,R19
	.dbline 493
;   LCDContent[i] = temp1-temp2*10;
	movw R30,R28
	ldd R2,z+4
	ldd R3,z+5
	ldd R4,z+6
	ldd R5,z+7
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	rcall empy32u
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	sub R2,R16
	sbc R3,R17
	sbc R4,R18
	sbc R5,R19
	ldi R24,<_LCDContent
	ldi R25,>_LCDContent
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 494
;   temp1 = temp2;
	movw R30,R28
	ldd R2,z+4
	ldd R3,z+5
	ldd R4,z+6
	ldd R5,z+7
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 495
;   if(temp1 == 0 && i>=0) //保证1位不消隐
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brne L107
	mov R24,R10
	cpi R24,0
	brlo L107
	.dbline 496
;     break;
	rjmp L105
L107:
	.dbline 497
L104:
	.dbline 490
	inc R10
L106:
	.dbline 490
	ldi R24,6
	cp R24,R10
	brlo X2
	rjmp L103
X2:
L105:
	.dbline 498
;  }
;  for(i++;i<=6;i++)
	inc R10
	rjmp L112
L109:
	.dbline 499
	ldi R24,<_LCDContent
	ldi R25,>_LCDContent
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,10
	std z+0,R24
L110:
	.dbline 498
	inc R10
L112:
	.dbline 498
	ldi R24,6
	cp R24,R10
	brsh L109
	.dbline 501
;   LCDContent[i] = 10;//Hide
;  //小计
;  temp1 = MileageCurrent;
	lds R4,_MileageCurrent+2
	lds R5,_MileageCurrent+2+1
	lds R2,_MileageCurrent
	lds R3,_MileageCurrent+1
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 502
;  for(i=0;i<=3;i++)
	clr R10
	rjmp L116
L113:
	.dbline 503
;  {
	.dbline 504
;   temp2 = temp1/10;
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R2
	movw R18,R4
	rcall div32u
	movw R30,R28
	std z+4,R16
	std z+5,R17
	std z+6,R18
	std z+7,R19
	.dbline 505
;   LCDContent[12-i] = temp1-temp2*10;
	movw R30,R28
	ldd R2,z+4
	ldd R3,z+5
	ldd R4,z+6
	ldd R5,z+7
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	rcall empy32u
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	sub R2,R16
	sbc R3,R17
	sbc R4,R18
	sbc R5,R19
	mov R3,R10
	clr R4
	ldi R30,12
	ldi R31,0
	sub R30,R3
	sbc R31,R4
	ldi R24,<_LCDContent
	ldi R25,>_LCDContent
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 506
;   temp1 = temp2;
	movw R30,R28
	ldd R2,z+4
	ldd R3,z+5
	ldd R4,z+6
	ldd R5,z+7
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 507
;   if(temp1 == 0 && i>=1) //保证2位不消隐
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brne L117
	mov R24,R10
	cpi R24,1
	brlo L117
	.dbline 508
;     break;
	rjmp L115
L117:
	.dbline 509
L114:
	.dbline 502
	inc R10
L116:
	.dbline 502
	ldi R24,3
	cp R24,R10
	brlo X3
	rjmp L113
X3:
L115:
	.dbline 510
;  }
;  for(i++;i<=3;i++)
	inc R10
	rjmp L122
L119:
	.dbline 511
	mov R2,R10
	clr R3
	ldi R30,12
	ldi R31,0
	sub R30,R2
	sbc R31,R3
	ldi R24,<_LCDContent
	ldi R25,>_LCDContent
	add R30,R24
	adc R31,R25
	ldi R24,10
	std z+0,R24
L120:
	.dbline 510
	inc R10
L122:
	.dbline 510
	ldi R24,3
	cp R24,R10
	brsh L119
	.dbline -2
L102:
	adiw R28,8
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym l temp2 4 l
	.dbsym l temp1 0 l
	.dbsym r i 10 c
	.dbend
	.dbfunc e MileageSaving _MileageSaving fV
	.even
_MileageSaving::
	.dbline -1
	.dbline 516
;   LCDContent[12-i] = 10;//Hide
;  
;  } 
; 
; void MileageSaving()
; {
	.dbline 517
;   EEPROM_write( 0x00, *((char*)&mileage+0) );
	ldi R30,<_mileage
	ldi R31,>_mileage
	ldd R18,z+0
	clr R16
	clr R17
	rcall _EEPROM_write
	.dbline 518
;   EEPROM_write( 0x01, *((char*)&mileage+1) );
	lds R18,_mileage+1
	ldi R16,1
	ldi R17,0
	rcall _EEPROM_write
	.dbline 519
;   EEPROM_write( 0x02, *((char*)&mileage+2) );
	lds R18,_mileage+2
	ldi R16,2
	ldi R17,0
	rcall _EEPROM_write
	.dbline 520
;   EEPROM_write( 0x03, *((char*)&mileage+3) );
	lds R18,_mileage+3
	ldi R16,3
	ldi R17,0
	rcall _EEPROM_write
	.dbline 521
;   EEPROM_write( 0x04, *((char*)&MileageCurrent+0) );
	ldi R30,<_MileageCurrent
	ldi R31,>_MileageCurrent
	ldd R18,z+0
	ldi R16,4
	ldi R17,0
	rcall _EEPROM_write
	.dbline 522
;   EEPROM_write( 0x05, *((char*)&MileageCurrent+1) );
	lds R18,_MileageCurrent+1
	ldi R16,5
	ldi R17,0
	rcall _EEPROM_write
	.dbline 523
;   EEPROM_write( 0x06, *((char*)&MileageCurrent+2) );
	lds R18,_MileageCurrent+2
	ldi R16,6
	ldi R17,0
	rcall _EEPROM_write
	.dbline 524
;   EEPROM_write( 0x07, *((char*)&MileageCurrent+3) );
	lds R18,_MileageCurrent+3
	ldi R16,7
	ldi R17,0
	rcall _EEPROM_write
	.dbline 525
;   MileageSaveBlocked = 1;
	ldi R24,1
	sts _MileageSaveBlocked,R24
	.dbline -2
L123:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e MileageLoding _MileageLoding fV
	.even
_MileageLoding::
	rcall push_gset2
	.dbline -1
	.dbline 529
; }
;   
; void MileageLoding()
; {
	.dbline 530
;   mileage = 0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _mileage+1,R21
	sts _mileage,R20
	sts _mileage+2+1,R23
	sts _mileage+2,R22
	.dbline 531
;   MileageCurrent = 0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _MileageCurrent+1,R21
	sts _MileageCurrent,R20
	sts _MileageCurrent+2+1,R23
	sts _MileageCurrent+2,R22
	.dbline 532
;   *((char*)&mileage+0) = EEPROM_read( 0x00 );
	clr R16
	clr R17
	rcall _EEPROM_read
	ldi R30,<_mileage
	ldi R31,>_mileage
	std z+0,R16
	.dbline 533
;   *((char*)&mileage+1) = EEPROM_read( 0x01 );
	ldi R16,1
	ldi R17,0
	rcall _EEPROM_read
	sts _mileage+1,R16
	.dbline 534
;   *((char*)&mileage+2) = EEPROM_read( 0x02 );
	ldi R16,2
	ldi R17,0
	rcall _EEPROM_read
	sts _mileage+2,R16
	.dbline 535
;   *((char*)&mileage+3) = EEPROM_read( 0x03 );
	ldi R16,3
	ldi R17,0
	rcall _EEPROM_read
	sts _mileage+3,R16
	.dbline 536
;   *((char*)&MileageCurrent+0) = EEPROM_read( 0x04 );
	ldi R16,4
	ldi R17,0
	rcall _EEPROM_read
	ldi R30,<_MileageCurrent
	ldi R31,>_MileageCurrent
	std z+0,R16
	.dbline 537
;   *((char*)&MileageCurrent+1) = EEPROM_read( 0x05 );
	ldi R16,5
	ldi R17,0
	rcall _EEPROM_read
	sts _MileageCurrent+1,R16
	.dbline 538
;   *((char*)&MileageCurrent+2) = EEPROM_read( 0x06 );
	ldi R16,6
	ldi R17,0
	rcall _EEPROM_read
	sts _MileageCurrent+2,R16
	.dbline 539
;   *((char*)&MileageCurrent+3) = EEPROM_read( 0x07 );
	ldi R16,7
	ldi R17,0
	rcall _EEPROM_read
	sts _MileageCurrent+3,R16
	.dbline 540
;   MileageSaveBlocked = 1;
	ldi R24,1
	sts _MileageSaveBlocked,R24
	.dbline -2
L130:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e KeyMileageCurrentClear _KeyMileageCurrentClear fV
;              i -> R10,R11
	.even
_KeyMileageCurrentClear::
	rcall push_gset3
	.dbline -1
	.dbline 544
; }
; 
; void KeyMileageCurrentClear(void)
; {
	.dbline 547
;   int i;
;   //1.PORTD7=Input+PullUp
;   PORTD |= BIT(7); 
	sbi 0x12,7
	.dbline 548
;   for(i=0;i<100;i++)
	clr R10
	clr R11
L138:
	.dbline 549
	rcall _delay
L139:
	.dbline 548
	movw R24,R10
	adiw R24,1
	movw R10,R24
	.dbline 548
	cpi R24,100
	ldi R30,0
	cpc R25,R30
	brlt L138
	.dbline 550
;    delay();
;   DDRD &= ~BIT(7);
	cbi 0x11,7
	.dbline 551
;   for(i=0;i<100;i++)
	clr R10
	clr R11
L142:
	.dbline 552
	rcall _delay
L143:
	.dbline 551
	movw R24,R10
	adiw R24,1
	movw R10,R24
	.dbline 551
	cpi R24,100
	ldi R30,0
	cpc R25,R30
	brlt L142
	.dbline 554

⌨️ 快捷键说明

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