📄 ps2key.lis
字号:
.module PS2KEY.C
.area text(rom, con, rel)
0000 .dbfile E:\zh\avr\8515板\PS2KEY~1\PS2KEY.C
0000 .dbfunc e data _data fV
0000 ; num -> R16
.even
0000 _data::
0000 .dbline -1
0000 .dbline 9
0000 ; //ps2 keyboard
0000 ; //clk=pd2,dat=pb3
0000 ; #include<io8515v.h>
0000 ; #include<macros.h>
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ; unsigned char KeyCode; //键盘键值
0000 ; void data()
0000 ; {
0000 .dbline 11
0000 ; uchar num; //位数
0000 ; DDRD=0X00;
0000 2224 clr R2
0002 21BA out 0x11,R2
0004 L2:
0004 .dbline 12
0004 L3:
0004 .dbline 12
0004 ; while((PIND|0XFB)==0XFF); // 等待键盘把时钟第一次拉低
0004 80B3 in R24,0x10
0006 8B6F ori R24,251
0008 8F3F cpi R24,255
000A E1F3 breq L2
000C .dbline 13
000C ; for(num=8;num!=0;num--) // 把起始位算入
000C 08E0 ldi R16,8
000E 18C0 rjmp L8
0010 L5:
0010 .dbline 14
0010 ; {DDRD=0X00;
0010 .dbline 14
0010 2224 clr R2
0012 21BA out 0x11,R2
0014 L9:
0014 .dbline 15
0014 L10:
0014 .dbline 15
0014 ; while((PIND|0XFB)!=0XFF); // 等待一个有效的下跳沿
0014 80B3 in R24,0x10
0016 8B6F ori R24,251
0018 8F3F cpi R24,255
001A E1F7 brne L9
001C L12:
001C .dbline 16
001C L13:
001C .dbline 16
001C ; while((PIND|0XFB)==0XFF);
001C 80B3 in R24,0x10
001E 8B6F ori R24,251
0020 8F3F cpi R24,255
0022 E1F3 breq L12
0024 .dbline 17
0024 ; KeyCode>>=1; // 按照PS2格式,数据低位在前
0024 20900000 lds R2,_KeyCode
0028 2694 lsr R2
002A 20920000 sts _KeyCode,R2
002E .dbline 18
002E ; if((PINB|0XF7)==0XFF)
002E 86B3 in R24,0x16
0030 876F ori R24,247
0032 8F3F cpi R24,255
0034 21F4 brne L15
0036 .dbline 19
0036 ; {
0036 .dbline 20
0036 ; KeyCode|=0x80; // 得到有效的数据位
0036 822D mov R24,R2
0038 8068 ori R24,128
003A 80930000 sts _KeyCode,R24
003E .dbline 21
003E ; }
003E L15:
003E .dbline 22
003E L6:
003E .dbline 13
003E 0A95 dec R16
0040 L8:
0040 .dbline 13
0040 0023 tst R16
0042 31F7 brne L5
0044 .dbline 23
0044 ; }
0044 ; DDRD=0X00;
0044 2224 clr R2
0046 21BA out 0x11,R2
0048 L17:
0048 .dbline 24
0048 L18:
0048 .dbline 24
0048 ; while((PIND|0XFB)!=0XFF);
0048 80B3 in R24,0x10
004A 8B6F ori R24,251
004C 8F3F cpi R24,255
004E E1F7 brne L17
0050 L20:
0050 .dbline 25
0050 L21:
0050 .dbline 25
0050 ; while((PIND|0XFB)==0XFF);
0050 80B3 in R24,0x10
0052 8B6F ori R24,251
0054 8F3F cpi R24,255
0056 E1F3 breq L20
0058 L23:
0058 .dbline 26
0058 L24:
0058 .dbline 26
0058 ; while((PIND|0XFB)!=0XFF);
0058 80B3 in R24,0x10
005A 8B6F ori R24,251
005C 8F3F cpi R24,255
005E E1F7 brne L23
0060 L26:
0060 .dbline 27
0060 L27:
0060 .dbline 27
0060 ; while((PIND|0XFB)==0XFF);
0060 80B3 in R24,0x10
0062 8B6F ori R24,251
0064 8F3F cpi R24,255
0066 E1F3 breq L26
0068 L29:
0068 .dbline 28
0068 L30:
0068 .dbline 28
0068 ; while((PIND|0XFB)!=0XFF);
0068 80B3 in R24,0x10
006A 8B6F ori R24,251
006C 8F3F cpi R24,255
006E E1F7 brne L29
0070 .dbline -2
0070 L1:
0070 .dbline 0 ; func end
0070 0895 ret
0072 .dbsym r num 16 c
0072 .dbend
0072 .dbfunc e m8515_init _m8515_init fV
.even
0072 _m8515_init::
0072 .dbline -1
0072 .dbline 31
0072 ; }
0072 ; void m8515_init()
0072 ; {
0072 .dbline 32
0072 ; DDRA=0XFF;
0072 8FEF ldi R24,255
0074 8ABB out 0x1a,R24
0076 .dbline 33
0076 ; PORTA=0X00;
0076 2224 clr R2
0078 2BBA out 0x1b,R2
007A .dbline 34
007A ; DDRB=0X00;
007A 27BA out 0x17,R2
007C .dbline 35
007C ; PORTB=0XFF;
007C 88BB out 0x18,R24
007E .dbline 36
007E ; DDRC=0X00;
007E 24BA out 0x14,R2
0080 .dbline 37
0080 ; PORTC=0XFF;
0080 85BB out 0x15,R24
0082 .dbline 38
0082 ; DDRD=0X04; //clk=1
0082 84E0 ldi R24,4
0084 81BB out 0x11,R24
0086 .dbline 39
0086 ; PORTD=0XFF;
0086 8FEF ldi R24,255
0088 82BB out 0x12,R24
008A .dbline -2
008A L32:
008A .dbline 0 ; func end
008A 0895 ret
008C .dbend
008C .dbfunc e main _main fV
.even
008C _main::
008C .dbline -1
008C .dbline 42
008C ; }
008C ; void main()
008C ; {
008C .dbline 43
008C ; m8515_init();
008C F2DF rcall _m8515_init
008E 09C0 rjmp L35
0090 L34:
0090 .dbline 45
0090 ; while(1)
0090 ; {
0090 .dbline 46
0090 ; data();
0090 B7DF rcall _data
0092 .dbline 47
0092 ; if(KeyCode==0xe0)
0092 80910000 lds R24,_KeyCode
0096 803E cpi R24,224
0098 09F4 brne L37
009A .dbline 48
009A ; {data();}
009A .dbline 48
009A B2DF rcall _data
009C .dbline 48
009C L37:
009C .dbline 49
009C 20900000 lds R2,_KeyCode
00A0 2BBA out 0x1b,R2
00A2 .dbline 50
00A2 L35:
00A2 .dbline 44
00A2 F6CF rjmp L34
00A4 X0:
00A4 .dbline -2
00A4 L33:
00A4 .dbline 0 ; func end
00A4 0895 ret
00A6 .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\zh\avr\8515板\PS2KEY~1\PS2KEY.C
0000 _KeyCode::
0000 .blkb 1
0001 .dbsym e KeyCode _KeyCode c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -