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

📄 adc.lis

📁 平缝机的单片机伺服控制系统源代码。本程序为用单片机控制永磁同步电机的低成本方案
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .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 + -