📄 main.lis
字号:
.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 + -