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

📄 ad.lis

📁 嵌入式单片机控制温度传感的无线收发方案!
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 01B6                   .dbline -1
 01B6                   .dbline 82
 01B6           ; }
 01B6           ; void adinit()
 01B6           ; { 
 01B6                   .dbline 87
 01B6           ;   //ad转换相关的寄存器的初始化
 01B6           ;       //ACSR=0x80; //别忘了关掉模拟比较器的电源哦
 01B6           ;      // SFIOR=0x00;
 01B6           ;    //IO初始化
 01B6           ;       DDRB|=_BV(DDB0);
 01B6 B89A              sbi 0x17,0
 01B8                   .dbline 88
 01B8           ;       PORTB|=~_BV(PB0);
 01B8 88B3              in R24,0x18
 01BA 8E6F              ori R24,254
 01BC 88BB              out 0x18,R24
 01BE                   .dbline -2
 01BE                   .dbline 93
 01BE           ;    //ad转换相关的寄存器的初始化
 01BE           ;      // ACSR=0x80; //别忘了关掉模拟比较器的电源哦
 01BE           ;     //  SFIOR=0x00;
 01BE           ; 
 01BE           ; }
 01BE           L31:
 01BE                   .dbline 0 ; func end
 01BE 0895              ret
 01C0                   .dbend
 01C0                   .dbfunc e AdcConvertDin _AdcConvertDin fi
 01C0           ;      min_value -> R14
 01C0           ;      max_value -> R20
 01C0           ;         min_id -> R12
 01C0           ;         max_id -> R10
 01C0           ;            ret -> y+0
 01C0           ;              i -> R22
                        .even
 01C0           _AdcConvertDin::
 01C0 00D0              rcall push_gset5
 01C2 2297              sbiw R28,2
 01C4                   .dbline -1
 01C4                   .dbline 98
 01C4           ; 
 01C4           ; 
 01C4           ; //AD转换8次去掉最高和最低后取平均值返回
 01C4           ; unsigned int AdcConvertDin(void)
 01C4           ; {
 01C4                   .dbline 103
 01C4           ;   char i;
 01C4           ;   unsigned int  ret;
 01C4           ;   char max_id,min_id,max_value,min_value;
 01C4           ;   
 01C4           ;   ADMUX=0X44;//参考电压VCC
 01C4 84E4              ldi R24,68
 01C6 87B9              out 0x7,R24
 01C8                   .dbline 104
 01C8           ;   ADCSRA=_BV(ADEN);//使能ADC,单次转换模式
 01C8 80E8              ldi R24,128
 01CA 86B9              out 0x6,R24
 01CC                   .dbline 107
 01CC           ;   
 01CC           ;   //连续转换8次
 01CC           ;   for(i=0;i<8;i++)
 01CC 6627              clr R22
 01CE 24C0              rjmp L36
 01D0           L33:
 01D0                   .dbline 108
 01D0           ;   {
 01D0                   .dbline 109
 01D0           ;     ADCSRA|=_BV(ADSC);
 01D0 369A              sbi 0x6,6
 01D2                   .dbline 110
 01D2           ;     delay_us(30);
 01D2 0EE1              ldi R16,30
 01D4 10E0              ldi R17,0
 01D6 00D0              rcall _delay_us
 01D8 03C0              rjmp L38
 01DA           L37:
 01DA                   .dbline 112
 01DA 0EE1              ldi R16,30
 01DC 10E0              ldi R17,0
 01DE 00D0              rcall _delay_us
 01E0           L38:
 01E0                   .dbline 111
 01E0 3699              sbic 0x6,6
 01E2 FBCF              rjmp L37
 01E4                   .dbline 113
 01E4 24B0              in R2,0x4
 01E6 3324              clr R3
 01E8 3982              std y+1,R3
 01EA 2882              std y+0,R2
 01EC                   .dbline 114
 01EC 25B0              in R2,0x5
 01EE 3324              clr R3
 01F0 322C              mov R3,R2
 01F2 2224              clr R2
 01F4 0880              ldd R0,y+0
 01F6 1980              ldd R1,y+1
 01F8 0228              or R0,R2
 01FA 1328              or R1,R3
 01FC 1982              std y+1,R1
 01FE 0882              std y+0,R0
 0200                   .dbline 115
 0200 82E0              ldi R24,2
 0202 869F              mul R24,R22
 0204 F001              movw R30,R0
 0206 80E0              ldi R24,<_g_aAdValue
 0208 90E0              ldi R25,>_g_aAdValue
 020A E80F              add R30,R24
 020C F91F              adc R31,R25
 020E 0880              ldd R0,y+0
 0210 1980              ldd R1,y+1
 0212 1182              std z+1,R1
 0214 0082              std z+0,R0
 0216                   .dbline 116
 0216           L34:
 0216                   .dbline 107
 0216 6395              inc R22
 0218           L36:
 0218                   .dbline 107
 0218 6830              cpi R22,8
 021A D0F2              brlo L33
 021C                   .dbline 117
 021C           ;     while(ADCSRA&_BV(ADSC))
 021C           ;     delay_us(30);
 021C           ;     ret=ADCL;
 021C           ;     ret|=(unsigned int)(ADCH<<8);
 021C           ;     g_aAdValue[i]=ret;
 021C           ;   }
 021C           ;   ret=0;
 021C 0024              clr R0
 021E 1124              clr R1
 0220 1982              std y+1,R1
 0222 0882              std y+0,R0
 0224                   .dbline 118
 0224           ;   for(i=1;i<8;i++)
 0224 61E0              ldi R22,1
 0226 10C0              rjmp L43
 0228           L40:
 0228                   .dbline 119
 0228 82E0              ldi R24,2
 022A 869F              mul R24,R22
 022C F001              movw R30,R0
 022E 80E0              ldi R24,<_g_aAdValue
 0230 90E0              ldi R25,>_g_aAdValue
 0232 E80F              add R30,R24
 0234 F91F              adc R31,R25
 0236 2080              ldd R2,z+0
 0238 3180              ldd R3,z+1
 023A 0880              ldd R0,y+0
 023C 1980              ldd R1,y+1
 023E 020C              add R0,R2
 0240 131C              adc R1,R3
 0242 1982              std y+1,R1
 0244 0882              std y+0,R0
 0246           L41:
 0246                   .dbline 118
 0246 6395              inc R22
 0248           L43:
 0248                   .dbline 118
 0248 6830              cpi R22,8
 024A 70F3              brlo L40
 024C                   .dbline 122
 024C           ;     ret+=g_aAdValue[i];
 024C           ;   
 024C           ;   //找到最大和最小值索引  
 024C           ;   ret/=7;
 024C 27E0              ldi R18,7
 024E 30E0              ldi R19,0
 0250 0881              ldd R16,y+0
 0252 1981              ldd R17,y+1
 0254 00D0              rcall div16u
 0256 1983              std y+1,R17
 0258 0883              std y+0,R16
 025A                   .dbline 123
 025A           ;   max_id=min_id=1;
 025A CC24              clr R12
 025C C394              inc R12
 025E AA24              clr R10
 0260 A394              inc R10
 0262                   .dbline 124
 0262           ;   max_value=min_value=0;
 0262 EE24              clr R14
 0264 4427              clr R20
 0266                   .dbline 125
 0266           ;   for(i=1;i<8;i++)
 0266 61E0              ldi R22,1
 0268 4FC0              rjmp L47
 026A           L44:
 026A                   .dbline 126
 026A           ;   {
 026A                   .dbline 127
 026A           ;     if(g_aAdValue[i]>ret)
 026A 82E0              ldi R24,2
 026C 869F              mul R24,R22
 026E F001              movw R30,R0
 0270 80E0              ldi R24,<_g_aAdValue
 0272 90E0              ldi R25,>_g_aAdValue
 0274 E80F              add R30,R24
 0276 F91F              adc R31,R25
 0278 2080              ldd R2,z+0
 027A 3180              ldd R3,z+1
 027C 0880              ldd R0,y+0
 027E 1980              ldd R1,y+1
 0280 0214              cp R0,R2
 0282 1304              cpc R1,R3
 0284 00F5              brsh L48
 0286                   .dbline 128
 0286           ;     {
 0286                   .dbline 129
 0286           ;       if(g_aAdValue[i]-ret>max_value)
 0286 82E0              ldi R24,2
 0288 869F              mul R24,R22
 028A F001              movw R30,R0
 028C 80E0              ldi R24,<_g_aAdValue
 028E 90E0              ldi R25,>_g_aAdValue
 0290 E80F              add R30,R24
 0292 F91F              adc R31,R25
 0294 2080              ldd R2,z+0
 0296 3180              ldd R3,z+1
 0298 0880              ldd R0,y+0
 029A 1980              ldd R1,y+1
 029C 2018              sub R2,R0
 029E 3108              sbc R3,R1
 02A0 442E              mov R4,R20
 02A2 5524              clr R5
 02A4 4214              cp R4,R2
 02A6 5304              cpc R5,R3
 02A8 70F5              brsh L49
 02AA                   .dbline 130
 02AA           ;       {
 02AA                   .dbline 131
 02AA           ;         max_value=g_aAdValue[i]-ret;
 02AA 82E0              ldi R24,2
 02AC 869F              mul R24,R22
 02AE F001              movw R30,R0
 02B0 80E0              ldi R24,<_g_aAdValue
 02B2 90E0              ldi R25,>_g_aAdValue
 02B4 E80F              add R30,R24
 02B6 F91F              adc R31,R25
 02B8 4081              ldd R20,z+0
 02BA 0880              ldd R0,y+0
 02BC 1980              ldd R1,y+1
 02BE 4019              sub R20,R0
 02C0 5109              sbc R21,R1
 02C2                   .dbline 132
 02C2           ;         max_id=i;
 02C2 A62E              mov R10,R22
 02C4                   .dbline 133
 02C4           ;       }
 02C4                   .dbline 134
 02C4           ;     }
 02C4 20C0              rjmp L49
 02C6           L48:
 02C6                   .dbline 136
 02C6           ;     else
 02C6           ;     {
 02C6                   .dbline 137
 02C6           ;       if(ret-g_aAdValue[i]>min_value)
 02C6 82E0              ldi R24,2
 02C8 869F              mul R24,R22
 02CA F001              movw R30,R0
 02CC 80E0              ldi R24,<_g_aAdValue
 02CE 90E0              ldi R25,>_g_aAdValue
 02D0 E80F              add R30,R24
 02D2 F91F              adc R31,R25
 02D4 2080              ldd R2,z+0
 02D6 3180              ldd R3,z+1
 02D8 4880              ldd R4,y+0
 02DA 5980              ldd R5,y+1
 02DC 4218              sub R4,R2
 02DE 5308              sbc R5,R3
 02E0 2E2C              mov R2,R14
 02E2 3324              clr R3
 02E4 2414              cp R2,R4
 02E6 3504              cpc R3,R5
 02E8 70F4              brsh L52
 02EA                   .dbline 138
 02EA           ;       {
 02EA                   .dbline 139
 02EA           ;         min_value=ret-g_aAdValue[i];
 02EA 82E0              ldi R24,2
 02EC 869F              mul R24,R22
 02EE F001              movw R30,R0
 02F0 80E0              ldi R24,<_g_aAdValue
 02F2 90E0              ldi R25,>_g_aAdValue
 02F4 E80F              add R30,R24
 02F6 F91F              adc R31,R25
 02F8 2080              ldd R2,z+0
 02FA 3180              ldd R3,z+1
 02FC E880              ldd R14,y+0
 02FE F980              ldd R15,y+1
 0300 E218              sub R14,R2
 0302 F308              sbc R15,R3
 0304                   .dbline 140
 0304           ;         min_id=i;
 0304 C62E              mov R12,R22
 0306                   .dbline 141
 0306           ;       }
 0306           L52:
 0306                   .dbline 142
 0306           ;     }
 0306           L49:
 0306                   .dbline 143
 0306           L45:
 0306                   .dbline 125
 0306 6395              inc R22
 0308           L47:
 0308                   .dbline 125
 0308 6830              cpi R22,8
 030A 08F4              brsh X1
 030C AECF              rjmp L44
 030E           X1:
 030E                   .dbline 146
 030E           ;   }
 030E           ;   
 030E           ;   //去掉第一个和最大最小值后的平均值
 030E           ;   ret=0;
 030E 0024              clr R0
 0310 1124              clr R1
 0312 1982              std y+1,R1
 0314 0882              std y+0,R0
 0316                   .dbline 147
 0316           ;   for(i=1;i<8;i++)
 0316 61E0              ldi R22,1
 0318 14C0              rjmp L57
 031A           L54:
 031A                   .dbline 148
 031A           ;   {
 031A                   .dbline 149
 031A           ;     if((i!=min_id)&&(i!=max_id))
 031A 6C15              cp R22,R12
 031C 89F0              breq L58
 031E 6A15              cp R22,R10
 0320 79F0              breq L58
 0322                   .dbline 150
 0322           ;       ret+=g_aAdValue[i];     
 0322 82E0              ldi R24,2
 0324 869F              mul R24,R22
 0326 F001              movw R30,R0
 0328 80E0              ldi R24,<_g_aAdValue
 032A 90E0              ldi R25,>_g_aAdValue
 032C E80F              add R30,R24
 032E F91F              adc R31,R25
 0330 2080              ldd R2,z+0
 0332 3180              ldd R3,z+1
 0334 0880              ldd R0,y+0
 0336 1980              ldd R1,y+1
 0338 020C              add R0,R2
 033A 131C              adc R1,R3
 033C 1982              std y+1,R1
 033E 0882              std y+0,R0
 0340           L58:
 0340                   .dbline 151
 0340           L55:
 0340                   .dbline 147
 0340 6395              inc R22
 0342           L57:
 0342                   .dbline 147
 0342 6830              cpi R22,8
 0344 50F3              brlo L54
 0346                   .dbline 152
 0346           ;   }
 0346           ;   if(min_id!=max_id)
 0346 CA14              cp R12,R10
 0348 41F0              breq L60
 034A                   .dbline 153
 034A           ;     ret/=5;
 034A 25E0              ldi R18,5
 034C 30E0              ldi R19,0
 034E 0881              ldd R16,y+0
 0350 1981              ldd R17,y+1
 0352 00D0              rcall div16u
 0354 1983              std y+1,R17
 0356 0883              std y+0,R16
 0358 07C0              rjmp L61
 035A           L60:
 035A                   .dbline 155
 035A           ;   else  
 035A           ;     ret/=6;
 035A 26E0              ldi R18,6
 035C 30E0              ldi R19,0
 035E 0881              ldd R16,y+0
 0360 1981              ldd R17,y+1
 0362 00D0              rcall div16u
 0364 1983              std y+1,R17
 0366 0883              std y+0,R16
 0368           L61:
 0368                   .dbline 157
 0368           ; 
 0368           ;   ADCSRA=0;//关闭ADC
 0368 2224              clr R2
 036A 26B8              out 0x6,R2
 036C                   .dbline 159
 036C           ;   
 036C           ;   return ret;
 036C 0881              ldd R16,y+0
 036E 1981              ldd R17,y+1
 0370                   .dbline -2
 0370           L32:
 0370 2296              adiw R28,2
 0372 00D0              rcall pop_gset5

⌨️ 快捷键说明

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