📄 adc.lst
字号:
__text_start:
__start:
006B EFCF LDI R28,0xFF
006C E1D0 LDI R29,0x10
006D BFCD OUT 0x3D,R28
006E BFDE OUT 0x3E,R29
006F 51C0 SUBI R28,0x10
0070 40D0 SBCI R29,0
0071 EA0A LDI R16,0xAA
0072 8308 STD Y+0,R16
0073 2400 CLR R0
0074 E2EB LDI R30,0x2B
0075 E0F1 LDI R31,1
0076 E011 LDI R17,1
0077 3FEF CPI R30,0xFF
0078 07F1 CPC R31,R17
0079 F011 BEQ 0x007C
007A 9201 ST R0,Z+
007B CFFB RJMP 0x0077
007C 8300 STD Z+0,R16
007D EAEA LDI R30,0xAA
007E E0F0 LDI R31,0
007F E0A0 LDI R26,0
0080 E0B1 LDI R27,1
0081 E010 LDI R17,0
0082 3DE5 CPI R30,0xD5
0083 07F1 CPC R31,R17
0084 F021 BEQ 0x0089
0085 95C8 LPM
0086 9631 ADIW R30,1
0087 920D ST R0,X+
0088 CFF9 RJMP 0x0082
0089 940E00F4 CALL _main
_exit:
008B CFFF RJMP _exit
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\ADC_2_Channel\source\main.c
(0001) /************************************************
(0002) 文件:main.c
(0003) 用途:
(0004) 注意:内部8M晶振
(0005) 创建:2008.4.1
(0006) 修改:2008.4.1
(0007) Copy Right (c) www.avrvi.com AVR与虚拟仪器
(0008) ************************************************/
(0009)
(0010) #include "config.h"
(0011) float adc_result;
(0012)
(0013) void adc_init(void)
(0014) {
(0015) ADCSRA = 0x00; //disable adc
_adc_init:
008C 2422 CLR R2
008D B826 OUT 0x06,R2
(0016) ADMUX = (1<<REFS0)|(1<<ADLAR);
008E E680 LDI R24,0x60
008F B987 OUT 0x07,R24
(0017) ACSR = (1<<ACD);
0090 E880 LDI R24,0x80
0091 B988 OUT 0x08,R24
(0018) ADCSRA = (1<<ADEN);
0092 B986 OUT 0x06,R24
0093 9508 RET
_get_adc:
value --> R20
i --> R22
adc_channel --> R22
0094 940E0512 CALL push_gset2
0096 01B8 MOVW R22,R16
(0019) }
(0020)
(0021) void get_adc(unsigned adc_channel)
(0022) {
(0023) unsigned int value=0,i;
0097 2744 CLR R20
0098 2755 CLR R21
(0024)
(0025) adc_init();
0099 DFF2 RCALL _adc_init
(0026) ADMUX += adc_channel;
009A B027 IN R2,0x07
009B 2433 CLR R3
009C 0E26 ADD R2,R22
009D 1E37 ADC R3,R23
009E B827 OUT 0x07,R2
(0027)
(0028) for(i=0;i<4;i++)
009F 2766 CLR R22
00A0 2777 CLR R23
00A1 C00B RJMP 0x00AD
(0029) {
(0030) ADCSRA |= (1<<ADSC);
00A2 9A36 SBI 0x06,6
(0031) delay_nus(100);
00A3 E604 LDI R16,0x64
00A4 E010 LDI R17,0
00A5 940E0258 CALL _delay_nus
(0032) value += ADCH;
00A7 B025 IN R2,0x05
00A8 2433 CLR R3
00A9 0D42 ADD R20,R2
00AA 1D53 ADC R21,R3
00AB 5F6F SUBI R22,0xFF
00AC 4F7F SBCI R23,0xFF
00AD 3064 CPI R22,4
00AE E0E0 LDI R30,0
00AF 077E CPC R23,R30
00B0 F388 BCS 0x00A2
(0033) }
(0034)
(0035) value >>= 2;
00B1 011A MOVW R2,R20
00B2 9436 LSR R3
00B3 9427 ROR R2
00B4 9436 LSR R3
00B5 9427 ROR R2
00B6 01A1 MOVW R20,R2
(0036)
(0037) adc_result=(value*4.97)/256;
00B7 E90C LDI R16,0x9C
00B8 E010 LDI R17,0
00B9 940E0534 CALL lpm32
00BB 933A ST R19,-Y
00BC 932A ST R18,-Y
00BD 931A ST R17,-Y
00BE 930A ST R16,-Y
00BF E908 LDI R16,0x98
00C0 E010 LDI R17,0
00C1 940E0534 CALL lpm32
00C3 933A ST R19,-Y
00C4 932A ST R18,-Y
00C5 931A ST R17,-Y
00C6 930A ST R16,-Y
00C7 018A MOVW R16,R20
00C8 9516 LSR R17
00C9 9507 ROR R16
00CA 940E0590 CALL int2fp
00CC 933A ST R19,-Y
00CD 932A ST R18,-Y
00CE 931A ST R17,-Y
00CF 930A ST R16,-Y
00D0 940E06D9 CALL empy32fs
00D2 018A MOVW R16,R20
00D3 7001 ANDI R16,1
00D4 7010 ANDI R17,0
00D5 940E0590 CALL int2fp
00D7 933A ST R19,-Y
00D8 932A ST R18,-Y
00D9 931A ST R17,-Y
00DA 930A ST R16,-Y
00DB 940E05EA CALL add32fs
00DD 940E06D9 CALL empy32fs
00DF E904 LDI R16,0x94
00E0 E010 LDI R17,0
00E1 940E0534 CALL lpm32
00E3 933A ST R19,-Y
00E4 932A ST R18,-Y
00E5 931A ST R17,-Y
00E6 930A ST R16,-Y
00E7 940E064E CALL div32f
00E9 9310012C STS adc_result+1,R17
00EB 9300012B STS adc_result,R16
00ED 9330012E STS adc_result+3,R19
00EF 9320012D STS adc_result+2,R18
00F1 940E0503 CALL pop_gset2
00F3 9508 RET
_main:
i --> R22
adc_str --> R20
00F4 9722 SBIW R28,2
(0038) }
(0039)
(0040) void main(void)
(0041) {
(0042) unsigned char *adc_str="The adc result of channel 0 is : 2.031 V\n\n",i=0;
00F5 E040 LDI R20,0
00F6 E051 LDI R21,1
00F7 2766 CLR R22
(0043) CLI();
00F8 94F8 BCLR 7
(0044) Com_init();
00F9 940E0280 CALL _Com_init
(0045) SEI();
00FB 9478 BSET 7
00FC C156 RJMP 0x0253
(0046) while(1)
(0047) {
(0048) get_adc(i);
00FD 2F06 MOV R16,R22
00FE 2711 CLR R17
00FF DF94 RCALL _get_adc
(0049) adc_str[26]=i+0x30;
0100 2F86 MOV R24,R22
0101 5D80 SUBI R24,0xD0
0102 01FA MOVW R30,R20
0103 8F82 STD Z+26,R24
(0050) adc_result *= 1000;
0104 E900 LDI R16,0x90
0105 E010 LDI R17,0
0106 940E0534 CALL lpm32
0108 933A ST R19,-Y
0109 932A ST R18,-Y
010A 931A ST R17,-Y
010B 930A ST R16,-Y
010C 9040012D LDS R4,adc_result+2
010E 9050012E LDS R5,adc_result+3
0110 9020012B LDS R2,adc_result
0112 9030012C LDS R3,adc_result+1
0114 925A ST R5,-Y
0115 924A ST R4,-Y
0116 923A ST R3,-Y
0117 922A ST R2,-Y
0118 940E06DC CALL empy32f
011A 9310012C STS adc_result+1,R17
011C 9300012B STS adc_result,R16
011E 9330012E STS adc_result+3,R19
0120 9320012D STS adc_result+2,R18
(0051) adc_str[33]=(unsigned int)adc_result/1000+0x30;
0122 933A ST R19,-Y
0123 932A ST R18,-Y
0124 931A ST R17,-Y
0125 930A ST R16,-Y
0126 E80C LDI R16,0x8C
0127 E010 LDI R17,0
0128 940E0534 CALL lpm32
012A 933A ST R19,-Y
012B 932A ST R18,-Y
012C 931A ST R17,-Y
012D 930A ST R16,-Y
012E 940E06A8 CALL cmp32f
0130 F0EC BLT 0x014E
0131 9040012D LDS R4,adc_result+2
0133 9050012E LDS R5,adc_result+3
0135 9020012B LDS R2,adc_result
0137 9030012C LDS R3,adc_result+1
0139 925A ST R5,-Y
013A 924A ST R4,-Y
013B 923A ST R3,-Y
013C 922A ST R2,-Y
013D E80C LDI R16,0x8C
013E E010 LDI R17,0
013F 940E0534 CALL lpm32
0141 933A ST R19,-Y
0142 932A ST R18,-Y
0143 931A ST R17,-Y
0144 930A ST R16,-Y
0145 940E05F5 CALL sub32f
0147 940E0548 CALL fp2int
0149 01C8 MOVW R24,R16
014A 5080 SUBI R24,0
014B 4890 SBCI R25,0x80
014C 015C MOVW R10,R24
014D C00B RJMP 0x0159
014E 9120012D LDS R18,adc_result+2
0150 9130012E LDS R19,adc_result+3
0152 9100012B LDS R16,adc_result
0154 9110012C LDS R17,adc_result+1
0156 940E0548 CALL fp2int
0158 0158 MOVW R10,R16
0159 EE28 LDI R18,0xE8
015A E033 LDI R19,3
015B 0185 MOVW R16,R10
015C 940E0460 CALL div16u
015E 01C8 MOVW R24,R16
015F 96C0 ADIW R24,0x30
0160 01FA MOVW R30,R20
0161 A381 STD Z+33,R24
(0052) adc_str[35]=((unsigned int)adc_result%1000)/100+0x30;
0162 9040012D LDS R4,adc_result+2
0164 9050012E LDS R5,adc_result+3
0166 9020012B LDS R2,adc_result
0168 9030012C LDS R3,adc_result+1
016A 925A ST R5,-Y
016B 924A ST R4,-Y
016C 923A ST R3,-Y
016D 922A ST R2,-Y
016E E80C LDI R16,0x8C
016F E010 LDI R17,0
0170 940E0534 CALL lpm32
0172 933A ST R19,-Y
0173 932A ST R18,-Y
0174 931A ST R17,-Y
0175 930A ST R16,-Y
0176 940E06A8 CALL cmp32f
0178 F0EC BLT 0x0196
0179 9040012D LDS R4,adc_result+2
017B 9050012E LDS R5,adc_result+3
017D 9020012B LDS R2,adc_result
017F 9030012C LDS R3,adc_result+1
0181 925A ST R5,-Y
0182 924A ST R4,-Y
0183 923A ST R3,-Y
0184 922A ST R2,-Y
0185 E80C LDI R16,0x8C
0186 E010 LDI R17,0
0187 940E0534 CALL lpm32
0189 933A ST R19,-Y
018A 932A ST R18,-Y
018B 931A ST R17,-Y
018C 930A ST R16,-Y
018D 940E05F5 CALL sub32f
018F 940E0548 CALL fp2int
0191 01C8 MOVW R24,R16
0192 5080 SUBI R24,0
0193 4890 SBCI R25,0x80
0194 015C MOVW R10,R24
0195 C00B RJMP 0x01A1
0196 9120012D LDS R18,adc_result+2
0198 9130012E LDS R19,adc_result+3
019A 9100012B LDS R16,adc_result
019C 9110012C LDS R17,adc_result+1
019E 940E0548 CALL fp2int
01A0 0158 MOVW R10,R16
01A1 EE28 LDI R18,0xE8
01A2 E033 LDI R19,3
01A3 0185 MOVW R16,R10
01A4 940E045E CALL mod16u
01A6 E624 LDI R18,0x64
01A7 E030 LDI R19,0
01A8 940E0460 CALL div16u
01AA 01C8 MOVW R24,R16
01AB 96C0 ADIW R24,0x30
01AC 01FA MOVW R30,R20
01AD A383 STD Z+35,R24
(0053) adc_str[36]=((unsigned int)adc_result%100)/10+0x30;
01AE 9040012D LDS R4,adc_result+2
01B0 9050012E LDS R5,adc_result+3
01B2 9020012B LDS R2,adc_result
01B4 9030012C LDS R3,adc_result+1
01B6 925A ST R5,-Y
01B7 924A ST R4,-Y
01B8 923A ST R3,-Y
01B9 922A ST R2,-Y
01BA E80C LDI R16,0x8C
01BB E010 LDI R17,0
01BC 940E0534 CALL lpm32
01BE 933A ST R19,-Y
01BF 932A ST R18,-Y
01C0 931A ST R17,-Y
01C1 930A ST R16,-Y
01C2 940E06A8 CALL cmp32f
01C4 F0EC BLT 0x01E2
01C5 9040012D LDS R4,adc_result+2
01C7 9050012E LDS R5,adc_result+3
01C9 9020012B LDS R2,adc_result
01CB 9030012C LDS R3,adc_result+1
01CD 925A ST R5,-Y
01CE 924A ST R4,-Y
01CF 923A ST R3,-Y
01D0 922A ST R2,-Y
01D1 E80C LDI R16,0x8C
01D2 E010 LDI R17,0
01D3 940E0534 CALL lpm32
01D5 933A ST R19,-Y
01D6 932A ST R18,-Y
01D7 931A ST R17,-Y
01D8 930A ST R16,-Y
01D9 940E05F5 CALL sub32f
01DB 940E0548 CALL fp2int
01DD 01C8 MOVW R24,R16
01DE 5080 SUBI R24,0
01DF 4890 SBCI R25,0x80
01E0 015C MOVW R10,R24
01E1 C00B RJMP 0x01ED
01E2 9120012D LDS R18,adc_result+2
01E4 9130012E LDS R19,adc_result+3
01E6 9100012B LDS R16,adc_result
01E8 9110012C LDS R17,adc_result+1
01EA 940E0548 CALL fp2int
01EC 0158 MOVW R10,R16
01ED E624 LDI R18,0x64
01EE E030 LDI R19,0
01EF 0185 MOVW R16,R10
01F0 940E045E CALL mod16u
01F2 E02A LDI R18,0xA
01F3 E030 LDI R19,0
01F4 940E0460 CALL div16u
01F6 01C8 MOVW R24,R16
01F7 96C0 ADIW R24,0x30
01F8 01FA MOVW R30,R20
01F9 A384 STD Z+36,R24
(0054) adc_str[37]=(unsigned int)adc_result%10+0x30;
01FA 9040012D LDS R4,adc_result+2
01FC 9050012E LDS R5,adc_result+3
01FE 9020012B LDS R2,adc_result
0200 9030012C LDS R3,adc_result+1
0202 925A ST R5,-Y
0203 924A ST R4,-Y
0204 923A ST R3,-Y
0205 922A ST R2,-Y
0206 E80C LDI R16,0x8C
0207 E010 LDI R17,0
0208 940E0534 CALL lpm32
020A 933A ST R19,-Y
020B 932A ST R18,-Y
020C 931A ST R17,-Y
020D 930A ST R16,-Y
020E 940E06A8 CALL cmp32f
0210 F0EC BLT 0x022E
0211 9040012D LDS R4,adc_result+2
0213 9050012E LDS R5,adc_result+3
0215 9020012B LDS R2,adc_result
0217 9030012C LDS R3,adc_result+1
0219 925A ST R5,-Y
021A 924A ST R4,-Y
021B 923A ST R3,-Y
021C 922A ST R2,-Y
021D E80C LDI R16,0x8C
021E E010 LDI R17,0
021F 940E0534 CALL lpm32
0221 933A ST R19,-Y
0222 932A ST R18,-Y
0223 931A ST R17,-Y
0224 930A ST R16,-Y
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -