📄 251.s
字号:
.word 0,0
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.dbsym e MileageCurrent _MileageCurrent l
_MileagePulseCnt::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.dbsym e MileagePulseCnt _MileagePulseCnt i
_MileageSaved::
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.dbsym e MileageSaved _MileageSaved c
_SpeedMotorCurrent::
.blkb 2
.area idata
.word 2880
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.dbsym e SpeedMotorCurrent _SpeedMotorCurrent I
_SpeedMotorSetting::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.dbsym e SpeedMotorSetting _SpeedMotorSetting I
_NMotorCurrent::
.blkb 2
.area idata
.word 2880
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.dbsym e NMotorCurrent _NMotorCurrent I
_NMotorSetting::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.dbsym e NMotorSetting _NMotorSetting I
_VoltageMotorSetting::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.dbsym e VoltageMotorSetting _VoltageMotorSetting A[12:6]i
_VoltageMotorCurrent::
.blkb 2
.area idata
.word 2880
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.blkb 2
.area idata
.word 2880
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.blkb 2
.area idata
.word 2880
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.blkb 2
.area idata
.word 2880
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.blkb 2
.area idata
.word 2880
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.blkb 2
.area idata
.word 2880
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.dbsym e VoltageMotorCurrent _VoltageMotorCurrent A[12:6]i
_LCDContent::
.blkb 2
.area idata
.byte 0,1
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.blkb 2
.area idata
.byte 2,3
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.blkb 2
.area idata
.byte 4,5
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.blkb 2
.area idata
.byte 6,8
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.blkb 2
.area idata
.byte 8,7
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.blkb 2
.area idata
.byte 8,9
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.blkb 1
.area idata
.byte 10
.area data(ram, con, rel)
.dbfile D:\prog251\251.c
.dbsym e LCDContent _LCDContent A[13:13]c
.area lit(rom, con, rel)
_SpeedAlarm::
.word 1414
.word 707
.word 471
.word 282
.dbsym e SpeedAlarm _SpeedAlarm A[8:4]ki
_SpeedAlarmOut::
.byte 2,3
.byte 4,1
.dbsym e SpeedAlarmOut _SpeedAlarmOut A[4:4]kc
.area text(rom, con, rel)
.dbfile D:\prog251\251.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 121
; NMotorCurrent = MaxAngle;
; NMotorSetting = 0;
; unint VoltageMotorSetting[6] = {0,0,0,0,0,0};
; unint VoltageMotorCurrent[6] = {MaxAngle,MaxAngle,MaxAngle,MaxAngle,MaxAngle,MaxAngle};
;
; //Parallel Output
; unint ParallelOutputCmd;
;
; //LCD
; uchar LCDContent[13] = {0,1,2,3,4,5,6,8,8,7,8,9,10};
;
; //Alarm
; #define ThresholdOil 166
; #define ThresholdTemp 186
; #define ThresholdOilP 145
; #define ThresholdAir 339
; #define ThresholdVoltL 300
; #define ThresholdVoltH 450
; #define AlarmLedOil 5
; #define AlarmLedTemp 7
; #define AlarmLedOilP 6
; #define AlarmLedAir1 8
; #define AlarmLedAir2 9
; #define AlarmLedVoltL 10
; #define AlarmLedVoltH 11
; const unint SpeedAlarm[4] = {
; (Timer1UnitMaxSpeed*MaxSpeed/20),
; (Timer1UnitMaxSpeed*MaxSpeed/40),
; (Timer1UnitMaxSpeed*MaxSpeed/60),
; (Timer1UnitMaxSpeed*MaxSpeed/100)};
; const uchar SpeedAlarmOut[4] = {
; 2,
; 3,
; 4,
; 1};
;
;
; void port_init(void)
; {
.dbline 122
; PORTB = 0x84;
ldi R24,132
out 0x18,R24
.dbline 123
; DDRB = 0xef;
ldi R24,239
out 0x17,R24
.dbline 124
; PORTC = 0x00; //m103 output only
clr R2
out 0x15,R2
.dbline 125
; DDRC = 0x40;
ldi R24,64
out 0x14,R24
.dbline 126
; PORTD = 0xA0;
ldi R24,160
out 0x12,R24
.dbline 127
; DDRD = 0x23;
ldi R24,35
out 0x11,R24
.dbline -2
L27:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer0_init _timer0_init fV
.even
_timer0_init::
.dbline -1
.dbline 136
; }
;
; //TIMER0 initialize - prescale:8
; // WGM: 0) Normal, TOP=0xFFFF
; // desired value: 0.05Sec
; // actual value: 0.05Sec (0.0%)
; // Generate 0.1s event. For calculating & N meter counting
; void timer0_init(void)
; {
.dbline 137
; TCCR0 = 0x00; //sto
clr R2
out 0x33,R2
.dbline 138
; TCNT0 = 0x3D; //setup
ldi R24,61
out 0x32,R24
.dbline 139
; TCCR0 = 0x05; //start Timer
ldi R24,5
out 0x33,R24
.dbline -2
L28:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer1_init _timer1_init fV
.even
_timer1_init::
.dbline -1
.dbline 149
; }
;
;
; //TIMER1 initialize - prescale:8
; // WGM: 0) Normal, TOP=0xFFFF
; // 1.0485s Overflow
; // actual value: 0.100Sec (0.0%)
; // For speed meter time counting
; void timer1_init(void)
; {
.dbline 150
; TCCR1B = 0x00; //stop
clr R2
out 0x2e,R2
.dbline 151
; TCNT1H = 0x00; //setup
out 0x2d,R2
.dbline 152
; TCNT1L = 0x00;
out 0x2c,R2
.dbline 153
; OCR1AH = 0xC3;
ldi R24,195
out 0x2b,R24
.dbline 154
; OCR1AL = 0x50;
ldi R24,80
out 0x2a,R24
.dbline 155
; OCR1BH = 0xC3;
ldi R24,195
out 0x29,R24
.dbline 156
; OCR1BL = 0x50;
ldi R24,80
out 0x28,R24
.dbline 157
; ICR1H = 0xC3;
ldi R24,195
out 0x27,R24
.dbline 158
; ICR1L = 0x50;
ldi R24,80
out 0x26,R24
.dbline 159
; TCCR1A = 0x00;
out 0x2f,R2
.dbline 160
; TCCR1B = 0x03; //start Timer
ldi R24,3
out 0x2e,R24
.dbline -2
L29:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer2_init _timer2_init fV
.even
_timer2_init::
.dbline -1
.dbline 171
; }
;
;
;
; //TIMER2 initialize - prescale:32
; // WGM: Normal
; // desired value: 1KHz
; // actual value: 1.000KHz (0.0%)
; // for motor
; void timer2_init(void)
; {
.dbline 172
; TCCR2 = 0x00; //stop
clr R2
out 0x25,R2
.dbline 173
; ASSR = 0x00; //set async mode
out 0x22,R2
.dbline 174
; TCNT2 = 0x83; //setup
ldi R24,131
out 0x24,R24
.dbline 175
; OCR2 = 0x7D;
ldi R24,125
out 0x23,R24
.dbline 176
; TCCR2 = 0x03; //start
ldi R24,3
out 0x25,R24
.dbline -2
L30:
.dbline 0 ; func end
ret
.dbend
.dbfunc e watchdog_init _watchdog_init fV
.even
_watchdog_init::
.dbline -1
.dbline 182
; }
;
; //Watchdog initialize
; // prescale: 1024K
; void watchdog_init(void)
; {
.dbline 183
; WDR(); //this prevents a timout on enabling
wdr
.dbline 184
; WDTCR = 0x0E; //WATCHDOG ENABLED - dont forget to issue WDRs
ldi R24,14
out 0x21,R24
.dbline -2
L31:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 8
rjmp _timer2_ovf_isr
.area text(rom, con, rel)
.dbfile D:\prog251\251.c
.dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
.even
_timer2_ovf_isr::
st -y,R2
st -y,R24
in R2,0x3f
st -y,R2
.dbline -1
.dbline 193
; }
;
; //==========================================================
; //=======================ISR==============================
; //==========================================================
;
; #pragma interrupt_handler timer2_ovf_isr:5
; void timer2_ovf_isr(void)
; {
.dbline 194
; TCNT2 = 0x83; //reload counter value
ldi R24,131
out 0x24,R24
.dbline 196
; //unblock motor
; MotorBlocked = 0;
clr R2
sts _MotorBlocked,R2
.dbline 197
; WDR();
wdr
.dbline -2
L32:
ld R2,y+
out 0x3f,R2
ld R24,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.area vector(rom, abs)
.org 16
rjmp _timer1_ovf_isr
.area text(rom, con, rel)
.dbfile D:\prog251\251.c
.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
_timer1_ovf_isr::
st -y,R2
st -y,R24
st -y,R30
in R2,0x3f
st -y,R2
rcall push_gset2
.dbline -1
.dbline 202
.dbline 203
ldi R20,32
ldi R21,161
ldi R22,7
ldi R23,0
sts _TimeInterval+1,R21
sts _TimeInterval,R20
sts _TimeInterval+2+1,R23
sts _TimeInterval+2,R22
.dbline 204
ldi R24,1
sts _TimeIntervalRefreshed,R24
.dbline 205
sts _SpeedUltraLow,R24
.dbline 206
lds R2,_MileageSaved
tst R2
brne L34
.dbline 207
.dbline 208
clr R2
sts _MileageSaveBlocked,R2
.dbline 209
sts _MileageSaved,R24
.dbline 210
L34:
.dbline -2
L33:
rcall pop_gset2
ld R2,y+
out 0x3f,R2
ld R30,y+
ld R24,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.area vector(rom, abs)
.org 18
rjmp _timer0_ovf_isr
.area text(rom, con, rel)
.dbfile D:\prog251\251.c
.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
_timer0_ovf_isr::
st -y,R2
st -y,R3
st -y,R24
st -y,R25
in R2,0x3f
st -y,R2
.dbline -1
.dbline 215
.dbline 217
ldi R24,61
out 0x32,R24
.dbline 219
lds R24,_Timer0Div
subi R24,255 ; addi 1
sts _Timer0Div,R24
.dbline 220
cpi R24,2
brlo L37
.dbline 221
.dbline 222
clr R2
sts _Timer0Div,R2
.dbline 226
lds R2,_NPulseCnt
lds R3,_NPulseCnt+1
sts _NPulse+1,R3
sts _NPulse,R2
.dbline 227
clr R2
clr R3
sts _NPulseCnt+1,R3
sts _NPulseCnt,R2
.dbline 230
sts _CalculateBlocked,R2
.dbline 231
sts _ParallelBlocked,R2
.dbline 232
L37:
.dbline -2
L36:
ld R2,y+
out 0x3f,R2
ld R25,y+
ld R24,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e spi_init _spi_init fV
.even
_spi_init::
.dbline -1
.dbline 238
; }
;
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void)
; {
; TimeInterval = 100000*5;
; TimeIntervalRefreshed = 1;
; SpeedUltraLow = 1;
; if(!MileageSaved)
; {
; MileageSaveBlocked = 0; //Start Mileage Saving
; MileageSaved = 1;
; }
; }
;
; #pragma interrupt_handler timer0_ovf_isr:10
; void timer0_ovf_isr(void)
; {
; //TIMER1 has overflowed
; TCNT0 = 0x3D; //reload counter
;
; Timer0Div++;
; if(Timer0Div>=2) //Divid by 2
; {
; Timer0Div = 0;
; //speed motor is not controled by timer0
;
; //N motor pulse count
; NPulse = NPulseCnt;
; NPulseCnt = 0;
;
; //Wake up calculating
; CalculateBlocked = 0;
; ParallelBlocked = 0;
; }
; }
;
; //SPI initialize
; // clock rate: 250000hz
; void spi_init(void)
; {
.dbline 239
; SPCR = 0x51; //setup SPI
ldi R24,81
out 0xd,R24
.dbline 240
; SPSR = 0x00; //setup SPI
clr R2
out 0xe,R2
.dbline -2
L39:
.dbline 0 ; func end
ret
.dbend
.dbfunc e adc_setmux _adc_setmux fV
; channel -> R16
.even
_adc_setmux::
.dbline -1
.dbline 246
; }
;
; //ADC initialize
; // Conversion time: 104uS
; void adc_setmux(uchar channel)
; {
.dbline 247
; if(channel>5)
ldi R24,5
cp R24,R16
brsh L41
.dbline 248
; channel = 0;
clr R16
L41:
.dbline 249
; ADMUX &= BIT(7)|BIT(6)|BIT(5)|BIT(4);
in R24,0x7
andi R24,240
out 0x7,R24
.dbline 250
; ADMUX |= channel;
in R2,0x7
or R2,R16
out 0x7,R2
.dbline -2
L40:
.dbline 0 ; func end
ret
.dbsym r channel 16 c
.dbend
.dbfunc e adc_init _adc_init fV
.even
_adc_init::
.dbline -1
.dbline 254
; }
;
; void adc_init(void)
; {
.dbline 255
; ADCSR = 0x00; //disable adc
clr R2
out 0x6,R2
.dbline 256
; ADMUX = 0x40; //select adc input 0, select AVCC=VREF
ldi R24,64
out 0x7,R24
.dbline 257
; ACSR = 0x80;
ldi R24,128
out 0x8,R24
.dbline 258
; ADCSR = 0xED; //ADEN=1,ADSC=1(start),ADFR=1(freerun),ADIE(interrupt enable)=1 32div
ldi R24,237
out 0x6,R24
.dbline -2
L43:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 28
rjmp _adc_isr
.area text(rom, con, rel)
.dbfile D:\prog251\251.c
.dbfunc e adc_isr _adc_isr fV
.even
_adc_isr::
rcall push_lset
.dbline -1
.dbline 263
; }
;
; #pragma interrupt_handler adc_isr:15
; void adc_isr(void)
; {
.dbline 265
; //1. conversion complete, read value (int) using...
; Voltage[ADCCurrentChannel]=ADCL; //Read 8 low bits first (important)
lds R2,_ADCCurrentChannel
ldi R24,2
mul R24,R2
movw R30,R0
ldi R24,<_Voltage
ldi R25,>_Voltage
add R30,R24
adc R31,R25
in R2,0x4
clr R3
std z+1,R3
std z+0,R2
.dbline 266
; Voltage[ADCCurrentChannel]|=(int)ADCH << 8; //read 2 high bits and shift into top byte //
lds R2,_ADCCurrentChannel
ldi R24,2
mul R24,R2
movw R2,R0
ldi R24,<_Voltage
ldi R25,>_Voltage
add R2,R24
adc R3,R25
in R4,0x5
clr R5
mov R5,R4
clr R4
movw R30,R2
ldd R6,z+0
ldd R7,z+1
or R6,R4
or R7,R5
std z+1,R7
std z+0,R6
.dbline 267
; VoltageRefreshed[ADCCurrentChannel] = 1;
ldi R24,<_VoltageRefreshed
ldi R25,>_VoltageRefreshed
lds R30,_ADCCurrentChannel
clr R31
add R30,R24
adc R31,R25
ldi R24,1
std z+0,R24
.dbline 270
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -