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

📄 adc.lis

📁 AVR mega16系列单片机开发程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module adc.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\尤虎\程序设计\AVR单片机\MAGE16\ADCAND~1\adc.c
 0000                   .dbfunc e adc_init _adc_init fV
                        .even
 0000           _adc_init::
 0000                   .dbline -1
 0000                   .dbline 21
 0000           ; //Project :ADC(10 bit) and LCD Display
 0000           ; //ICC-AVR application builder : 2007-5-10 21:20:44
 0000           ; // Target : M16
 0000           ; // Crystal : 8.0000Mhz
 0000           ; // Writer : you hu
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; #include "lcd.h"
 0000           ; #include "display.h"
 0000           ; 
 0000           ; typedef  unsigned char uchar;
 0000           ; typedef  unsigned int uint;
 0000           ; 
 0000           ;  int value;         //全局变量,存储10位的AD转换数据
 0000           ; 
 0000           ; 
 0000           ; //ADC initialize
 0000           ; // Conversion time: 52uS
 0000           ; 
 0000           ; void adc_init(void)
 0000           ; {
 0000                   .dbline 22
 0000           ;  ADCSR = 0x00;              //禁止AD启动
 0000 2224              clr R2
 0002 26B8              out 0x6,R2
 0004                   .dbline 23
 0004           ;  ADMUX = 0xC0;              //选择通道0,默认的右对齐方式
 0004 80EC              ldi R24,192
 0006 87B9              out 0x7,R24
 0008                   .dbline 24
 0008           ;  ACSR  = 0x80;
 0008 80E8              ldi R24,128
 000A 88B9              out 0x8,R24
 000C                   .dbline 25
 000C           ;  ADCSR = 0xED;              //启动AD转换
 000C 8DEE              ldi R24,237
 000E 86B9              out 0x6,R24
 0010                   .dbline -2
 0010           L1:
 0010                   .dbline 0 ; func end
 0010 0895              ret
 0012                   .dbend
                        .area vector(rom, abs)
                        .org 56
 0038 0C940900          jmp _adc_isr
                        .area text(rom, con, rel)
 0012                   .dbfile E:\尤虎\程序设计\AVR单片机\MAGE16\ADCAND~1\adc.c
 0012                   .dbfunc e adc_isr _adc_isr fV
                        .even
 0012           _adc_isr::
 0012 2A92              st -y,R2
 0014 3A92              st -y,R3
 0016 4A92              st -y,R4
 0018 5A92              st -y,R5
 001A 2FB6              in R2,0x3f
 001C 2A92              st -y,R2
 001E                   .dbline -1
 001E                   .dbline 30
 001E           ; }
 001E           ; 
 001E           ; #pragma interrupt_handler adc_isr:15         //中断方式读取AD转换值
 001E           ; void adc_isr(void)
 001E           ; {
 001E                   .dbline 31
 001E           ;  value=ADCL;                //读取低8位转换值
 001E 24B0              in R2,0x4
 0020 3324              clr R3
 0022 30920100          sts _value+1,R3
 0026 20920000          sts _value,R2
 002A                   .dbline 32
 002A           ;  value|=(int)ADCH << 8;     //读取高2位转换值
 002A 25B0              in R2,0x5
 002C 3324              clr R3
 002E 322C              mov R3,R2
 0030 2224              clr R2
 0032 40900000          lds R4,_value
 0036 50900100          lds R5,_value+1
 003A 4228              or R4,R2
 003C 5328              or R5,R3
 003E 50920100          sts _value+1,R5
 0042 40920000          sts _value,R4
 0046                   .dbline -2
 0046           L2:
 0046 2990              ld R2,y+
 0048 2FBE              out 0x3f,R2
 004A 5990              ld R5,y+
 004C 4990              ld R4,y+
 004E 3990              ld R3,y+
 0050 2990              ld R2,y+
 0052                   .dbline 0 ; func end
 0052 1895              reti
 0054                   .dbend
 0054                   .dbfunc e Bit_display _Bit_display fV
 0054           ;              Y -> R22
 0054           ;              X -> R20
                        .even
 0054           _Bit_display::
 0054 0E940000          xcall push_gset2
 0058 622F              mov R22,R18
 005A 402F              mov R20,R16
 005C 2197              sbiw R28,1
 005E                   .dbline -1
 005E                   .dbline 37
 005E           ; }
 005E           ; 
 005E           ; 
 005E           ; void Bit_display(unsigned char X,unsigned char Y)     //位显示函数,将对转换结果的数字量进行“0”或“1”的显示
 005E           ; {
 005E                   .dbline 39
 005E           ;  
 005E           ;  if(Y)                           
 005E 6623              tst R22
 0060 39F0              breq L4
 0062                   .dbline 40
 0062           ;    LCD_write_char(X,0,'1');                           //如果转换结果变量的某一位为“1”,则显示,否则显示“0”
 0062 81E3              ldi R24,49
 0064 8883              std y+0,R24
 0066 2227              clr R18
 0068 042F              mov R16,R20
 006A 0E940000          xcall _LCD_write_char
 006E 06C0              xjmp L5
 0070           L4:
 0070                   .dbline 42
 0070 80E3              ldi R24,48
 0072 8883              std y+0,R24
 0074 2227              clr R18
 0076 042F              mov R16,R20
 0078 0E940000          xcall _LCD_write_char
 007C           L5:
 007C                   .dbline -2
 007C           L3:
 007C 2196              adiw R28,1
 007E 0E940000          xcall pop_gset2
 0082                   .dbline 0 ; func end
 0082 0895              ret
 0084                   .dbsym r Y 22 c
 0084                   .dbsym r X 20 c
 0084                   .dbend
 0084                   .dbfunc e Bit_transfor _Bit_transfor fV
 0084           ;            pos -> R20
 0084           ;              i -> R22
 0084           ;           bits -> R10,R11
 0084           ;          datas -> R12,R13
                        .even
 0084           _Bit_transfor::
 0084 0E940000          xcall push_gset4
 0088                   .dbline -1
 0088                   .dbline 46
 0088           ;  else  
 0088           ;    LCD_write_char(X,0,'0');
 0088           ;  }
 0088           ;  
 0088           ;  void Bit_transfor(void)                              //对12位数字量的量化和显示函数          
 0088           ;  {
 0088                   .dbline 48
 0088           ;    unsigned int datas;         
 0088           ;    unsigned int bits=0x0001;                          //位屏蔽变量,通过移位处理,将得出数字量的每一位值(0或1)
 0088 81E0              ldi R24,1
 008A 90E0              ldi R25,0
 008C 5C01              movw R10,R24
 008E                   .dbline 49
 008E           ;    unsigned char i,pos=10;                            //显示位置变量,通过循环处理将依次将数字量的每一位显示在LCD上
 008E 4AE0              ldi R20,10
 0090                   .dbline 50
 0090           ;    init_lcd();
 0090 0E940000          xcall _init_lcd
 0094                   .dbline 51
 0094           ;    datas =(value&bits);                               //最低位独立处理                 
 0094 C0900000          lds R12,_value
 0098 D0900100          lds R13,_value+1
 009C CA20              and R12,R10
 009E DB20              and R13,R11
 00A0                   .dbline 52
 00A0           ;    Bit_display(11,datas);
 00A0 2C2D              mov R18,R12
 00A2 0BE0              ldi R16,11
 00A4 D7DF              xcall _Bit_display
 00A6                   .dbline 53
 00A6           ;    bits = bits<<1;                                                 
 00A6 AA0C              lsl R10
 00A8 BB1C              rol R11
 00AA                   .dbline 54
 00AA           ;    for(i=0;i<=10;i++)                                 //高11位在循环中处理
 00AA 6627              clr R22
 00AC 15C0              xjmp L10
 00AE           L7:
 00AE                   .dbline 55
 00AE                   .dbline 56
 00AE C0900000          lds R12,_value
 00B2 D0900100          lds R13,_value+1
 00B6 CA20              and R12,R10
 00B8 DB20              and R13,R11
 00BA                   .dbline 57
 00BA 262F              mov R18,R22
 00BC 3327              clr R19
 00BE 2F5F              subi R18,255  ; offset = 1
 00C0 3F4F              sbci R19,255
 00C2 8601              movw R16,R12
 00C4 0E940000          xcall lsr16
 00C8 6801              movw R12,R16
 00CA                   .dbline 58
 00CA 2C2D              mov R18,R12
 00CC 042F              mov R16,R20
 00CE C2DF              xcall _Bit_display
 00D0                   .dbline 59
 00D0 AA0C              lsl R10
 00D2 BB1C              rol R11
 00D4                   .dbline 60
 00D4 4A95              dec R20
 00D6                   .dbline 61
 00D6           L8:
 00D6                   .dbline 54
 00D6 6395              inc R22
 00D8           L10:
 00D8                   .dbline 54
 00D8 8AE0              ldi R24,10
 00DA 8617              cp R24,R22
 00DC 40F7              brsh L7
 00DE                   .dbline -2
 00DE           L6:
 00DE 0E940000          xcall pop_gset4
 00E2                   .dbline 0 ; func end
 00E2 0895              ret
 00E4                   .dbsym r pos 20 c
 00E4                   .dbsym r i 22 c
 00E4                   .dbsym r bits 10 i
 00E4                   .dbsym r datas 12 i
 00E4                   .dbend
 00E4                   .dbfunc e Analog_display _Analog_display fV
 00E4           ;           data -> R22
 00E4           ;              X -> R20
                        .even
 00E4           _Analog_display::
 00E4 0E940000          xcall push_gset2
 00E8 622F              mov R22,R18
 00EA 402F              mov R20,R16
 00EC 2197              sbiw R28,1
 00EE                   .dbline -1
 00EE                   .dbline 67
 00EE           ;     {
 00EE           ;         datas =(value&bits);                            //位屏蔽操作
 00EE           ;         datas = datas>>(i+1);
 00EE           ;         Bit_display(pos,datas);                         //位显示操作    
 00EE           ;         bits = bits<<1;
 00EE           ;         pos--;
 00EE           ;        }
 00EE           ;  }    
 00EE           ; 
 00EE           ; 
 00EE           ; 
 00EE           ; void Analog_display(unsigned char X,unsigned char data) //对输入模拟量的显示
 00EE           ; {
 00EE                   .dbline 68
 00EE           ;  switch(data)
 00EE 7727              clr R23
 00F0 6030              cpi R22,0
 00F2 6707              cpc R22,R23
 00F4 09F4              brne X2
 00F6 2EC0              xjmp L15
 00F8           X2:
 00F8           X0:
 00F8 6130              cpi R22,1
 00FA E0E0              ldi R30,0
 00FC 7E07              cpc R23,R30
 00FE 09F4              brne X3
 0100 30C0              xjmp L16
 0102           X3:
 0102 6230              cpi R22,2
 0104 E0E0              ldi R30,0
 0106 7E07              cpc R23,R30
 0108 09F4              brne X4
 010A 32C0              xjmp L17
 010C           X4:
 010C 6330              cpi R22,3
 010E E0E0              ldi R30,0
 0110 7E07              cpc R23,R30
 0112 09F4              brne X5
 0114 34C0              xjmp L18
 0116           X5:
 0116 6430              cpi R22,4
 0118 E0E0              ldi R30,0
 011A 7E07              cpc R23,R30
 011C 09F4              brne X6
 011E 36C0              xjmp L19
 0120           X6:
 0120 6530              cpi R22,5
 0122 E0E0              ldi R30,0
 0124 7E07              cpc R23,R30
 0126 09F4              brne X7
 0128 38C0              xjmp L20
 012A           X7:
 012A 6630              cpi R22,6
 012C E0E0              ldi R30,0
 012E 7E07              cpc R23,R30
 0130 09F4              brne X8
 0132 3AC0              xjmp L21
 0134           X8:
 0134 6730              cpi R22,7
 0136 E0E0              ldi R30,0
 0138 7E07              cpc R23,R30
 013A 09F4              brne X9
 013C 3CC0              xjmp L22
 013E           X9:
 013E 6830              cpi R22,8
 0140 E0E0              ldi R30,0
 0142 7E07              cpc R23,R30
 0144 09F4              brne X10
 0146 3EC0              xjmp L23
 0148           X10:
 0148 6930              cpi R22,9
 014A E0E0              ldi R30,0
 014C 7E07              cpc R23,R30
 014E 09F4              brne X11
 0150 40C0              xjmp L24
 0152           X11:
 0152 45C0              xjmp L12
 0154           X1:
 0154                   .dbline 69
 0154           ;     {
 0154           L15:
 0154                   .dbline 70
 0154           ;      case 0:LCD_write_char( X, 1, '0'); break; 
 0154 80E3              ldi R24,48
 0156 8883              std y+0,R24
 0158 21E0              ldi R18,1
 015A 042F              mov R16,R20
 015C 0E940000          xcall _LCD_write_char
 0160                   .dbline 70
 0160 3EC0              xjmp L13
 0162           L16:
 0162                   .dbline 71
 0162           ;      case 1:LCD_write_char( X, 1, '1'); break;  
 0162 81E3              ldi R24,49
 0164 8883              std y+0,R24
 0166 21E0              ldi R18,1
 0168 042F              mov R16,R20
 016A 0E940000          xcall _LCD_write_char
 016E                   .dbline 71
 016E 37C0              xjmp L13
 0170           L17:
 0170                   .dbline 72
 0170           ;      case 2:LCD_write_char( X, 1, '2'); break;  
 0170 82E3              ldi R24,50
 0172 8883              std y+0,R24
 0174 21E0              ldi R18,1
 0176 042F              mov R16,R20
 0178 0E940000          xcall _LCD_write_char
 017C                   .dbline 72
 017C 30C0              xjmp L13
 017E           L18:
 017E                   .dbline 73
 017E           ;      case 3:LCD_write_char( X, 1, '3'); break;  
 017E 83E3              ldi R24,51
 0180 8883              std y+0,R24
 0182 21E0              ldi R18,1
 0184 042F              mov R16,R20
 0186 0E940000          xcall _LCD_write_char
 018A                   .dbline 73
 018A 29C0              xjmp L13
 018C           L19:
 018C                   .dbline 74
 018C           ;      case 4:LCD_write_char( X, 1, '4'); break;  
 018C 84E3              ldi R24,52
 018E 8883              std y+0,R24
 0190 21E0              ldi R18,1
 0192 042F              mov R16,R20
 0194 0E940000          xcall _LCD_write_char
 0198                   .dbline 74
 0198 22C0              xjmp L13
 019A           L20:

⌨️ 快捷键说明

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