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

📄 main.lis

📁 AVR单片机六路ADC采集与七段数码管显示采集值
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00EC 5527              clr R21
 00EE           L28:
 00EE 40932700          sts _CADV+7,R20
 00F2                   .dbline 46
 00F2           ;       CADV[MAXSCALECH+2] = (PIND & 0x40) ? 0xFF : 0x00;
 00F2 869B              sbis 0x10,6
 00F4 03C0              rjmp L30
 00F6           X9:
 00F6 4FEF              ldi R20,255
 00F8 50E0              ldi R21,0
 00FA 02C0              rjmp L31
 00FC           L30:
 00FC 4427              clr R20
 00FE 5527              clr R21
 0100           L31:
 0100 40932800          sts _CADV+8,R20
 0104                   .dbline 47
 0104           ;       CADV[MAXSCALECH+3] = (PIND & 0x80) ? 0xFF : 0x00;
 0104 879B              sbis 0x10,7
 0106 03C0              rjmp L33
 0108           X10:
 0108 4FEF              ldi R20,255
 010A 50E0              ldi R21,0
 010C 02C0              rjmp L34
 010E           L33:
 010E 4427              clr R20
 0110 5527              clr R21
 0112           L34:
 0112 40932900          sts _CADV+9,R20
 0116                   .dbline -2
 0116           L14:
 0116                   .dbline 0 ; func end
 0116 5991              ld R21,y+
 0118 4991              ld R20,y+
 011A 0990              ld R0,y+
 011C 0FBE              out 0x3f,R0
 011E F991              ld R31,y+
 0120 E991              ld R30,y+
 0122 B991              ld R27,y+
 0124 A991              ld R26,y+
 0126 9991              ld R25,y+
 0128 8991              ld R24,y+
 012A 3991              ld R19,y+
 012C 2991              ld R18,y+
 012E 1991              ld R17,y+
 0130 0991              ld R16,y+
 0132 9990              ld R9,y+
 0134 8990              ld R8,y+
 0136 7990              ld R7,y+
 0138 6990              ld R6,y+
 013A 5990              ld R5,y+
 013C 4990              ld R4,y+
 013E 3990              ld R3,y+
 0140 2990              ld R2,y+
 0142 1990              ld R1,y+
 0144 0990              ld R0,y+
 0146 1895              reti
 0148                   .dbsym r adv 20 c
 0148                   .dbend
                        .area vector(rom, abs)
                        .org 28
 001C A4C0              rjmp _OnADC
                        .area text(rom, con, rel)
 0148                   .dbfile f:\MYDOCU~1\AVR\test\main.c
 0148                   .dbfunc e OnADC _OnADC fV
                        .even
 0148           _OnADC::
 0148                   .dbline -1
 0148                   .dbline 54
 0148           ; 
 0148           ;     //TCNT0 = 0xFF;
 0148           ; }
 0148           ; 
 0148           ; #pragma interrupt_handler OnADC:iv_ADC
 0148           ; void OnADC(void)
 0148           ; {
 0148                   .dbline -2
 0148           L35:
 0148                   .dbline 0 ; func end
 0148 1895              reti
 014A                   .dbend
 014A                   .dbfunc e init_devices _init_devices fV
                        .even
 014A           _init_devices::
 014A                   .dbline -1
 014A                   .dbline 60
 014A           ; 
 014A           ; }
 014A           ; 
 014A           ; //初始化
 014A           ; void init_devices(void)
 014A           ; {
 014A                   .dbline 63
 014A           ; 
 014A           ;     //内部RC校准
 014A           ;       OSCCAL = 0x7D;
 014A 8DE7              ldi R24,125
 014C 81BF              out 0x31,R24
 014E                   .dbline 65
 014E           ;       
 014E           ;     CLI();
 014E F894              cli
 0150                   .dbline 68
 0150           ;     
 0150           ;     //端口初始化
 0150           ;       PORTB = 0xFF;
 0150 8FEF              ldi R24,255
 0152 88BB              out 0x18,R24
 0154                   .dbline 69
 0154           ;       DDRB  = 0xFF;
 0154 87BB              out 0x17,R24
 0156                   .dbline 71
 0156           ;       
 0156           ;       PORTC = 0x00;
 0156 2224              clr R2
 0158 25BA              out 0x15,R2
 015A                   .dbline 72
 015A           ;       DDRC  = 0x00;
 015A 24BA              out 0x14,R2
 015C                   .dbline 74
 015C           ;       
 015C           ;       PORTD = 0xF0;
 015C 80EF              ldi R24,240
 015E 82BB              out 0x12,R24
 0160                   .dbline 75
 0160           ;       DDRD  = 0x0F;
 0160 8FE0              ldi R24,15
 0162 81BB              out 0x11,R24
 0164                   .dbline 78
 0164           ;     
 0164           ;     //定时器初始化
 0164           ;     TCCR0 = 0x00; //禁止计时
 0164 23BE              out 0x33,R2
 0166                   .dbline 79
 0166           ;     TCNT0 = 0x0F; //定时器时长
 0166 82BF              out 0x32,R24
 0168                   .dbline 80
 0168           ;     TCCR0 = 0x05; //启动定时器 CLK/1024
 0168 85E0              ldi R24,5
 016A 83BF              out 0x33,R24
 016C                   .dbline 83
 016C           ;     
 016C           ;     //ADC初始化
 016C           ;     ADCSR = 0x00; //禁止转换
 016C 26B8              out 0x6,R2
 016E                   .dbline 84
 016E           ;     ADMUX = 0x20; //多路复用选择寄存器 E0 内部参考源,左对齐(只需高八位),通道0
 016E 80E2              ldi R24,32
 0170 87B9              out 0x7,R24
 0172                   .dbline 86
 0172           ;                                 // REFS1 RESF0(参考源) ADLAR(左对齐) 保留 MUX3 MUX2 MUX1 MUX0
 0172           ;     ACSR  = 0x80; //模拟比较器控制与状态寄存器
 0172 80E8              ldi R24,128
 0174 88B9              out 0x8,R24
 0176                   .dbline 87
 0176           ;     ADCSR = 0x83; //10001011  83 禁止中断,使用查询方式 
 0176 83E8              ldi R24,131
 0178 86B9              out 0x6,R24
 017A                   .dbline 92
 017A           ;                                 //ADEN(AD允许) ADSC(AD开始) ADFR(连续) ADIF(中断标志) ADIE(中断允许) ADPS(预分频,三位)
 017A           ;       
 017A           ;     
 017A           ;     //控制寄存器
 017A           ;     MCUCR = 0x00;
 017A 25BE              out 0x35,R2
 017C                   .dbline 93
 017C           ;     GICR  = 0x00;
 017C 2BBE              out 0x3b,R2
 017E                   .dbline 94
 017E           ;     TIMSK = 0x01; //充许Timer0中断
 017E 81E0              ldi R24,1
 0180 89BF              out 0x39,R24
 0182                   .dbline 96
 0182           ;     
 0182           ;     SEI();
 0182 7894              sei
 0184                   .dbline -2
 0184           L36:
 0184                   .dbline 0 ; func end
 0184 0895              ret
 0186                   .dbend
 0186                   .dbfunc e main _main fI
 0186           ;              i -> R10,R11
 0186           ;              j -> R20,R21
                        .even
 0186           _main::
 0186                   .dbline -1
 0186                   .dbline 100
 0186           ; }
 0186           ; 
 0186           ; main()
 0186           ; {       
 0186                   .dbline 101
 0186           ;       int i = 0,j = 0;
 0186 AA24              clr R10
 0188 BB24              clr R11
 018A                   .dbline 101
 018A 4427              clr R20
 018C 5527              clr R21
 018E                   .dbline 103
 018E           ;       
 018E           ;     init_devices();
 018E DDDF              rcall _init_devices
 0190 5DC0              rjmp L39
 0192           L38:
 0192                   .dbline 106
 0192           ;       
 0192           ;       while(1)
 0192           ;       {       
 0192                   .dbline 107
 0192           ;               for(j=0;j<MAXCH;j++)
 0192 4427              clr R20
 0194 5527              clr R21
 0196           L41:
 0196                   .dbline 108
 0196           ;               if(PADV[j] != CADV[j])
 0196 80E0              ldi R24,<_CADV
 0198 90E0              ldi R25,>_CADV
 019A FA01              movw R30,R20
 019C E80F              add R30,R24
 019E F91F              adc R31,R25
 01A0 2080              ldd R2,z+0
 01A2 80E0              ldi R24,<_PADV
 01A4 90E0              ldi R25,>_PADV
 01A6 FA01              movw R30,R20
 01A8 E80F              add R30,R24
 01AA F91F              adc R31,R25
 01AC 3080              ldd R3,z+0
 01AE 3214              cp R3,R2
 01B0 69F0              breq L45
 01B2           X11:
 01B2                   .dbline 109
 01B2           ;                       {   i = j;
 01B2                   .dbline 109
 01B2 5A01              movw R10,R20
 01B4                   .dbline 110
 01B4           ;                           PADV[j] = CADV[j];
 01B4 80E0              ldi R24,<_CADV
 01B6 90E0              ldi R25,>_CADV
 01B8 FA01              movw R30,R20
 01BA E80F              add R30,R24
 01BC F91F              adc R31,R25
 01BE 2080              ldd R2,z+0
 01C0 80E0              ldi R24,<_PADV
 01C2 90E0              ldi R25,>_PADV
 01C4 FA01              movw R30,R20
 01C6 E80F              add R30,R24
 01C8 F91F              adc R31,R25
 01CA 2082              std z+0,R2
 01CC                   .dbline 111
 01CC           ;                       }
 01CC           L45:
 01CC           L42:
 01CC                   .dbline 107
 01CC 4F5F              subi R20,255  ; offset = 1
 01CE 5F4F              sbci R21,255
 01D0                   .dbline 107
 01D0 4031              cpi R20,16
 01D2 E0E0              ldi R30,0
 01D4 5E07              cpc R21,R30
 01D6 FCF2              brlt L41
 01D8           X12:
 01D8                   .dbline 114
 01D8           ;               
 01D8           ;               //显示低位
 01D8           ;               PORTD = 0x01;
 01D8 81E0              ldi R24,1
 01DA 82BB              out 0x12,R24
 01DC                   .dbline 115
 01DC           ;               PORTB = SEG7[CADV[i] & 0x0F];
 01DC 80E0              ldi R24,<_CADV
 01DE 90E0              ldi R25,>_CADV
 01E0 F501              movw R30,R10
 01E2 E80F              add R30,R24
 01E4 F91F              adc R31,R25
 01E6 E081              ldd R30,z+0
 01E8 FF27              clr R31
 01EA EF70              andi R30,15
 01EC F070              andi R31,0
 01EE 80E0              ldi R24,<_SEG7
 01F0 90E0              ldi R25,>_SEG7
 01F2 E80F              add R30,R24
 01F4 F91F              adc R31,R25
 01F6 2080              ldd R2,z+0
 01F8 28BA              out 0x18,R2
 01FA                   .dbline 116
 01FA           ;               Delay_MS(20);
 01FA 04E1              ldi R16,20
 01FC 10E0              ldi R17,0
 01FE 00DF              rcall _Delay_MS
 0200                   .dbline 119
 0200           ;               
 0200           ;               //显示高位
 0200           ;               PORTD = 0x02;
 0200 82E0              ldi R24,2
 0202 82BB              out 0x12,R24
 0204                   .dbline 120
 0204           ;               PORTB = SEG7[CADV[i] >> 4];
 0204 80E0              ldi R24,<_CADV
 0206 90E0              ldi R25,>_CADV
 0208 F501              movw R30,R10
 020A E80F              add R30,R24
 020C F91F              adc R31,R25
 020E E081              ldd R30,z+0
 0210 FF27              clr R31
 0212 F595              asr R31
 0214 E795              ror R30
 0216 F595              asr R31
 0218 E795              ror R30
 021A F595              asr R31
 021C E795              ror R30
 021E F595              asr R31
 0220 E795              ror R30
 0222 80E0              ldi R24,<_SEG7
 0224 90E0              ldi R25,>_SEG7
 0226 E80F              add R30,R24
 0228 F91F              adc R31,R25
 022A 2080              ldd R2,z+0
 022C 28BA              out 0x18,R2
 022E                   .dbline 121
 022E           ;               Delay_MS(20);
 022E 04E1              ldi R16,20
 0230 10E0              ldi R17,0
 0232 E6DE              rcall _Delay_MS
 0234                   .dbline 124
 0234           ; 
 0234           ;               //通道值
 0234           ;               PORTD = 0x08;
 0234 88E0              ldi R24,8
 0236 82BB              out 0x12,R24
 0238                   .dbline 125
 0238           ;               PORTB = SEG7[i];
 0238 80E0              ldi R24,<_SEG7
 023A 90E0              ldi R25,>_SEG7
 023C F501              movw R30,R10
 023E E80F              add R30,R24
 0240 F91F              adc R31,R25
 0242 2080              ldd R2,z+0
 0244 28BA              out 0x18,R2
 0246                   .dbline 126
 0246           ;               Delay_MS(20);
 0246 04E1              ldi R16,20
 0248 10E0              ldi R17,0
 024A DADE              rcall _Delay_MS
 024C                   .dbline 127
 024C           ;       }
 024C           L39:
 024C                   .dbline 105
 024C A2CF              rjmp L38
 024E           X13:
 024E                   .dbline -2
 024E           L37:
 024E                   .dbline 0 ; func end
 024E 0895              ret
 0250                   .dbsym r i 10 I
 0250                   .dbsym r j 20 I
 0250                   .dbend
 0250           ; }

⌨️ 快捷键说明

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