📄 251.s
字号:
; 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 + -