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

📄 adc.lis

📁 Atmega8实例程序之-DAC的应用(SL-MEGA8开发板)
💻 LIS
字号:
                        .module adc.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\mega8\DAC\adc.c
 0000                   .dbfunc e delay_us _delay_us fV
 0000           ;           time -> R16,R17
                        .even
 0000           _delay_us::
 0000                   .dbline -1
 0000                   .dbline 15
 0000           ; /******************************************/
 0000           ; /*           广州天河双龙电子公司         */
 0000           ; /*           http://www.sl.com.cn         */
 0000           ; /*              ADC驱动程序               */
 0000           ; /*           作者:ntzwq@wx88.net          */
 0000           ; /*              2002年5月11日             */
 0000           ; /*  目标MCU:MEGA8   晶振:外部(EXT) 8MHZ   */
 0000           ; /******************************************/
 0000           ; #include<iom8v.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 17
 0000           ;         do
 0000           ;               {
 0000                   .dbline 18
 0000           ;                time--;
 0000 0150              subi R16,1
 0002 1040              sbci R17,0
 0004                   .dbline 19
 0004           ;               }       
 0004           L3:
 0004                   .dbline 20
 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                   .dbline 21
 000E           ;        }        
 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 24
 0014           ; /*                        毫秒级延时程序                      */       
 0014           ; void delay_ms(unsigned int time)
 0014           ;        {
 0014 05C0              rjmp L7
 0016           L6:
 0016                   .dbline 26
 0016                   .dbline 27
 0016 08EE              ldi R16,1000
 0018 13E0              ldi R17,3
 001A F2DF              rcall _delay_us
 001C                   .dbline 28
 001C 4150              subi R20,1
 001E 5040              sbci R21,0
 0020                   .dbline 29
 0020           L7:
 0020                   .dbline 25
 0020           ;         while(time!=0)
 0020 4030              cpi R20,0
 0022 4507              cpc R20,R21
 0024 C1F7              brne L6
 0026           X0:
 0026                   .dbline -2
 0026                   .dbline 30
 0026           ;                 {             
 0026           ;                  delay_us(1000);
 0026           ;                  time--;
 0026           ;                 }
 0026           ;        }              
 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 33
 002A           ; //ADC初始化    
 002A           ; void adc_init(void)
 002A           ; {
 002A                   .dbline 34
 002A           ;  DDRC=0x00;
 002A 2224              clr R2
 002C 24BA              out 0x14,R2
 002E                   .dbline 35
 002E           ;  PORTC=0x00; 
 002E 25BA              out 0x15,R2
 0030                   .dbline 36
 0030           ;  ADCSRA = 0x00; 
 0030 26B8              out 0x6,R2
 0032                   .dbline 37
 0032           ;  ADMUX =(1<<REFS0)|(adc_mux&0x0f);//选择内部AVCC为基准
 0032 80910200          lds R24,_adc_mux
 0036 8F70              andi R24,15
 0038 8064              ori R24,64
 003A 87B9              out 0x7,R24
 003C                   .dbline 38
 003C           ;  ACSR  =(1<<ACD);//关闭模拟比较器
 003C 80E8              ldi R24,128
 003E 88B9              out 0x8,R24
 0040                   .dbline 39
 0040           ;  ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;//64分频
 0040 8EEC              ldi R24,206
 0042 86B9              out 0x6,R24
 0044                   .dbline -2
 0044                   .dbline 40
 0044           ; }
 0044           L9:
 0044                   .dbline 0 ; func end
 0044 0895              ret
 0046                   .dbend
                        .area vector(rom, abs)
                        .org 28
 001C 23C0              rjmp _adc_isr
                        .area text(rom, con, rel)
 0046                   .dbfile C:\mega8\DAC\adc.c
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\mega8\DAC\adc.c
 0000           L11:
 0000                   .blkb 2
                        .area text(rom, con, rel)
 0046                   .dbfile C:\mega8\DAC\adc.c
 0046                   .dbfunc e adc_isr _adc_isr fV
 0046                   .dbsym s i L11 i
                        .even
 0046           _adc_isr::
 0046 2A92              st -y,R2
 0048 3A92              st -y,R3
 004A 0A93              st -y,R16
 004C 1A93              st -y,R17
 004E 2A93              st -y,R18
 0050 3A93              st -y,R19
 0052 8A93              st -y,R24
 0054 9A93              st -y,R25
 0056 EA93              st -y,R30
 0058 2FB6              in R2,0x3f
 005A 2A92              st -y,R2
 005C                   .dbline -1
 005C                   .dbline 44
 005C           ; //ADC完成中断
 005C           ; #pragma interrupt_handler adc_isr:iv_ADC     
 005C           ; void adc_isr(void)
 005C           ; {
 005C                   .dbline 46
 005C           ;  static unsigned i;
 005C           ;  adc_rel+=ADC&0x3ff;
 005C 84B1              in R24,0x4
 005E 95B1              in R25,0x5
 0060 9370              andi R25,3
 0062 20900300          lds R2,_adc_rel
 0066 30900400          lds R3,_adc_rel+1
 006A 280E              add R2,R24
 006C 391E              adc R3,R25
 006E 30920400          sts _adc_rel+1,R3
 0072 20920300          sts _adc_rel,R2
 0076                   .dbline 47
 0076           ;  ADMUX=(1<<REFS0)|(adc_mux&0x0f);//选择内部AVCC为基准
 0076 80910200          lds R24,_adc_mux
 007A 8F70              andi R24,15
 007C 8064              ori R24,64
 007E 87B9              out 0x7,R24
 0080                   .dbline 48
 0080           ;  ADCSRA|=(1<<ADSC);//启动AD转换
 0080 369A              sbi 0x6,6
 0082                   .dbline 49
 0082           ;  if (i<63)
 0082 80910000          lds R24,L11
 0086 90910100          lds R25,L11+1
 008A 8F33              cpi R24,63
 008C E0E0              ldi R30,0
 008E 9E07              cpc R25,R30
 0090 30F4              brsh L12
 0092                   .dbline 50
 0092           ;    i++;
 0092 0196              adiw R24,1
 0094 90930100          sts L11+1,R25
 0098 80930000          sts L11,R24
 009C 15C0              rjmp L13
 009E           L12:
 009E                   .dbline 52
 009E                   .dbline 53
 009E 26E0              ldi R18,6
 00A0 30E0              ldi R19,0
 00A2 00910300          lds R16,_adc_rel
 00A6 10910400          lds R17,_adc_rel+1
 00AA 00D0              rcall lsr16
 00AC 10930100          sts _adc_old+1,R17
 00B0 00930000          sts _adc_old,R16
 00B4                   .dbline 54
 00B4 2224              clr R2
 00B6 3324              clr R3
 00B8 30920100          sts L11+1,R3
 00BC 20920000          sts L11,R2
 00C0                   .dbline 55
 00C0 30920400          sts _adc_rel+1,R3
 00C4 20920300          sts _adc_rel,R2
 00C8                   .dbline 56
 00C8           L13:
 00C8                   .dbline -2
 00C8                   .dbline 57
 00C8           ;  else
 00C8           ;    {
 00C8           ;     adc_old=adc_rel/64;//64点平均滤波
 00C8           ;       i=0;
 00C8           ;       adc_rel=0;
 00C8           ;    }
 00C8           ; }
 00C8           L10:
 00C8 2990              ld R2,y+
 00CA 2FBE              out 0x3f,R2
 00CC E991              ld R30,y+
 00CE 9991              ld R25,y+
 00D0 8991              ld R24,y+
 00D2 3991              ld R19,y+
 00D4 2991              ld R18,y+
 00D6 1991              ld R17,y+
 00D8 0991              ld R16,y+
 00DA 3990              ld R3,y+
 00DC 2990              ld R2,y+
 00DE                   .dbline 0 ; func end
 00DE 1895              reti
 00E0                   .dbend
                        .area bss(ram, con, rel)
 0002                   .dbfile C:\mega8\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 + -