📄 key.lis
字号:
.module key.c
.area vector(rom, abs)
.org 40
0028 0C940000 jmp _Read_Keybroad
.area data(ram, con, rel)
0000 L2:
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
.area text(rom, con, rel)
0000 .dbfile E:\software\MP3程序\Keyboard\key.c
0000 .dbfunc e Read_Keybroad _Read_Keybroad fV
0000 .dbsym s push L2 c
.even
0000 _Read_Keybroad::
0000 2A92 st -y,R2
0002 0A93 st -y,R16
0004 1A93 st -y,R17
0006 8A93 st -y,R24
0008 9A93 st -y,R25
000A EA93 st -y,R30
000C 2FB6 in R2,0x3f
000E 2A92 st -y,R2
0010 .dbline -1
0010 .dbline 17
0010 ; #include <iom64v.h>
0010 ; #include <macros.h>
0010 ; #include "key.h"
0010 ; #define uchar unsigned char
0010 ; #define uint unsigned int
0010 ;
0010 ; #define key1 BIT(4)
0010 ; #define key2 BIT(5)
0010 ; #define key3 BIT(6)
0010 ; #define key4 BIT(7)
0010 ;
0010 ; uchar keybuf;
0010 ;
0010 ; #pragma interrupt_handler Read_Keybroad:11
0010 ; /******************************************************************************/
0010 ; void Read_Keybroad(void)
0010 ; {
0010 .dbline 19
0010 ; static uchar push = 0;
0010 ; TCCR2 = 0X00;
0010 2224 clr R2
0012 25BC out 0x25,R2
0014 .dbline 20
0014 ; DDRF &= 0x0f;
0014 80916100 lds R24,97
0018 8F70 andi R24,15
001A 80936100 sts 97,R24
001E .dbline 21
001E ; PORTF |= 0xf0;
001E 80916200 lds R24,98
0022 806F ori R24,240
0024 80936200 sts 98,R24
0028 .dbline 22
0028 ; NOP();
0028 0000 nop
002A .dbline 23
002A ; NOP();
002A 0000 nop
002C .dbline 25
002C ; // Print_str("I,am herer\r\n");
002C ; if((PINF & 0xf0) == 0xf0){
002C 80B1 in R24,0x0
002E 807F andi R24,240
0030 803F cpi R24,240
0032 09F0 breq X2
0034 4EC0 xjmp L3
0036 X2:
0036 .dbline 25
0036 .dbline 26
0036 ; DDRF |= 0x80;
0036 80916100 lds R24,97
003A 8068 ori R24,128
003C 80936100 sts 97,R24
0040 .dbline 27
0040 ; PORTF &= 0x7f; //输出0
0040 80916200 lds R24,98
0044 8F77 andi R24,127
0046 80936200 sts 98,R24
004A .dbline 28
004A ; NOP();
004A 0000 nop
004C .dbline 29
004C ; NOP();
004C 0000 nop
004E .dbline 30
004E ; if((PINF & 0x70) == 0x70){//这里表示S2、S3、S7没有按下
004E 80B1 in R24,0x0
0050 8077 andi R24,112
0052 8037 cpi R24,112
0054 29F4 brne L5
0056 .dbline 30
0056 .dbline 31
0056 ; push = 0;
0056 20920000 sts L2,R2
005A .dbline 32
005A ; TCCR2 = 0X05;
005A 85E0 ldi R24,5
005C 85BD out 0x25,R24
005E .dbline 33
005E ; return;
005E 70C0 xjmp L1
0060 L5:
0060 .dbline 35
0060 ; }
0060 ; if(push){//键没有释放
0060 20900000 lds R2,L2
0064 2220 tst R2
0066 19F0 breq L7
0068 .dbline 35
0068 .dbline 36
0068 ; TCCR2 = 0X05;
0068 85E0 ldi R24,5
006A 85BD out 0x25,R24
006C .dbline 37
006C ; return;
006C 69C0 xjmp L1
006E L7:
006E .dbline 39
006E ; }
006E ; switch(PINF & 0x70)
006E 00B1 in R16,0x0
0070 1127 clr R17
0072 0077 andi R16,112
0074 1070 andi R17,0
0076 0035 cpi R16,80
0078 E0E0 ldi R30,0
007A 1E07 cpc R17,R30
007C B1F0 breq L13
007E 80E5 ldi R24,80
0080 90E0 ldi R25,0
0082 8017 cp R24,R16
0084 9107 cpc R25,R17
0086 2CF0 brlt L16
0088 L15:
0088 0033 cpi R16,48
008A E0E0 ldi R30,0
008C 1E07 cpc R17,R30
008E A1F0 breq L14
0090 1AC0 xjmp L9
0092 L16:
0092 0036 cpi R16,96
0094 E0E0 ldi R30,0
0096 1E07 cpc R17,R30
0098 09F0 breq L12
009A 15C0 xjmp L9
009C X0:
009C .dbline 40
009C ; {
009C L12:
009C .dbline 41
009C ; case 0b01100000: keybuf = UP; push=1; break;//s1
009C 84E0 ldi R24,4
009E 80930000 sts _keybuf,R24
00A2 .dbline 41
00A2 81E0 ldi R24,1
00A4 80930000 sts L2,R24
00A8 .dbline 41
00A8 11C0 xjmp L10
00AA L13:
00AA .dbline 42
00AA ; case 0b01010000: keybuf = DOWN; push=1; break;//s6
00AA 85E0 ldi R24,5
00AC 80930000 sts _keybuf,R24
00B0 .dbline 42
00B0 81E0 ldi R24,1
00B2 80930000 sts L2,R24
00B6 .dbline 42
00B6 0AC0 xjmp L10
00B8 L14:
00B8 .dbline 43
00B8 ; case 0b00110000: keybuf = LIFT; push=1; break;//s6
00B8 86E0 ldi R24,6
00BA 80930000 sts _keybuf,R24
00BE .dbline 43
00BE 81E0 ldi R24,1
00C0 80930000 sts L2,R24
00C4 .dbline 43
00C4 03C0 xjmp L10
00C6 L9:
00C6 .dbline 44
00C6 ; default : KEYBUF_NULL;
00C6 2224 clr R2
00C8 20920000 sts _keybuf,R2
00CC .dbline 44
00CC .dbline 45
00CC ; }
00CC L10:
00CC .dbline 46
00CC ; TCCR2 = 0X05;
00CC 85E0 ldi R24,5
00CE 85BD out 0x25,R24
00D0 .dbline 47
00D0 ; return;
00D0 37C0 xjmp L1
00D2 L3:
00D2 .dbline 49
00D2 ; }// if((PINF & 0xf0) == 0xf0)
00D2 ; if(push){TCCR2 = 0X05;return;}//键没有释放
00D2 20900000 lds R2,L2
00D6 2220 tst R2
00D8 19F0 breq L17
00DA .dbline 49
00DA .dbline 49
00DA 85E0 ldi R24,5
00DC 85BD out 0x25,R24
00DE .dbline 49
00DE 30C0 xjmp L1
00E0 L17:
00E0 .dbline 50
00E0 ; switch(PINF & 0x70)
00E0 00B1 in R16,0x0
00E2 1127 clr R17
00E4 0077 andi R16,112
00E6 1070 andi R17,0
00E8 0035 cpi R16,80
00EA E0E0 ldi R30,0
00EC 1E07 cpc R17,R30
00EE B1F0 breq L23
00F0 80E5 ldi R24,80
00F2 90E0 ldi R25,0
00F4 8017 cp R24,R16
00F6 9107 cpc R25,R17
00F8 2CF0 brlt L26
00FA L25:
00FA 0033 cpi R16,48
00FC E0E0 ldi R30,0
00FE 1E07 cpc R17,R30
0100 99F0 breq L24
0102 19C0 xjmp L19
0104 L26:
0104 0036 cpi R16,96
0106 E0E0 ldi R30,0
0108 1E07 cpc R17,R30
010A 09F0 breq L22
010C 14C0 xjmp L19
010E X1:
010E .dbline 51
010E ; {
010E L22:
010E .dbline 52
010E ; case 0b01100000: keybuf = RIFT; push=1; break;//s4
010E 83E0 ldi R24,3
0110 80930000 sts _keybuf,R24
0114 .dbline 52
0114 81E0 ldi R24,1
0116 80930000 sts L2,R24
011A .dbline 52
011A 10C0 xjmp L20
011C L23:
011C .dbline 53
011C ; case 0b01010000: keybuf = ESC; push=1; break;//s5
011C 81E0 ldi R24,1
011E 80930000 sts _keybuf,R24
0122 .dbline 53
0122 80930000 sts L2,R24
0126 .dbline 53
0126 0AC0 xjmp L20
0128 L24:
0128 .dbline 54
0128 ; case 0b00110000: keybuf = ENTER;push=1; break;//s8
0128 82E0 ldi R24,2
012A 80930000 sts _keybuf,R24
012E .dbline 54
012E 81E0 ldi R24,1
0130 80930000 sts L2,R24
0134 .dbline 54
0134 03C0 xjmp L20
0136 L19:
0136 .dbline 55
0136 ; default : KEYBUF_NULL;
0136 2224 clr R2
0138 20920000 sts _keybuf,R2
013C .dbline 55
013C .dbline 56
013C ; }
013C L20:
013C .dbline 57
013C ; TCCR2 = 0X05;
013C 85E0 ldi R24,5
013E 85BD out 0x25,R24
0140 .dbline 58
0140 ; return;
0140 .dbline -2
0140 L1:
0140 2990 ld R2,y+
0142 2FBE out 0x3f,R2
0144 E991 ld R30,y+
0146 9991 ld R25,y+
0148 8991 ld R24,y+
014A 1991 ld R17,y+
014C 0991 ld R16,y+
014E 2990 ld R2,y+
0150 .dbline 0 ; func end
0150 1895 reti
0152 .dbend
0152 .dbfunc e key_init _key_init fV
.even
0152 _key_init::
0152 .dbline -1
0152 .dbline 62
0152 ; }
0152 ;
0152 ; void key_init(void)
0152 ; {
0152 .dbline 63
0152 ; TCCR2 = 0x00; //stop
0152 2224 clr R2
0154 25BC out 0x25,R2
0156 .dbline 64
0156 ; TCNT2 = 0x00; //set count
0156 24BC out 0x24,R2
0158 .dbline 65
0158 ; TIMSK |= 1<<TOIE2;
0158 87B7 in R24,0x37
015A 8064 ori R24,64
015C 87BF out 0x37,R24
015E .dbline 66
015E ; TCCR2 = 0x05; //stop
015E 85E0 ldi R24,5
0160 85BD out 0x25,R24
0162 .dbline 67
0162 ; SEI();
0162 7894 sei
0164 .dbline -2
0164 L27:
0164 .dbline 0 ; func end
0164 0895 ret
0166 .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\software\MP3程序\Keyboard\key.c
0000 _keybuf::
0000 .blkb 1
0001 .dbsym e keybuf _keybuf c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -