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

📄 ad.lis

📁 atmega16单片机AD转换源代码
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module ad.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\AVR\AD/HD7279.C
 0000                   .dbfunc e init_7279 _init_7279 fV
 0000           ;            tmr -> R20,R21
                        .even
 0000           _init_7279::
 0000 0E940000          xcall push_gset1
 0004                   .dbline -1
 0004                   .dbline 170
 0004           ; //ICC-AVR application builder : 2005-6-21 15:56:32
 0004           ; // Target : M16
 0004           ; // Crystal: 8.0000Mhz
 0004           ; 
 0004           ; #include <iom16v.h>
 0004           ; #include <macros.h>
 0004           ; #include "HD7279.C"
 0004           ; #include "TIMEDELAY.C"
 0004           ; unsigned int adc_rel;
 0004           ; unsigned int adc_old;
 0004           ; unsigned char ad_mux;
 0004           ; 
 0004           ; 
 0004           ; 
 0004           ; 
 0004           ; void port_init(void)
 0004           ; {
 0004           ;  PORTA = 0xFF;
 0004           ;  DDRA  = 0x00;
 0004           ;  PORTB = 0xFF;
 0004           ;  DDRB  = 0x00;
 0004           ;  PORTC = 0xFF; //m103 output only
 0004           ;  DDRC  = 0x1E;
 0004           ;  PORTD = 0xFF;
 0004           ;  DDRD  = 0x00;
 0004           ; }
 0004           ; 
 0004           ; //ADC initialisation
 0004           ; // Conversion time: 104uS
 0004           ; void adc_init(void)
 0004           ; {
 0004           ;  PORTA = 0X00;
 0004           ;  PORTA = 0Xff;
 0004           ;  
 0004           ;  ADCSR = 0x00; //disable adc
 0004           ;  ADMUX = ( 0<< REFS0 )|( 0<< REFS1 )|ad_mux & 0x0f; //select adc input 0                //00000000
 0004           ;  ACSR  = ( 1<< ACD);                  
 0004           ;  ADCSR = (1 << ADEN ) |( 1 << ADSC ) |( 1 << ADIE ) | BIT( ADPS2)| BIT( ADPS1);
 0004           ; }
 0004           ; 
 0004           ; void bubble_sort(int *x, int n)
 0004           ; {
 0004           ;  int j, k, h, t;
 0004           ;   
 0004           ;  for (h=n-1; h>0; h=k) /*循环到没有比较范围*/
 0004           ;  {
 0004           ;   for (j=0, k=0; j<h; j++) /*每次预置k=0,循环扫描后更新k*/
 0004           ;   {
 0004           ;    if (*(x+j) > *(x+j+1)) /*大的放在后面,小的放到前面*/
 0004           ;    {
 0004           ;     t = *(x+j);
 0004           ;     *(x+j) = *(x+j+1);
 0004           ;     *(x+j+1) = t; /*完成交换*/
 0004           ;     k = j; /*保存最后下沉的位置。这样k后面的都是排序排好了的。*/
 0004           ;    }
 0004           ;   }
 0004           ;  }
 0004           ; }
 0004           ; 
 0004           ; 
 0004           ; int  adc()
 0004           ; {
 0004           ;  int result[12];
 0004           ;  long sum = 0;
 0004           ;  char i; 
 0004           ;  for( i = 0; i < 12; i ++ )     //中值数字滤波
 0004           ;  {
 0004           ;   delay_ms( 1 );
 0004           ;   ADCSRA |= BIT( ADSC );
 0004           ;   while( !( ADCSRA & BIT( ADIF ) ) );
 0004           ;   ADCSRA &= ~BIT( ADIF );
 0004           ;   result[ i ] = ADC;
 0004           ;  }
 0004           ;  bubble_sort( result, 12 );
 0004           ;  for( i = 1; i < 11; i ++ )
 0004           ;   sum += result[ i ];
 0004           ;  return (int)( sum / 10 );
 0004           ; }
 0004           ; 
 0004           ; 
 0004           ; #pragma interrupt_handler adc_isr:15
 0004           ; void adc_isr(void)
 0004           ; {
 0004           ;       
 0004           ;  //conversion complete, read value (int) using...
 0004           ;  CLI();
 0004           ;  ADMUX = ( 0<< REFS0 )|( 0 << REFS1 )|ad_mux & 0x0f;
 0004           ;  //adc_rel = ADC & 0X03FF;
 0004           ;  adc_rel=adc();
 0004           ;  
 0004           ;  
 0004           ;  //if( adc_old != adc_rel)
 0004           ;  if (ad_mux==0)
 0004           ;       {
 0004           ;        dis_data(0,3,adc_rel);
 0004           ;        //write7279(DECODE0+4,0x80+ad_mux); 
 0004           ;        adc_old = adc_rel;
 0004           ;       }
 0004           ;  //else dis_data( 0,4, adc_rel);
 0004           ;  else 
 0004           ;       {
 0004           ;        dis_data(4,7,adc_rel);
 0004           ;        //write7279(DECODE0+4,0x80+ad_mux); 
 0004           ;        adc_old = adc_rel;
 0004           ;       }
 0004           ;  
 0004           ;  
 0004           ;  if(ad_mux<1)
 0004           ;       ad_mux++;
 0004           ;  else
 0004           ;       ad_mux=0;
 0004           ;       
 0004           ;       
 0004           ; ADCSR |= BIT( ADSC); 
 0004           ;  SEI();
 0004           ;  
 0004           ; }
 0004           ; 
 0004           ; 
 0004           ; 
 0004           ; //call this routine to initialise all peripherals
 0004           ; void init_devices(void)
 0004           ; {
 0004           ;  //stop errant interrupts until set up
 0004           ;  CLI(); //disable all interrupts
 0004           ;  port_init();
 0004           ;  adc_init();
 0004           ; 
 0004           ;  MCUCR = 0x00;
 0004           ;  GICR  = 0x00;
 0004           ;  TIMSK = 0x00; //timer interrupt sources
 0004           ;  SEI(); //re-enable interrupts
 0004           ;  //all peripherals are now initialised
 0004           ; }
 0004           ; 
 0004           ; //
 0004           ; void main(void)
 0004           ; {
 0004           ;       int  i;
 0004           ;       ad_mux = 0x00;
 0004           ;       adc_old = 0x0000;
 0004           ;       init_devices();
 0004           ;       init_7279();
 0004           ;       //insert your functional code here...
 0004           ;       
 0004           ;       ADCSR |= BIT( ADSC );
 0004           ;       while(1)
 0004           ;       {
 0004           ; //     dis_data(0,3,1234);
 0004           ; //     dis_data(4,7,5678);
 0004           ;       }
 0004           ;       
 0004           ; }
 0004           ; 
 0004           ; 
 0004           ; 
 0004           ; 
 0004           ; 
 0004           ; 
 0004           ; 
 0004           ; 
 0004           ; 
 0004           ; 
 0004           ; 
 0004           ; 
 0004           ; 
 0004           ; 
 0004           ; 
 0004           ; 
 0004           ; 
 0004                   .dbline 173
 0004           ; 
 0004           ; 
 0004           ; 
 0004 A19A              sbi 0x14,1
 0006                   .dbline 174
 0006           ; 
 0006 A29A              sbi 0x14,2
 0008                   .dbline 175
 0008           ; 
 0008 A39A              sbi 0x14,3
 000A                   .dbline 176
 000A           ; 
 000A A498              cbi 0x14,4
 000C                   .dbline 178
 000C           ; 
 000C           ; 
 000C A99A              sbi 0x15,1
 000E                   .dbline 179
 000E           ; 
 000E AA9A              sbi 0x15,2
 0010                   .dbline 180
 0010           ; 
 0010 AB9A              sbi 0x15,3
 0012                   .dbline 181
 0012           ; 
 0012 AC9A              sbi 0x15,4
 0014                   .dbline 183
 0014 4427              clr R20
 0016 5527              clr R21
 0018 02C0              xjmp L5
 001A           L2:
 001A                   .dbline 183
 001A           L3:
 001A                   .dbline 183
 001A 4F5F              subi R20,255  ; offset = 1
 001C 5F4F              sbci R21,255
 001E           L5:
 001E                   .dbline 183
 001E           ; 
 001E           ; 
 001E 4030              cpi R20,0
 0020 E0EF              ldi R30,240
 0022 5E07              cpc R21,R30
 0024 D0F3              brlo L2
 0026                   .dbline 185
 0026           ; 
 0026           ; 
 0026 04EA              ldi R16,164
 0028 48D0              xcall _send_byte
 002A                   .dbline -2
 002A                   .dbline 187
 002A           ; 
 002A           ; 
 002A           L1:
 002A 0E940000          xcall pop_gset1
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbsym r tmr 20 i
 0030                   .dbend
 0030                   .dbfunc e write7279 _write7279 fV
 0030           ;            dta -> R20
 0030           ;            cmd -> R22
                        .even
 0030           _write7279::
 0030 0E940000          xcall push_gset2
 0034 422F              mov R20,R18
 0036 602F              mov R22,R16
 0038                   .dbline -1
 0038                   .dbline 197
 0038           ; 
 0038           ; 
 0038           ; 
 0038           ; 
 0038           ; 
 0038           ; 
 0038           ; 
 0038           ; 
 0038           ; 
 0038           ; 
 0038                   .dbline 198
 0038           ; 
 0038 062F              mov R16,R22
 003A 3FD0              xcall _send_byte
 003C                   .dbline 199
 003C           ; 
 003C 042F              mov R16,R20
 003E 3DD0              xcall _send_byte
 0040                   .dbline -2
 0040                   .dbline 200
 0040           ; 
 0040           L6:
 0040 0E940000          xcall pop_gset2
 0044                   .dbline 0 ; func end
 0044 0895              ret
 0046                   .dbsym r dta 20 c
 0046                   .dbsym r cmd 22 c
 0046                   .dbend
 0046                   .dbfunc e read7279 _read7279 fc
                        .even
 0046           _read7279::
 0046                   .dbline -1
 0046                   .dbline 210
 0046           ; 
 0046           ; 
 0046           ; 
 0046           ; 
 0046           ; 
 0046           ; 
 0046           ; 
 0046           ; 
 0046           ; 
 0046           ; 
 0046                   .dbline 211
 0046           ; 
 0046 05E1              ldi R16,21
 0048 38D0              xcall _send_byte
 004A                   .dbline 212
 004A           ; 
 004A                   .dbline -2
 004A           L7:
 004A                   .dbline 0 ; func end
 004A 50C0              xjmp _receive_byte
 004C                   .dbend
 004C                   .dbfunc e get_key7279 _get_key7279 fc
 004C           ;         KeyNum -> R20
                        .even
 004C           _get_key7279::
 004C 0E940000          xcall push_gset1
 0050                   .dbline -1
 0050                   .dbline 224
 0050           ; 
 0050           ; 
 0050           ; 
 0050           ; 
 0050           ; 
 0050           ; 
 0050           ; 
 0050           ; 
 0050           ; 
 0050           ; 
 0050           ; 
 0050           ; 
 0050           L9:
 0050                   .dbline 226
 0050           L10:
 0050                   .dbline 226
 0050           ; 
 0050           ; 
 0050 9C99              sbic 0x13,4
 0052 FECF              rjmp L9
 0054                   .dbline 228
 0054           ; 
 0054           ; 
 0054 01E0              ldi R16,1
 0056 10E0              ldi R17,0
 0058 18D0              xcall _delay10ms
 005A                   .dbline 230
 005A           ; 
 005A           ; 
 005A F5DF              xcall _read7279
 005C                   .dbline 232
 005C           ; 
 005C           ; 
 005C 5ED0              xcall _num_change7279
 005E 402F              mov R20,R16
 0060                   .dbline 234
 0060           ; 
 0060           ; 
 0060 01E0              ldi R16,1
 0062 10E0              ldi R17,0
 0064 12D0              xcall _delay10ms
 0066           L12:
 0066                   .dbline 236
 0066           L13:
 0066                   .dbline 236
 0066           ; 
 0066           ; 
 0066 9C9B              sbis 0x13,4
 0068 FECF              rjmp L12
 006A                   .dbline 238
 006A           ; 
 006A           ; 
 006A 042F              mov R16,R20
 006C                   .dbline -2
 006C           L8:
 006C 0E940000          xcall pop_gset1
 0070                   .dbline 0 ; func end
 0070 0895              ret
 0072                   .dbsym r KeyNum 20 c
 0072                   .dbend
 0072                   .dbfunc e long_delay _long_delay fV
 0072           ;              i -> R16
                        .even
 0072           _long_delay::
 0072                   .dbline -1
 0072                   .dbline 245
 0072           ; 
 0072           ; 
 0072           ; 
 0072           ; 
 0072           ; 
 0072           ; 
 0072           ; 
 0072                   .dbline 247
 0072 0027              clr R16
 0074 01C0              xjmp L19
 0076           L16:
 0076                   .dbline 247
 0076           L17:
 0076                   .dbline 247
 0076 0395              inc R16
 0078           L19:
 0078                   .dbline 247
 0078           ; 
 0078           ; 
 0078 0035              cpi R16,80
 007A E8F3              brlo L16
 007C                   .dbline -2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -