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

📄 251.s

📁 卡车仪表的单片机程序
💻 S
📖 第 1 页 / 共 5 页
字号:
;    delay();
;     //2. Read
;   if (!(PIND & BIT(7)))
	sbic 0x10,7
	rjmp L146
	.dbline 555
;   {
	.dbline 556
;     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 557
; 	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
	sts _mileage+1,R17
	sts _mileage,R16
	sts _mileage+2+1,R19
	sts _mileage+2,R18
	.dbline 558
; 	mileage *=10;
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R20
	movw R18,R22
	rcall empy32u
	sts _mileage+1,R17
	sts _mileage,R16
	sts _mileage+2+1,R19
	sts _mileage+2,R18
	.dbline 559
;   }
L146:
	.dbline 561
;   //3.PORTD7=Output0
;   PORTD &=~BIT(7);
	cbi 0x12,7
	.dbline 562
;   DDRD |=BIT(7);
	sbi 0x11,7
	.dbline -2
L137:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 10 I
	.dbend
	.dbfunc e AlarmCalculate _AlarmCalculate fV
;              i -> R10
	.even
_AlarmCalculate::
	rcall push_gset3
	.dbline -1
	.dbline 566
; }
; 
; void AlarmCalculate(void)
; {
	.dbline 568
;   uchar i;
;   if(VoltageRefreshed[0])
	lds R2,_VoltageRefreshed
	tst R2
	breq L149
	.dbline 569
;     if(Voltage[0]<ThresholdOil)
	lds R24,_Voltage
	lds R25,_Voltage+1
	cpi R24,166
	ldi R30,0
	cpc R25,R30
	brsh L151
	.dbline 570
;       ParallelOutputCmd |= BIT(AlarmLedOil);
	lds R24,_ParallelOutputCmd
	lds R25,_ParallelOutputCmd+1
	ori R24,32
	sts _ParallelOutputCmd+1,R25
	sts _ParallelOutputCmd,R24
	rjmp L152
L151:
	.dbline 572
; 	else
;       ParallelOutputCmd &= ~BIT(AlarmLedOil);
	lds R24,_ParallelOutputCmd
	lds R25,_ParallelOutputCmd+1
	andi R24,223
	sts _ParallelOutputCmd+1,R25
	sts _ParallelOutputCmd,R24
L152:
L149:
	.dbline 573
;   if(VoltageRefreshed[1])
	lds R2,_VoltageRefreshed+1
	tst R2
	breq L153
	.dbline 574
;     if(Voltage[1]<ThresholdTemp)
	lds R24,_Voltage+2
	lds R25,_Voltage+2+1
	cpi R24,186
	ldi R30,0
	cpc R25,R30
	brsh L156
	.dbline 575
;       ParallelOutputCmd |= BIT(AlarmLedTemp);
	lds R24,_ParallelOutputCmd
	lds R25,_ParallelOutputCmd+1
	ori R24,128
	sts _ParallelOutputCmd+1,R25
	sts _ParallelOutputCmd,R24
	rjmp L157
L156:
	.dbline 577
; 	else
;       ParallelOutputCmd &= ~BIT(AlarmLedTemp);
	lds R24,_ParallelOutputCmd
	lds R25,_ParallelOutputCmd+1
	andi R24,127
	sts _ParallelOutputCmd+1,R25
	sts _ParallelOutputCmd,R24
L157:
L153:
	.dbline 578
;   if(VoltageRefreshed[2])
	lds R2,_VoltageRefreshed+2
	tst R2
	breq L159
	.dbline 579
;     if(Voltage[2]<ThresholdOilP)
	lds R24,_Voltage+4
	lds R25,_Voltage+4+1
	cpi R24,145
	ldi R30,0
	cpc R25,R30
	brsh L162
	.dbline 580
;       ParallelOutputCmd |= BIT(AlarmLedOilP);
	lds R24,_ParallelOutputCmd
	lds R25,_ParallelOutputCmd+1
	ori R24,64
	sts _ParallelOutputCmd+1,R25
	sts _ParallelOutputCmd,R24
	rjmp L163
L162:
	.dbline 582
; 	else
;       ParallelOutputCmd &= ~BIT(AlarmLedOilP);
	lds R24,_ParallelOutputCmd
	lds R25,_ParallelOutputCmd+1
	andi R24,191
	sts _ParallelOutputCmd+1,R25
	sts _ParallelOutputCmd,R24
L163:
L159:
	.dbline 583
;   if(VoltageRefreshed[3])
	lds R2,_VoltageRefreshed+3
	tst R2
	breq L165
	.dbline 584
;     if(Voltage[3]<ThresholdAir)
	lds R24,_Voltage+6
	lds R25,_Voltage+6+1
	cpi R24,83
	ldi R30,1
	cpc R25,R30
	brsh L168
	.dbline 585
;       ParallelOutputCmd |= BIT(AlarmLedAir1);
	lds R24,_ParallelOutputCmd
	lds R25,_ParallelOutputCmd+1
	ori R25,1
	sts _ParallelOutputCmd+1,R25
	sts _ParallelOutputCmd,R24
	rjmp L169
L168:
	.dbline 587
; 	else
;       ParallelOutputCmd &= ~BIT(AlarmLedAir1);
	lds R24,_ParallelOutputCmd
	lds R25,_ParallelOutputCmd+1
	andi R25,254
	sts _ParallelOutputCmd+1,R25
	sts _ParallelOutputCmd,R24
L169:
L165:
	.dbline 588
;   if(VoltageRefreshed[4])
	lds R2,_VoltageRefreshed+4
	tst R2
	breq L171
	.dbline 589
;     if(Voltage[4]<ThresholdAir)
	lds R24,_Voltage+8
	lds R25,_Voltage+8+1
	cpi R24,83
	ldi R30,1
	cpc R25,R30
	brsh L174
	.dbline 590
;       ParallelOutputCmd |= BIT(AlarmLedAir2);
	lds R24,_ParallelOutputCmd
	lds R25,_ParallelOutputCmd+1
	ori R25,2
	sts _ParallelOutputCmd+1,R25
	sts _ParallelOutputCmd,R24
	rjmp L175
L174:
	.dbline 592
; 	else
;       ParallelOutputCmd &= ~BIT(AlarmLedAir2);
	lds R24,_ParallelOutputCmd
	lds R25,_ParallelOutputCmd+1
	andi R25,253
	sts _ParallelOutputCmd+1,R25
	sts _ParallelOutputCmd,R24
L175:
L171:
	.dbline 593
;   if(VoltageRefreshed[5])
	lds R2,_VoltageRefreshed+5
	tst R2
	breq L177
	.dbline 594
;     if(Voltage[5]<ThresholdVoltL)
	lds R24,_Voltage+10
	lds R25,_Voltage+10+1
	cpi R24,44
	ldi R30,1
	cpc R25,R30
	brsh L180
	.dbline 595
;       ParallelOutputCmd |= BIT(AlarmLedVoltL);
	lds R24,_ParallelOutputCmd
	lds R25,_ParallelOutputCmd+1
	ori R25,4
	sts _ParallelOutputCmd+1,R25
	sts _ParallelOutputCmd,R24
	rjmp L181
L180:
	.dbline 597
; 	else
;       ParallelOutputCmd &= ~BIT(AlarmLedVoltL);
	lds R24,_ParallelOutputCmd
	lds R25,_ParallelOutputCmd+1
	andi R25,251
	sts _ParallelOutputCmd+1,R25
	sts _ParallelOutputCmd,R24
L181:
L177:
	.dbline 598
;   if(VoltageRefreshed[5])
	lds R2,_VoltageRefreshed+5
	tst R2
	breq L183
	.dbline 599
;     if(Voltage[5]>ThresholdVoltH)
	ldi R24,450
	ldi R25,1
	lds R2,_Voltage+10
	lds R3,_Voltage+10+1
	cp R24,R2
	cpc R25,R3
	brsh L186
	.dbline 600
;       ParallelOutputCmd |= BIT(AlarmLedVoltH);
	lds R24,_ParallelOutputCmd
	lds R25,_ParallelOutputCmd+1
	ori R25,8
	sts _ParallelOutputCmd+1,R25
	sts _ParallelOutputCmd,R24
	rjmp L187
L186:
	.dbline 602
; 	else
;       ParallelOutputCmd &= ~BIT(AlarmLedVoltH);
	lds R24,_ParallelOutputCmd
	lds R25,_ParallelOutputCmd+1
	andi R25,247
	sts _ParallelOutputCmd+1,R25
	sts _ParallelOutputCmd,R24
L187:
L183:
	.dbline 603
;   for(i=0;i<=3;i++)
	clr R10
	rjmp L192
L189:
	.dbline 604
;   {
	.dbline 605
;       if(TimeIntervalAvg<SpeedAlarm[i])
	ldi R24,2
	mul R24,R10
	movw R30,R0
	ldi R24,<_SpeedAlarm
	ldi R25,>_SpeedAlarm
	add R30,R24
	adc R31,R25
	lpm R2,Z+
	lpm R3,Z
	clr R4
	clr R5
	lds R8,_TimeIntervalAvg+2
	lds R9,_TimeIntervalAvg+2+1
	lds R6,_TimeIntervalAvg
	lds R7,_TimeIntervalAvg+1
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brsh L193
	.dbline 606
; 	    ParallelOutputCmd |= BIT(SpeedAlarmOut[i]);
	ldi R24,<_SpeedAlarmOut
	ldi R25,>_SpeedAlarmOut
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	lpm R18,Z
	clr R19
	ldi R16,1
	ldi R17,0
	rcall lsl16
	lds R2,_ParallelOutputCmd
	lds R3,_ParallelOutputCmd+1
	or R2,R16
	or R3,R17
	sts _ParallelOutputCmd+1,R3
	sts _ParallelOutputCmd,R2
	rjmp L194
L193:
	.dbline 608
; 	  else
; 	  	ParallelOutputCmd &= ~BIT(SpeedAlarmOut[i]);
	ldi R24,<_SpeedAlarmOut
	ldi R25,>_SpeedAlarmOut
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	lpm R18,Z
	clr R19
	ldi R16,1
	ldi R17,0
	rcall lsl16
	movw R2,R16
	com R2
	com R3
	lds R4,_ParallelOutputCmd
	lds R5,_ParallelOutputCmd+1
	and R4,R2
	and R5,R3
	sts _ParallelOutputCmd+1,R5
	sts _ParallelOutputCmd,R4
L194:
	.dbline 609
L190:
	.dbline 603
	inc R10
L192:
	.dbline 603
	ldi R24,3
	cp R24,R10
	brlo X4
	rjmp L189
X4:
	.dbline -2
L148:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 10 c
	.dbend
	.dbfunc e Calculate _Calculate fV
;    motoranglei -> <dead>
;             ya -> R10,R11
;             yb -> R14,R15
;             nt -> y+12
;             xa -> R12,R13
;             xb -> y+10
;           temp -> y+1
;              k -> y+9
;          volti -> y+7
;              j -> y+6
;              i -> y+5
	.even
_Calculate::
	rcall push_gset5
	sbiw R28,13
	.dbline -1
	.dbline 616
;   }
; } 
; 
; //============================================================
; //================Calculate Subroutine======================
; //============================================================
; void Calculate(void)
; {
	.dbline 628
;  unsigned long temp;
;  uchar i;
;  uchar j,k;
;  uchar nt;
;  
;  unint volti;
;  unint motoranglei;
;  unint xb,xa,yb,ya;
; 
;  //==============Speed====================
;  //1.Filter
;  if(TimeIntervalRefreshed)
	lds R2,_TimeIntervalRefreshed
	tst R2
	breq L196
	.dbline 629
;  {
	.dbline 630
;    TimeIntervalAvg = (TimeIntervalAvg*(SpeedAvgSamples-1)+TimeInterval)/SpeedAvgSamples;
	lds R4,_TimeIntervalAvg+2
	lds R5,_TimeIntervalAvg+2+1
	lds R2,_TimeIntervalAvg
	lds R3,_TimeIntervalAvg+1
	ldi R20,3
	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 R2,R16
	movw R4,R18
	lds R8,_TimeInterval+2
	lds R9,_TimeInterval+2+1
	lds R6,_TimeInterval
	lds R7,_TimeInterval+1
	add R2,R6
	adc R3,R7
	adc R4,R8
	adc R5,R9
	ldi R24,2
	ldi R25,0
	st -y,R24
	movw R16,R2
	movw R18,R4
	rcall lsr32
	sts _TimeIntervalAvg+1,R17
	sts _TimeIntervalAvg,R16
	sts _TimeIntervalAvg+2+1,R19
	sts _TimeIntervalAvg+2,R18
	.dbline 631
;    TimeIntervalRefreshed = 0;
	clr R2
	sts _TimeIntervalRefreshed,R2
	.dbline 632
;  }
L196:
	.dbline 634
;  //2.Calculate Pointer Position
;  temp = Timer1UnitMaxSpeed*MaxAngle;
	ldi R20,128
	ldi R21,224
	ldi R22,8
	ldi R23,0
	movw R30,R28
	std z+1,R20
	std z+2,R21
	std z+3,R22
	std z+4,R23
	.dbline 635
;  SpeedMotorSetting = temp/TimeIntervalAvg;
	lds R4,_TimeIntervalAvg+2
	lds R5,_TimeIntervalAvg+2+1
	lds R2,_TimeIntervalAvg
	lds R3,_TimeIntervalAvg+1
	movw R30,R28
	ldd R6,z+1
	ldd R7,z+2
	ldd R8,z+3
	ldd R9,z+4
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R6
	movw R18,R8
	rcall div32u
	sts _SpeedMotorSetting+1,R17
	sts _SpeedMotorSetting,R16
	.dbline 638
; 
;  //==============N=====================
;  NPulseAvg = (NPulseAvg*(NAvgSamples-1)+NPulse)/NAvgSamples;
	lds R18,_NPulseAvg
	lds R19,_NPulseAvg+1
	ldi R16,3
	ldi R17,0
	rcall empy16s
	movw R2,R16
	lds R4,_NPulse
	lds R5,_NPulse+1
	add R2,R4
	adc R3,R5
	lsr R3
	ror R2
	lsr R3
	ror R2
	sts _NPulseAvg+1,R3
	sts _NPulseAvg,R2
	.dbline 639
;  temp = NPulseAvg;
	clr R4
	clr R5
	movw R30,R28
	std z+1,R2
	std z+2,R3
	std z+3,R4
	std z+4,R5
	.dbline 640
;  NMotorSetting = temp*MaxAngle/MaxNPulse;
	movw R30,R28
	ldd R2,z+1
	ldd R3,z+2
	ldd R4,z+3
	ldd R5,z+4
	ldi R20,64
	ldi R21,11
	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
	ldi R20,120
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	rcall div32u
	sts _NMotorSetting+1,R17
	sts _NMotorSetting,R16
	.dbline 643
; 
;  //=============Small Meter=======================
;  for(i=0;i<=5;i++)
	clr R0
	std y+5,R0
	rjmp L201
L198:
	.dbline 644
;  { 
	.dbline 646
;    //0. Averaging
;    if(VoltageRefreshed[i])
	ldi R24,<_VoltageRefreshed
	ldi R25,>_VoltageRefreshed
	ldd R30,y+5
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	tst R2
	breq L202
	.dbline 647
;    {
	.dbline 648
;    	VoltageAvg[i] = (VoltageAvg[i]*(VoltageAvgSamples-1)+Voltage[i])/VoltageAvgSamples;
	ldi R24,2
	ldd R0,y+5
	mul R24,R0
	ldi R24,<_VoltageAvg
	ldi R25,>_VoltageAvg
	movw R2,R0
	add R2,R24
	adc R3,R25
	ldi R24,<_Voltage
	ldi R25,>_Voltage
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	movw R30,R2
	ldd R18,z+0
	ldd R19,z+1
	ldi R16,3
	ldi R17,0
	rcall empy16s
	movw R6,R16
	add R6,R4
	adc R7,R5
	lsr R7
	ror R6
	lsr R7
	ror R6
	movw R30,R2
	std z+1,R7
	std z+0,R6
	.dbline 649
;     VoltageRefreshed[i] = 0;
	ldi R24,<_VoltageRefreshed
	ldi R25,>_VoltageRefreshed
	ldd R30,y+5
	clr R31
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
	.dbline 650
;    }
L202:
	.dbline 651
;    volti = VoltageAvg[i];
	ldi R24,2
	ldd R0,y+5
	mul R24,R0
	movw R30,R0
	ldi R24,<_VoltageAvg
	ldi R25,>_VoltageAvg
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	std y+8,R3
	std y+7,R2
	.dbline 652
;    nt = VoltageTableN[i];
	ldi R24,<_VoltageTableN
	ldi R25,>_VoltageTableN
	ldd R30,y+5
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	std y+12,R30
	.dbline 654
;    //1.Limiting
;    if(volti<VoltageTable[i][0])
	ldi R24,2
	ldd R0,y+5
	mul R24,R0
	movw R30,R0
	ldi R24,<_VoltageTable
	ldi R25,>_VoltageTable
	add R30,R24
	adc R31,R25
	ldd R26,z+0
	ldd R27,z+1
	movw R30,R26
	lpm R26,Z+
	lpm R27,Z
	ldd R0,y+7
	ldd R1,y+8
	cp R0,R26
	cpc R1,R27
	brsh L204
	.dbline 655
;      volti = VoltageTable[i][0]; 
	ldi R24,2
	ldd R0,y+5
	mul R24,R0
	movw R30,R0
	ldi R24,<_VoltageTable
	ldi R25,>_VoltageTable
	add R30,R24
	adc R31,R25
	ldd R26,z+0
	ldd R27,z+1
	movw R30,R26
	lpm R26,Z+
	lpm R27,Z
	std y+8,R27
	std y+7,R26
L204:
	.dbline 656
;    if(volti>VoltageTable[i][nt])
	ldi R24,2
	ldd R0,y+5
	mul R24,R0
	movw R30,R0
	ldi R24,<_VoltageTable
	ldi R25,>_VoltageTable
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldi R24,2
	ldd R0,y+12
	mul R24,R0

⌨️ 快捷键说明

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