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

📄 ad.lis

📁 用ICC编写的程序包括SPI
💻 LIS
字号:
                        .module ad.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\IccAvr_Pro\ad.c
                        .area data(ram, con, rel)
 0000           _AD_value::
 0000                   .blkb 2
                        .area idata
 0000 0000              .word 0
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 0000              .word 0
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 0000              .word 0
                        .area data(ram, con, rel)
 0006                   .blkb 2
                        .area idata
 0006 0000              .word 0
                        .area data(ram, con, rel)
 0008                   .blkb 2
                        .area idata
 0008 0000              .word 0
                        .area data(ram, con, rel)
 000A                   .blkb 2
                        .area idata
 000A 0000              .word 0
                        .area data(ram, con, rel)
 000C                   .blkb 2
                        .area idata
 000C 0000              .word 0
                        .area data(ram, con, rel)
 000E                   .blkb 2
                        .area idata
 000E 0000              .word 0
                        .area data(ram, con, rel)
 0010                   .dbsym e AD_value _AD_value A[16:8]i
                        .area lit(rom, con, rel)
 0000           _ad_channel::
 0000 0001              .byte 0,1
 0002 0203              .byte 2,3
 0004 0405              .byte 4,5
 0006 0607              .byte 6,7
 0008                   .dbsym e ad_channel _ad_channel A[8:8]kc
                        .area vector(rom, abs)
                        .org 56
 0038 0C940000          jmp _adc_isr
                        .area lit(rom, con, rel)
                        .area text(rom, con, rel)
 0000                   .dbfunc e adc_isr _adc_isr fV
                        .even
 0000           _adc_isr::
 0000 0A92              st -y,R0
 0002 1A92              st -y,R1
 0004 2A92              st -y,R2
 0006 3A92              st -y,R3
 0008 4A92              st -y,R4
 000A 5A92              st -y,R5
 000C 6A92              st -y,R6
 000E 7A92              st -y,R7
 0010 8A93              st -y,R24
 0012 9A93              st -y,R25
 0014 EA93              st -y,R30
 0016 FA93              st -y,R31
 0018 0FB6              in R0,0x3f
 001A 0A92              st -y,R0
 001C                   .dbline -1
 001C                   .dbline 9
 001C           ; #include "ad.h"
 001C           ; 
 001C           ; unsigned int AD_value[AD_size]={0,0,0,0,0,0,0,0}; 
 001C           ; unsigned char ad_index; 
 001C           ; const unsigned char ad_channel[AD_size]={0,1,2,3,4,5,6,7};
 001C           ; unsigned char ad_frist_flag;
 001C           ; #pragma interrupt_handler adc_isr:15
 001C           ; void adc_isr(void)
 001C           ; {
 001C                   .dbline 13
 001C           ;  //conversion complete, read value (int) using...
 001C           ;  // value=ADCL;            //Read 8 low bits first (important)
 001C           ;  // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
 001C           ;  if(ad_frist_flag)
 001C 20900000          lds R2,_ad_frist_flag
 0020 2220              tst R2
 0022 21F0              breq L2
 0024                   .dbline 14
 0024           ;         ad_frist_flag=0;
 0024 2224              clr R2
 0026 20920000          sts _ad_frist_flag,R2
 002A 33C0              xjmp L3
 002C           L2:
 002C                   .dbline 16
 002C           ;  else
 002C           ;         {
 002C                   .dbline 17
 002C           ;         AD_value[ad_index]=ADCL;
 002C 20900100          lds R2,_ad_index
 0030 82E0              ldi R24,2
 0032 829D              mul R24,R2
 0034 F001              movw R30,R0
 0036 80E0              ldi R24,<_AD_value
 0038 90E0              ldi R25,>_AD_value
 003A E80F              add R30,R24
 003C F91F              adc R31,R25
 003E 24B0              in R2,0x4
 0040 3324              clr R3
 0042 3182              std z+1,R3
 0044 2082              std z+0,R2
 0046                   .dbline 18
 0046           ;         AD_value[ad_index]|=(int)AD_value[ad_index]<<8;
 0046 20900100          lds R2,_ad_index
 004A 82E0              ldi R24,2
 004C 829D              mul R24,R2
 004E 1001              movw R2,R0
 0050 80E0              ldi R24,<_AD_value
 0052 90E0              ldi R25,>_AD_value
 0054 280E              add R2,R24
 0056 391E              adc R3,R25
 0058 F101              movw R30,R2
 005A 4080              ldd R4,z+0
 005C 5180              ldd R5,z+1
 005E 3201              movw R6,R4
 0060 762C              mov R7,R6
 0062 6624              clr R6
 0064 4628              or R4,R6
 0066 5728              or R5,R7
 0068 5182              std z+1,R5
 006A 4082              std z+0,R4
 006C                   .dbline 19
 006C           ;         ad_index++;
 006C 80910100          lds R24,_ad_index
 0070 8F5F              subi R24,255    ; addi 1
 0072 80930100          sts _ad_index,R24
 0076                   .dbline 20
 0076           ;         if(ad_index<sizeof(ad_channel))
 0076 8830              cpi R24,8
 0078 60F4              brsh L4
 007A                   .dbline 21
 007A           ;                       {
 007A                   .dbline 22
 007A           ;                        ADMUX|=ad_channel[ad_index];
 007A 80E0              ldi R24,<_ad_channel
 007C 90E0              ldi R25,>_ad_channel
 007E E0910100          lds R30,_ad_index
 0082 FF27              clr R31
 0084 E80F              add R30,R24
 0086 F91F              adc R31,R25
 0088 E491              lpm R30,Z
 008A 27B0              in R2,0x7
 008C 2E2A              or R2,R30
 008E 27B8              out 0x7,R2
 0090                   .dbline 23
 0090           ;                        ADCSRA|=BIT(ADSC);
 0090 369A              sbi 0x6,6
 0092                   .dbline 24
 0092           ;                        }
 0092           L4:
 0092                   .dbline 25
 0092           L3:
 0092                   .dbline -2
 0092           L1:
 0092 0990              ld R0,y+
 0094 0FBE              out 0x3f,R0
 0096 F991              ld R31,y+
 0098 E991              ld R30,y+
 009A 9991              ld R25,y+
 009C 8991              ld R24,y+
 009E 7990              ld R7,y+
 00A0 6990              ld R6,y+
 00A2 5990              ld R5,y+
 00A4 4990              ld R4,y+
 00A6 3990              ld R3,y+
 00A8 2990              ld R2,y+
 00AA 1990              ld R1,y+
 00AC 0990              ld R0,y+
 00AE                   .dbline 0 ; func end
 00AE 1895              reti
 00B0                   .dbend
 00B0                   .dbfunc e adc_init _adc_init fV
                        .even
 00B0           _adc_init::
 00B0                   .dbline -1
 00B0                   .dbline 29
 00B0           ;         }
 00B0           ; }
 00B0           ; 
 00B0           ; void adc_init(void)
 00B0           ; {
 00B0                   .dbline 30
 00B0           ;  ADCSR = 0x00; //disable adc
 00B0 2224              clr R2
 00B2 26B8              out 0x6,R2
 00B4                   .dbline 32
 00B4           ;           //select adc input 0
 00B4           ;  ADMUX=BIT(REFS0);
 00B4 80E4              ldi R24,64
 00B6 87B9              out 0x7,R24
 00B8                   .dbline 33
 00B8           ;  ADCSR=BIT(ADPS2)|BIT(ADEN)|BIT(ADIE);
 00B8 8CE8              ldi R24,140
 00BA 86B9              out 0x6,R24
 00BC                   .dbline 34
 00BC           ;  ad_frist_flag=1;
 00BC 81E0              ldi R24,1
 00BE 80930000          sts _ad_frist_flag,R24
 00C2                   .dbline -2
 00C2           L6:
 00C2                   .dbline 0 ; func end
 00C2 0895              ret
 00C4                   .dbend
 00C4                   .dbfunc e adc_start _adc_start fV
                        .even
 00C4           _adc_start::
 00C4                   .dbline -1
 00C4                   .dbline 39
 00C4           ;  
 00C4           ; }
 00C4           ; 
 00C4           ; void adc_start(void)
 00C4           ; {
 00C4                   .dbline 40
 00C4           ;        ADMUX|=ad_channel[ad_index++];
 00C4 20900100          lds R2,_ad_index
 00C8 3324              clr R3
 00CA 822D              mov R24,R2
 00CC 8F5F              subi R24,255    ; addi 1
 00CE 80930100          sts _ad_index,R24
 00D2 80E0              ldi R24,<_ad_channel
 00D4 90E0              ldi R25,>_ad_channel
 00D6 E22D              mov R30,R2
 00D8 FF27              clr R31
 00DA E80F              add R30,R24
 00DC F91F              adc R31,R25
 00DE E491              lpm R30,Z
 00E0 27B0              in R2,0x7
 00E2 2E2A              or R2,R30
 00E4 27B8              out 0x7,R2
 00E6                   .dbline 41
 00E6           ;        ADCSR|=BIT(ADSC);
 00E6 369A              sbi 0x6,6
 00E8                   .dbline -2
 00E8           L7:
 00E8                   .dbline 0 ; func end
 00E8 0895              ret
 00EA                   .dbend
                        .area bss(ram, con, rel)
 0000           _ad_frist_flag::
 0000                   .blkb 1
 0001                   .dbsym e ad_frist_flag _ad_frist_flag c
 0001           _ad_index::
 0001                   .blkb 1
 0002                   .dbsym e ad_index _ad_index c

⌨️ 快捷键说明

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