📄 adc.lis
字号:
.module adc.c
.area text(rom, con, rel)
0000 .dbfile C:\调试程序\mega48\DAC\adc.c
0000 .dbfunc e delay_us _delay_us fV
0000 ; time -> R16,R17
.even
0000 _delay_us::
0000 .dbline -1
0000 .dbline 7
0000 ; #include<iom48v.h>
0000 ; unsigned int adc_rel;//AD转换结果
0000 ; unsigned char adc_mux;//AD通道
0000 ; extern unsigned int adc_old;
0000 ; /* 微秒级延时程序 */
0000 ; void delay_us(int time)
0000 ; {
0000 L2:
0000 .dbline 9
0000 ; do
0000 ; {
0000 .dbline 10
0000 ; time--;
0000 0150 subi R16,1
0002 1040 sbci R17,0
0004 .dbline 11
0004 ; }
0004 L3:
0004 .dbline 12
0004 ; while (time>1);
0004 81E0 ldi R24,1
0006 90E0 ldi R25,0
0008 8017 cp R24,R16
000A 9107 cpc R25,R17
000C CCF3 brlt L2
000E .dbline -2
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbsym r time 16 I
0010 .dbend
0010 .dbfunc e delay_ms _delay_ms fV
0010 ; time -> R20,R21
.even
0010 _delay_ms::
0010 00D0 rcall push_gset1
0012 A801 movw R20,R16
0014 .dbline -1
0014 .dbline 16
0014 ; }
0014 ; /* 毫秒级延时程序 */
0014 ; void delay_ms(unsigned int time)
0014 ; {
0014 05C0 rjmp L7
0016 L6:
0016 .dbline 18
0016 .dbline 19
0016 08EE ldi R16,1000
0018 13E0 ldi R17,3
001A F2DF rcall _delay_us
001C .dbline 20
001C 4150 subi R20,1
001E 5040 sbci R21,0
0020 .dbline 21
0020 L7:
0020 .dbline 17
0020 ; while(time!=0)
0020 4030 cpi R20,0
0022 4507 cpc R20,R21
0024 C1F7 brne L6
0026 X0:
0026 .dbline -2
0026 L5:
0026 00D0 rcall pop_gset1
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbsym r time 20 i
002A .dbend
002A .dbfunc e adc_init _adc_init fV
.even
002A _adc_init::
002A .dbline -1
002A .dbline 25
002A ; {
002A ; delay_us(1000);
002A ; time--;
002A ; }
002A ; }
002A ; //ADC初始化
002A ; void adc_init(void)
002A ; {
002A .dbline 26
002A ; DDRC=0x00;
002A 2224 clr R2
002C 27B8 out 0x7,R2
002E .dbline 27
002E ; PORTC=0x00;
002E 28B8 out 0x8,R2
0030 .dbline 28
0030 ; ADCSRA = 0x00;
0030 20927A00 sts 122,R2
0034 .dbline 29
0034 ; ADMUX =(1<<REFS0)|(adc_mux&0x0f);//选择内部AVCC为基准
0034 80910200 lds R24,_adc_mux
0038 8F70 andi R24,15
003A 8064 ori R24,64
003C 80937C00 sts 124,R24
0040 .dbline 30
0040 ; ACSR =(1<<ACD);//关闭模拟比较器
0040 80E8 ldi R24,128
0042 80BF out 0x30,R24
0044 .dbline 31
0044 ; ADCSRB=0;
0044 20927B00 sts 123,R2
0048 .dbline 32
0048 ; ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;//64分频
0048 8EEC ldi R24,206
004A 80937A00 sts 122,R24
004E .dbline -2
004E L9:
004E .dbline 0 ; func end
004E 0895 ret
0050 .dbend
.area vector(rom, abs)
.org 42
002A 28C0 rjmp _adc_isr
.area text(rom, con, rel)
0050 .dbfile C:\调试程序\mega48\DAC\adc.c
.area bss(ram, con, rel)
0000 .dbfile C:\调试程序\mega48\DAC\adc.c
0000 L11:
0000 .blkb 2
.area text(rom, con, rel)
0050 .dbfile C:\调试程序\mega48\DAC\adc.c
0050 .dbfunc e adc_isr _adc_isr fV
0050 .dbsym s i L11 i
.even
0050 _adc_isr::
0050 2A92 st -y,R2
0052 3A92 st -y,R3
0054 0A93 st -y,R16
0056 1A93 st -y,R17
0058 2A93 st -y,R18
005A 3A93 st -y,R19
005C 8A93 st -y,R24
005E 9A93 st -y,R25
0060 EA93 st -y,R30
0062 2FB6 in R2,0x3f
0064 2A92 st -y,R2
0066 .dbline -1
0066 .dbline 37
0066 ; }
0066 ; //ADC完成中断
0066 ; #pragma interrupt_handler adc_isr:22
0066 ; void adc_isr(void)
0066 ; {
0066 .dbline 39
0066 ; static unsigned i;
0066 ; adc_rel+=ADC&0x3ff;
0066 80917800 lds R24,120
006A 90917900 lds R25,120+1
006E 9370 andi R25,3
0070 20900300 lds R2,_adc_rel
0074 30900400 lds R3,_adc_rel+1
0078 280E add R2,R24
007A 391E adc R3,R25
007C 30920400 sts _adc_rel+1,R3
0080 20920300 sts _adc_rel,R2
0084 .dbline 40
0084 ; ADMUX=(1<<REFS0)|(adc_mux&0x0f);//选择内部AVCC为基准
0084 80910200 lds R24,_adc_mux
0088 8F70 andi R24,15
008A 8064 ori R24,64
008C 80937C00 sts 124,R24
0090 .dbline 41
0090 ; ADCSRA|=(1<<ADSC);//启动AD转换
0090 80917A00 lds R24,122
0094 8064 ori R24,64
0096 80937A00 sts 122,R24
009A .dbline 42
009A ; if (i<63)
009A 80910000 lds R24,L11
009E 90910100 lds R25,L11+1
00A2 8F33 cpi R24,63
00A4 E0E0 ldi R30,0
00A6 9E07 cpc R25,R30
00A8 30F4 brsh L12
00AA .dbline 43
00AA ; i++;
00AA 0196 adiw R24,1
00AC 90930100 sts L11+1,R25
00B0 80930000 sts L11,R24
00B4 15C0 rjmp L13
00B6 L12:
00B6 .dbline 45
00B6 .dbline 46
00B6 26E0 ldi R18,6
00B8 30E0 ldi R19,0
00BA 00910300 lds R16,_adc_rel
00BE 10910400 lds R17,_adc_rel+1
00C2 00D0 rcall lsr16
00C4 10930100 sts _adc_old+1,R17
00C8 00930000 sts _adc_old,R16
00CC .dbline 47
00CC 2224 clr R2
00CE 3324 clr R3
00D0 30920100 sts L11+1,R3
00D4 20920000 sts L11,R2
00D8 .dbline 48
00D8 30920400 sts _adc_rel+1,R3
00DC 20920300 sts _adc_rel,R2
00E0 .dbline 49
00E0 L13:
00E0 .dbline -2
00E0 L10:
00E0 2990 ld R2,y+
00E2 2FBE out 0x3f,R2
00E4 E991 ld R30,y+
00E6 9991 ld R25,y+
00E8 8991 ld R24,y+
00EA 3991 ld R19,y+
00EC 2991 ld R18,y+
00EE 1991 ld R17,y+
00F0 0991 ld R16,y+
00F2 3990 ld R3,y+
00F4 2990 ld R2,y+
00F6 .dbline 0 ; func end
00F6 1895 reti
00F8 .dbend
.area bss(ram, con, rel)
0002 .dbfile C:\调试程序\mega48\DAC\adc.c
0002 _adc_mux::
0002 .blkb 1
0003 .dbsym e adc_mux _adc_mux c
0003 _adc_rel::
0003 .blkb 2
0005 .dbsym e adc_rel _adc_rel i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -