📄 ps2_key.s
字号:
.module ps2_key.c
.area data(ram, con, rel)
_keycode::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.0\ps2_key.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.0\ps2_key.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.0\ps2_key.c
.dbsym e flag _flag c
.area text(rom, con, rel)
.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.0\ps2_key.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 51
; /****************************************Copyright (c)**************************************************
; ** ADEmbed Development Co.,LTD.
; ** http://www.adembed.com
; **--------------File Info-------------------------------------------------------------------------------
; ** File name: ps2_key.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>
;
; #define BAUD 9600
; #define BARR (7372800/(16*BAUD)-1)
;
; volatile unsigned char keycode=0;
; volatile unsigned char step=0;
; volatile char flag=0;
;
;
;
; void port_init(void)
; {
.dbline 52
; DDRD = 0Xe7;
ldi R24,231
out 0x11,R24
.dbline 53
; 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 57
; }
;
; void UART_init( void )
; {
.dbline 58
; UBRRH = (unsigned char)(BARR>>8);
clr R2
out 0x20,R2
.dbline 59
; UBRRL = (unsigned char)BARR;
ldi R24,47
out 0x9,R24
.dbline 60
; UCSRB = (1<<RXEN)|(1<<TXEN);
ldi R24,24
out 0xa,R24
.dbline 61
; 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 65
; }
;
; void uart_transmit(unsigned char data)
; {
L4:
.dbline 66
L5:
.dbline 66
; while(!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L4
.dbline 68
;
; UDR = data;
out 0xc,R16
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbsym r data 16 c
.dbend
.area vector(rom, abs)
.org 8
jmp _int1_scr
.area text(rom, con, rel)
.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.0\ps2_key.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 75
;
; }
;
;
; #pragma interrupt_handler int1_scr:3
; void int1_scr(void)
; {
.dbline 76
; step++;
lds R24,_step
subi R24,255 ; addi 1
sts _step,R24
.dbline 78
;
; if(step==1)
lds R24,_step
cpi R24,1
brne L8
.dbline 79
; {
.dbline 80
; if((PIND&0X10)==1)
in R24,0x10
andi R24,16
cpi R24,1
brne L9
.dbline 81
; {
.dbline 82
; step = 0;
clr R2
sts _step,R2
.dbline 83
; }
.dbline 84
; }
xjmp L9
L8:
.dbline 86
;
; else if((step>=2)&&(step<=9))
lds R24,_step
cpi R24,2
brlo L12
ldi R24,9
lds R2,_step
cp R24,R2
brlo L12
.dbline 87
; {
.dbline 89
;
; keycode>>=1;
lds R2,_keycode
lsr R2
sts _keycode,R2
.dbline 91
;
; if((PIND&0X10)==0)
sbic 0x10,4
rjmp L14
.dbline 92
; {
.dbline 93
; keycode|=0x00;
lds R2,_keycode
sts _keycode,R2
.dbline 94
; }
xjmp L13
L14:
.dbline 96
; else
; {
.dbline 97
; keycode|=0x80;
lds R24,_keycode
ori R24,128
sts _keycode,R24
.dbline 98
; }
.dbline 100
;
; }
xjmp L13
L12:
.dbline 101
; else if(step == 11)
lds R24,_step
cpi R24,11
brne L16
.dbline 102
; {
.dbline 103
; flag = 1;
ldi R24,1
sts _flag,R24
.dbline 104
; step = 0;
clr R2
sts _step,R2
.dbline 106
;
; }
L16:
L13:
L9:
.dbline -2
L7:
ld R2,y+
out 0x3f,R2
ld R25,y+
ld R24,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 112
;
;
; }
;
; void main(void)
; {
.dbline 114
;
; CLI(); //disable all interrupts
cli
.dbline 115
; port_init();
xcall _port_init
.dbline 116
; UART_init();
xcall _UART_init
.dbline 117
; MCUCR = 0x08;
ldi R24,8
out 0x35,R24
.dbline 118
; GICR = 0x80;
ldi R24,128
out 0x3b,R24
.dbline 119
; SEI();
sei
xjmp L20
L19:
.dbline 122
;
; while(1)
; {
.dbline 123
; if(flag ==1)
lds R24,_flag
cpi R24,1
brne L22
.dbline 124
; {
.dbline 125
; uart_transmit(keycode);
lds R16,_keycode
xcall _uart_transmit
.dbline 127
;
; keycode = 0;
clr R2
sts _keycode,R2
.dbline 129
;
; flag = 0;
sts _flag,R2
.dbline 130
; }
L22:
.dbline 131
L20:
.dbline 121
xjmp L19
X0:
.dbline -2
L18:
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -