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

📄 ps2_key.lis

📁 meg16 的所有功能实例
💻 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 + -