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

📄 main.lis

📁 基于MEGA128的双通道AD转换例程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\avrvi\AVRVi_m128_Starter_Kit\ADC_2_Channel\source\main.c
 0000                   .dbfunc e adc_init _adc_init fV
                        .even
 0000           _adc_init::
 0000                   .dbline -1
 0000                   .dbline 14
 0000           ; /************************************************
 0000           ; 文件:main.c
 0000           ; 用途:
 0000           ; 注意:内部8M晶振
 0000           ; 创建:2008.4.1
 0000           ; 修改:2008.4.1
 0000           ; Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
 0000           ; ************************************************/
 0000           ; 
 0000           ; #include "config.h"
 0000           ; float adc_result;
 0000           ; 
 0000           ; void adc_init(void)
 0000           ; {
 0000                   .dbline 15
 0000           ;  ADCSRA = 0x00; //disable adc
 0000 2224              clr R2
 0002 26B8              out 0x6,R2
 0004                   .dbline 16
 0004           ;  ADMUX = (1<<REFS0)|(1<<ADLAR);
 0004 80E6              ldi R24,96
 0006 87B9              out 0x7,R24
 0008                   .dbline 17
 0008           ;  ACSR = (1<<ACD);
 0008 80E8              ldi R24,128
 000A 88B9              out 0x8,R24
 000C                   .dbline 18
 000C           ;  ADCSRA = (1<<ADEN);
 000C 86B9              out 0x6,R24
 000E                   .dbline -2
 000E           L2:
 000E                   .dbline 0 ; func end
 000E 0895              ret
 0010                   .dbend
 0010                   .dbfunc e get_adc _get_adc fV
 0010           ;          value -> R20,R21
 0010           ;              i -> R22,R23
 0010           ;    adc_channel -> R22,R23
                        .even
 0010           _get_adc::
 0010 0E940000          xcall push_gset2
 0014 B801              movw R22,R16
 0016                   .dbline -1
 0016                   .dbline 22
 0016           ; }
 0016           ; 
 0016           ; void get_adc(unsigned adc_channel)
 0016           ; {
 0016                   .dbline 23
 0016           ;  unsigned int value=0,i;
 0016 4427              clr R20
 0018 5527              clr R21
 001A                   .dbline 25
 001A           ;  
 001A           ;  adc_init();
 001A F2DF              xcall _adc_init
 001C                   .dbline 26
 001C           ;  ADMUX += adc_channel;
 001C 27B0              in R2,0x7
 001E 3324              clr R3
 0020 260E              add R2,R22
 0022 371E              adc R3,R23
 0024 27B8              out 0x7,R2
 0026                   .dbline 28
 0026           ;  
 0026           ;  for(i=0;i<4;i++)
 0026 6627              clr R22
 0028 7727              clr R23
 002A 0BC0              xjmp L7
 002C           L4:
 002C                   .dbline 29
 002C                   .dbline 30
 002C 369A              sbi 0x6,6
 002E                   .dbline 31
 002E 04E6              ldi R16,100
 0030 10E0              ldi R17,0
 0032 0E940000          xcall _delay_nus
 0036                   .dbline 32
 0036 25B0              in R2,0x5
 0038 3324              clr R3
 003A 420D              add R20,R2
 003C 531D              adc R21,R3
 003E                   .dbline 33
 003E           L5:
 003E                   .dbline 28
 003E 6F5F              subi R22,255  ; offset = 1
 0040 7F4F              sbci R23,255
 0042           L7:
 0042                   .dbline 28
 0042 6430              cpi R22,4
 0044 E0E0              ldi R30,0
 0046 7E07              cpc R23,R30
 0048 88F3              brlo L4
 004A                   .dbline 35
 004A           ;  {
 004A           ;   ADCSRA |= (1<<ADSC); 
 004A           ;   delay_nus(100);
 004A           ;   value += ADCH;
 004A           ;  }
 004A           ;  
 004A           ;  value >>= 2;
 004A 1A01              movw R2,R20
 004C 3694              lsr R3
 004E 2794              ror R2
 0050 3694              lsr R3
 0052 2794              ror R2
 0054 A101              movw R20,R2
 0056                   .dbline 37
 0056           ;  
 0056           ;  adc_result=(value*4.97)/256;
 0056 00E0              ldi R16,<L8
 0058 10E0              ldi R17,>L8
 005A 0E940000          xcall lpm32
 005E 3A93              st -y,R19
 0060 2A93              st -y,R18
 0062 1A93              st -y,R17
 0064 0A93              st -y,R16
 0066 00E0              ldi R16,<L9
 0068 10E0              ldi R17,>L9
 006A 0E940000          xcall lpm32
 006E 3A93              st -y,R19
 0070 2A93              st -y,R18
 0072 1A93              st -y,R17
 0074 0A93              st -y,R16
 0076 8A01              movw R16,R20
 0078 1695              lsr R17
 007A 0795              ror R16
 007C 0E940000          xcall int2fp
 0080 3A93              st -y,R19
 0082 2A93              st -y,R18
 0084 1A93              st -y,R17
 0086 0A93              st -y,R16
 0088 0E940000          xcall empy32fs
 008C 8A01              movw R16,R20
 008E 0170              andi R16,1
 0090 1070              andi R17,0
 0092 0E940000          xcall int2fp
 0096 3A93              st -y,R19
 0098 2A93              st -y,R18
 009A 1A93              st -y,R17
 009C 0A93              st -y,R16
 009E 0E940000          xcall add32fs
 00A2 0E940000          xcall empy32fs
 00A6 00E0              ldi R16,<L10
 00A8 10E0              ldi R17,>L10
 00AA 0E940000          xcall lpm32
 00AE 3A93              st -y,R19
 00B0 2A93              st -y,R18
 00B2 1A93              st -y,R17
 00B4 0A93              st -y,R16
 00B6 0E940000          xcall div32f
 00BA 10930100          sts _adc_result+1,R17
 00BE 00930000          sts _adc_result,R16
 00C2 30930300          sts _adc_result+2+1,R19
 00C6 20930200          sts _adc_result+2,R18
 00CA                   .dbline -2
 00CA           L3:
 00CA 0E940000          xcall pop_gset2
 00CE                   .dbline 0 ; func end
 00CE 0895              ret
 00D0                   .dbsym r value 20 i
 00D0                   .dbsym r i 22 i
 00D0                   .dbsym r adc_channel 22 i
 00D0                   .dbend
 00D0                   .dbfunc e main _main fV
 00D0           ;              i -> R22
 00D0           ;        adc_str -> R20,R21
                        .even
 00D0           _main::
 00D0 2297              sbiw R28,2
 00D2                   .dbline -1
 00D2                   .dbline 41
 00D2           ; }
 00D2           ; 
 00D2           ; void main(void)
 00D2           ; { 
 00D2                   .dbline 42
 00D2           ;  unsigned char *adc_str="The adc result of channel 0 is : 2.031 V\n\n",i=0;
 00D2 40E0              ldi R20,<L12
 00D4 50E0              ldi R21,>L12
 00D6                   .dbline 42
 00D6 6627              clr R22
 00D8                   .dbline 43
 00D8           ;  CLI();
 00D8 F894              cli
 00DA                   .dbline 44
 00DA           ;  Com_init();
 00DA 0E940000          xcall _Com_init
 00DE                   .dbline 45
 00DE           ;  SEI();
 00DE 7894              sei
 00E0 56C1              xjmp L14
 00E2           L13:
 00E2                   .dbline 47
 00E2           ;  while(1)
 00E2           ;  {
 00E2                   .dbline 48
 00E2           ;   get_adc(i);
 00E2 062F              mov R16,R22
 00E4 1127              clr R17
 00E6 94DF              xcall _get_adc
 00E8                   .dbline 49
 00E8           ;   adc_str[26]=i+0x30;
 00E8 862F              mov R24,R22
 00EA 805D              subi R24,208    ; addi 48
 00EC FA01              movw R30,R20
 00EE 828F              std z+26,R24
 00F0                   .dbline 50
 00F0           ;   adc_result *= 1000;
 00F0 00E0              ldi R16,<L16
 00F2 10E0              ldi R17,>L16
 00F4 0E940000          xcall lpm32
 00F8 3A93              st -y,R19
 00FA 2A93              st -y,R18
 00FC 1A93              st -y,R17
 00FE 0A93              st -y,R16
 0100 40900200          lds R4,_adc_result+2
 0104 50900300          lds R5,_adc_result+2+1
 0108 20900000          lds R2,_adc_result
 010C 30900100          lds R3,_adc_result+1
 0110 5A92              st -y,R5
 0112 4A92              st -y,R4
 0114 3A92              st -y,R3
 0116 2A92              st -y,R2
 0118 0E940000          xcall empy32f
 011C 10930100          sts _adc_result+1,R17
 0120 00930000          sts _adc_result,R16
 0124 30930300          sts _adc_result+2+1,R19
 0128 20930200          sts _adc_result+2,R18
 012C                   .dbline 51
 012C           ;   adc_str[33]=(unsigned int)adc_result/1000+0x30;
 012C 3A93              st -y,R19
 012E 2A93              st -y,R18
 0130 1A93              st -y,R17
 0132 0A93              st -y,R16
 0134 00E0              ldi R16,<L19
 0136 10E0              ldi R17,>L19
 0138 0E940000          xcall lpm32
 013C 3A93              st -y,R19
 013E 2A93              st -y,R18
 0140 1A93              st -y,R17
 0142 0A93              st -y,R16
 0144 0E940000          xcall cmp32f
 0148 ECF0              brlt L17
 014A 40900200          lds R4,_adc_result+2
 014E 50900300          lds R5,_adc_result+2+1
 0152 20900000          lds R2,_adc_result
 0156 30900100          lds R3,_adc_result+1
 015A 5A92              st -y,R5
 015C 4A92              st -y,R4
 015E 3A92              st -y,R3
 0160 2A92              st -y,R2
 0162 00E0              ldi R16,<L19
 0164 10E0              ldi R17,>L19
 0166 0E940000          xcall lpm32
 016A 3A93              st -y,R19
 016C 2A93              st -y,R18
 016E 1A93              st -y,R17
 0170 0A93              st -y,R16

⌨️ 快捷键说明

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