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

📄 ad.lis

📁 嵌入式单片机控制温度传感的无线收发方案!
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module ad.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\公司用\atmega8l\final\nrf905_send1\ad.c
 0000                   .dbfunc e AdcConvertStd _AdcConvertStd fi
 0000           ;      min_value -> R14
 0000           ;      max_value -> R20
 0000           ;         min_id -> R12
 0000           ;         max_id -> R10
 0000           ;            ret -> y+0
 0000           ;              i -> R22
                        .even
 0000           _AdcConvertStd::
 0000 00D0              rcall push_gset5
 0002 2297              sbiw R28,2
 0004                   .dbline -1
 0004                   .dbline 19
 0004           ; 
 0004           ; /********************************
 0004           ;   ATMega8 查询方式 A/D转换测试程序
 0004           ;   文件名:main.c
 0004           ;   编译:WinAVR-20070122
 0004           ; 
 0004           ;             外部4MHz晶振
 0004           ; *******************************/
 0004           ; 
 0004           ; #include "confg.h"
 0004           ; 
 0004           ; #define _BV(n) (1<<n)
 0004           ; 
 0004           ; static unsigned int g_aAdValue[8];  //A/D转换缓冲区
 0004           ; 
 0004           ; 
 0004           ; //AD转换8次去掉最高和最低后取平均值返回
 0004           ; unsigned int AdcConvertStd(void)
 0004           ; {
 0004                   .dbline 24
 0004           ;   char i;
 0004           ;   unsigned int  ret;
 0004           ;   char max_id,min_id,max_value,min_value;
 0004           ;   
 0004           ;   ADMUX=0X45;//参考电压VCC
 0004 85E4              ldi R24,69
 0006 87B9              out 0x7,R24
 0008                   .dbline 25
 0008           ;   ADCSRA=_BV(ADEN);//使能ADC,单次转换模式
 0008 80E8              ldi R24,128
 000A 86B9              out 0x6,R24
 000C                   .dbline 27
 000C           ;   //连续转换8次
 000C           ;   for(i=0;i<8;i++)
 000C 6627              clr R22
 000E 24C0              rjmp L5
 0010           L2:
 0010                   .dbline 28
 0010           ;   {
 0010                   .dbline 29
 0010           ;     ADCSRA|=_BV(ADSC);
 0010 369A              sbi 0x6,6
 0012                   .dbline 30
 0012           ;     delay_us(30);
 0012 0EE1              ldi R16,30
 0014 10E0              ldi R17,0
 0016 00D0              rcall _delay_us
 0018 03C0              rjmp L7
 001A           L6:
 001A                   .dbline 32
 001A 0EE1              ldi R16,30
 001C 10E0              ldi R17,0
 001E 00D0              rcall _delay_us
 0020           L7:
 0020                   .dbline 31
 0020 3699              sbic 0x6,6
 0022 FBCF              rjmp L6
 0024                   .dbline 33
 0024 24B0              in R2,0x4
 0026 3324              clr R3
 0028 3982              std y+1,R3
 002A 2882              std y+0,R2
 002C                   .dbline 34
 002C 25B0              in R2,0x5
 002E 3324              clr R3
 0030 322C              mov R3,R2
 0032 2224              clr R2
 0034 0880              ldd R0,y+0
 0036 1980              ldd R1,y+1
 0038 0228              or R0,R2
 003A 1328              or R1,R3
 003C 1982              std y+1,R1
 003E 0882              std y+0,R0
 0040                   .dbline 35
 0040 82E0              ldi R24,2
 0042 869F              mul R24,R22
 0044 F001              movw R30,R0
 0046 80E0              ldi R24,<_g_aAdValue
 0048 90E0              ldi R25,>_g_aAdValue
 004A E80F              add R30,R24
 004C F91F              adc R31,R25
 004E 0880              ldd R0,y+0
 0050 1980              ldd R1,y+1
 0052 1182              std z+1,R1
 0054 0082              std z+0,R0
 0056                   .dbline 36
 0056           L3:
 0056                   .dbline 27
 0056 6395              inc R22
 0058           L5:
 0058                   .dbline 27
 0058 6830              cpi R22,8
 005A D0F2              brlo L2
 005C                   .dbline 37
 005C           ;     while(ADCSRA&_BV(ADSC))
 005C           ;     delay_us(30);
 005C           ;     ret=ADCL;
 005C           ;     ret|=(unsigned int)(ADCH<<8);
 005C           ;     g_aAdValue[i]=ret;
 005C           ;   }
 005C           ;   ret=0;
 005C 0024              clr R0
 005E 1124              clr R1
 0060 1982              std y+1,R1
 0062 0882              std y+0,R0
 0064                   .dbline 38
 0064           ;   for(i=1;i<8;i++)
 0064 61E0              ldi R22,1
 0066 10C0              rjmp L12
 0068           L9:
 0068                   .dbline 39
 0068 82E0              ldi R24,2
 006A 869F              mul R24,R22
 006C F001              movw R30,R0
 006E 80E0              ldi R24,<_g_aAdValue
 0070 90E0              ldi R25,>_g_aAdValue
 0072 E80F              add R30,R24
 0074 F91F              adc R31,R25
 0076 2080              ldd R2,z+0
 0078 3180              ldd R3,z+1
 007A 0880              ldd R0,y+0
 007C 1980              ldd R1,y+1
 007E 020C              add R0,R2
 0080 131C              adc R1,R3
 0082 1982              std y+1,R1
 0084 0882              std y+0,R0
 0086           L10:
 0086                   .dbline 38
 0086 6395              inc R22
 0088           L12:
 0088                   .dbline 38
 0088 6830              cpi R22,8
 008A 70F3              brlo L9
 008C                   .dbline 42
 008C           ;     ret+=g_aAdValue[i];
 008C           ;   
 008C           ;   //找到最大和最小值索引  
 008C           ;   ret/=7;
 008C 27E0              ldi R18,7
 008E 30E0              ldi R19,0
 0090 0881              ldd R16,y+0
 0092 1981              ldd R17,y+1
 0094 00D0              rcall div16u
 0096 1983              std y+1,R17
 0098 0883              std y+0,R16
 009A                   .dbline 43
 009A           ;   max_id=min_id=1;
 009A CC24              clr R12
 009C C394              inc R12
 009E AA24              clr R10
 00A0 A394              inc R10
 00A2                   .dbline 44
 00A2           ;   max_value=min_value=0;
 00A2 EE24              clr R14
 00A4 4427              clr R20
 00A6                   .dbline 45
 00A6           ;   for(i=1;i<8;i++)
 00A6 61E0              ldi R22,1
 00A8 4FC0              rjmp L16
 00AA           L13:
 00AA                   .dbline 46
 00AA           ;   {
 00AA                   .dbline 47
 00AA           ;     if(g_aAdValue[i]>ret)
 00AA 82E0              ldi R24,2
 00AC 869F              mul R24,R22
 00AE F001              movw R30,R0
 00B0 80E0              ldi R24,<_g_aAdValue
 00B2 90E0              ldi R25,>_g_aAdValue
 00B4 E80F              add R30,R24
 00B6 F91F              adc R31,R25
 00B8 2080              ldd R2,z+0
 00BA 3180              ldd R3,z+1
 00BC 0880              ldd R0,y+0
 00BE 1980              ldd R1,y+1
 00C0 0214              cp R0,R2
 00C2 1304              cpc R1,R3
 00C4 00F5              brsh L17
 00C6                   .dbline 48
 00C6           ;     {
 00C6                   .dbline 49
 00C6           ;       if(g_aAdValue[i]-ret>max_value)
 00C6 82E0              ldi R24,2
 00C8 869F              mul R24,R22
 00CA F001              movw R30,R0
 00CC 80E0              ldi R24,<_g_aAdValue
 00CE 90E0              ldi R25,>_g_aAdValue
 00D0 E80F              add R30,R24
 00D2 F91F              adc R31,R25
 00D4 2080              ldd R2,z+0
 00D6 3180              ldd R3,z+1
 00D8 0880              ldd R0,y+0
 00DA 1980              ldd R1,y+1
 00DC 2018              sub R2,R0
 00DE 3108              sbc R3,R1
 00E0 442E              mov R4,R20
 00E2 5524              clr R5
 00E4 4214              cp R4,R2
 00E6 5304              cpc R5,R3
 00E8 70F5              brsh L18
 00EA                   .dbline 50
 00EA           ;       {
 00EA                   .dbline 51
 00EA           ;         max_value=g_aAdValue[i]-ret;
 00EA 82E0              ldi R24,2
 00EC 869F              mul R24,R22
 00EE F001              movw R30,R0
 00F0 80E0              ldi R24,<_g_aAdValue
 00F2 90E0              ldi R25,>_g_aAdValue
 00F4 E80F              add R30,R24
 00F6 F91F              adc R31,R25
 00F8 4081              ldd R20,z+0
 00FA 0880              ldd R0,y+0
 00FC 1980              ldd R1,y+1
 00FE 4019              sub R20,R0
 0100 5109              sbc R21,R1
 0102                   .dbline 52
 0102           ;         max_id=i;
 0102 A62E              mov R10,R22
 0104                   .dbline 53
 0104           ;       }
 0104                   .dbline 54
 0104           ;     }
 0104 20C0              rjmp L18
 0106           L17:
 0106                   .dbline 56
 0106           ;     else
 0106           ;     {
 0106                   .dbline 57
 0106           ;       if(ret-g_aAdValue[i]>min_value)
 0106 82E0              ldi R24,2
 0108 869F              mul R24,R22
 010A F001              movw R30,R0
 010C 80E0              ldi R24,<_g_aAdValue
 010E 90E0              ldi R25,>_g_aAdValue
 0110 E80F              add R30,R24
 0112 F91F              adc R31,R25
 0114 2080              ldd R2,z+0
 0116 3180              ldd R3,z+1
 0118 4880              ldd R4,y+0
 011A 5980              ldd R5,y+1
 011C 4218              sub R4,R2
 011E 5308              sbc R5,R3
 0120 2E2C              mov R2,R14
 0122 3324              clr R3
 0124 2414              cp R2,R4
 0126 3504              cpc R3,R5
 0128 70F4              brsh L21
 012A                   .dbline 58
 012A           ;       {
 012A                   .dbline 59
 012A           ;         min_value=ret-g_aAdValue[i];
 012A 82E0              ldi R24,2
 012C 869F              mul R24,R22
 012E F001              movw R30,R0
 0130 80E0              ldi R24,<_g_aAdValue
 0132 90E0              ldi R25,>_g_aAdValue
 0134 E80F              add R30,R24
 0136 F91F              adc R31,R25
 0138 2080              ldd R2,z+0
 013A 3180              ldd R3,z+1
 013C E880              ldd R14,y+0
 013E F980              ldd R15,y+1
 0140 E218              sub R14,R2
 0142 F308              sbc R15,R3
 0144                   .dbline 60
 0144           ;         min_id=i;
 0144 C62E              mov R12,R22
 0146                   .dbline 61
 0146           ;       }
 0146           L21:
 0146                   .dbline 62
 0146           ;     }
 0146           L18:
 0146                   .dbline 63
 0146           L14:
 0146                   .dbline 45
 0146 6395              inc R22
 0148           L16:
 0148                   .dbline 45
 0148 6830              cpi R22,8
 014A 08F4              brsh X0
 014C AECF              rjmp L13
 014E           X0:
 014E                   .dbline 66
 014E           ;   }
 014E           ;   
 014E           ;   //去掉第一个和最大最小值后的平均值
 014E           ;   ret=0;
 014E 0024              clr R0
 0150 1124              clr R1
 0152 1982              std y+1,R1
 0154 0882              std y+0,R0
 0156                   .dbline 67
 0156           ;   for(i=1;i<8;i++)
 0156 61E0              ldi R22,1
 0158 14C0              rjmp L26
 015A           L23:
 015A                   .dbline 68
 015A           ;   {
 015A                   .dbline 69
 015A           ;     if((i!=min_id)&&(i!=max_id))
 015A 6C15              cp R22,R12
 015C 89F0              breq L27
 015E 6A15              cp R22,R10
 0160 79F0              breq L27
 0162                   .dbline 70
 0162           ;       ret+=g_aAdValue[i];     
 0162 82E0              ldi R24,2
 0164 869F              mul R24,R22
 0166 F001              movw R30,R0
 0168 80E0              ldi R24,<_g_aAdValue
 016A 90E0              ldi R25,>_g_aAdValue
 016C E80F              add R30,R24
 016E F91F              adc R31,R25
 0170 2080              ldd R2,z+0
 0172 3180              ldd R3,z+1
 0174 0880              ldd R0,y+0
 0176 1980              ldd R1,y+1
 0178 020C              add R0,R2
 017A 131C              adc R1,R3
 017C 1982              std y+1,R1
 017E 0882              std y+0,R0
 0180           L27:
 0180                   .dbline 71
 0180           L24:
 0180                   .dbline 67
 0180 6395              inc R22
 0182           L26:
 0182                   .dbline 67
 0182 6830              cpi R22,8
 0184 50F3              brlo L23
 0186                   .dbline 72
 0186           ;   }
 0186           ;   if(min_id!=max_id)
 0186 CA14              cp R12,R10
 0188 41F0              breq L29
 018A                   .dbline 73
 018A           ;     ret/=5;
 018A 25E0              ldi R18,5
 018C 30E0              ldi R19,0
 018E 0881              ldd R16,y+0
 0190 1981              ldd R17,y+1
 0192 00D0              rcall div16u
 0194 1983              std y+1,R17
 0196 0883              std y+0,R16
 0198 07C0              rjmp L30
 019A           L29:
 019A                   .dbline 75
 019A           ;   else  
 019A           ;     ret/=6;
 019A 26E0              ldi R18,6
 019C 30E0              ldi R19,0
 019E 0881              ldd R16,y+0
 01A0 1981              ldd R17,y+1
 01A2 00D0              rcall div16u
 01A4 1983              std y+1,R17
 01A6 0883              std y+0,R16
 01A8           L30:
 01A8                   .dbline 77
 01A8           ; 
 01A8           ;   ADCSRA=0;//关闭ADC
 01A8 2224              clr R2
 01AA 26B8              out 0x6,R2
 01AC                   .dbline 79
 01AC           ;   
 01AC           ;   return ret;
 01AC 0881              ldd R16,y+0
 01AE 1981              ldd R17,y+1
 01B0                   .dbline -2
 01B0           L1:
 01B0 2296              adiw R28,2
 01B2 00D0              rcall pop_gset5
 01B4                   .dbline 0 ; func end
 01B4 0895              ret
 01B6                   .dbsym r min_value 14 c
 01B6                   .dbsym r max_value 20 c
 01B6                   .dbsym r min_id 12 c
 01B6                   .dbsym r max_id 10 c
 01B6                   .dbsym l ret 0 i
 01B6                   .dbsym r i 22 c
 01B6                   .dbend
 01B6                   .dbfunc e adinit _adinit fV
                        .even
 01B6           _adinit::

⌨️ 快捷键说明

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