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

📄 main.lis

📁 AVR单片机六路ADC采集与七段数码管显示采集值
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .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 + -