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

📄 adc.lis

📁 平缝机的单片机伺服控制系统源代码。本程序为用单片机控制永磁同步电机的低成本方案
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module ADC.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\PMax\单片机源代码\函数库\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 20927A00          sts 122,R2
 0006                   .dbline 32
 0006           ;     ADMUX  = 0x00;  //select adc input 0
 0006 20927C00          sts 124,R2
 000A                   .dbline 33
 000A           ;     ACSR   = 0x80;  //not need the compare function
 000A 80E8              ldi R24,128
 000C 80BF              out 0x30,R24
 000E                   .dbline 34
 000E           ;     ADCSRB = 0x04;  //定时器0溢出触发转换
 000E 84E0              ldi R24,4
 0010 80937B00          sts 123,R24
 0014                   .dbline -2
 0014           L1:
 0014                   .dbline 0 ; func end
 0014 0895              ret
 0016                   .dbend
                        .area vector(rom, abs)
                        .org 42
 002A 0BC0              rjmp _adc_isr
                        .area text(rom, con, rel)
 0016                   .dbfile E:\PMax\单片机源代码\函数库\ADC\ADC.c
 0016                   .dbfunc e adc_isr _adc_isr fV
 0016           ;              j -> y+0
                        .even
 0016           _adc_isr::
 0016 0A92              st -y,R0
 0018 1A92              st -y,R1
 001A 2A92              st -y,R2
 001C 3A92              st -y,R3
 001E 4A92              st -y,R4
 0020 5A92              st -y,R5
 0022 6A92              st -y,R6
 0024 7A92              st -y,R7
 0026 8A92              st -y,R8
 0028 9A92              st -y,R9
 002A 0A93              st -y,R16
 002C 1A93              st -y,R17
 002E 2A93              st -y,R18
 0030 3A93              st -y,R19
 0032 8A93              st -y,R24
 0034 EA93              st -y,R30
 0036 FA93              st -y,R31
 0038 0FB6              in R0,0x3f
 003A 0A92              st -y,R0
 003C 00D0              rcall push_gset2
 003E 2497              sbiw R28,4
 0040                   .dbline -1
 0040                   .dbline 39
 0040           ; }
 0040           ; 
 0040           ; #pragma interrupt_handler adc_isr:22
 0040           ; void adc_isr(void)
 0040           ; {
 0040                   .dbline 42
 0040           ;       dword j;
 0040           ;       
 0040           ;       j =ADCL;                //Read 8 low bits first (impo
 0040 20907800          lds R2,120
 0044 3324              clr R3
 0046 4424              clr R4
 0048 5524              clr R5
 004A FE01              movw R30,R28
 004C 2082              std z+0,R2
 004E 3182              std z+1,R3
 0050 4282              std z+2,R4
 0052 5382              std z+3,R5
 0054                   .dbline 43
 0054           ;     j |=(int)ADCH << 8;       //read 2 high bits and shift into topbyte
 0054 20907900          lds R2,121
 0058 3324              clr R3
 005A 322C              mov R3,R2
 005C 2224              clr R2
 005E 4424              clr R4
 0060 37FC              sbrc R3,7
 0062 4094              com R4
 0064 5524              clr R5
 0066 47FC              sbrc R4,7
 0068 5094              com R5
 006A FE01              movw R30,R28
 006C 6080              ldd R6,z+0
 006E 7180              ldd R7,z+1
 0070 8280              ldd R8,z+2
 0072 9380              ldd R9,z+3
 0074 6228              or R6,R2
 0076 7328              or R7,R3
 0078 8428              or R8,R4
 007A 9528              or R9,R5
 007C FE01              movw R30,R28
 007E 6082              std z+0,R6
 0080 7182              std z+1,R7
 0082 8282              std z+2,R8
 0084 9382              std z+3,R9
 0086                   .dbline 45
 0086           ;     
 0086           ;       j *= ADCK;               //RC filtering
 0086 FE01              movw R30,R28
 0088 2080              ldd R2,z+0
 008A 3180              ldd R3,z+1
 008C 4280              ldd R4,z+2
 008E 5380              ldd R5,z+3
 0090 44E0              ldi R20,4
 0092 50E0              ldi R21,0
 0094 60E0              ldi R22,0
 0096 70E0              ldi R23,0
 0098 5A92              st -y,R5
 009A 4A92              st -y,R4
 009C 3A92              st -y,R3
 009E 2A92              st -y,R2
 00A0 8A01              movw R16,R20
 00A2 9B01              movw R18,R22
 00A4 00D0              rcall empy32u
 00A6 FE01              movw R30,R28
 00A8 0083              std z+0,R16
 00AA 1183              std z+1,R17
 00AC 2283              std z+2,R18
 00AE 3383              std z+3,R19
 00B0                   .dbline 46
 00B0           ;       j += (10-ADCK) * g_ValueAdc;
 00B0 20910000          lds R18,_g_ValueAdc
 00B4 30910100          lds R19,_g_ValueAdc+1
 00B8 06E0              ldi R16,6
 00BA 10E0              ldi R17,0
 00BC 00D0              rcall empy16s
 00BE 1801              movw R2,R16
 00C0 4424              clr R4
 00C2 5524              clr R5
 00C4 FE01              movw R30,R28
 00C6 6080              ldd R6,z+0
 00C8 7180              ldd R7,z+1
 00CA 8280              ldd R8,z+2
 00CC 9380              ldd R9,z+3
 00CE 620C              add R6,R2
 00D0 731C              adc R7,R3
 00D2 841C              adc R8,R4
 00D4 951C              adc R9,R5
 00D6 FE01              movw R30,R28
 00D8 6082              std z+0,R6
 00DA 7182              std z+1,R7
 00DC 8282              std z+2,R8
 00DE 9382              std z+3,R9
 00E0                   .dbline 47
 00E0           ;       j /=10;
 00E0 4AE0              ldi R20,10
 00E2 50E0              ldi R21,0
 00E4 60E0              ldi R22,0
 00E6 70E0              ldi R23,0
 00E8 FE01              movw R30,R28
 00EA 2080              ldd R2,z+0
 00EC 3180              ldd R3,z+1
 00EE 4280              ldd R4,z+2
 00F0 5380              ldd R5,z+3
 00F2 7A93              st -y,R23
 00F4 6A93              st -y,R22
 00F6 5A93              st -y,R21
 00F8 4A93              st -y,R20
 00FA 8101              movw R16,R2
 00FC 9201              movw R18,R4
 00FE 00D0              rcall div32u
 0100 FE01              movw R30,R28
 0102 0083              std z+0,R16
 0104 1183              std z+1,R17
 0106 2283              std z+2,R18
 0108 3383              std z+3,R19
 010A                   .dbline 48
 010A           ;       g_ValueAdc = j;
 010A FE01              movw R30,R28
 010C 2080              ldd R2,z+0
 010E 3180              ldd R3,z+1
 0110 30920100          sts _g_ValueAdc+1,R3
 0114 20920000          sts _g_ValueAdc,R2
 0118                   .dbline 50
 0118           ;       
 0118           ;       g_AdcEnd  = 0xff;               //set the flag of end
 0118 8FEF              ldi R24,255
 011A 80930000          sts _g_AdcEnd,R24
 011E                   .dbline 51
 011E           ;     ADMUX  = g_AdcNum;                                //通道选择
 011E 20900000          lds R2,_g_AdcNum
 0122 20927C00          sts 124,R2
 0126                   .dbline -2
 0126           L2:
 0126 2496              adiw R28,4
 0128 00D0              rcall pop_gset2
 012A 0990              ld R0,y+
 012C 0FBE              out 0x3f,R0
 012E F991              ld R31,y+
 0130 E991              ld R30,y+
 0132 8991              ld R24,y+
 0134 3991              ld R19,y+
 0136 2991              ld R18,y+
 0138 1991              ld R17,y+
 013A 0991              ld R16,y+
 013C 9990              ld R9,y+
 013E 8990              ld R8,y+
 0140 7990              ld R7,y+
 0142 6990              ld R6,y+
 0144 5990              ld R5,y+
 0146 4990              ld R4,y+
 0148 3990              ld R3,y+
 014A 2990              ld R2,y+

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -