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

📄 251.lis

📁 卡车仪表的单片机程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 01E8           ;  SPCR = 0x51; //setup SPI
 01E8 81E5              ldi R24,81
 01EA 8DB9              out 0xd,R24
 01EC                   .dbline 240
 01EC           ;  SPSR = 0x00; //setup SPI
 01EC 2224              clr R2
 01EE 2EB8              out 0xe,R2
 01F0                   .dbline -2
 01F0           L39:
 01F0                   .dbline 0 ; func end
 01F0 0895              ret
 01F2                   .dbend
 01F2                   .dbfunc e adc_setmux _adc_setmux fV
 01F2           ;        channel -> R16
                        .even
 01F2           _adc_setmux::
 01F2                   .dbline -1
 01F2                   .dbline 246
 01F2           ; }
 01F2           ; 
 01F2           ; //ADC initialize
 01F2           ; // Conversion time: 104uS
 01F2           ; void adc_setmux(uchar channel)
 01F2           ; {
 01F2                   .dbline 247
 01F2           ;    if(channel>5)
 01F2 85E0              ldi R24,5
 01F4 8017              cp R24,R16
 01F6 08F4              brsh L41
 01F8                   .dbline 248
 01F8           ;      channel = 0;
 01F8 0027              clr R16
 01FA           L41:
 01FA                   .dbline 249
 01FA           ;    ADMUX &= BIT(7)|BIT(6)|BIT(5)|BIT(4);
 01FA 87B1              in R24,0x7
 01FC 807F              andi R24,240
 01FE 87B9              out 0x7,R24
 0200                   .dbline 250
 0200           ;    ADMUX |= channel;
 0200 27B0              in R2,0x7
 0202 202A              or R2,R16
 0204 27B8              out 0x7,R2
 0206                   .dbline -2
 0206           L40:
 0206                   .dbline 0 ; func end
 0206 0895              ret
 0208                   .dbsym r channel 16 c
 0208                   .dbend
 0208                   .dbfunc e adc_init _adc_init fV
                        .even
 0208           _adc_init::
 0208                   .dbline -1
 0208                   .dbline 254
 0208           ; }
 0208           ; 
 0208           ; void adc_init(void)
 0208           ; {
 0208                   .dbline 255
 0208           ;  ADCSR = 0x00; //disable adc
 0208 2224              clr R2
 020A 26B8              out 0x6,R2
 020C                   .dbline 256
 020C           ;  ADMUX = 0x40; //select adc input 0, select AVCC=VREF 
 020C 80E4              ldi R24,64
 020E 87B9              out 0x7,R24
 0210                   .dbline 257
 0210           ;  ACSR  = 0x80;
 0210 80E8              ldi R24,128
 0212 88B9              out 0x8,R24
 0214                   .dbline 258
 0214           ;  ADCSR = 0xED; //ADEN=1,ADSC=1(start),ADFR=1(freerun),ADIE(interrupt enable)=1 32div
 0214 8DEE              ldi R24,237
 0216 86B9              out 0x6,R24
 0218                   .dbline -2
 0218           L43:
 0218                   .dbline 0 ; func end
 0218 0895              ret
 021A                   .dbend
                        .area vector(rom, abs)
                        .org 28
 001C 0DC1              rjmp _adc_isr
                        .area text(rom, con, rel)
 021A                   .dbfile D:\prog251\251.c
 021A                   .dbfunc e adc_isr _adc_isr fV
                        .even
 021A           _adc_isr::
 021A 00D0              rcall push_lset
 021C                   .dbline -1
 021C                   .dbline 263
 021C           ; }
 021C           ; 
 021C           ; #pragma interrupt_handler adc_isr:15
 021C           ; void adc_isr(void)
 021C           ; {
 021C                   .dbline 265
 021C           ;  //1. conversion complete, read value (int) using...
 021C           ;  Voltage[ADCCurrentChannel]=ADCL;            //Read 8 low bits first (important)
 021C 20902000          lds R2,_ADCCurrentChannel
 0220 82E0              ldi R24,2
 0222 829D              mul R24,R2
 0224 F001              movw R30,R0
 0226 80E0              ldi R24,<_Voltage
 0228 90E0              ldi R25,>_Voltage
 022A E80F              add R30,R24
 022C F91F              adc R31,R25
 022E 24B0              in R2,0x4
 0230 3324              clr R3
 0232 3182              std z+1,R3
 0234 2082              std z+0,R2
 0236                   .dbline 266
 0236           ;  Voltage[ADCCurrentChannel]|=(int)ADCH << 8; //read 2 high bits and shift into top byte //
 0236 20902000          lds R2,_ADCCurrentChannel
 023A 82E0              ldi R24,2
 023C 829D              mul R24,R2
 023E 1001              movw R2,R0
 0240 80E0              ldi R24,<_Voltage
 0242 90E0              ldi R25,>_Voltage
 0244 280E              add R2,R24
 0246 391E              adc R3,R25
 0248 45B0              in R4,0x5
 024A 5524              clr R5
 024C 542C              mov R5,R4
 024E 4424              clr R4
 0250 F101              movw R30,R2
 0252 6080              ldd R6,z+0
 0254 7180              ldd R7,z+1
 0256 6428              or R6,R4
 0258 7528              or R7,R5
 025A 7182              std z+1,R7
 025C 6082              std z+0,R6
 025E                   .dbline 267
 025E           ;  VoltageRefreshed[ADCCurrentChannel] = 1;
 025E 80E0              ldi R24,<_VoltageRefreshed
 0260 90E0              ldi R25,>_VoltageRefreshed
 0262 E0912000          lds R30,_ADCCurrentChannel
 0266 FF27              clr R31
 0268 E80F              add R30,R24
 026A F91F              adc R31,R25
 026C 81E0              ldi R24,1
 026E 8083              std z+0,R24
 0270                   .dbline 270
 0270           ; 
 0270           ;  //2. NextChannel
 0270           ;  ++ADCCurrentChannel;
 0270 80912000          lds R24,_ADCCurrentChannel
 0274 8F5F              subi R24,255    ; addi 1
 0276 80932000          sts _ADCCurrentChannel,R24
 027A                   .dbline 271
 027A           ;  if(ADCCurrentChannel>5)
 027A 85E0              ldi R24,5
 027C 20902000          lds R2,_ADCCurrentChannel
 0280 8215              cp R24,R2
 0282 18F4              brsh L45
 0284                   .dbline 272
 0284           ;    ADCCurrentChannel = 0; 
 0284 2224              clr R2
 0286 20922000          sts _ADCCurrentChannel,R2
 028A           L45:
 028A                   .dbline 275
 028A           ;  
 028A           ;  //3.Set MUX
 028A           ;  adc_setmux(ADCCurrentChannel+1);
 028A 00912000          lds R16,_ADCCurrentChannel
 028E 0F5F              subi R16,255    ; addi 1
 0290 B0DF              rcall _adc_setmux
 0292                   .dbline 277
 0292           ;  //4.CLEAR INTERUPT FLAG ADIF
 0292           ;  ADCSR |= BIT(ADIF);
 0292 349A              sbi 0x6,4
 0294                   .dbline -2
 0294           L44:
 0294 00D0              rcall pop_lset
 0296                   .dbline 0 ; func end
 0296 1895              reti
 0298                   .dbend
                        .area vector(rom, abs)
                        .org 2
 0002 4CC1              rjmp _int0_isr
                        .area text(rom, con, rel)
 0298                   .dbfile D:\prog251\251.c
 0298                   .dbfunc e int0_isr _int0_isr fV
                        .even
 0298           _int0_isr::
 0298 2A92              st -y,R2
 029A 3A92              st -y,R3
 029C 4A92              st -y,R4
 029E 5A92              st -y,R5
 02A0 0A93              st -y,R16
 02A2 1A93              st -y,R17
 02A4 2A93              st -y,R18
 02A6 3A93              st -y,R19
 02A8 8A93              st -y,R24
 02AA 9A93              st -y,R25
 02AC AA93              st -y,R26
 02AE BA93              st -y,R27
 02B0 EA93              st -y,R30
 02B2 2FB6              in R2,0x3f
 02B4 2A92              st -y,R2
 02B6 00D0              rcall push_gset2
 02B8                   .dbline -1
 02B8                   .dbline 282
 02B8           ; }
 02B8           ; 
 02B8           ; #pragma interrupt_handler int0_isr:2
 02B8           ; void int0_isr(void)//speed
 02B8           ; {
 02B8                   .dbline 285
 02B8           ;  //external interupt on INT0
 02B8           ;  //1.Read Interval
 02B8           ;  CLI();
 02B8 F894              cli
 02BA                   .dbline 286
 02BA           ;  if(SpeedUltraLow)
 02BA 20901100          lds R2,_SpeedUltraLow
 02BE 2220              tst R2
 02C0 21F0              breq L48
 02C2                   .dbline 287
 02C2           ;    SpeedUltraLow = 0;
 02C2 2224              clr R2
 02C4 20921100          sts _SpeedUltraLow,R2
 02C8 12C0              rjmp L49
 02CA           L48:
 02CA                   .dbline 288
 02CA           ;  else if (!(TIFR&BIT(TOV1)))
 02CA 28B6              in R2,0x38
 02CC 22FC              sbrc R2,2
 02CE 0FC0              rjmp L50
 02D0                   .dbline 289
 02D0           ;  {
 02D0                   .dbline 290
 02D0           ;    TimeInterval = TCNT1;
 02D0 2CB4              in R2,0x2c
 02D2 3DB4              in R3,0x2d
 02D4 4424              clr R4
 02D6 5524              clr R5
 02D8 30921300          sts _TimeInterval+1,R3
 02DC 20921200          sts _TimeInterval,R2
 02E0 50921500          sts _TimeInterval+2+1,R5
 02E4 40921400          sts _TimeInterval+2,R4
 02E8                   .dbline 291
 02E8           ;    TimeIntervalRefreshed = 1;
 02E8 81E0              ldi R24,1
 02EA 80931000          sts _TimeIntervalRefreshed,R24
 02EE                   .dbline 292
 02EE           ;  }
 02EE           L50:
 02EE           L49:
 02EE                   .dbline 295
 02EE           ;  
 02EE           ;  //Mileage Counting
 02EE           ;  MileagePulseCnt++;
 02EE 80915F00          lds R24,_MileagePulseCnt
 02F2 90916000          lds R25,_MileagePulseCnt+1
 02F6 0196              adiw R24,1
 02F8 90936000          sts _MileagePulseCnt+1,R25
 02FC 80935F00          sts _MileagePulseCnt,R24
 0300                   .dbline 296
 0300           ;  if (MileagePulseCnt>=998)
 0300 863E              cpi R24,230
 0302 E3E0              ldi R30,3
 0304 9E07              cpc R25,R30
 0306 C0F1              brlo L52
 0308                   .dbline 297
 0308           ;  {
 0308                   .dbline 298
 0308           ;    mileage++;
 0308 41E0              ldi R20,1
 030A 50E0              ldi R21,0
 030C 60E0              ldi R22,0
 030E 70E0              ldi R23,0
 0310 40905900          lds R4,_mileage+2
 0314 50905A00          lds R5,_mileage+2+1
 0318 20905700          lds R2,_mileage
 031C 30905800          lds R3,_mileage+1
 0320 240E              add R2,R20
 0322 351E              adc R3,R21
 0324 461E              adc R4,R22
 0326 571E              adc R5,R23
 0328 30925800          sts _mileage+1,R3
 032C 20925700          sts _mileage,R2
 0330 50925A00          sts _mileage+2+1,R5
 0334 40925900          sts _mileage+2,R4
 0338                   .dbline 299
 0338           ;    MileageCurrent++;
 0338 41E0              ldi R20,1
 033A 50E0              ldi R21,0
 033C 60E0              ldi R22,0
 033E 70E0              ldi R23,0
 0340 40905D00          lds R4,_MileageCurrent+2
 0344 50905E00          lds R5,_MileageCurrent+2+1
 0348 20905B00          lds R2,_MileageCurrent
 034C 30905C00          lds R3,_MileageCurrent+1
 0350 240E              add R2,R20
 0352 351E              adc R3,R21
 0354 461E              adc R4,R22
 0356 571E              adc R5,R23
 0358 30925C00          sts _MileageCurrent+1,R3
 035C 20925B00          sts _MileageCurrent,R2
 0360 50925E00          sts _MileageCurrent+2+1,R5
 0364 40925D00          sts _MileageCurrent+2,R4
 0368                   .dbline 300
 0368           ;    MileageSaved = 0;
 0368 2224              clr R2
 036A 20926100          sts _MileageSaved,R2
 036E                   .dbline 301
 036E           ;    MileagePulseCnt = 0;
 036E 3324              clr R3
 0370 30926000          sts _MileagePulseCnt+1,R3
 0374 20925F00          sts _MileagePulseCnt,R2
 0378                   .dbline 302
 0378           ;  }
 0378           L52:
 0378                   .dbline 305
 0378           ; 
 0378           ;  //clear Timer
 0378           ;  TCNT1H = 0;
 0378 2224              clr R2
 037A 2DBC              out 0x2d,R2
 037C                   .dbline 306
 037C           ;  TCNT1L = 0;
 037C 2CBC              out 0x2c,R2
 037E                   .dbline -2
 037E           L47:
 037E 00D0              rcall pop_gset2
 0380 2990              ld R2,y+
 0382 2FBE              out 0x3f,R2
 0384 E991              ld R30,y+
 0386 B991              ld R27,y+
 0388 A991              ld R26

⌨️ 快捷键说明

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