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

📄 adc.lis

📁 atmega8的片内A/D转换操作
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module adc.c
                        .area text(rom, con, rel)
 0000                   .dbfile ./74164.h
 0000                   .dbfunc e write164 _write164 fV
 0000           ;             ch -> R20
 0000           ;              i -> R22
 0000           ;              x -> R16
                        .even
 0000           _write164::
 0000 00D0              rcall push_gset2
 0002                   .dbline -1
 0002                   .dbline 2
 0002           ; //ICC-AVR application builder : 2005-3-1 22:02:29
 0002           ; // Target : M8
 0002                   .dbline 5
 0002           ; // Crystal: 8.0000Mhz
 0002           ; 
 0002           ; #include <iom8v.h>
 0002 402F              mov R20,R16
 0004                   .dbline 6
 0004           ; #include <macros.h>
 0004 C098              cbi 0x18,0
 0006                   .dbline 7
 0006           ; #include <74164.h>
 0006 9698              cbi 0x12,6
 0008                   .dbline 8
 0008 6627              clr R22
 000A 0AC0              rjmp L5
 000C           L2:
 000C                   .dbline 8
 000C           ; 
 000C                   .dbline 9
 000C           ; unsigned char    display[4];  // 显示缓冲区
 000C 47FF              sbrs R20,7
 000E 02C0              rjmp L6
 0010                   .dbline 10
 0010           ; unsigned char    dis;         // 当前显示
 0010 979A              sbi 0x12,7
 0012 01C0              rjmp L7
 0014           L6:
 0014                   .dbline 12
 0014           ; unsigned int     adc;          // 保存AD转换的值
 0014           ; unsigned char    time;        // AD转换的时间间隔
 0014 9798              cbi 0x12,7
 0016           L7:
 0016                   .dbline 13
 0016 440F              lsl R20
 0018                   .dbline 14
 0018 969A              sbi 0x12,6
 001A                   .dbline 15
 001A 0000              nop
 001C                   .dbline 16
 001C 9698              cbi 0x12,6
 001E                   .dbline 17
 001E           L3:
 001E                   .dbline 8
 001E 6395              inc R22
 0020           L5:
 0020                   .dbline 8
 0020 6830              cpi R22,8
 0022 A0F3              brlo L2
 0024                   .dbline 18
 0024           ; 
 0024           ; 
 0024           ; //TIMER0 initialisation - prescale:256
 0024           ; // WGM: Normal
 0024           ; // desired value: 5mSec
 0024           ; // actual value:  4.992mSec (0.2%)
 0024 C09A              sbi 0x18,0
 0026                   .dbline -2
 0026                   .dbline 19
 0026           ; void timer0_init(void)
 0026           L1:
 0026 00D0              rcall pop_gset2
 0028                   .dbline 0 ; func end
 0028 0895              ret
 002A                   .dbsym r ch 20 c
 002A                   .dbsym r i 22 c
 002A                   .dbsym r x 16 c
 002A                   .dbend
 002A                   .dbfile D:\job\avrtest\web\example\ad\adc.c
 002A                   .dbfunc e timer0_init _timer0_init fV
                        .even
 002A           _timer0_init::
 002A                   .dbline -1
 002A                   .dbline 20
 002A           ; {
 002A                   .dbline 21
 002A           ;  TCCR0 = 0x00; //stop
 002A 2224              clr R2
 002C 23BE              out 0x33,R2
 002E                   .dbline 22
 002E           ;  TCNT0 = 0x64; //set count
 002E 84E6              ldi R24,100
 0030 82BF              out 0x32,R24
 0032                   .dbline 23
 0032           ;  TCCR0 = 0x04; //start timer
 0032 84E0              ldi R24,4
 0034 83BF              out 0x33,R24
 0036                   .dbline -2
 0036                   .dbline 24
 0036           ; }
 0036           L8:
 0036                   .dbline 0 ; func end
 0036 0895              ret
 0038                   .dbend
                        .area vector(rom, abs)
                        .org 18
 0012 1CC0              rjmp _timer0_ovf_isr
                        .area text(rom, con, rel)
 0038                   .dbfile D:\job\avrtest\web\example\ad\adc.c
 0038                   .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
                        .even
 0038           _timer0_ovf_isr::
 0038 00D0              rcall push_lset
 003A 00D0              rcall push_gset1
 003C                   .dbline -1
 003C                   .dbline 28
 003C           ; 
 003C           ; #pragma interrupt_handler timer0_ovf_isr:10
 003C           ; void timer0_ovf_isr(void)
 003C           ; {
 003C                   .dbline 29
 003C           ;  TCNT0 = 0x64; //reload counter value
 003C 84E6              ldi R24,100
 003E 82BF              out 0x32,R24
 0040                   .dbline 31
 0040           ; //  ad
 0040           ;     if(++time == 40){
 0040 80910000          lds R24,_time
 0044 8F5F              subi R24,255    ; addi 1
 0046 282E              mov R2,R24
 0048 20920000          sts _time,R2
 004C 8832              cpi R24,40
 004E 09F0              breq X2
 0050 53C0              rjmp L10
 0052           X2:
 0052                   .dbline 31
 0052                   .dbline 32
 0052           ;         time = 0;
 0052 2224              clr R2
 0054 20920000          sts _time,R2
 0058                   .dbline 33
 0058           ;         ADCSR = 0xC6;               //  开始转换
 0058 86EC              ldi R24,198
 005A 86B9              out 0x6,R24
 005C           L12:
 005C                   .dbline 34
 005C           L13:
 005C                   .dbline 34
 005C           ;         while(!(ADCSR & 0x10));     //  等待转换完成
 005C 349B              sbis 0x6,4
 005E FECF              rjmp L12
 0060                   .dbline 35
 0060           ;         adc = ADCL;
 0060 24B0              in R2,0x4
 0062 3324              clr R3
 0064 30920200          sts _adc+1,R3
 0068 20920100          sts _adc,R2
 006C                   .dbline 36
 006C           ;         adc |= (int)(ADCH << 8);    //  注意顺序
 006C 25B0              in R2,0x5
 006E 3324              clr R3
 0070 322C              mov R3,R2
 0072 2224              clr R2
 0074 40900100          lds R4,_adc
 0078 50900200          lds R5,_adc+1
 007C 4228              or R4,R2
 007E 5328              or R5,R3
 0080 50920200          sts _adc+1,R5
 0084 40920100          sts _adc,R4
 0088                   .dbline 37
 0088           ;         ADCSR = 0x10;               //  停止
 0088 80E1              ldi R24,16
 008A 86B9              out 0x6,R24
 008C                   .dbline 38
 008C           ;         display[0] = adc%10;
 008C 2AE0              ldi R18,10
 008E 30E0              ldi R19,0
 0090 8201              movw R16,R4
 0092 00D0              rcall mod16u
 0094 00930400          sts _display,R16
 0098                   .dbline 39
 0098           ;         adc = adc / 10;
 0098 2AE0              ldi R18,10
 009A 30E0              ldi R19,0
 009C 00910100          lds R16,_adc
 00A0 10910200          lds R17,_adc+1
 00A4 00D0              rcall div16u
 00A6 10930200          sts _adc+1,R17
 00AA 00930100          sts _adc,R16
 00AE                   .dbline 40
 00AE           ;         display[1] = adc%10;
 00AE 2AE0              ldi R18,10
 00B0 30E0              ldi R19,0
 00B2 00D0              rcall mod16u
 00B4 00930500          sts _display+1,R16
 00B8                   .dbline 41
 00B8           ;         adc = adc / 10;
 00B8 2AE0              ldi R18,10
 00BA 30E0              ldi R19,0
 00BC 00910100          lds R16,_adc
 00C0 10910200          lds R17,_adc+1
 00C4 00D0              rcall div16u
 00C6 10930200          sts _adc+1,R17
 00CA 00930100          sts _adc,R16
 00CE                   .dbline 42
 00CE           ;         display[2] = adc%10;
 00CE 2AE0              ldi R18,10
 00D0 30E0              ldi R19,0
 00D2 00D0              rcall mod16u
 00D4 00930600          sts _display+2,R16
 00D8                   .dbline 43
 00D8           ;         adc = adc / 10;
 00D8 2AE0              ldi R18,10
 00DA 30E0              ldi R19,0
 00DC 00910100          lds R16,_adc
 00E0 10910200          lds R17,_adc+1
 00E4 00D0              rcall div16u
 00E6 10930200          sts _adc+1,R17
 00EA 00930100          sts _adc,R16
 00EE                   .dbline 44
 00EE           ;         display[3] = adc%10;
 00EE 2AE0              ldi R18,10
 00F0 30E0              ldi R19,0
 00F2 00D0              rcall mod16u
 00F4 00930700          sts _display+3,R16
 00F8                   .dbline 45
 00F8           ;     }
 00F8           L10:
 00F8                   .dbline 48
 00F8 40910300          lds R20,_dis

⌨️ 快捷键说明

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