📄 ps2_key.lis
字号:
.module ps2_key.c
.area data(ram, con, rel)
0000 _keycode::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.0\ps2_key.c
0001 .dbsym e keycode _keycode c
0001 _step::
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.0\ps2_key.c
0002 .dbsym e step _step c
0002 _flag::
0002 .blkb 1
.area idata
0002 00 .byte 0
.area data(ram, con, rel)
0003 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.0\ps2_key.c
0003 .dbsym e flag _flag c
.area text(rom, con, rel)
0000 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.0\ps2_key.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 51
0000 ; /****************************************Copyright (c)**************************************************
0000 ; ** ADEmbed Development Co.,LTD.
0000 ; ** http://www.adembed.com
0000 ; **--------------File Info-------------------------------------------------------------------------------
0000 ; ** File name: ps2_key.c
0000 ; ** Last modified Date: 2008-12-13
0000 ; ** Last Version: 1.0
0000 ; ** Descriptions: ps2 test.
0000 ; **
0000 ; **------------------------------------------------------------------------------------------------------
0000 ; ** Created by: junbolu
0000 ; ** Created date: 2008-12-13
0000 ; ** Version: 1.0
0000 ; ** Descriptions:
0000 ; **
0000 ; **------------------------------------------------------------------------------------------------------
0000 ; ** Modified by:
0000 ; ** Modified date:
0000 ; ** Version:
0000 ; ** Descriptions:
0000 ; **
0000 ; **------------------------------------------------------------------------------------------------------
0000 ; **ICC-AVR application builder : 2008-12-13
0000 ; **Target : M16
0000 ; **Crystal: 7.3728Mhz
0000 ; **SCK ---- INT1
0000 ; **DATA ---- PD3
0000 ; **描述:读取PS2键盘编码,不经过任何处理直接发送到串口显示。
0000 ; **
0000 ; **
0000 ; **涉及知识点:
0000 ; **
0000 ; **
0000 ; **
0000 ; *******************************************************************************************************/
0000 ;
0000 ;
0000 ; #include<iom16v.h>
0000 ; #include<macros.h>
0000 ;
0000 ; #define BAUD 9600
0000 ; #define BARR (7372800/(16*BAUD)-1)
0000 ;
0000 ; volatile unsigned char keycode=0;
0000 ; volatile unsigned char step=0;
0000 ; volatile char flag=0;
0000 ;
0000 ;
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 52
0000 ; DDRD = 0Xe7;
0000 87EE ldi R24,231
0002 81BB out 0x11,R24
0004 .dbline 53
0004 ; PORTD = 0XFF;
0004 8FEF ldi R24,255
0006 82BB out 0x12,R24
0008 .dbline -2
0008 L1:
0008 .dbline 0 ; func end
0008 0895 ret
000A .dbend
000A .dbfunc e UART_init _UART_init fV
.even
000A _UART_init::
000A .dbline -1
000A .dbline 57
000A ; }
000A ;
000A ; void UART_init( void )
000A ; {
000A .dbline 58
000A ; UBRRH = (unsigned char)(BARR>>8);
000A 2224 clr R2
000C 20BC out 0x20,R2
000E .dbline 59
000E ; UBRRL = (unsigned char)BARR;
000E 8FE2 ldi R24,47
0010 89B9 out 0x9,R24
0012 .dbline 60
0012 ; UCSRB = (1<<RXEN)|(1<<TXEN);
0012 88E1 ldi R24,24
0014 8AB9 out 0xa,R24
0016 .dbline 61
0016 ; UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
0016 86E8 ldi R24,134
0018 80BD out 0x20,R24
001A .dbline -2
001A L2:
001A .dbline 0 ; func end
001A 0895 ret
001C .dbend
001C .dbfunc e uart_transmit _uart_transmit fV
001C ; data -> R16
.even
001C _uart_transmit::
001C .dbline -1
001C .dbline 65
001C ; }
001C ;
001C ; void uart_transmit(unsigned char data)
001C ; {
001C L4:
001C .dbline 66
001C L5:
001C .dbline 66
001C ; while(!(UCSRA&(1<<UDRE)));
001C 5D9B sbis 0xb,5
001E FECF rjmp L4
0020 .dbline 68
0020 ;
0020 ; UDR = data;
0020 0CB9 out 0xc,R16
0022 .dbline -2
0022 L3:
0022 .dbline 0 ; func end
0022 0895 ret
0024 .dbsym r data 16 c
0024 .dbend
.area vector(rom, abs)
.org 8
0008 0C941200 jmp _int1_scr
.area text(rom, con, rel)
0024 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.0\ps2_key.c
0024 .dbfunc e int1_scr _int1_scr fV
.even
0024 _int1_scr::
0024 2A92 st -y,R2
0026 8A93 st -y,R24
0028 9A93 st -y,R25
002A 2FB6 in R2,0x3f
002C 2A92 st -y,R2
002E .dbline -1
002E .dbline 75
002E ;
002E ; }
002E ;
002E ;
002E ; #pragma interrupt_handler int1_scr:3
002E ; void int1_scr(void)
002E ; {
002E .dbline 76
002E ; step++;
002E 80910100 lds R24,_step
0032 8F5F subi R24,255 ; addi 1
0034 80930100 sts _step,R24
0038 .dbline 78
0038 ;
0038 ; if(step==1)
0038 80910100 lds R24,_step
003C 8130 cpi R24,1
003E 41F4 brne L8
0040 .dbline 79
0040 ; {
0040 .dbline 80
0040 ; if((PIND&0X10)==1)
0040 80B3 in R24,0x10
0042 8071 andi R24,16
0044 8130 cpi R24,1
0046 49F5 brne L9
0048 .dbline 81
0048 ; {
0048 .dbline 82
0048 ; step = 0;
0048 2224 clr R2
004A 20920100 sts _step,R2
004E .dbline 83
004E ; }
004E .dbline 84
004E ; }
004E 25C0 xjmp L9
0050 L8:
0050 .dbline 86
0050 ;
0050 ; else if((step>=2)&&(step<=9))
0050 80910100 lds R24,_step
0054 8230 cpi R24,2
0056 B8F0 brlo L12
0058 89E0 ldi R24,9
005A 20900100 lds R2,_step
005E 8215 cp R24,R2
0060 90F0 brlo L12
0062 .dbline 87
0062 ; {
0062 .dbline 89
0062 ;
0062 ; keycode>>=1;
0062 20900000 lds R2,_keycode
0066 2694 lsr R2
0068 20920000 sts _keycode,R2
006C .dbline 91
006C ;
006C ; if((PIND&0X10)==0)
006C 8499 sbic 0x10,4
006E 05C0 rjmp L14
0070 .dbline 92
0070 ; {
0070 .dbline 93
0070 ; keycode|=0x00;
0070 20900000 lds R2,_keycode
0074 20920000 sts _keycode,R2
0078 .dbline 94
0078 ; }
0078 10C0 xjmp L13
007A L14:
007A .dbline 96
007A ; else
007A ; {
007A .dbline 97
007A ; keycode|=0x80;
007A 80910000 lds R24,_keycode
007E 8068 ori R24,128
0080 80930000 sts _keycode,R24
0084 .dbline 98
0084 ; }
0084 .dbline 100
0084 ;
0084 ; }
0084 0AC0 xjmp L13
0086 L12:
0086 .dbline 101
0086 ; else if(step == 11)
0086 80910100 lds R24,_step
008A 8B30 cpi R24,11
008C 31F4 brne L16
008E .dbline 102
008E ; {
008E .dbline 103
008E ; flag = 1;
008E 81E0 ldi R24,1
0090 80930200 sts _flag,R24
0094 .dbline 104
0094 ; step = 0;
0094 2224 clr R2
0096 20920100 sts _step,R2
009A .dbline 106
009A ;
009A ; }
009A L16:
009A L13:
009A L9:
009A .dbline -2
009A L7:
009A 2990 ld R2,y+
009C 2FBE out 0x3f,R2
009E 9991 ld R25,y+
00A0 8991 ld R24,y+
00A2 2990 ld R2,y+
00A4 .dbline 0 ; func end
00A4 1895 reti
00A6 .dbend
00A6 .dbfunc e main _main fV
.even
00A6 _main::
00A6 .dbline -1
00A6 .dbline 112
00A6 ;
00A6 ;
00A6 ; }
00A6 ;
00A6 ; void main(void)
00A6 ; {
00A6 .dbline 114
00A6 ;
00A6 ; CLI(); //disable all interrupts
00A6 F894 cli
00A8 .dbline 115
00A8 ; port_init();
00A8 ABDF xcall _port_init
00AA .dbline 116
00AA ; UART_init();
00AA AFDF xcall _UART_init
00AC .dbline 117
00AC ; MCUCR = 0x08;
00AC 88E0 ldi R24,8
00AE 85BF out 0x35,R24
00B0 .dbline 118
00B0 ; GICR = 0x80;
00B0 80E8 ldi R24,128
00B2 8BBF out 0x3b,R24
00B4 .dbline 119
00B4 ; SEI();
00B4 7894 sei
00B6 0CC0 xjmp L20
00B8 L19:
00B8 .dbline 122
00B8 ;
00B8 ; while(1)
00B8 ; {
00B8 .dbline 123
00B8 ; if(flag ==1)
00B8 80910200 lds R24,_flag
00BC 8130 cpi R24,1
00BE 41F4 brne L22
00C0 .dbline 124
00C0 ; {
00C0 .dbline 125
00C0 ; uart_transmit(keycode);
00C0 00910000 lds R16,_keycode
00C4 ABDF xcall _uart_transmit
00C6 .dbline 127
00C6 ;
00C6 ; keycode = 0;
00C6 2224 clr R2
00C8 20920000 sts _keycode,R2
00CC .dbline 129
00CC ;
00CC ; flag = 0;
00CC 20920200 sts _flag,R2
00D0 .dbline 130
00D0 ; }
00D0 L22:
00D0 .dbline 131
00D0 L20:
00D0 .dbline 121
00D0 F3CF xjmp L19
00D2 X0:
00D2 .dbline -2
00D2 L18:
00D2 .dbline 0 ; func end
00D2 0895 ret
00D4 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -