📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile f:\MYDOCU~1\AVR\test\main.c
0000 .dbfile f:\MYDOCU~1\AVR\test\delay.h
0000 .dbfunc e Delay_MS _Delay_MS fV
0000 ; i -> R20
0000 ; iTime -> R16,R17
.even
0000 _Delay_MS::
0000 4A93 st -y,R20
0002 .dbline -1
0002 .dbline 7
0002 ; //#IFDEF F_CPU
0002 ; #define F_CPU 8000000
0002 ; //#ENDIF
0002 ;
0002 ; //延时,对应主频为8MHz
0002 ; void Delay_MS(unsigned int iTime)
0002 ; { unsigned char i;
0002 08C0 rjmp L3
0004 L2:
0004 .dbline 9
0004 ; while(iTime>0)
0004 ; {
0004 .dbline 10
0004 ; for (i=1;i<187;i++)
0004 41E0 ldi R20,1
0006 02C0 rjmp L8
0008 L5:
0008 .dbline 11
0008 ; asm("nop");
0008 0000 nop
000A L6:
000A .dbline 10
000A 4395 inc R20
000C L8:
000C .dbline 10
000C 4B3B cpi R20,187
000E E0F3 brlo L5
0010 X0:
0010 .dbline 13
0010 ;
0010 ; iTime--;
0010 0150 subi R16,1
0012 1040 sbci R17,0
0014 .dbline 14
0014 ; }
0014 L3:
0014 .dbline 8
0014 0030 cpi R16,0
0016 0107 cpc R16,R17
0018 A9F7 brne L2
001A X1:
001A .dbline -2
001A L1:
001A .dbline 0 ; func end
001A 4991 ld R20,y+
001C 0895 ret
001E .dbsym r i 20 c
001E .dbsym r iTime 16 i
001E .dbend
001E .dbfunc e Delay_US _Delay_US fV
001E ; j -> R10,R11
001E ; i -> R20,R21
001E ; iTime -> R16,R17
.even
001E _Delay_US::
001E 00D0 rcall push_xgset300C
0020 .dbline -1
0020 .dbline 19
0020 ; }
0020 ;
0020 ; //主频8MHz
0020 ; void Delay_US(unsigned int iTime)
0020 ; {
0020 .dbline 21
0020 ; unsigned int i,j;
0020 ; j = iTime * 8;
0020 5801 movw R10,R16
0022 AA0C lsl R10
0024 BB1C rol R11
0026 AA0C lsl R10
0028 BB1C rol R11
002A AA0C lsl R10
002C BB1C rol R11
002E .dbline 22
002E ; for(i=0;i<j;i++);
002E 4427 clr R20
0030 5527 clr R21
0032 02C0 rjmp L13
0034 L10:
0034 .dbline 22
0034 L11:
0034 .dbline 22
0034 4F5F subi R20,255 ; offset = 1
0036 5F4F sbci R21,255
0038 L13:
0038 .dbline 22
0038 4A15 cp R20,R10
003A 5B05 cpc R21,R11
003C D8F3 brlo L10
003E X2:
003E .dbline -2
003E L9:
003E .dbline 0 ; func end
003E 00C0 rjmp pop_xgset300C
0040 .dbsym r j 10 i
0040 .dbsym r i 20 i
0040 .dbsym r iTime 16 i
0040 .dbend
.area data(ram, con, rel)
0000 .dbfile f:\MYDOCU~1\AVR\test\delay.h
0000 _SEG7::
0000 .blkb 2
.area idata
0000 C0F9 .byte 192,249
.area data(ram, con, rel)
0002 .dbfile f:\MYDOCU~1\AVR\test\delay.h
0002 .blkb 2
.area idata
0002 A4B0 .byte 164,176
.area data(ram, con, rel)
0004 .dbfile f:\MYDOCU~1\AVR\test\delay.h
0004 .blkb 2
.area idata
0004 9992 .byte 153,146
.area data(ram, con, rel)
0006 .dbfile f:\MYDOCU~1\AVR\test\delay.h
0006 .blkb 2
.area idata
0006 82F8 .byte 130,248
.area data(ram, con, rel)
0008 .dbfile f:\MYDOCU~1\AVR\test\delay.h
0008 .blkb 2
.area idata
0008 8090 .byte 128,144
.area data(ram, con, rel)
000A .dbfile f:\MYDOCU~1\AVR\test\delay.h
000A .blkb 2
.area idata
000A 8883 .byte 136,131
.area data(ram, con, rel)
000C .dbfile f:\MYDOCU~1\AVR\test\delay.h
000C .blkb 2
.area idata
000C C6A1 .byte 198,161
.area data(ram, con, rel)
000E .dbfile f:\MYDOCU~1\AVR\test\delay.h
000E .blkb 2
.area idata
000E 868E .byte 134,142
.area data(ram, con, rel)
0010 .dbfile f:\MYDOCU~1\AVR\test\delay.h
0010 .dbfile f:\MYDOCU~1\AVR\test\main.c
0010 .dbsym e SEG7 _SEG7 A[16:16]c
0010 _PADV::
0010 .blkb 1
.area idata
0010 FF .byte 255
.area data(ram, con, rel)
0011 .dbfile f:\MYDOCU~1\AVR\test\main.c
0011 .blkb 15
.area idata
0011 00000000000000000000 .word 0,0,0,0,0
001B 0000000000 .byte 0,0,0,0,0
.area data(ram, con, rel)
0020 .dbfile f:\MYDOCU~1\AVR\test\main.c
0020 .dbsym e PADV _PADV A[16:16]c
0020 _CADV::
0020 .blkb 1
.area idata
0020 00 .byte 0
.area data(ram, con, rel)
0021 .dbfile f:\MYDOCU~1\AVR\test\main.c
0021 .blkb 15
.area idata
0021 00000000000000000000 .word 0,0,0,0,0
002B 0000000000 .byte 0,0,0,0,0
.area data(ram, con, rel)
0030 .dbfile f:\MYDOCU~1\AVR\test\main.c
0030 .dbsym e CADV _CADV A[16:16]c
0030 _ScaleCHindex::
0030 .blkb 1
.area idata
0030 00 .byte 0
.area data(ram, con, rel)
0031 .dbfile f:\MYDOCU~1\AVR\test\main.c
0031 .dbsym e ScaleCHindex _ScaleCHindex c
.area vector(rom, abs)
.org 18
0012 20C0 rjmp _OnTimer0
.area data(ram, con, rel)
0031 .dbfile f:\MYDOCU~1\AVR\test\main.c
.area text(rom, con, rel)
0040 .dbfile f:\MYDOCU~1\AVR\test\main.c
0040 .dbfunc e OnTimer0 _OnTimer0 fV
0040 ; adv -> R20
.even
0040 _OnTimer0::
0040 0A92 st -y,R0
0042 1A92 st -y,R1
0044 2A92 st -y,R2
0046 3A92 st -y,R3
0048 4A92 st -y,R4
004A 5A92 st -y,R5
004C 6A92 st -y,R6
004E 7A92 st -y,R7
0050 8A92 st -y,R8
0052 9A92 st -y,R9
0054 0A93 st -y,R16
0056 1A93 st -y,R17
0058 2A93 st -y,R18
005A 3A93 st -y,R19
005C 8A93 st -y,R24
005E 9A93 st -y,R25
0060 AA93 st -y,R26
0062 BA93 st -y,R27
0064 EA93 st -y,R30
0066 FA93 st -y,R31
0068 0FB6 in R0,0x3f
006A 0A92 st -y,R0
006C 4A93 st -y,R20
006E 5A93 st -y,R21
0070 .dbline -1
0070 .dbline 22
0070 ; #include <iom8v.h>
0070 ; #include <macros.h>
0070 ;
0070 ; #define F_CPU 8000000 //主频
0070 ; #include "delay.h"
0070 ;
0070 ; #define MAXCH 16 //总通道数
0070 ; #define MAXSCALECH 6 //比例通道数
0070 ;
0070 ; //数码管显示值
0070 ; unsigned char SEG7[16] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
0070 ;
0070 ; //通道值
0070 ; unsigned char PADV[MAXCH] = {-1};
0070 ; unsigned char CADV[MAXCH] = {0};
0070 ;
0070 ; unsigned char ScaleCHindex = 0;
0070 ;
0070 ; //以下定义中断处理程序
0070 ; #pragma interrupt_handler OnTimer0:iv_TIMER0_OVF
0070 ; void OnTimer0(void)
0070 ; { unsigned char adv;
0070 .dbline 23
0070 ; ADMUX = 0x20 + ScaleCHindex; //左对齐,只取高位
0070 80913000 lds R24,_ScaleCHindex
0074 805E subi R24,224 ; addi 32
0076 87B9 out 0x7,R24
0078 .dbline 25
0078 ;
0078 ; ADCSRA|=(1<<ADSC); //启动ADC
0078 369A sbi 0x6,6
007A .dbline 26
007A ; Delay_US(100); //第一次结果抛弃
007A 04E6 ldi R16,100
007C 10E0 ldi R17,0
007E CFDF rcall _Delay_US
0080 .dbline 27
0080 ; ADCSRA|=(1<<ADSC); //启动ADC
0080 369A sbi 0x6,6
0082 .dbline 28
0082 ; Delay_US(100);
0082 04E6 ldi R16,100
0084 10E0 ldi R17,0
0086 CBDF rcall _Delay_US
0088 .dbline 29
0088 ; adv = ADCH;
0088 45B1 in R20,0x5
008A .dbline 31
008A ;
008A ; if(adv == 0xFF) adv = 0xFE;
008A 4F3F cpi R20,255
008C 11F4 brne L15
008E X3:
008E .dbline 31
008E 4EEF ldi R20,254
0090 04C0 rjmp L16
0092 L15:
0092 .dbline 32
0092 ; else if(ADCH == 0x00) adv = 0x01;
0092 25B0 in R2,0x5
0094 2220 tst R2
0096 09F4 brne L17
0098 X4:
0098 .dbline 32
0098 41E0 ldi R20,1
009A L17:
009A L16:
009A .dbline 34
009A ;
009A ; CADV[ScaleCHindex] = adv;
009A 80E0 ldi R24,<_CADV
009C 90E0 ldi R25,>_CADV
009E E0913000 lds R30,_ScaleCHindex
00A2 FF27 clr R31
00A4 E80F add R30,R24
00A6 F91F adc R31,R25
00A8 4083 std z+0,R20
00AA .dbline 36
00AA ;
00AA ; ScaleCHindex++;
00AA 80913000 lds R24,_ScaleCHindex
00AE 8F5F subi R24,255 ; addi 1
00B0 80933000 sts _ScaleCHindex,R24
00B4 .dbline 37
00B4 ; if(ScaleCHindex >= MAXSCALECH) ScaleCHindex = 0;
00B4 8630 cpi R24,6
00B6 18F0 brlo L19
00B8 X5:
00B8 .dbline 37
00B8 2224 clr R2
00BA 20923000 sts _ScaleCHindex,R2
00BE L19:
00BE .dbline 40
00BE ;
00BE ; //去抖
00BE ; adv = PIND;
00BE 40B3 in R20,0x10
00C0 .dbline 41
00C0 ; Delay_US(50);
00C0 02E3 ldi R16,50
00C2 10E0 ldi R17,0
00C4 ACDF rcall _Delay_US
00C6 .dbline 42
00C6 ; if(adv != PIND) return;
00C6 20B2 in R2,0x10
00C8 4215 cp R20,R2
00CA 09F0 breq L21
00CC X6:
00CC .dbline 42
00CC 24C0 rjmp L14
00CE L21:
00CE .dbline 44
00CE ;
00CE ; CADV[MAXSCALECH] = (PIND & 0x10) ? 0xFF : 0x00;
00CE 849B sbis 0x10,4
00D0 03C0 rjmp L24
00D2 X7:
00D2 4FEF ldi R20,255
00D4 50E0 ldi R21,0
00D6 02C0 rjmp L25
00D8 L24:
00D8 4427 clr R20
00DA 5527 clr R21
00DC L25:
00DC 40932600 sts _CADV+6,R20
00E0 .dbline 45
00E0 ; CADV[MAXSCALECH+1] = (PIND & 0x20) ? 0xFF : 0x00;
00E0 859B sbis 0x10,5
00E2 03C0 rjmp L27
00E4 X8:
00E4 4FEF ldi R20,255
00E6 50E0 ldi R21,0
00E8 02C0 rjmp L28
00EA L27:
00EA 4427 clr R20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -