?? 計算器.lis
字號:
.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 + -