📄 main.lis
字号:
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 + -