📄 main.lis
字号:
00E4 ; void adc_isr(void)
00E4 ; {
00E4 .dbline -2
00E4 L10:
00E4 .dbline 0 ; func end
00E4 1895 reti
00E6 .dbend
00E6 .dbfunc e adc_init _adc_init fV
.even
00E6 _adc_init::
00E6 .dbline -1
00E6 .dbline 178
00E6 ; //conversion complete, read value (int) using...
00E6 ; // value=ADCL; //Read 8 low bits first (important)
00E6 ; // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
00E6 ; }
00E6 ;
00E6 ; //ADC initialize
00E6 ; // Conversion time: 150uS
00E6 ; void adc_init(void)
00E6 ; {
00E6 .dbline 179
00E6 ; ADCSR = 0x00; //disable adc
00E6 2224 clr R2
00E8 26B8 out 0x6,R2
00EA .dbline 180
00EA ; ADMUX = 0xc0; //select adc input 0
00EA 80EC ldi R24,192
00EC 87B9 out 0x7,R24
00EE .dbline 182
00EE ; // ACSR = 0x80;
00EE ; ADCSRA = 0x87;
00EE 87E8 ldi R24,135
00F0 86B9 out 0x6,R24
00F2 .dbline -2
00F2 L11:
00F2 .dbline 0 ; func end
00F2 0895 ret
00F4 .dbend
00F4 .dbfunc e init_devices _init_devices fV
.even
00F4 _init_devices::
00F4 .dbline -1
00F4 .dbline 187
00F4 ; }
00F4 ;
00F4 ; //call this routine to initialize all peripherals
00F4 ; void init_devices(void)
00F4 ; {
00F4 .dbline 189
00F4 ; //stop errant interrupts until set up
00F4 ; CLI(); //disable all interrupts
00F4 F894 cli
00F6 .dbline 190
00F6 ; port_init();
00F6 84DF xcall _port_init
00F8 .dbline 191
00F8 ; timer0_init();
00F8 B8DF xcall _timer0_init
00FA .dbline 192
00FA ; timer1_init();
00FA A1DF xcall _timer1_init
00FC .dbline 193
00FC ; InitUART( 71 );
00FC 07E4 ldi R16,71
00FE 0E940000 xcall _InitUART
0102 .dbline 194
0102 ; TempInit();
0102 0E940000 xcall _TempInit
0106 .dbline 195
0106 ; adc_init();
0106 EFDF xcall _adc_init
0108 .dbline 197
0108 ;
0108 ; MCUCR = 0x02;
0108 82E0 ldi R24,2
010A 85BF out 0x35,R24
010C .dbline 198
010C ; GICR = 0x00;
010C 2224 clr R2
010E 2BBE out 0x3b,R2
0110 .dbline 199
0110 ; TIMSK = 0x11; //timer interrupt sources
0110 81E1 ldi R24,17
0112 89BF out 0x39,R24
0114 .dbline 200
0114 ; SEI(); //re-enable interrupts
0114 7894 sei
0116 .dbline -2
0116 L12:
0116 .dbline 0 ; func end
0116 0895 ret
0118 .dbend
0118 .dbfunc e read_adc _read_adc fi
.even
0118 _read_adc::
0118 .dbline -1
0118 .dbline 212
0118 ; //all peripherals are now initialized
0118 ;
0118 ;
0118 ;
0118 ;
0118 ;
0118 ;
0118 ; }
0118 ;
0118 ;
0118 ; unsigned int read_adc(void)//查询方式读取ADC单端通道
0118 ; {
0118 .dbline 213
0118 ; ADMUX=(0xc0|0x00); //adc_input:单端通道 0x00~0x07,0x1E,0x1F
0118 80EC ldi R24,192
011A 87B9 out 0x7,R24
011C .dbline 215
011C ; //0xc0:选择内部2.56V参考电压
011C ; ADCSRA|=(1<<ADSC); //启动AD转换
011C 369A sbi 0x6,6
011E L14:
011E .dbline 216
011E L15:
011E .dbline 216
011E ; while ((ADCSRA&(1<<ADIF))==0);
011E 349B sbis 0x6,4
0120 FECF rjmp L14
0122 .dbline 217
0122 ; ADCSRA|=(1<<ADIF); //写1清除标志位
0122 349A sbi 0x6,4
0124 .dbline 218
0124 ; return ADC; //ADC=ADCH:ADCL
0124 04B1 in R16,0x4
0126 15B1 in R17,0x5
0128 .dbline -2
0128 L13:
0128 .dbline 0 ; func end
0128 0895 ret
012A .dbend
012A .dbfunc e AdAverage _AdAverage fi
012A ; sum -> y+68
012A ; count -> y+72
012A ; temp -> R10,R11
012A ; j -> R12
012A ; value_buf -> y+0
012A ; i -> R14
.even
012A _AdAverage::
012A 0E940000 xcall push_gset5x
012E EF97 sbiw R28,63
0130 2A97 sbiw R28,10 ; offset = 73
0132 .dbline -1
0132 .dbline 224
0132 ; }
0132 ;
0132 ; #define N (34)
0132 ;
0132 ; unsigned int AdAverage(void)
0132 ; {
0132 .dbline 228
0132 ; unsigned char count,i,j;
0132 ; unsigned int value_buf[N];
0132 ; unsigned int temp;
0132 ; unsigned long sum=0;
0132 80E0 ldi R24,0
0134 90E0 ldi R25,0
0136 A0E0 ldi R26,0
0138 B0E0 ldi R27,0
013A FE01 movw R30,R28
013C EC5B subi R30,188 ; addi 68
013E FF4F sbci R31,255
0140 8083 std z+0,R24
0142 9183 std z+1,R25
0144 A283 std z+2,R26
0146 B383 std z+3,R27
0148 .dbline 229
0148 ; for (count=0;count<N;count++)
0148 0024 clr R0
014A FE01 movw R30,R28
014C E85B subi R30,184 ; addi 72
014E FF4F sbci R31,255
0150 0082 std z+0,R0
0152 17C0 xjmp L21
0154 L18:
0154 .dbline 230
0154 .dbline 231
0154 E1DF xcall _read_adc
0156 1801 movw R2,R16
0158 82E0 ldi R24,2
015A FE01 movw R30,R28
015C E85B subi R30,184 ; addi 72
015E FF4F sbci R31,255
0160 0080 ldd R0,z+0
0162 809D mul R24,R0
0164 F001 movw R30,R0
0166 CE01 movw R24,R28
0168 E80F add R30,R24
016A F91F adc R31,R25
016C 3182 std z+1,R3
016E 2082 std z+0,R2
0170 .dbline 233
0170 L19:
0170 .dbline 229
0170 FE01 movw R30,R28
0172 E85B subi R30,184 ; addi 72
0174 FF4F sbci R31,255
0176 0080 ldd R0,z+0
0178 0394 inc R0
017A FE01 movw R30,R28
017C E85B subi R30,184 ; addi 72
017E FF4F sbci R31,255
0180 0082 std z+0,R0
0182 L21:
0182 .dbline 229
0182 FE01 movw R30,R28
0184 E85B subi R30,184 ; addi 72
0186 FF4F sbci R31,255
0188 8081 ldd R24,z+0
018A 8232 cpi R24,34
018C 18F3 brlo L18
018E .dbline 234
018E ; {
018E ; value_buf[count] = read_adc();
018E ;
018E ; }
018E ; for (j=0;j<N-1;j++)
018E CC24 clr R12
0190 3BC0 xjmp L25
0192 L22:
0192 .dbline 235
0192 ; {
0192 .dbline 236
0192 ; for (i=0;i<N-j;i++)
0192 EE24 clr R14
0194 33C0 xjmp L29
0196 L26:
0196 .dbline 237
0196 ; {
0196 .dbline 238
0196 ; if ( value_buf[i]>value_buf[i+1] )
0196 82E0 ldi R24,2
0198 8E9D mul R24,R14
019A CE01 movw R24,R28
019C 0296 adiw R24,2
019E F001 movw R30,R0
01A0 E80F add R30,R24
01A2 F91F adc R31,R25
01A4 2080 ldd R2,z+0
01A6 3180 ldd R3,z+1
01A8 CE01 movw R24,R28
01AA F001 movw R30,R0
01AC E80F add R30,R24
01AE F91F adc R31,R25
01B0 4080 ldd R4,z+0
01B2 5180 ldd R5,z+1
01B4 2414 cp R2,R4
01B6 3504 cpc R3,R5
01B8 00F5 brsh L30
01BA .dbline 239
01BA ; {
01BA .dbline 240
01BA ; temp = value_buf[i];
01BA 82E0 ldi R24,2
01BC 8E9D mul R24,R14
01BE F001 movw R30,R0
01C0 CE01 movw R24,R28
01C2 E80F add R30,R24
01C4 F91F adc R31,R25
01C6 A080 ldd R10,z+0
01C8 B180 ldd R11,z+1
01CA .dbline 241
01CA ; value_buf[i] = value_buf[i+1];
01CA 82E0 ldi R24,2
01CC 8E9D mul R24,R14
01CE CE01 movw R24,R28
01D0 0296 adiw R24,2
01D2 F001 movw R30,R0
01D4 E80F add R30,R24
01D6 F91F adc R31,R25
01D8 2080 ldd R2,z+0
01DA 3180 ldd R3,z+1
01DC CE01 movw R24,R28
01DE F001 movw R30,R0
01E0 E80F add R30,R24
01E2 F91F adc R31,R25
01E4 3182 std z+1,R3
01E6 2082 std z+0,R2
01E8 .dbline 242
01E8 ; value_buf[i+1] = temp;
01E8 82E0 ldi R24,2
01EA 8E9D mul R24,R14
01EC F001 movw R30,R0
01EE CE01 movw R24,R28
01F0 0296 adiw R24,2
01F2 E80F add R30,R24
01F4 F91F adc R31,R25
01F6 B182 std z+1,R11
01F8 A082 std z+0,R10
01FA .dbline 243
01FA ; }
01FA L30:
01FA .dbline 244
01FA L27:
01FA .dbline 236
01FA E394 inc R14
01FC L29:
01FC .dbline 236
01FC 82E2 ldi R24,34
01FE 8C19 sub R24,R12
0200 E816 cp R14,R24
0202 08F4 brsh X0
0204 C8CF xjmp L26
0206 X0:
0206 .dbline 245
0206 L23:
0206 .dbline 234
0206 C394 inc R12
0208 L25:
0208 .dbline 234
0208 8C2D mov R24,R12
020A 8132 cpi R24,33
020C 08F4 brsh X1
020E C1CF xjmp L22
0210 X1:
0210 .dbline 246
0210 ; }
0210 ; }
0210 ; for(count=1;count<N-1;count++)
0210 0024 clr R0
0212 0394 inc R0
0214 FE01 movw R30,R28
0216 E85B subi R30,184 ; addi 72
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -