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

📄 m8demo.lis

📁 AVR系列被广泛应用的单片机MEGA8开发(原理图)及例程
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .even
 01F4           _adc_isr::
 01F4 2A92              st -y,R2
 01F6 3A92              st -y,R3
 01F8 4A92              st -y,R4
 01FA 5A92              st -y,R5
 01FC 8A93              st -y,R24
 01FE 2FB6              in R2,0x3f
 0200 2A92              st -y,R2
 0202                   .dbline -1
 0202                   .dbline 182
 0202           ;  }
 0202           ; #pragma interrupt_handler adc_isr:15
 0202           ; void adc_isr(void)
 0202           ; {
 0202                   .dbline 184
 0202           ;  //conversion complete, read value (int) using...
 0202           ;   adc_value=ADCL;            //Read 8 low bits first (important)
 0202 24B0              in R2,0x4
 0204 3324              clr R3
 0206 30920300          sts _adc_value+1,R3
 020A 20920200          sts _adc_value,R2
 020E                   .dbline 185
 020E           ;   adc_value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
 020E 25B0              in R2,0x5
 0210 3324              clr R3
 0212 322C              mov R3,R2
 0214 2224              clr R2
 0216 40900200          lds R4,_adc_value
 021A 50900300          lds R5,_adc_value+1
 021E 4228              or R4,R2
 0220 5328              or R5,R3
 0222 50920300          sts _adc_value+1,R5
 0226 40920200          sts _adc_value,R4
 022A                   .dbline 186
 022A           ;   ADCSR = 0x00;
 022A 2224              clr R2
 022C 26B8              out 0x6,R2
 022E                   .dbline 187
 022E           ;   ADCSR = 0xC8;
 022E 88EC              ldi R24,200
 0230 86B9              out 0x6,R24
 0232                   .dbline -2
 0232           L35:
 0232 2990              ld R2,y+
 0234 2FBE              out 0x3f,R2
 0236 8991              ld R24,y+
 0238 5990              ld R5,y+
 023A 4990              ld R4,y+
 023C 3990              ld R3,y+
 023E 2990              ld R2,y+
 0240                   .dbline 0 ; func end
 0240 1895              reti
 0242                   .dbend
 0242                   .dbfunc e ReadADC _ReadADC fI
 0242           ;              i -> R20,R21
 0242           ;        channel -> R16
                        .even
 0242           _ReadADC::
 0242 00D0              rcall push_gset1
 0244                   .dbline -1
 0244                   .dbline 192
 0244           ; 
 0244           ; }
 0244           ; 
 0244           ; int ReadADC( unsigned char channel)
 0244           ; {
 0244                   .dbline 195
 0244           ;     int i;
 0244           ; 
 0244           ;     ADMUX = channel;                        // Select channel
 0244 07B9              out 0x7,R16
 0246                   .dbline 197
 0246           ;     
 0246           ;     ADCSR |= 0x40;                          // Start conversion
 0246 369A              sbi 0x6,6
 0248           L37:
 0248                   .dbline 199
 0248           L38:
 0248                   .dbline 199
 0248           ;     
 0248           ;     while (!(ADCSR & 0x10));                // Check if converstion is ready
 0248 349B              sbis 0x6,4
 024A FECF              rjmp L37
 024C                   .dbline 201
 024C           ;     
 024C           ;     ADCSR |= 0x10;                          // Clear Conversion ready flag by setting the bit
 024C 349A              sbi 0x6,4
 024E                   .dbline 203
 024E           ; 
 024E           ;     i = ADCL;                               // Read 8 low bits first (important)
 024E 44B1              in R20,0x4
 0250 5527              clr R21
 0252                   .dbline 204
 0252           ;     i += (int)ADCH << 8;                    // Read 2 high bits and multiply with 256
 0252 25B0              in R2,0x5
 0254 3324              clr R3
 0256 322C              mov R3,R2
 0258 2224              clr R2
 025A 420D              add R20,R2
 025C 531D              adc R21,R3
 025E                   .dbline 206
 025E           ; 
 025E           ;     return i;
 025E 8A01              movw R16,R20
 0260                   .dbline -2
 0260           L36:
 0260 00D0              rcall pop_gset1
 0262                   .dbline 0 ; func end
 0262 0895              ret
 0264                   .dbsym r i 20 I
 0264                   .dbsym r channel 16 c
 0264                   .dbend
 0264                   .dbfunc e init_devices _init_devices fV
                        .even
 0264           _init_devices::
 0264                   .dbline -1
 0264                   .dbline 211
 0264           ; }
 0264           ; 
 0264           ; //call this routine to initialise all peripherals
 0264           ; void init_devices(void)
 0264           ; {
 0264                   .dbline 213
 0264           ;  //stop errant interrupts until set up
 0264           ;  CLI(); //disable all interrupts
 0264 F894              cli
 0266                   .dbline 214
 0266           ;  port_init();
 0266 E4DE              rcall _port_init
 0268                   .dbline 215
 0268           ;  timer0_init();
 0268 EFDE              rcall _timer0_init
 026A                   .dbline 216
 026A           ;  timer1_init();
 026A 60DF              rcall _timer1_init
 026C                   .dbline 219
 026C           ; // spi_init();
 026C           ; // twi_init();
 026C           ;  uart0_init();
 026C 00D0              rcall _uart0_init
 026E                   .dbline 222
 026E           ; // adc_init();
 026E           ; 
 026E           ;  MCUCR = 0x00;
 026E 2224              clr R2
 0270 25BE              out 0x35,R2
 0272                   .dbline 223
 0272           ;  GICR  = 0x00;
 0272 2BBE              out 0x3b,R2
 0274                   .dbline 224
 0274           ;  TIMSK = 0x05; //timer interrupt sources
 0274 85E0              ldi R24,5
 0276 89BF              out 0x39,R24
 0278                   .dbline 225
 0278           ;  SEI(); //re-enable interrupts
 0278 7894              sei
 027A                   .dbline -2
 027A           L40:
 027A                   .dbline 0 ; func end
 027A 0895              ret
 027C                   .dbend
 027C                   .dbfunc e DisplayHexData _DisplayHexData fV
 027C           ;     temptimer4 -> R12
 027C           ;     temptimer3 -> R10
 027C           ;     temptimer2 -> R22
 027C           ;     temptimer1 -> R20
 027C           ;         timerL -> R22
 027C           ;         timerH -> R12
                        .even
 027C           _DisplayHexData::
 027C 00D0              rcall push_gset4
 027E 622F              mov R22,R18
 0280 C02E              mov R12,R16
 0282 2397              sbiw R28,3
 0284                   .dbline -1
 0284                   .dbline 232
 0284           ;  //all peripherals are now initialised
 0284           ; }
 0284           ; 
 0284           ; 
 0284           ; void DisplayHexData(unsigned char timerH,unsigned char timerL)
 0284           ; 
 0284           ; { 
 0284                   .dbline 234
 0284           ; unsigned char  temptimer1,temptimer2,temptimer3,temptimer4;
 0284           ;               temptimer1=timerL%16;
 0284 10E1              ldi R17,16
 0286 062F              mov R16,R22
 0288 00D0              rcall mod8u
 028A 402F              mov R20,R16
 028C                   .dbline 235
 028C           ;               temptimer2=timerL/16;
 028C 862F              mov R24,R22
 028E 8295              swap R24
 0290 8F70              andi R24,#0x0F
 0292 682F              mov R22,R24
 0294                   .dbline 236
 0294           ;               temptimer3=timerH%16;
 0294 10E1              ldi R17,16
 0296 0C2D              mov R16,R12
 0298 00D0              rcall mod8u
 029A A02E              mov R10,R16
 029C                   .dbline 237
 029C           ;               temptimer4=timerH/16;
 029C 8C2D              mov R24,R12
 029E 8295              swap R24
 02A0 8F70              andi R24,#0x0F
 02A2 C82E              mov R12,R24
 02A4                   .dbline 239
 02A4           ; 
 02A4           ; Display_Data_LED(temptimer1,temptimer2,temptimer3,temptimer4);
 02A4 CA82              std y+2,R12
 02A6 A882              std y+0,R10
 02A8 262F              mov R18,R22
 02AA 042F              mov R16,R20
 02AC 29D0              rcall _Display_Data_LED
 02AE                   .dbline -2
 02AE           L41:
 02AE 2396              adiw R28,3
 02B0 00D0              rcall pop_gset4
 02B2                   .dbline 0 ; func end
 02B2 0895              ret
 02B4                   .dbsym r temptimer4 12 c
 02B4                   .dbsym r temptimer3 10 c
 02B4                   .dbsym r temptimer2 22 c
 02B4                   .dbsym r temptimer1 20 c
 02B4                   .dbsym r timerL 22 c
 02B4                   .dbsym r timerH 12 c
 02B4                   .dbend
 02B4                   .dbfunc e DisplayData _DisplayData fV
 02B4           ;     temptimer4 -> R12
 02B4           ;     temptimer3 -> R10
 02B4           ;     temptimer2 -> R22
 02B4           ;     temptimer1 -> R20
 02B4           ;          timer -> R20,R21
                        .even
 02B4           _DisplayData::
 02B4 00D0              rcall push_gset4
 02B6 A801              movw R20,R16
 02B8 2397              sbiw R28,3
 02BA                   .dbline -1
 02BA                   .dbline 244
 02BA           ; 
 02BA           ; }
 02BA           ; 
 02BA           ; void DisplayData(unsigned int timer)
 02BA           ; { 
 02BA                   .dbline 247
 02BA           ; 
 02BA           ; unsigned char  temptimer1,temptimer2,temptimer3,temptimer4;
 02BA           ; temptimer4=timer/1000;
 02BA 28EE              ldi R18,1000
 02BC 33E0              ldi R19,3
 02BE 8A01              movw R16,R20
 02C0 00D0              rcall div16u
 02C2 C02E              mov R12,R16
 02C4                   .dbline 248
 02C4           ; timer=timer%1000;
 02C4 28EE              ldi R18,1000
 02C6 33E0              ldi R19,3
 02C8 8A01              movw R16,R20
 02CA 00D0              rcall mod16u
 02CC A801              movw R20,R16
 02CE                   .dbline 249
 02CE           ; temptimer3=timer/100;
 02CE 24E6              ldi R18,100
 02D0 30E0              ldi R19,0
 02D2 00D0              rcall div16u
 02D4 A02E              mov R10,R16
 02D6                   .dbline 250
 02D6           ; timer=timer%100;
 02D6 24E6              ldi R18,100
 02D8 30E0              ldi R19,0
 02DA 8A01              movw R16,R20
 02DC 00D0              rcall mod16u
 02DE A801              movw R20,R16
 02E0                   .dbline 251
 02E0           ; temptimer2=timer/10;
 02E0 2AE0              ldi R18,10
 02E2 30E0              ldi R19,0
 02E4 00D0              rcall div16u
 02E6 602F              mov R22,R16
 02E8                   .dbline 252
 02E8           ;  temptimer1=timer%10;
 02E8 2AE0              ldi R18,10
 02EA 30E0              ldi R19,0
 02EC 8A01              movw R16,R20
 02EE 00D0              rcall mod16u
 02F0 402F              mov R20,R16
 02F2                   .dbline 253
 02F2           ; Display_Data_LED(temptimer1,temptimer2,temptimer3,temptimer4);
 02F2 CA82              std y+2,R12
 02F4 A882              std y+0,R10
 02F6 262F              mov R18,R22
 02F8 03D0              rcall _Display_Data_LED
 02FA                   .dbline -2
 02FA           L42:
 02FA 2396              adiw R28,3
 02FC 00D0              rcall pop_gset4
 02FE                   .dbline 0 ; func end
 02FE 0895              ret
 0300                   .dbsym r temptimer4 12 c
 0300                   .dbsym r temptimer3 10 c
 0300                   .dbsym r temptimer2 22 c
 0300                   .dbsym r temptimer1 20 c
 0300                   .dbsym r timer 20 i
 0300                   .dbend
 0300                   .dbfunc e Display_Data_LED _Display_Data_LED fV
 0300           ;  displaydata_2 -> R22
 0300           ;    displaydata -> R20
 0300           ;          Data4 -> y+6
 0300           ;          Data3 -> y+4
 0300           ;          Data2 -> R18
 0300           ;          Data1 -> R16
                        .even
 0300           _Display_Data_LED::
 0300 00D0              rcall push_gset2
 0302                   .dbline -1
 0302                   .dbline 258
 0302           ; }
 0302           ; 
 0302           ; void Display_Data_LED(unsigned char  Data1, unsigned char  Data2,unsigned char  Data3,unsigned char  Data4)
 0302           ; 
 0302           ; {unsigned char  displaydata,displaydata_2;
 0302                   .dbline 260
 0302           ; 
 0302           ; switch(Display_Position)
 0302 40910500          lds R20,_Display_Position
 0306 5527              clr R21
 0308 4130              cpi R20,1
 030A E0E0              ldi R30,0
 030C 5E07              cpc R21,R30
 030E 71F0              breq L47
 0310 4230              cpi R20,2
 0312 E0E0              ldi R30,0
 0314 5E07              cpc R21,R30
 0316 E1F0              breq L48
 0318 4330              cpi R20,3

⌨️ 快捷键说明

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