📄 adc.lis
字号:
.module ADC.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\niutao\MYDOCU~1\永磁电机\平缝机\新建文件夹\函数库\ADC\ADC.c
0000 .dbfunc e adc_init _adc_init fV
.even
0000 _adc_init::
0000 .dbline -1
0000 .dbline 30
0000 ; /*****************************************************************
0000 ; * 文件名: ADC.c
0000 ; * 版本号:
0000 ; * 创作日期: 2005.7.7
0000 ; * 作者: fengzm
0000 ; * 功能说明: 可采集7个AD通道的值,使用了RC滤波;
0000 ; * 其它说明: 使用AVR单片机Atmaga48, 晶振:8Mhz
0000 ; 调用ADC文件的时候只需要输入通道号即可,如ADC(7);
0000 ; *****************************************************************/
0000 ;
0000 ;
0000 ; /*****************************************************************
0000 ;
0000 ; * 修改日期: 2005.7.8
0000 ; * 修改人: wangzq
0000 ; * 修改原因: 优化代码
0000 ; 定时器0溢出触发A/D转换
0000 ; 修改g_AdcNum改变通道号,默认值0;
0000 ; g_ValueAdc返回A/D转换后的滤波值;
0000 ; g_AdcEnd 0xff表示当前返回值有效;
0000 ; *******************************************************************/
0000 ;
0000 ;
0000 ; //包含文件
0000 ; #include "ADC.h"
0000 ;
0000 ; // ADC initialize
0000 ; // Conversion time: 13uS,CLOCK/8;
0000 ; void adc_init(void)
0000 ; {
0000 .dbline 31
0000 ; ADCSRA = 0x00; //disable adc
0000 2224 clr R2
0002 EAE7 ldi R30,122
0004 F0E0 ldi R31,0
0006 2082 std z+0,R2
0008 .dbline 32
0008 ; ADMUX = 0x00; //select adc input 0
0008 ECE7 ldi R30,124
000A 2082 std z+0,R2
000C .dbline 33
000C ; ACSR = 0x80; //not need the compare function
000C 80E8 ldi R24,128
000E 80BF out 0x30,R24
0010 .dbline 34
0010 ; ADCSRB = 0x04; //定时器0溢出触发转换
0010 84E0 ldi R24,4
0012 EBE7 ldi R30,123
0014 8083 std z+0,R24
0016 .dbline -2
0016 L1:
0016 .dbline 0 ; func end
0016 0895 ret
0018 .dbend
.area vector(rom, abs)
.org 42
002A 0CC0 rjmp _adc_isr
.area text(rom, con, rel)
0018 .dbfile C:\DOCUME~1\niutao\MYDOCU~1\永磁电机\平缝机\新建文件夹\函数库\ADC\ADC.c
0018 .dbfunc e adc_isr _adc_isr fV
0018 ; j -> y+0
.even
0018 _adc_isr::
0018 2A92 st -y,R2
001A 3A92 st -y,R3
001C 4A92 st -y,R4
001E 5A92 st -y,R5
0020 6A92 st -y,R6
0022 7A92 st -y,R7
0024 8A92 st -y,R8
0026 9A92 st -y,R9
0028 0A93 st -y,R16
002A 1A93 st -y,R17
002C 2A93 st -y,R18
002E 3A93 st -y,R19
0030 8A93 st -y,R24
0032 EA93 st -y,R30
0034 FA93 st -y,R31
0036 2FB6 in R2,0x3f
0038 2A92 st -y,R2
003A 00D0 rcall push_gset2
003C 2497 sbiw R28,4
003E .dbline -1
003E .dbline 39
003E ; }
003E ;
003E ; #pragma interrupt_handler adc_isr:22
003E ; void adc_isr(void)
003E ; {
003E .dbline 42
003E ; dword j;
003E ;
003E ; j =ADCL; //Read 8 low bits first (impo
003E E8E7 ldi R30,120
0040 F0E0 ldi R31,0
0042 2080 ldd R2,z+0
0044 3324 clr R3
0046 4424 clr R4
0048 5524 clr R5
004A 2882 std y+0,R2
004C 3982 std y+1,R3
004E 4A82 std y+2,R4
0050 5B82 std y+3,R5
0052 .dbline 43
0052 ; j |=(int)ADCH << 8; //read 2 high bits and shift into topbyte
0052 E9E7 ldi R30,121
0054 2080 ldd R2,z+0
0056 3324 clr R3
0058 322C mov R3,R2
005A 2224 clr R2
005C 4424 clr R4
005E 37FC sbrc R3,7
0060 4094 com R4
0062 5524 clr R5
0064 47FC sbrc R4,7
0066 5094 com R5
0068 6880 ldd R6,y+0
006A 7980 ldd R7,y+1
006C 8A80 ldd R8,y+2
006E 9B80 ldd R9,y+3
0070 6228 or R6,R2
0072 7328 or R7,R3
0074 8428 or R8,R4
0076 9528 or R9,R5
0078 6882 std y+0,R6
007A 7982 std y+1,R7
007C 8A82 std y+2,R8
007E 9B82 std y+3,R9
0080 .dbline 45
0080 ;
0080 ; j *= ADCK; //RC filtering
0080 2880 ldd R2,y+0
0082 3980 ldd R3,y+1
0084 4A80 ldd R4,y+2
0086 5B80 ldd R5,y+3
0088 42E0 ldi R20,2
008A 50E0 ldi R21,0
008C 60E0 ldi R22,0
008E 70E0 ldi R23,0
0090 5A92 st -y,R5
0092 4A92 st -y,R4
0094 3A92 st -y,R3
0096 2A92 st -y,R2
0098 8A01 movw R16,R20
009A 9B01 movw R18,R22
009C 00D0 rcall empy32u
009E 0883 std y+0,R16
00A0 1983 std y+1,R17
00A2 2A83 std y+2,R18
00A4 3B83 std y+3,R19
00A6 .dbline 46
00A6 ; j += (10-ADCK) * g_ValueAdc;
00A6 20910000 lds R18,_g_ValueAdc
00AA 30910100 lds R19,_g_ValueAdc+1
00AE 08E0 ldi R16,8
00B0 10E0 ldi R17,0
00B2 00D0 rcall empy16s
00B4 1801 movw R2,R16
00B6 4424 clr R4
00B8 5524 clr R5
00BA 6880 ldd R6,y+0
00BC 7980 ldd R7,y+1
00BE 8A80 ldd R8,y+2
00C0 9B80 ldd R9,y+3
00C2 620C add R6,R2
00C4 731C adc R7,R3
00C6 841C adc R8,R4
00C8 951C adc R9,R5
00CA 6882 std y+0,R6
00CC 7982 std y+1,R7
00CE 8A82 std y+2,R8
00D0 9B82 std y+3,R9
00D2 .dbline 47
00D2 ; j /=10;
00D2 4AE0 ldi R20,10
00D4 50E0 ldi R21,0
00D6 60E0 ldi R22,0
00D8 70E0 ldi R23,0
00DA 0881 ldd R16,y+0
00DC 1981 ldd R17,y+1
00DE 2A81 ldd R18,y+2
00E0 3B81 ldd R19,y+3
00E2 7A93 st -y,R23
00E4 6A93 st -y,R22
00E6 5A93 st -y,R21
00E8 4A93 st -y,R20
00EA 00D0 rcall div32u
00EC 0883 std y+0,R16
00EE 1983 std y+1,R17
00F0 2A83 std y+2,R18
00F2 3B83 std y+3,R19
00F4 .dbline 48
00F4 ; g_ValueAdc = j;
00F4 2880 ldd R2,y+0
00F6 3980 ldd R3,y+1
00F8 30920100 sts _g_ValueAdc+1,R3
00FC 20920000 sts _g_ValueAdc,R2
0100 .dbline 50
0100 ;
0100 ; g_AdcEnd = 0xff; //set the flag of end
0100 8FEF ldi R24,255
0102 80930000 sts _g_AdcEnd,R24
0106 .dbline 51
0106 ; ADMUX = g_AdcNum; //通道选择
0106 20900000 lds R2,_g_AdcNum
010A ECE7 ldi R30,124
010C F0E0 ldi R31,0
010E 2082 std z+0,R2
0110 .dbline -2
0110 L2:
0110 2496 adiw R28,4
0112 00D0 rcall pop_gset2
0114 2990 ld R2,y+
0116 2FBE out 0x3f,R2
0118 F991 ld R31,y+
011A E991 ld R30,y+
011C 8991 ld R24,y+
011E 3991 ld R19,y+
0120 2991 ld R18,y+
0122 1991 ld R17,y+
0124 0991 ld R16,y+
0126 9990 ld R9,y+
0128 8990 ld R8,y+
012A 7990 ld R7,y+
012C 6990 ld R6,y+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -