📄 adc.lis
字号:
.module adc.c
.area text(rom, con, rel)
0000 .dbfile cfile\adc.c
.area data(ram, con, rel)
0000 .dbfile cfile\adc.c
0000 _adc_mux::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile cfile\adc.c
0001 .dbfile F:\file\数控电源3\ad_da\cfile\adc.c
0001 .dbsym e adc_mux _adc_mux c
.area text(rom, con, rel)
0000 .dbfile F:\file\数控电源3\ad_da\cfile\adc.c
0000 .dbfunc e ad_result _ad_result fV
0000 ; Vref -> R22,R23
0000 ; j -> y+2
0000 ; value1 -> R20,R21
0000 ; count -> R10,R11
.even
0000 _ad_result::
0000 0E940000 xcall push_xgsetF00C
0004 2697 sbiw R28,6
0006 .dbline -1
0006 .dbline 12
0006 ; #define ADC_C
0006 ; #include "includes.h"
0006 ; #define MaxAdcBufSize 9
0006 ; #define AdcBufStep 3 //为了算巴士均值
0006 ;
0006 ; static volatile unsigned int ADCBuffer[MaxAdcBufSize];
0006 ; static volatile unsigned int addata;
0006 ; unsigned char adc_mux = 0x00;//选择通道:ADC0
0006 ;
0006 ;
0006 ; void ad_result(void)
0006 ; {
0006 .dbline 15
0006 ; float j;
0006 ; unsigned int count;
0006 ; unsigned int Vref=50000;
0006 60E5 ldi R22,50000
0008 73EC ldi R23,195
000A .dbline 16
000A ; unsigned char *value1 = "0.000 V";
000A 40E0 ldi R20,<L2
000C 50E0 ldi R21,>L2
000E .dbline 19
000E ; //addata=ADCL;
000E ; //addata=addata+ADCH*256;
000E ; addata=ADCBuffer[0];
000E 20900200 lds R2,_ADCBuffer
0012 30900300 lds R3,_ADCBuffer+1
0016 30920100 sts _addata+1,R3
001A 20920000 sts _addata,R2
001E .dbline 22
001E ;
001E ;
001E ; j = (float)(((float)((Vref/1024)))*addata)/1000.00;
001E 2AE0 ldi R18,10
0020 30E0 ldi R19,0
0022 8B01 movw R16,R22
0024 0E940000 xcall lsr16
0028 0E940000 xcall uint2fp
002C 1801 movw R2,R16
002E 2901 movw R4,R18
0030 00910000 lds R16,_addata
0034 10910100 lds R17,_addata+1
0038 0E940000 xcall uint2fp
003C 3A93 st -y,R19
003E 2A93 st -y,R18
0040 1A93 st -y,R17
0042 0A93 st -y,R16
0044 8101 movw R16,R2
0046 9201 movw R18,R4
0048 0E940000 xcall fpmule2
004C 1801 movw R2,R16
004E 2901 movw R4,R18
0050 00E0 ldi R16,<L3
0052 10E0 ldi R17,>L3
0054 0E940000 xcall lpm32
0058 3A93 st -y,R19
005A 2A93 st -y,R18
005C 1A93 st -y,R17
005E 0A93 st -y,R16
0060 8101 movw R16,R2
0062 9201 movw R18,R4
0064 0E940000 xcall fpdiv2
0068 0A83 std y+2,R16
006A 1B83 std y+3,R17
006C 2C83 std y+4,R18
006E 3D83 std y+5,R19
0070 .dbline 23
0070 ; count = j*100;
0070 00E0 ldi R16,<L4
0072 10E0 ldi R17,>L4
0074 0E940000 xcall lpm32
0078 CE01 movw R24,R28
007A 0296 adiw R24,2
007C 9A93 st -y,R25
007E 8A93 st -y,R24
0080 0E940000 xcall fpmule1
0084 0E940000 xcall fpint
0088 5801 movw R10,R16
008A .dbline 25
008A ;
008A ; value1[0] = count /1000+0x30;
008A 28EE ldi R18,1000
008C 33E0 ldi R19,3
008E 0E940000 xcall div16u
0092 C801 movw R24,R16
0094 C096 adiw R24,48
0096 FA01 movw R30,R20
0098 8083 std z+0,R24
009A .dbline 26
009A ; count = count %1000;
009A 28EE ldi R18,1000
009C 33E0 ldi R19,3
009E 8501 movw R16,R10
00A0 0E940000 xcall mod16u
00A4 5801 movw R10,R16
00A6 .dbline 27
00A6 ; value1[2] = count /100+0x30;
00A6 24E6 ldi R18,100
00A8 30E0 ldi R19,0
00AA 0E940000 xcall div16u
00AE C801 movw R24,R16
00B0 C096 adiw R24,48
00B2 FA01 movw R30,R20
00B4 8283 std z+2,R24
00B6 .dbline 28
00B6 ; count = count %100;
00B6 24E6 ldi R18,100
00B8 30E0 ldi R19,0
00BA 8501 movw R16,R10
00BC 0E940000 xcall mod16u
00C0 5801 movw R10,R16
00C2 .dbline 29
00C2 ; value1[3] = count /10 + 0x30;
00C2 2AE0 ldi R18,10
00C4 30E0 ldi R19,0
00C6 0E940000 xcall div16u
00CA C801 movw R24,R16
00CC C096 adiw R24,48
00CE FA01 movw R30,R20
00D0 8383 std z+3,R24
00D2 .dbline 30
00D2 ; value1[4] = count %10 + 0x30;
00D2 2AE0 ldi R18,10
00D4 30E0 ldi R19,0
00D6 8501 movw R16,R10
00D8 0E940000 xcall mod16u
00DC C801 movw R24,R16
00DE C096 adiw R24,48
00E0 FA01 movw R30,R20
00E2 8483 std z+4,R24
00E4 .dbline 34
00E4 ;
00E4 ; //LCD_Cursor(0,1);
00E4 ;
00E4 ; LCD_DisplayString(2,1,value1);
00E4 5983 std y+1,R21
00E6 4883 std y+0,R20
00E8 21E0 ldi R18,1
00EA 02E0 ldi R16,2
00EC 0E940000 xcall _LCD_DisplayString
00F0 .dbline -2
00F0 L1:
00F0 .dbline 0 ; func end
00F0 2696 adiw R28,6
00F2 0C940000 xjmp pop_xgsetF00C
00F6 .dbsym r Vref 22 i
00F6 .dbsym l j 2 D
00F6 .dbsym r value1 20 pc
00F6 .dbsym r count 10 i
00F6 .dbend
00F6 .dbfunc e init_adc _init_adc fV
.even
00F6 _init_adc::
00F6 .dbline -1
00F6 .dbline 40
00F6 ;
00F6 ; // return addata;
00F6 ; }
00F6 ;
00F6 ; void init_adc(void)
00F6 ; {
00F6 .dbline 41
00F6 ; DDRA&=~BIT(PA0);
00F6 D098 cbi 0x1a,0
00F8 .dbline 42
00F8 ; PORTA&=~BIT(PA0);
00F8 D898 cbi 0x1b,0
00FA .dbline 43
00FA ; ADCSRA = 0x00;
00FA 2224 clr R2
00FC 26B8 out 0x6,R2
00FE .dbline 44
00FE ; ADMUX =(1<<REFS0)|(adc_mux&0x1f); //AVCC,AREF引脚加滤波电容,单端输入ADC0
00FE 80910000 lds R24,_adc_mux
0102 8F71 andi R24,31
0104 8064 ori R24,64
0106 87B9 out 0x7,R24
0108 .dbline 45
0108 ; ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;//64分频
0108 8EEC ldi R24,206
010A 86B9 out 0x6,R24
010C .dbline -2
010C L5:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -