📄 test.lis
字号:
0330 ; DDRA&=~(BIT(PA0)|BIT(PA1));
0330 8AB3 in R24,0x1a
0332 8C7F andi R24,252
0334 8ABB out 0x1a,R24
0336 .dbline 9
0336 ; ACSR=0x80;
0336 80E8 ldi R24,128
0338 88B9 out 0x8,R24
033A .dbline 10
033A ; ADMUX=(0<<REFS1)|(1<<REFS0)|adc_channel;
033A 802F mov R24,R16
033C 8064 ori R24,64
033E 87B9 out 0x7,R24
0340 .dbline 11
0340 ; ADCSRA=(1<<ADEN)|(0<<ADSC)|(0<<ADIE)|(0<<ADPS2)|(0<<ADPS1)|(0<<ADPS0);
0340 80E8 ldi R24,128
0342 86B9 out 0x6,R24
0344 .dbline -2
0344 L57:
0344 .dbline 0 ; func end
0344 0895 ret
0346 .dbsym r adc_channel 16 c
0346 .dbend
0346 .dbfunc e GetAdcValue _GetAdcValue fi
0346 ; i -> R20
0346 ; adc_value -> R10,R11
0346 ; temp -> R12,R13
0346 ; adc_channel -> R12
.even
0346 _GetAdcValue::
0346 0E940000 xcall push_xgset303C
034A C02E mov R12,R16
034C .dbline -1
034C .dbline 18
034C ; }
034C ;
034C ; /******************************************************
034C ; ** 取通道adc_channel的ADC值 **
034C ; ******************************************************/
034C ; unsigned int GetAdcValue(unsigned char adc_channel)
034C ; {
034C .dbline 19
034C ; unsigned int adc_value=0; //定义全局变量来存储ADC值
034C AA24 clr R10
034E BB24 clr R11
0350 .dbline 23
0350 ; unsigned int temp;
0350 ; unsigned char i;
0350 ;
0350 ; adc_init(adc_channel);
0350 0C2D mov R16,R12
0352 EBDF xcall _adc_init
0354 .dbline 24
0354 ; delay_nms(30);
0354 0EE1 ldi R16,30
0356 10E0 ldi R17,0
0358 6EDE xcall _delay_nms
035A .dbline 26
035A ;
035A ; for(i=0;i<19;i++)
035A 4427 clr R20
035C 10C0 xjmp L62
035E L59:
035E .dbline 27
035E ; {
035E .dbline 28
035E ; ADCSRA|=(1<<ADSC);
035E 369A sbi 0x6,6
0360 L63:
0360 .dbline 29
0360 ; while((ADCSRA&0x10)==0);
0360 L64:
0360 .dbline 29
0360 349B sbis 0x6,4
0362 FECF rjmp L63
0364 X11:
0364 .dbline 30
0364 ; temp=ADCL;
0364 C4B0 in R12,0x4
0366 DD24 clr R13
0368 .dbline 31
0368 ; temp|=(int)ADCH<<8;
0368 25B0 in R2,0x5
036A 3324 clr R3
036C 322C mov R3,R2
036E 2224 clr R2
0370 C228 or R12,R2
0372 D328 or R13,R3
0374 .dbline 32
0374 ; adc_value=adc_value+temp;
0374 AC0C add R10,R12
0376 BD1C adc R11,R13
0378 .dbline 33
0378 ; ADCSR|=(0<<ADSC);
0378 26B0 in R2,0x6
037A 26B8 out 0x6,R2
037C .dbline 34
037C ; }
037C L60:
037C .dbline 26
037C 4395 inc R20
037E L62:
037E .dbline 26
037E 4331 cpi R20,19
0380 70F3 brlo L59
0382 X12:
0382 .dbline 36
0382 ;
0382 ; adc_value=adc_value/19;
0382 23E1 ldi R18,19
0384 30E0 ldi R19,0
0386 8501 movw R16,R10
0388 0E940000 xcall div16u
038C 5801 movw R10,R16
038E .dbline 37
038E ; return adc_value;
038E .dbline -2
038E L58:
038E .dbline 0 ; func end
038E 0C940000 xjmp pop_xgset303C
0392 .dbsym r i 20 c
0392 .dbsym r adc_value 10 i
0392 .dbsym r temp 12 i
0392 .dbsym r adc_channel 12 c
0392 .dbend
0392 .dbfile D:\iccavr\mega16\11\10bit_adc\test.c
0392 .dbfunc e init_devices _init_devices fV
.even
0392 _init_devices::
0392 .dbline -1
0392 .dbline 13
0392 ; //ICC-AVR application builder : 2008-11-4 12:53:50
0392 ; // Target : M16
0392 ; // Crystal: 8.0000Mhz
0392 ;
0392 ; #include <iom16v.h>
0392 ; #include <macros.h>
0392 ;
0392 ; #include "delay.h"
0392 ; #include "lcd1602.h"
0392 ; #include "adc.h"
0392 ; //call this routine to initialize all peripherals
0392 ; void init_devices(void)
0392 ; {
0392 .dbline 15
0392 ; //stop errant interrupts until set up
0392 ; CLI(); //disable all interrupts
0392 F894 cli
0394 .dbline 16
0394 ; LCD_init();
0394 5FDE xcall _LCD_init
0396 .dbline 17
0396 ; PORTD|=BIT(PD7);
0396 979A sbi 0x12,7
0398 .dbline 18
0398 ; DDRD|=BIT(PD7);
0398 8F9A sbi 0x11,7
039A .dbline 20
039A ;
039A ; MCUCR = 0x00;
039A 2224 clr R2
039C 25BE out 0x35,R2
039E .dbline 21
039E ; GICR = 0x00;
039E 2BBE out 0x3b,R2
03A0 .dbline 22
03A0 ; TIMSK = 0x00; //timer interrupt sources
03A0 29BE out 0x39,R2
03A2 .dbline 23
03A2 ; SEI(); //re-enable interrupts
03A2 7894 sei
03A4 .dbline -2
03A4 L66:
03A4 .dbline 0 ; func end
03A4 0895 ret
03A6 .dbend
03A6 .dbfunc e main _main fV
03A6 ; adc1 -> R10,R11
03A6 ; adc0 -> R10,R11
.even
03A6 _main::
03A6 2297 sbiw R28,2
03A8 .dbline -1
03A8 .dbline 29
03A8 ; //all peripherals are now initialized
03A8 ; }
03A8 ;
03A8 ; //
03A8 ; void main(void)
03A8 ; {
03A8 .dbline 31
03A8 ; unsigned int adc0,adc1;
03A8 ; init_devices();
03A8 F4DF xcall _init_devices
03AA .dbline 33
03AA ; //insert your functional code here...
03AA ; LCD_write_string(0,0,"10_Bit ADC Test!");
03AA 80E0 ldi R24,<L68
03AC 90E0 ldi R25,>L68
03AE 9983 std y+1,R25
03B0 8883 std y+0,R24
03B2 2227 clr R18
03B4 0027 clr R16
03B6 F3DE xcall _LCD_write_string
03B8 .dbline 34
03B8 ; delay_nms(2000);
03B8 00ED ldi R16,2000
03BA 17E0 ldi R17,7
03BC 3CDE xcall _delay_nms
03BE .dbline 35
03BE ; LCD_write_string(0,0," ADC0: V ");
03BE 80E0 ldi R24,<L69
03C0 90E0 ldi R25,>L69
03C2 9983 std y+1,R25
03C4 8883 std y+0,R24
03C6 2227 clr R18
03C8 0027 clr R16
03CA E9DE xcall _LCD_write_string
03CC .dbline 36
03CC ; LCD_write_string(0,1," ADC1: V ");
03CC 80E0 ldi R24,<L70
03CE 90E0 ldi R25,>L70
03D0 9983 std y+1,R25
03D2 8883 std y+0,R24
03D4 21E0 ldi R18,1
03D6 0027 clr R16
03D8 E2DE xcall _LCD_write_string
03DA 10C0 xjmp L72
03DC L71:
03DC .dbline 38
03DC ; while(1)
03DC ; {
03DC .dbline 39
03DC ; adc0=GetAdcValue(0);
03DC 0027 clr R16
03DE B3DF xcall _GetAdcValue
03E0 5801 movw R10,R16
03E2 .dbline 40
03E2 ; LCD_write_adc(7,0,adc0);
03E2 B982 std y+1,R11
03E4 A882 std y+0,R10
03E6 2227 clr R18
03E8 07E0 ldi R16,7
03EA 44DF xcall _LCD_write_adc
03EC .dbline 42
03EC ;
03EC ; adc1=GetAdcValue(1);
03EC 01E0 ldi R16,1
03EE ABDF xcall _GetAdcValue
03F0 5801 movw R10,R16
03F2 .dbline 43
03F2 ; LCD_write_adc(7,1,adc1);
03F2 B982 std y+1,R11
03F4 A882 std y+0,R10
03F6 21E0 ldi R18,1
03F8 07E0 ldi R16,7
03FA 3CDF xcall _LCD_write_adc
03FC .dbline 44
03FC ; }
03FC L72:
03FC .dbline 37
03FC EFCF xjmp L71
03FE X13:
03FE .dbline -2
03FE L67:
03FE .dbline 0 ; func end
03FE 2296 adiw R28,2
0400 0895 ret
0402 .dbsym r adc1 10 i
0402 .dbsym r adc0 10 i
0402 .dbend
.area data(ram, con, rel)
0000 .dbfile D:\iccavr\mega16\11\10bit_adc\test.c
0000 L70:
0000 .blkb 17
.area idata
0000 20414443313A20202020202056202020 .byte 32,'A,'D,'C,49,58,32,32,32,32,32,32,'V,32,32,32
0010 00 .byte 0
.area data(ram, con, rel)
0011 .dbfile D:\iccavr\mega16\11\10bit_adc\test.c
0011 L69:
0011 .blkb 17
.area idata
0011 20414443303A20202020202056202020 .byte 32,'A,'D,'C,48,58,32,32,32,32,32,32,'V,32,32,32
0021 00 .byte 0
.area data(ram, con, rel)
0022 .dbfile D:\iccavr\mega16\11\10bit_adc\test.c
0022 L68:
0022 .blkb 17
.area idata
0022 31305F42697420414443205465737421 .byte 49,48,95,'B,'i,'t,32,'A,'D,'C,32,'T,'e,'s,'t,33
0032 00 .byte 0
.area data(ram, con, rel)
0033 .dbfile D:\iccavr\mega16\11\10bit_adc\test.c
.area lit(rom, con, rel)
0000 L48:
0000 2DB29D40 .word 0xb22d,0x409d
0004 ; }
0004 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -