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

📄 计算器.lis

📁 八位整数的+-*/
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module _计算器.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\avr工程\计算器\计算器\程序\计算器.c
                        .area vector(rom, abs)
                        .org 4
 0004 0C940000          jmp _int0
                        .area text(rom, con, rel)
 0000                   .dbfile E:\avr工程\计算器\计算器\程序\计算器.c
                        .area data(ram, con, rel)
 0000                   .dbfile E:\avr工程\计算器\计算器\程序\计算器.c
 0000           _code::
 0000                   .blkb 2
                        .area idata
 0000 3F00              .word 63
                        .area data(ram, con, rel)
 0002                   .dbfile E:\avr工程\计算器\计算器\程序\计算器.c
 0002                   .blkb 2
                        .area idata
 0002 0600              .word 6
                        .area data(ram, con, rel)
 0004                   .dbfile E:\avr工程\计算器\计算器\程序\计算器.c
 0004                   .blkb 2
                        .area idata
 0004 5B00              .word 91
                        .area data(ram, con, rel)
 0006                   .dbfile E:\avr工程\计算器\计算器\程序\计算器.c
 0006                   .blkb 2
                        .area idata
 0006 4F00              .word 79
                        .area data(ram, con, rel)
 0008                   .dbfile E:\avr工程\计算器\计算器\程序\计算器.c
 0008                   .blkb 2
                        .area idata
 0008 6600              .word 102
                        .area data(ram, con, rel)
 000A                   .dbfile E:\avr工程\计算器\计算器\程序\计算器.c
 000A                   .blkb 2
                        .area idata
 000A 6D00              .word 109
                        .area data(ram, con, rel)
 000C                   .dbfile E:\avr工程\计算器\计算器\程序\计算器.c
 000C                   .blkb 2
                        .area idata
 000C 7D00              .word 125
                        .area data(ram, con, rel)
 000E                   .dbfile E:\avr工程\计算器\计算器\程序\计算器.c
 000E                   .blkb 2
                        .area idata
 000E 0700              .word 7
                        .area data(ram, con, rel)
 0010                   .dbfile E:\avr工程\计算器\计算器\程序\计算器.c
 0010                   .blkb 2
                        .area idata
 0010 7F00              .word 127
                        .area data(ram, con, rel)
 0012                   .dbfile E:\avr工程\计算器\计算器\程序\计算器.c
 0012                   .blkb 2
                        .area idata
 0012 6F00              .word 111
                        .area data(ram, con, rel)
 0014                   .dbfile E:\avr工程\计算器\计算器\程序\计算器.c
 0014                   .dbsym e code _code A[20:10]i
 0014           _i::
 0014                   .blkb 1
                        .area idata
 0014 00                .byte 0
                        .area data(ram, con, rel)
 0015                   .dbfile E:\avr工程\计算器\计算器\程序\计算器.c
 0015                   .dbsym e i _i c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\avr工程\计算器\计算器\程序\计算器.c
 0000                   .dbfunc e int0 _int0 fV
 0000           ;              t -> R20
                        .even
 0000           _int0::
 0000 0A92              st -y,R0
 0002 1A92              st -y,R1
 0004 2A92              st -y,R2
 0006 3A92              st -y,R3
 0008 4A92              st -y,R4
 000A 5A92              st -y,R5
 000C 6A92              st -y,R6
 000E 7A92              st -y,R7
 0010 8A92              st -y,R8
 0012 9A92              st -y,R9
 0014 0A93              st -y,R16
 0016 1A93              st -y,R17
 0018 2A93              st -y,R18
 001A 3A93              st -y,R19
 001C 4A93              st -y,R20
 001E 6A93              st -y,R22
 0020 7A93              st -y,R23
 0022 8A93              st -y,R24
 0024 9A93              st -y,R25
 0026 AA93              st -y,R26
 0028 BA93              st -y,R27
 002A EA93              st -y,R30
 002C FA93              st -y,R31
 002E 0FB6              in R0,0x3f
 0030 0A92              st -y,R0
 0032 0E940000          xcall push_xgsetF000
 0036                   .dbline -1
 0036                   .dbline 13
 0036           ; #include<iom16v.h>
 0036           ; #include<macros.h>
 0036           ; #include<math.h>
 0036           ; #define uint unsigned int 
 0036           ; #define uchar unsigned char
 0036           ; #pragma interrupt_handler int0:2
 0036           ; 
 0036           ; uint code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
 0036           ; uchar i=0;
 0036           ; uchar sign;
 0036           ; 
 0036           ; void int0()
 0036           ; {             uchar t=255;
 0036                   .dbline 13
 0036 4FEF              ldi R20,255
 0038                   .dbline 14
 0038           ;        GICR&=~BIT(6);             //先关闭中断,因为用的是键盘反转扫描法,故扫描过程中会出现
 0038 8BB7              in R24,0x3b
 003A 8F7B              andi R24,191
 003C 8BBF              out 0x3b,R24
 003E                   .dbline 16
 003E           ;                                       //电平交替变化,为防止再次触发中断先关闭中断
 003E           ;        if(keyscan()!=255)         //检测按键是否有效
 003E BDD1              xcall _keyscan
 0040 0F3F              cpi R16,255
 0042 E0E0              ldi R30,0
 0044 1E07              cpc R17,R30
 0046 19F0              breq L5
 0048           X0:
 0048                   .dbline 17
 0048           ;        i=keyscan();
 0048 B8D1              xcall _keyscan
 004A 00931400          sts _i,R16
 004E           L4:
 004E                   .dbline 18
 004E           ;        while(t--);                //按键扫描会导致电平不稳定,延时一小段时间等待波形稳定
 004E           L5:
 004E                   .dbline 18
 004E 642F              mov R22,R20
 0050 7727              clr R23
 0052 4150              subi R20,1
 0054 6623              tst R22
 0056 D9F7              brne L4
 0058           X1:
 0058           L7:
 0058                   .dbline 19
 0058           ;        while((PIND|=BIT(2))==0);  //检测按键是否抬起
 0058           L8:
 0058                   .dbline 19
 0058 40B3              in R20,0x10
 005A 4460              ori R20,4
 005C 40BB              out 0x10,R20
 005E 4423              tst R20
 0060 D9F3              breq L7
 0062           X2:
 0062                   .dbline 21
 0062           ;        
 0062           ;        GICR|=BIT(6);
 0062 8BB7              in R24,0x3b
 0064 8064              ori R24,64
 0066 8BBF              out 0x3b,R24
 0068                   .dbline -2
 0068           L1:
 0068                   .dbline 0 ; func end
 0068 0E940000          xcall pop_xgsetF000
 006C 0990              ld R0,y+
 006E 0FBE              out 0x3f,R0
 0070 F991              ld R31,y+
 0072 E991              ld R30,y+
 0074 B991              ld R27,y+
 0076 A991              ld R26,y+
 0078 9991              ld R25,y+
 007A 8991              ld R24,y+
 007C 7991              ld R23,y+
 007E 6991              ld R22,y+
 0080 4991              ld R20,y+
 0082 3991              ld R19,y+
 0084 2991              ld R18,y+
 0086 1991              ld R17,y+
 0088 0991              ld R16,y+
 008A 9990              ld R9,y+
 008C 8990              ld R8,y+
 008E 7990              ld R7,y+
 0090 6990              ld R6,y+
 0092 5990              ld R5,y+
 0094 4990              ld R4,y+
 0096 3990              ld R3,y+
 0098 2990              ld R2,y+
 009A 1990              ld R1,y+
 009C 0990              ld R0,y+
 009E 1895              reti
 00A0                   .dbsym r t 20 c
 00A0                   .dbend
 00A0                   .dbfunc e delay _delay fV
 00A0           ;              i -> R20,R21
 00A0           ;              j -> R22,R23
 00A0           ;              t -> R16,R17
                        .even
 00A0           _delay::
 00A0 0E940000          xcall push_xgsetF000
 00A4                   .dbline -1
 00A4                   .dbline 27
 00A4           ;       
 00A4           ; }
 00A4           ; 
 00A4           ; 
 00A4           ; void delay(uint t)
 00A4           ; {
 00A4                   .dbline 29
 00A4           ;        uint i,j;
 00A4           ;        for(i=0;i<t;i++)
 00A4 4427              clr R20
 00A6 5527              clr R21
 00A8 0BC0              xjmp L14
 00AA           L11:
 00AA                   .dbline 30
 00AA           ;               for(j=0;j<1141;j++);
 00AA 6627              clr R22
 00AC 7727              clr R23
 00AE 02C0              xjmp L18
 00B0           L15:
 00B0                   .dbline 30
 00B0           L16:
 00B0                   .dbline 30
 00B0 6F5F              subi R22,255  ; offset = 1
 00B2 7F4F              sbci R23,255
 00B4           L18:
 00B4                   .dbline 30
 00B4 6537              cpi R22,117
 00B6 E4E0              ldi R30,4
 00B8 7E07              cpc R23,R30
 00BA D0F3              brlo L15
 00BC           X3:
 00BC           L12:
 00BC                   .dbline 29
 00BC 4F5F              subi R20,255  ; offset = 1
 00BE 5F4F              sbci R21,255
 00C0           L14:
 00C0                   .dbline 29
 00C0 4017              cp R20,R16
 00C2 5107              cpc R21,R17
 00C4 90F3              brlo L11
 00C6           X4:
 00C6                   .dbline -2
 00C6           L10:
 00C6                   .dbline 0 ; func end
 00C6 0C940000          xjmp pop_xgsetF000
 00CA                   .dbsym r i 20 i
 00CA                   .dbsym r j 22 i
 00CA                   .dbsym r t 16 i
 00CA                   .dbend
 00CA                   .dbfunc e InitC_0 _InitC_0 fV
                        .even
 00CA           _InitC_0::
 00CA                   .dbline -1
 00CA                   .dbline 35
 00CA           ; }
 00CA           ; 
 00CA           ; 
 00CA           ; void InitC_0()        //配置c口高四位为输出,低四位为带上拉电阻的输入
 00CA           ; {      DDRC=0xf0; 
 00CA                   .dbline 35
 00CA 80EF              ldi R24,240
 00CC 84BB              out 0x14,R24
 00CE                   .dbline 36
 00CE           ;        PORTC=0x0f;   
 00CE 8FE0              ldi R24,15
 00D0 85BB              out 0x15,R24
 00D2                   .dbline -2
 00D2           L19:
 00D2                   .dbline 0 ; func end
 00D2 0895              ret
 00D4                   .dbend
 00D4                   .dbfunc e InitC_1 _InitC_1 fV
                        .even
 00D4           _InitC_1::
 00D4                   .dbline -1
 00D4                   .dbline 39
 00D4           ; }
 00D4           ; void InitC_1()        //配置c口低四位为输出,高四位为带上拉电阻的输入
 00D4           ; {
 00D4                   .dbline 40
 00D4           ;        DDRC=0x0f;
 00D4 8FE0              ldi R24,15
 00D6 84BB              out 0x14,R24
 00D8                   .dbline 41
 00D8           ;        PORTC=0xf0;  
 00D8 80EF              ldi R24,240
 00DA 85BB              out 0x15,R24
 00DC                   .dbline -2
 00DC           L20:
 00DC                   .dbline 0 ; func end
 00DC 0895              ret
 00DE                   .dbend
 00DE                   .dbfunc e show _show fV
 00DE           ;              j -> R10
 00DE           ;              i -> R12
                        .even
 00DE           _show::
 00DE AA92              st -y,R10
 00E0 CA92              st -y,R12
 00E2 A22E              mov R10,R18
 00E4 C02E              mov R12,R16
 00E6                   .dbline -1
 00E6                   .dbline 47
 00E6           ; }   
 00E6           ; 
 00E6           ; 
 00E6           ; 
 00E6           ; void show(uchar i,uchar j)           //在数码管的第i位,显示数字j
 00E6           ; {
 00E6                   .dbline 48
 00E6           ;        PORTA=0x00;            
 00E6 2224              clr R2
 00E8 2BBA              out 0x1b,R2
 00EA                   .dbline 49
 00EA           ;        PORTA|=BIT(i);
 00EA 01E0              ldi R16,1
 00EC 1C2D              mov R17,R12
 00EE 0E940000          xcall lsl8
 00F2 2BB2              in R2,0x1b
 00F4 202A              or R2,R16
 00F6 2BBA              out 0x1b,R2
 00F8                   .dbline 50
 00F8           ;        PORTB=0x02;
 00F8 82E0              ldi R24,2
 00FA 88BB              out 0x18,R24
 00FC                   .dbline 51
 00FC           ;        PORTB=0x00;
 00FC 2224              clr R2
 00FE 28BA              out 0x18,R2
 0100                   .dbline 52
 0100           ;        PORTA=0x00;
 0100 2BBA              out 0x1b,R2
 0102                   .dbline 53
 0102           ;        PORTA=~code[j];
 0102 80E0              ldi R24,<_code
 0104 90E0              ldi R25,>_code
 0106 EA2D              mov R30,R10
 0108 FF27              clr R31
 010A EE0F              lsl R30
 010C FF1F              rol R31
 010E E80F              add R30,R24
 0110 F91F              adc R31,R25
 0112 2080              ldd R2,z+0
 0114 3180              ldd R3,z+1
 0116 2094              com R2
 0118 3094              com R3
 011A 2BBA              out 0x1b,R2
 011C                   .dbline 54
 011C           ;        PORTB=0X01;
 011C 81E0              ldi R24,1
 011E 88BB              out 0x18,R24
 0120                   .dbline 55
 0120           ;        PORTB=0X00;
 0120 2224              clr R2
 0122 28BA              out 0x18,R2
 0124                   .dbline -2
 0124           L21:
 0124                   .dbline 0 ; func end
 0124 C990              ld R12,y+
 0126 A990              ld R10,y+
 0128 0895              ret
 012A                   .dbsym r j 10 c
 012A                   .dbsym r i 12 c
 012A                   .dbend
 012A                   .dbfunc e display_1 _display_1 fV
 012A           ;              j -> y+0
 012A           ;              x -> R10
 012A           ;              t -> R12
 012A           ;            wei -> R10
 012A           ;              i -> y+14
                        .even
 012A           _display_1::
 012A 0E940000          xcall push_arg4
 012E 0E940000          xcall push_xgsetF0FC
 0132 2497              sbiw R28,4
 0134                   .dbline -1
 0134                   .dbline 60
 0134           ;       // delay(1);
 0134           ; }
 0134           ;                        

⌨️ 快捷键说明

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