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

📄 ps2key.s

📁 键盘的控制的运用
💻 S
字号:
	.module PS2KEY.C
	.area text(rom, con, rel)
	.dbfile E:\zh\avr\8515板\PS2KEY~1\PS2KEY.C
	.dbfunc e data _data fV
;            num -> R16
	.even
_data::
	.dbline -1
	.dbline 9
; //ps2 keyboard
; //clk=pd2,dat=pb3
; #include<io8515v.h>
; #include<macros.h>
; #define uchar unsigned char
; #define uint  unsigned int
; unsigned char KeyCode;          //键盘键值
; void data()
; {
	.dbline 11
;  uchar num;                     //位数
;  DDRD=0X00;
	clr R2
	out 0x11,R2
L2:
	.dbline 12
L3:
	.dbline 12
;  while((PIND|0XFB)==0XFF);      // 等待键盘把时钟第一次拉低
	in R24,0x10
	ori R24,251
	cpi R24,255
	breq L2
	.dbline 13
;  for(num=8;num!=0;num--)        // 把起始位算入
	ldi R16,8
	rjmp L8
L5:
	.dbline 14
;    {DDRD=0X00;
	.dbline 14
	clr R2
	out 0x11,R2
L9:
	.dbline 15
L10:
	.dbline 15
;     while((PIND|0XFB)!=0XFF);   // 等待一个有效的下跳沿
	in R24,0x10
	ori R24,251
	cpi R24,255
	brne L9
L12:
	.dbline 16
L13:
	.dbline 16
; 	while((PIND|0XFB)==0XFF);
	in R24,0x10
	ori R24,251
	cpi R24,255
	breq L12
	.dbline 17
;     KeyCode>>=1;                // 按照PS2格式,数据低位在前
	lds R2,_KeyCode
	lsr R2
	sts _KeyCode,R2
	.dbline 18
;     if((PINB|0XF7)==0XFF)
	in R24,0x16
	ori R24,247
	cpi R24,255
	brne L15
	.dbline 19
;     {
	.dbline 20
;       KeyCode|=0x80;          // 得到有效的数据位
	mov R24,R2
	ori R24,128
	sts _KeyCode,R24
	.dbline 21
;     }
L15:
	.dbline 22
L6:
	.dbline 13
	dec R16
L8:
	.dbline 13
	tst R16
	brne L5
	.dbline 23
;   }
;   DDRD=0X00; 
	clr R2
	out 0x11,R2
L17:
	.dbline 24
L18:
	.dbline 24
;   while((PIND|0XFB)!=0XFF);   
	in R24,0x10
	ori R24,251
	cpi R24,255
	brne L17
L20:
	.dbline 25
L21:
	.dbline 25
;   while((PIND|0XFB)==0XFF);  
	in R24,0x10
	ori R24,251
	cpi R24,255
	breq L20
L23:
	.dbline 26
L24:
	.dbline 26
;   while((PIND|0XFB)!=0XFF);   
	in R24,0x10
	ori R24,251
	cpi R24,255
	brne L23
L26:
	.dbline 27
L27:
	.dbline 27
;   while((PIND|0XFB)==0XFF);
	in R24,0x10
	ori R24,251
	cpi R24,255
	breq L26
L29:
	.dbline 28
L30:
	.dbline 28
;   while((PIND|0XFB)!=0XFF);
	in R24,0x10
	ori R24,251
	cpi R24,255
	brne L29
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r num 16 c
	.dbend
	.dbfunc e m8515_init _m8515_init fV
	.even
_m8515_init::
	.dbline -1
	.dbline 31
; }
; void m8515_init()
; {
	.dbline 32
;  DDRA=0XFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 33
;  PORTA=0X00;
	clr R2
	out 0x1b,R2
	.dbline 34
;  DDRB=0X00;
	out 0x17,R2
	.dbline 35
;  PORTB=0XFF;
	out 0x18,R24
	.dbline 36
;  DDRC=0X00;
	out 0x14,R2
	.dbline 37
;  PORTC=0XFF;
	out 0x15,R24
	.dbline 38
;  DDRD=0X04;  //clk=1
	ldi R24,4
	out 0x11,R24
	.dbline 39
;  PORTD=0XFF;
	ldi R24,255
	out 0x12,R24
	.dbline -2
L32:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 42
; }
; void main()
; {
	.dbline 43
;  m8515_init();
	rcall _m8515_init
	rjmp L35
L34:
	.dbline 45
;  while(1)
;   { 
	.dbline 46
;    data();
	rcall _data
	.dbline 47
;    if(KeyCode==0xe0) 
	lds R24,_KeyCode
	cpi R24,224
	brne L37
	.dbline 48
;    {data();}
	.dbline 48
	rcall _data
	.dbline 48
L37:
	.dbline 49
	lds R2,_KeyCode
	out 0x1b,R2
	.dbline 50
L35:
	.dbline 44
	rjmp L34
X0:
	.dbline -2
L33:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\zh\avr\8515板\PS2KEY~1\PS2KEY.C
_KeyCode::
	.blkb 1
	.dbsym e KeyCode _KeyCode c

⌨️ 快捷键说明

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