📄 adc.lis
字号:
00BA .dbend
00BA .dbfunc e Init_adc _Init_adc fV
.even
00BA _Init_adc::
00BA .dbline -1
00BA .dbline 133
00BA ; }
00BA ; /************************************************
00BA ; 函 数 名: adc_Init()
00BA ; 功 能: ADC初始化函数
00BA ; 输入参数: /
00BA ; 输出参数: /
00BA ; 描 述: 设置片内模数转换器ADC的一些参数
00BA ; ***********************************************/
00BA ; void Init_adc(void)
00BA ; {
00BA .dbline 134
00BA ; ADMUX = 0b11000000; //内参2.56V参考电压源、右对齐、选择0通道(单输入,无增益)。
00BA 80EC ldi R24,192
00BC 87B9 out 0x7,R24
00BE .dbline 136
00BE ; //多工选择寄存器ADMUX
00BE ; ADCSRA = 0b11101011; //ADC使能、启动转换、自由转换、中断使能、8分频。
00BE 8BEE ldi R24,235
00C0 86B9 out 0x6,R24
00C2 .dbline -2
00C2 L23:
00C2 .dbline 0 ; func end
00C2 0895 ret
00C4 .dbend
00C4 .dbfunc e adc_convert _adc_convert fi
00C4 ; temp1 -> R18,R19
00C4 ; temp2 -> R16,R17
.even
00C4 _adc_convert::
00C4 .dbline -1
00C4 .dbline 147
00C4 ; //控制和状态寄存器A,ADCSRA
00C4 ; }
00C4 ; /************************************************
00C4 ; 函 数 名: adc_convert()
00C4 ; 功 能: A/D转换函数
00C4 ; 输入参数: /
00C4 ; 输出参数: /
00C4 ; 描 述: 读取采样获得的10位数据
00C4 ; ***********************************************/
00C4 ; uint adc_convert(void)
00C4 ; {
00C4 .dbline 149
00C4 ; uint temp1,temp2;
00C4 ; temp1 = (uint)ADCL; //必须先读低字节
00C4 24B1 in R18,0x4
00C6 3327 clr R19
00C8 .dbline 150
00C8 ; temp2 = (uint)ADCH;
00C8 05B1 in R16,0x5
00CA 1127 clr R17
00CC .dbline 151
00CC ; temp2 = (temp2<<8) + temp1; //左移8位
00CC 1801 movw R2,R16
00CE 322C mov R3,R2
00D0 2224 clr R2
00D2 220E add R2,R18
00D4 331E adc R3,R19
00D6 8101 movw R16,R2
00D8 .dbline 152
00D8 ; return (temp2);
00D8 .dbline -2
00D8 L24:
00D8 .dbline 0 ; func end
00D8 0895 ret
00DA .dbsym r temp1 18 i
00DA .dbsym r temp2 16 i
00DA .dbend
00DA .dbfunc e process _process fV
00DA ; j -> R22
00DA ; i -> R20,R21
.even
00DA _process::
00DA 00D0 rcall push_gset2
00DC 622F mov R22,R18
00DE A801 movw R20,R16
00E0 .dbline -1
00E0 .dbline 163
00E0 ; }
00E0 ; /********************************************************
00E0 ; 子程序名: process()
00E0 ; 输入参数: 数据处理函数
00E0 ; 输出参数: /
00E0 ; 描 述:
00E0 ; 数据格式:
00E0 ; 输出数据: 数据处理函数,将转换的值转换为4位BCD码。
00E0 ; ********************************************************/
00E0 ; void process (uint i ,uchar j)
00E0 ; {
00E0 .dbline 164
00E0 ; if (0 == j)
00E0 6623 tst R22
00E2 09F0 breq X0
00E4 2AC0 rjmp L26
00E6 X0:
00E6 .dbline 165
00E6 ; {
00E6 .dbline 166
00E6 ; buf[10] = i/1000 + '0'; i=i%1000;
00E6 28EE ldi R18,1000
00E8 33E0 ldi R19,3
00EA 8A01 movw R16,R20
00EC 00D0 rcall div16u
00EE C801 movw R24,R16
00F0 C096 adiw R24,48
00F2 80930A00 sts _buf+10,R24
00F6 .dbline 166
00F6 28EE ldi R18,1000
00F8 33E0 ldi R19,3
00FA 8A01 movw R16,R20
00FC 00D0 rcall mod16u
00FE A801 movw R20,R16
0100 .dbline 167
0100 ; buf[12] = i/100 + '0'; i=i%100;
0100 24E6 ldi R18,100
0102 30E0 ldi R19,0
0104 00D0 rcall div16u
0106 C801 movw R24,R16
0108 C096 adiw R24,48
010A 80930C00 sts _buf+12,R24
010E .dbline 167
010E 24E6 ldi R18,100
0110 30E0 ldi R19,0
0112 8A01 movw R16,R20
0114 00D0 rcall mod16u
0116 A801 movw R20,R16
0118 .dbline 168
0118 ; buf[13] = i/10 + '0'; i=i%10;
0118 2AE0 ldi R18,10
011A 30E0 ldi R19,0
011C 00D0 rcall div16u
011E C801 movw R24,R16
0120 C096 adiw R24,48
0122 80930D00 sts _buf+13,R24
0126 .dbline 168
0126 2AE0 ldi R18,10
0128 30E0 ldi R19,0
012A 8A01 movw R16,R20
012C 00D0 rcall mod16u
012E A801 movw R20,R16
0130 .dbline 169
0130 ; buf[14] = i + '0';
0130 CA01 movw R24,R20
0132 C096 adiw R24,48
0134 80930E00 sts _buf+14,R24
0138 .dbline 170
0138 ; }
0138 29C0 rjmp L27
013A L26:
013A .dbline 172
013A .dbline 173
013A 28EE ldi R18,1000
013C 33E0 ldi R19,3
013E 8A01 movw R16,R20
0140 00D0 rcall div16u
0142 C801 movw R24,R16
0144 C096 adiw R24,48
0146 80931A00 sts _buf+26,R24
014A .dbline 173
014A 28EE ldi R18,1000
014C 33E0 ldi R19,3
014E 8A01 movw R16,R20
0150 00D0 rcall mod16u
0152 A801 movw R20,R16
0154 .dbline 174
0154 24E6 ldi R18,100
0156 30E0 ldi R19,0
0158 00D0 rcall div16u
015A C801 movw R24,R16
015C C096 adiw R24,48
015E 80931C00 sts _buf+28,R24
0162 .dbline 174
0162 24E6 ldi R18,100
0164 30E0 ldi R19,0
0166 8A01 movw R16,R20
0168 00D0 rcall mod16u
016A A801 movw R20,R16
016C .dbline 175
016C 2AE0 ldi R18,10
016E 30E0 ldi R19,0
0170 00D0 rcall div16u
0172 C801 movw R24,R16
0174 C096 adiw R24,48
0176 80931D00 sts _buf+29,R24
017A .dbline 175
017A 2AE0 ldi R18,10
017C 30E0 ldi R19,0
017E 8A01 movw R16,R20
0180 00D0 rcall mod16u
0182 A801 movw R20,R16
0184 .dbline 176
0184 CA01 movw R24,R20
0186 C096 adiw R24,48
0188 80931E00 sts _buf+30,R24
018C .dbline 177
018C L27:
018C .dbline -2
018C L25:
018C 00D0 rcall pop_gset2
018E .dbline 0 ; func end
018E 0895 ret
0190 .dbsym r j 22 c
0190 .dbsym r i 20 i
0190 .dbend
.area lit(rom, con, rel)
0000 L37:
0000 2020202077656C636F6D652120202020 .byte 32,32,32,32,'w,'e,'l,'c,'o,'m,'e,33,32,32,32,32
0010 20207777772E6974736E2E636E212020 .byte 32,32,'w,'w,'w,46,'i,'t,'s,'n,46,'c,'n,33,32,32
0020 00 .byte 0
.area text(rom, con, rel)
0190 .dbfile E:\iccavr代码\实验7_片内模数转换器adc\adc.c
0190 .dbfunc e main _main fV
0190 ; buflogo -> y+0
.even
0190 _main::
0190 A197 sbiw R28,33
0192 .dbline -1
0192 .dbline 181
0192 ; else
0192 ; {
0192 ; buf[26] = i/1000 + '0'; i=i%1000;
0192 ; buf[28] = i/100 + '0'; i=i%100;
0192 ; buf[29] = i/10 + '0'; i=i%10;
0192 ; buf[30] = i + '0';
0192 ; }
0192 ; }
0192 ; //*****************主程序**********************************
0192 ; void main (void)
0192 ; {
0192 .dbline 182
0192 ; uchar buflogo[]=" welcome! www.itsn.cn! ";
0192 80E0 ldi R24,<L37
0194 90E0 ldi R25,>L37
0196 FE01 movw R30,R28
0198 01E2 ldi R16,33
019A 10E0 ldi R17,0
019C FA93 st -y,R31
019E EA93 st -y,R30
01A0 9A93 st -y,R25
01A2 8A93 st -y,R24
01A4 00D0 rcall asgncblk
01A6 .dbline 184
01A6 ;
01A6 ; Init_mcu(); //单片机初始化
01A6 82DF rcall _Init_mcu
01A8 .dbline 185
01A8 ; Init_lcd(); //lcd初始化
01A8 58DF rcall _Init_lcd
01AA .dbline 186
01AA ; Init_adc(); //adc初始化
01AA 87DF rcall _Init_adc
01AC .dbline 188
01AC ;
01AC ; display_lcd(buflogo); //显示LOGO
01AC 8E01 movw R16,R28
01AE 60DF rcall _display_lcd
01B0 .dbline 189
01B0 ; DelaymS(300); //长延迟
01B0 0CE2 ldi R16,300
01B2 11E0 ldi R17,1
01B4 25DF rcall _DelaymS
01B6 .dbline 190
01B6 ; display_lcd(buf); //刷新显示一屏
01B6 00E0 ldi R16,<_buf
01B8 10E0 ldi R17,>_buf
01BA 5ADF rcall _display_lcd
01BC 35C0 rjmp L39
01BE L38:
01BE .dbline 193
01BE .dbline 196
01BE 80EC ldi R24,192
01C0 87B9 out 0x7,R24
01C2 .dbline 197
01C2 8BEE ldi R24,235
01C4 86B9 out 0x6,R24
01C6 .dbline 198
01C6 05E0 ldi R16,5
01C8 10E0 ldi R17,0
01CA 1ADF rcall _DelaymS
01CC .dbline 199
01CC 7BDF rcall _adc_convert
01CE 1801 movw R2,R16
01D0 2227 clr R18
01D2 05E0 ldi R16,5
01D4 10E0 ldi R17,0
01D6 2F93 push R18
01D8 3F93 push R19
01DA 9101 movw R18,R2
01DC 00D0 rcall empy16s
01DE 1801 movw R2,R16
01E0 3F91 pop R19
01E2 2F91 pop R18
01E4 3694 lsr R3
01E6 2794 ror R2
01E8 8101 movw R16,R2
01EA 77DF rcall _process
01EC .dbline 200
01EC 8BE6 ldi R24,107
01EE 86B9 out 0x6,R24
01F0 .dbline 202
01F0 81EC ldi R24,193
01F2 87B9 out 0x7,R24
01F4 .dbline 203
01F4 8BEE ldi R24,235
01F6 86B9 out 0x6,R24
01F8 .dbline 204
01F8 05E0 ldi R16,5
01FA 10E0 ldi R17,0
01FC 01DF rcall _DelaymS
01FE .dbline 205
01FE 62DF rcall _adc_convert
0200 1801 movw R2,R16
0202 21E0 ldi R18,1
0204 05E0 ldi R16,5
0206 10E0 ldi R17,0
0208 2F93 push R18
020A 3F93 push R19
020C 9101 movw R18,R2
020E 00D0 rcall empy16s
0210 1801 movw R2,R16
0212 3F91 pop R19
0214 2F91 pop R18
0216 3694 lsr R3
0218 2794 ror R2
021A 8101 movw R16,R2
021C 5EDF rcall _process
021E .dbline 206
021E 8BE6 ldi R24,107
0220 86B9 out 0x6,R24
0222 .dbline 208
0222 00E0 ldi R16,<_buf
0224 10E0 ldi R17,>_buf
0226 24DF rcall _display_lcd
0228 .dbline 209
0228 L39:
0228 .dbline 192
0228 CACF rjmp L38
022A X1:
022A .dbline -2
022A L36:
022A A196 adiw R28,33
022C .dbline 0 ; func end
022C 0895 ret
022E .dbsym l buflogo 0 A[33:33]c
022E .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -