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

📄 adc.lis

📁 ATMEL AVR MEGA8 MCU DAC 驱动控制源代码
💻 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 + -