📄 adc.lis
字号:
.module ADC.c
.area text(rom, con, rel)
0000 .dbfile E:\张秋伟\我的实验\数控电压源\ADC.c
0000 .dbfunc e adc_init _adc_init fV
.even
0000 _adc_init::
0000 .dbline -1
0000 .dbline 13
0000 ; //包含所需头文件
0000 ; #include <ioM16v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; /*------宏定义------*/
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ; #define DAC_DATA PORTB
0000 ; #define DAC_DDR DDRB
0000 ;
0000 ;
0000 ; void adc_init(void)
0000 ; {
0000 .dbline 15
0000 ; //adc转换初始化
0000 ; ADCSRA = 0x00; //禁止AD转换
0000 2224 clr R2
0002 26B8 out 0x6,R2
0004 .dbline 16
0004 ; ADMUX = 0x47;
0004 87E4 ldi R24,71
0006 87B9 out 0x7,R24
0008 .dbline 17
0008 ; SFIOR |= 0x00;
0008 20B6 in R2,0x30
000A 20BE out 0x30,R2
000C .dbline 18
000C ; ACSR = 0x80; //禁止模拟比较器
000C 80E8 ldi R24,128
000E 88B9 out 0x8,R24
0010 .dbline 19
0010 ; ADCSRA = 0xCE;
0010 8EEC ldi R24,206
0012 86B9 out 0x6,R24
0014 .dbline -2
0014 L1:
0014 .dbline 0 ; func end
0014 0895 ret
0016 .dbend
0016 .dbfunc e adc_calc _adc_calc fi
0016 ; voltage -> R10,R11
0016 ; value -> y+0
.even
0016 _adc_calc::
0016 0E940000 xcall push_gset3
001A 2497 sbiw R28,4
001C .dbline -1
001C .dbline 24
001C ; }
001C ;
001C ;
001C ; unsigned int adc_calc(void)
001C ; {
001C .dbline 26
001C ; //计算实际电压
001C ; unsigned long value=0;
001C 40E0 ldi R20,0
001E 50E0 ldi R21,0
0020 60E0 ldi R22,0
0022 70E0 ldi R23,0
0024 FE01 movw R30,R28
0026 4083 std z+0,R20
0028 5183 std z+1,R21
002A 6283 std z+2,R22
002C 7383 std z+3,R23
002E .dbline 27
002E ; unsigned int voltage=0; //电压单位为(mV)
002E AA24 clr R10
0030 BB24 clr R11
0032 .dbline 28
0032 ; value=ADCL; //首先读低位
0032 24B0 in R2,0x4
0034 3324 clr R3
0036 4424 clr R4
0038 5524 clr R5
003A FE01 movw R30,R28
003C 2082 std z+0,R2
003E 3182 std z+1,R3
0040 4282 std z+2,R4
0042 5382 std z+3,R5
0044 .dbline 29
0044 ; value|=(int)ADCH << 8; //然后读高位
0044 25B0 in R2,0x5
0046 3324 clr R3
0048 322C mov R3,R2
004A 2224 clr R2
004C 4424 clr R4
004E 37FC sbrc R3,7
0050 4094 com R4
0052 5524 clr R5
0054 47FC sbrc R4,7
0056 5094 com R5
0058 FE01 movw R30,R28
005A 6080 ldd R6,z+0
005C 7180 ldd R7,z+1
005E 8280 ldd R8,z+2
0060 9380 ldd R9,z+3
0062 6228 or R6,R2
0064 7328 or R7,R3
0066 8428 or R8,R4
0068 9528 or R9,R5
006A FE01 movw R30,R28
006C 6082 std z+0,R6
006E 7182 std z+1,R7
0070 8282 std z+2,R8
0072 9382 std z+3,R9
0074 .dbline 30
0074 ; voltage=(value*5000)>>10;
0074 FE01 movw R30,R28
0076 2080 ldd R2,z+0
0078 3180 ldd R3,z+1
007A 4280 ldd R4,z+2
007C 5380 ldd R5,z+3
007E 48E8 ldi R20,136
0080 53E1 ldi R21,19
0082 60E0 ldi R22,0
0084 70E0 ldi R23,0
0086 5A92 st -y,R5
0088 4A92 st -y,R4
008A 3A92 st -y,R3
008C 2A92 st -y,R2
008E 8A01 movw R16,R20
0090 9B01 movw R18,R22
0092 0E940000 xcall empy32u
0096 8AE0 ldi R24,10
0098 90E0 ldi R25,0
009A 8A93 st -y,R24
009C 0E940000 xcall lsr32
00A0 5801 movw R10,R16
00A2 .dbline 31
00A2 ; return voltage;
00A2 .dbline -2
00A2 L2:
00A2 2496 adiw R28,4
00A4 0E940000 xcall pop_gset3
00A8 .dbline 0 ; func end
00A8 0895 ret
00AA .dbsym r voltage 10 i
00AA .dbsym l value 0 l
00AA .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -