📄 ps2kb_uart.s
字号:
.module PS2KB_UART.c
.area lit(rom, con, rel)
_UnShifted::
.byte 28,'a
.byte 50,'b
.byte 33,'c
.byte 35,'d
.byte 36,'e
.byte 43,'f
.byte 52,'g
.byte 51,'h
.byte 'C,'i
.byte 59,'j
.byte 'B,'k
.byte 'K,'l
.byte 58,'m
.byte 49,'n
.byte 'D,'o
.byte 'M,'p
.byte 21,'q
.byte 45,'r
.byte 27,'s
.byte 44,'t
.byte 60,'u
.byte 42,'v
.byte 29,'w
.byte 34,'x
.byte 53,'y
.byte 26,'z
.byte 'E,48
.byte 22,49
.byte 30,50
.byte 38,51
.byte 37,52
.byte 46,53
.byte 54,54
.byte 61,55
.byte 62,56
.byte 'F,57
.byte 14,96
.byte 'N,45
.byte 'U,61
.byte 93,92
.byte 41,32
.byte 'T,91
.byte 91,93
.byte 'L,59
.byte 'R,39
.byte 'A,44
.byte 'I,46
.byte 'J,47
.byte 'q,46
.byte 'p,48
.byte 'i,49
.byte 'r,50
.byte 'z,51
.byte 'k,52
.byte 's,53
.byte 't,54
.byte 'l,55
.byte 'u,56
.byte 125,57
.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART/scancodes.h
.dbsym e UnShifted _UnShifted A[118:59:2]kc
_Shifted::
.byte 28,'A
.byte 50,'B
.byte 33,'C
.byte 35,'D
.byte 36,'E
.byte 43,'F
.byte 52,'G
.byte 51,'H
.byte 'C,'I
.byte 59,'J
.byte 'B,'K
.byte 'K,'L
.byte 58,'M
.byte 49,'N
.byte 'D,'O
.byte 'M,'P
.byte 21,'Q
.byte 45,'R
.byte 27,'S
.byte 44,'T
.byte 60,'U
.byte 42,'V
.byte 29,'W
.byte 34,'X
.byte 53,'Y
.byte 26,'Z
.byte 'E,41
.byte 22,33
.byte 30,64
.byte 38,35
.byte 37,36
.byte 46,37
.byte 54,94
.byte 61,38
.byte 62,42
.byte 'F,40
.byte 14,126
.byte 'N,95
.byte 'U,43
.byte 93,124
.byte 41,32
.byte 'T,123
.byte 91,125
.byte 'L,58
.byte 'R,34
.byte 'A,60
.byte 'I,62
.byte 'J,63
.byte 'q,46
.byte 'p,48
.byte 'i,49
.byte 'r,50
.byte 'z,51
.byte 'k,52
.byte 's,53
.byte 't,54
.byte 'l,55
.byte 'u,56
.byte 125,57
.dbsym e Shifted _Shifted A[118:59:2]kc
.area data(ram, con, rel)
.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART/scancodes.h
_keycode::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART/scancodes.h
.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
.dbsym e keycode _keycode c
_step::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
.dbsym e step _step c
_flag::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
.dbsym e flag _flag c
_Key_UP:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
.dbsym s Key_UP _Key_UP c
_Shift:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
.dbsym s Shift _Shift c
_BF:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
.dbsym s BF _BF c
.area text(rom, con, rel)
.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 53
; /****************************************Copyright (c)**************************************************
; ** ADEmbed Development Co.,LTD.
; ** http://www.adembed.com
; **--------------File Info-------------------------------------------------------------------------------
; ** File name: ps2KB_UART.c
; ** Last modified Date: 2008-12-13
; ** Last Version: 1.0
; ** Descriptions: ps2 test.
; **
; **------------------------------------------------------------------------------------------------------
; ** Created by: junbolu
; ** Created date: 2008-12-13
; ** Version: 1.0
; ** Descriptions:
; **
; **------------------------------------------------------------------------------------------------------
; ** Modified by:
; ** Modified date:
; ** Version:
; ** Descriptions:
; **
; **------------------------------------------------------------------------------------------------------
; **ICC-AVR application builder : 2008-12-13
; **Target : M16
; **Crystal: 7.3728Mhz
; **SCK ---- INT1
; **DATA ---- PD3
; **描述:读取PS2键盘编码,并且解码以后发送到串口显示。
; **
; **
; **涉及知识点:
; **
; **
; **
; *******************************************************************************************************/
;
; #include<iom16v.h>
; #include<macros.h>
; #include "scancodes.h"
;
; #define BAUD 9600
; #define BARR (7372800/(16*BAUD)-1)
;
;
; volatile unsigned char keycode=0;
; volatile unsigned char step=0;
; volatile char flag=0;
;
; static unsigned char Key_UP=0, Shift = 0;//Key_UP是键松开标识,Shift是Shift键按下标识
; static unsigned char BF = 0; //标识是否有字符被收到
;
; void port_init(void)
; {
.dbline 54
; DDRD = 0Xe7;
ldi R24,231
out 0x11,R24
.dbline 55
; PORTD = 0XFF;
ldi R24,255
out 0x12,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e UART_init _UART_init fV
.even
_UART_init::
.dbline -1
.dbline 60
;
; }
;
; void UART_init( void )
; {
.dbline 61
; UBRRH = (unsigned char)(BARR>>8);
clr R2
out 0x20,R2
.dbline 62
; UBRRL = (unsigned char)BARR;
ldi R24,47
out 0x9,R24
.dbline 63
; UCSRB = (1<<RXEN)|(1<<TXEN);
ldi R24,24
out 0xa,R24
.dbline 64
; UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
ldi R24,134
out 0x20,R24
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e uart_transmit _uart_transmit fV
; data -> R16
.even
_uart_transmit::
.dbline -1
.dbline 68
; }
;
; void uart_transmit(unsigned char data)
; {
L4:
.dbline 69
L5:
.dbline 69
; while(!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L4
.dbline 71
;
; UDR = data;
out 0xc,R16
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbsym r data 16 c
.dbend
.dbfunc e uart_trans_str _uart_trans_str fV
; s -> R20,R21
.even
_uart_trans_str::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 75
; }
;
; void uart_trans_str(unsigned char *s)
; {
xjmp L9
L8:
.dbline 77
.dbline 78
movw R30,R20
ldd R16,z+0
xcall _uart_transmit
.dbline 79
subi R20,255 ; offset = 1
sbci R21,255
.dbline 80
L9:
.dbline 76
; while(*s)
movw R30,R20
ldd R2,z+0
tst R2
brne L8
.dbline -2
L7:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r s 20 pc
.dbend
.area vector(rom, abs)
.org 8
jmp _int1_scr
.area text(rom, con, rel)
.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
.dbfunc e int1_scr _int1_scr fV
.even
_int1_scr::
st -y,R2
st -y,R24
st -y,R25
in R2,0x3f
st -y,R2
.dbline -1
.dbline 84
; {
; uart_transmit(*s);
; s++;
; }
; }
; #pragma interrupt_handler int1_scr:3
; void int1_scr(void)
; {
.dbline 85
; step++;
lds R24,_step
subi R24,255 ; addi 1
sts _step,R24
.dbline 87
;
; if(step==1)
lds R24,_step
cpi R24,1
brne L12
.dbline 88
; {
.dbline 89
; if((PIND&0X10)==1)
in R24,0x10
andi R24,16
cpi R24,1
brne L13
.dbline 90
; {
.dbline 91
; step = 0;
clr R2
sts _step,R2
.dbline 92
; }
.dbline 93
; }
xjmp L13
L12:
.dbline 94
; else if((step>=2)&&(step<=9))
lds R24,_step
cpi R24,2
brlo L16
ldi R24,9
lds R2,_step
cp R24,R2
brlo L16
.dbline 95
; {
.dbline 96
; keycode>>=1;
lds R2,_keycode
lsr R2
sts _keycode,R2
.dbline 98
;
; if((PIND&0X10)==0)
sbic 0x10,4
rjmp L18
.dbline 99
; {
.dbline 100
; keycode|=0x00;
lds R2,_keycode
sts _keycode,R2
.dbline 101
; }
xjmp L17
L18:
.dbline 103
; else
; {
.dbline 104
; keycode|=0x80;
lds R24,_keycode
ori R24,128
sts _keycode,R24
.dbline 105
; }
.dbline 106
; }
xjmp L17
L16:
.dbline 107
; else if(step == 11)
lds R24,_step
cpi R24,11
brne L20
.dbline 108
; {
.dbline 109
; flag = 1;
ldi R24,1
sts _flag,R24
.dbline 110
; step = 0;
clr R2
sts _step,R2
.dbline 111
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -