📄 lesson5.lis
字号:
.module lesson5.c
.area text(rom, con, rel)
0000 .dbfile G:\学习\avr\天祥电子AVR视频教程\chengxu\lesson5\lesson5.c
.area code(ram, con, rel)
0000 .dbfile G:\学习\avr\天祥电子AVR视频教程\chengxu\lesson5\lesson5.c
.area lit(rom, con, rel)
0000 _table::
0000 3F00 .word 63
0002 0600 .word 6
0004 5B00 .word 91
0006 4F00 .word 79
0008 6600 .word 102
000A 6D00 .word 109
000C 7D00 .word 125
000E 0700 .word 7
0010 7F00 .word 127
0012 6F00 .word 111
0014 7700 .word 119
0016 7C00 .word 124
0018 3900 .word 57
001A 5E00 .word 94
001C 7900 .word 121
001E 7100 .word 113
0020 0000 .word 0
0022 .dbsym e table _table A[34:17]kI
.area text(rom, con, rel)
0000 .dbfile G:\学习\avr\天祥电子AVR视频教程\chengxu\lesson5\lesson5.c
0000 .dbfunc e delay _delay fV
0000 ; i -> R20,R21
0000 ; j -> R22,R23
0000 ; ms -> R16,R17
.even
0000 _delay::
0000 0E940000 xcall push_xgsetF000
0004 .dbline -1
0004 .dbline 9
0004 ; #include <iom16v.h>
0004 ; #include <macros.h>
0004 ; #define uchar unsigned char
0004 ; #define uint unsigned int
0004 ; #pragma data:code
0004 ; const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
0004 ; 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};
0004 ; void delay(uint ms)
0004 ; {
0004 .dbline 11
0004 ; uint i,j;
0004 ; for(i=0;i<ms;i++)
0004 4427 clr R20
0006 5527 clr R21
0008 0BC0 xjmp L5
000A L2:
000A .dbline 12
000A ; {
000A .dbline 13
000A ; for(j=0;j<1141;j++);
000A 6627 clr R22
000C 7727 clr R23
000E 02C0 xjmp L9
0010 L6:
0010 .dbline 13
0010 L7:
0010 .dbline 13
0010 6F5F subi R22,255 ; offset = 1
0012 7F4F sbci R23,255
0014 L9:
0014 .dbline 13
0014 6537 cpi R22,117
0016 E4E0 ldi R30,4
0018 7E07 cpc R23,R30
001A D0F3 brlo L6
001C X0:
001C .dbline 14
001C ; }
001C L3:
001C .dbline 11
001C 4F5F subi R20,255 ; offset = 1
001E 5F4F sbci R21,255
0020 L5:
0020 .dbline 11
0020 4017 cp R20,R16
0022 5107 cpc R21,R17
0024 90F3 brlo L2
0026 X1:
0026 .dbline -2
0026 L1:
0026 .dbline 0 ; func end
0026 0C940000 xjmp pop_xgsetF000
002A .dbsym r i 20 i
002A .dbsym r j 22 i
002A .dbsym r ms 16 i
002A .dbend
002A .dbfunc e show _show fV
002A ; k -> R10
002A ; j -> R12
.even
002A _show::
002A AA92 st -y,R10
002C CA92 st -y,R12
002E A22E mov R10,R18
0030 C02E mov R12,R16
0032 .dbline -1
0032 .dbline 17
0032 ; }
0032 ; void show(uchar j,uchar k)
0032 ; {
0032 .dbline 18
0032 ; PORTA|=BIT(3);
0032 DB9A sbi 0x1b,3
0034 .dbline 19
0034 ; PORTB=table[j];
0034 80E0 ldi R24,<_table
0036 90E0 ldi R25,>_table
0038 EC2D mov R30,R12
003A FF27 clr R31
003C EE0F lsl R30
003E FF1F rol R31
0040 E80F add R30,R24
0042 F91F adc R31,R25
0044 2590 lpm R2,Z+
0046 3490 lpm R3,Z
0048 28BA out 0x18,R2
004A .dbline 20
004A ; PORTA&=~BIT(3);
004A DB98 cbi 0x1b,3
004C .dbline 21
004C ; PORTB=0XFF;
004C 8FEF ldi R24,255
004E 88BB out 0x18,R24
0050 .dbline 22
0050 ; PORTB&=~BIT(k);
0050 01E0 ldi R16,1
0052 1A2D mov R17,R10
0054 0E940000 xcall lsl8
0058 202E mov R2,R16
005A 2094 com R2
005C 38B2 in R3,0x18
005E 3220 and R3,R2
0060 38BA out 0x18,R3
0062 .dbline 23
0062 ; PORTA|=BIT(4);
0062 DC9A sbi 0x1b,4
0064 .dbline 24
0064 ; PORTA&=~BIT(4);
0064 DC98 cbi 0x1b,4
0066 .dbline 25
0066 ; delay(1);
0066 01E0 ldi R16,1
0068 10E0 ldi R17,0
006A CADF xcall _delay
006C .dbline -2
006C L10:
006C .dbline 0 ; func end
006C C990 ld R12,y+
006E A990 ld R10,y+
0070 0895 ret
0072 .dbsym r k 10 c
0072 .dbsym r j 12 c
0072 .dbend
0072 .dbfunc e key_press _key_press fc
0072 ; j -> R16
.even
0072 _key_press::
0072 .dbline -1
0072 .dbline 29
0072 ; }
0072 ;
0072 ; uchar key_press()
0072 ; {
0072 .dbline 31
0072 ; uchar j;
0072 ; DDRD|=0X0F;
0072 81B3 in R24,0x11
0074 8F60 ori R24,15
0076 81BB out 0x11,R24
0078 .dbline 32
0078 ; PORTD|=0X0F;
0078 82B3 in R24,0x12
007A 8F60 ori R24,15
007C 82BB out 0x12,R24
007E .dbline 34
007E ;
007E ; DDRD&=0XF0;
007E 81B3 in R24,0x11
0080 807F andi R24,240
0082 81BB out 0x11,R24
0084 .dbline 36
0084 ;
0084 ; j=PIND;
0084 00B3 in R16,0x10
0086 .dbline 37
0086 ; j=j&0X0F;//00001111
0086 0F70 andi R16,15
0088 .dbline 38
0088 ; if(j==0X0F)
0088 0F30 cpi R16,15
008A 11F4 brne L12
008C X2:
008C .dbline 39
008C ; {
008C .dbline 40
008C ; return 0;
008C 0027 clr R16
008E 01C0 xjmp L11
0090 L12:
0090 .dbline 43
0090 ; }
0090 ; else
0090 ; {
0090 .dbline 44
0090 ; return 1;
0090 01E0 ldi R16,1
0092 .dbline -2
0092 L11:
0092 .dbline 0 ; func end
0092 0895 ret
0094 .dbsym r j 16 c
0094 .dbend
0094 .dbfunc e key_scan _key_scan fc
0094 ; key -> R20
.even
0094 _key_scan::
0094 0E940000 xcall push_xgsetF000
0098 .dbline -1
0098 .dbline 50
0098 ; }
0098 ;
0098 ; }
0098 ;
0098 ; uchar key_scan()
0098 ; {
0098 .dbline 52
0098 ; uchar key;
0098 ; delay(10);
0098 0AE0 ldi R16,10
009A 10E0 ldi R17,0
009C B1DF xcall _delay
009E .dbline 53
009E ; if(key_press())
009E E9DF xcall _key_press
00A0 0023 tst R16
00A2 11F1 breq L15
00A4 X3:
00A4 .dbline 54
00A4 ; {
00A4 .dbline 55
00A4 ; key=PIND;
00A4 40B3 in R20,0x10
00A6 .dbline 56
00A6 ; key&=0X0F;
00A6 4F70 andi R20,15
00A8 .dbline 57
00A8 ; switch(key)
00A8 642F mov R22,R20
00AA 7727 clr R23
00AC 6730 cpi R22,7
00AE E0E0 ldi R30,0
00B0 7E07 cpc R23,R30
00B2 99F0 breq L23
00B4 X4:
00B4 6B30 cpi R22,11
00B6 E0E0 ldi R30,0
00B8 7E07 cpc R23,R30
00BA 69F0 breq L22
00BC X5:
00BC 6D30 cpi R22,13
00BE E0E0 ldi R30,0
00C0 7E07 cpc R23,R30
00C2 39F0 breq L21
00C4 X6:
00C4 6E30 cpi R22,14
00C6 E0E0 ldi R30,0
00C8 7E07 cpc R23,R30
00CA 09F0 breq L20
00CC X7:
00CC 08C0 xjmp L17
00CE L20:
00CE .dbline 60
00CE ; {
00CE ; case 0X0E:
00CE ; key=1;
00CE 41E0 ldi R20,1
00D0 .dbline 61
00D0 ; break;
00D0 07C0 xjmp L25
00D2 L21:
00D2 .dbline 63
00D2 ; case 0X0D:
00D2 ; key=2;
00D2 42E0 ldi R20,2
00D4 .dbline 64
00D4 ; break;
00D4 05C0 xjmp L25
00D6 L22:
00D6 .dbline 66
00D6 ; case 0X0B:
00D6 ; key=3;
00D6 43E0 ldi R20,3
00D8 .dbline 67
00D8 ; break;
00D8 03C0 xjmp L25
00DA L23:
00DA .dbline 69
00DA ; case 0X07:
00DA ; key=4;
00DA 44E0 ldi R20,4
00DC .dbline 70
00DC ; break;
00DC 01C0 xjmp L25
00DE L17:
00DE .dbline 72
00DE ; default:
00DE ; key=16;
00DE 40E1 ldi R20,16
00E0 .dbline 73
00E0 ; }
00E0 L24:
00E0 .dbline 74
00E0 ; while(key_press());
00E0 L25:
00E0 .dbline 74
00E0 C8DF xcall _key_press
00E2 0023 tst R16
00E4 E9F7 brne L24
00E6 X8:
00E6 .dbline 75
00E6 ; }
00E6 01C0 xjmp L16
00E8 L15:
00E8 .dbline 77
00E8 ; else
00E8 ; {
00E8 .dbline 78
00E8 ; key=16;
00E8 40E1 ldi R20,16
00EA .dbline 79
00EA ; }
00EA L16:
00EA .dbline 80
00EA ; return key;
00EA 042F mov R16,R20
00EC .dbline -2
00EC L14:
00EC .dbline 0 ; func end
00EC 0C940000 xjmp pop_xgsetF000
00F0 .dbsym r key 20 c
00F0 .dbend
00F0 .dbfunc e main _main fV
00F0 ; l -> R10
00F0 ; i -> R10
.even
00F0 _main::
00F0 .dbline -1
00F0 .dbline 83
00F0 ; }
00F0 ; void main()
00F0 ; {
00F0 .dbline 85
00F0 ; uchar i,l;
00F0 ; DDRA=0X18;//0001 1000
00F0 88E1 ldi R24,24
00F2 8ABB out 0x1a,R24
00F4 .dbline 86
00F4 ; DDRB=0XFF;
00F4 8FEF ldi R24,255
00F6 87BB out 0x17,R24
00F8 08C0 xjmp L29
00FA L28:
00FA .dbline 88
00FA ; while(1)
00FA ; {
00FA .dbline 89
00FA ; i=key_press();
00FA BBDF xcall _key_press
00FC A02E mov R10,R16
00FE .dbline 90
00FE ; if(i)
00FE 0023 tst R16
0100 21F0 breq L31
0102 X9:
0102 .dbline 91
0102 ; {
0102 .dbline 92
0102 ; l=key_scan();
0102 C8DF xcall _key_scan
0104 A02E mov R10,R16
0106 .dbline 93
0106 ; show(l,0);
0106 2227 clr R18
0108 90DF xcall _show
010A .dbline 94
010A ; }
010A L31:
010A .dbline 95
010A ; }
010A L29:
010A .dbline 87
010A F7CF xjmp L28
010C X10:
010C .dbline -2
010C L27:
010C .dbline 0 ; func end
010C 0895 ret
010E .dbsym r l 10 c
010E .dbsym r i 10 c
010E .dbend
010E ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -