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

📄 main.lis

📁 AVR单片机解码普通PC键盘码值
💻 LIS
字号:
                        .module main.c
                        .area data(ram, con, rel)
 0000           _KB_HitFlag::
 0000                   .blkb 1
                        .area idata
 0000 00                .byte 0
                        .area data(ram, con, rel)
 0001                   .dbfile D:\AVRchengcu\PS2--AVR\ps2\main.c
 0001                   .dbsym e KB_HitFlag _KB_HitFlag c
 0001           _KB_UpFlag::
 0001                   .blkb 1
                        .area idata
 0001 00                .byte 0
                        .area data(ram, con, rel)
 0002                   .dbfile D:\AVRchengcu\PS2--AVR\ps2\main.c
 0002                   .dbsym e KB_UpFlag _KB_UpFlag c
 0002           _KB_Buf::
 0002                   .blkb 1
                        .area idata
 0002 00                .byte 0
                        .area data(ram, con, rel)
 0003                   .dbfile D:\AVRchengcu\PS2--AVR\ps2\main.c
 0003                   .dbsym e KB_Buf _KB_Buf c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\AVRchengcu\PS2--AVR\ps2\main.c
 0000                   .dbfunc e init_devices _init_devices fV
                        .even
 0000           _init_devices::
 0000                   .dbline -1
 0000                   .dbline 22
 0000           ; /******************************************************************************
 0000           ; //程序功能解码PC键盘,然后把键盘码值通过串口发送到串口显示
 0000           ; //晶振频率:16 MHZ
 0000           ; //单片机类型:maget 16
 0000           ; //编写日期:2009年3月13日      谢巍
 0000           ; *******************************************************************************/
 0000           ; 
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; #define IRsignal    (PINA&BIT(0))            //检测一个端口电平输入情况就要这样定义了
 0000           ; #define DIR_I       DDRA&=~BIT(0)  
 0000           ; #define DIR_O       DDRA|=BIT(0)
 0000           ; 
 0000           ; //定义全局变量
 0000           ; unsigned char    KB_HitFlag = 0;                  //按键标志
 0000           ; unsigned char    KB_UpFlag = 0;                   //抬起标志
 0000           ; unsigned char    KB_Buf=0;    //键盘缓冲区
 0000           ; 
 0000           ; //外部中断初始化函数
 0000           ; void init_devices(void)
 0000           ; {
 0000                   .dbline 23
 0000           ;  MCUCR = 0x02;    //INT1 的下降沿产生异步中断请求
 0000 82E0              ldi R24,2
 0002 85BF              out 0x35,R24
 0004                   .dbline 24
 0004           ;  GICR  = 0x40;    //INT1中断使能
 0004 80E4              ldi R24,64
 0006 8BBF              out 0x3b,R24
 0008                   .dbline 25
 0008           ;  TIMSK = 0x00;    //timer interrupt sources
 0008 2224              clr R2
 000A 29BE              out 0x39,R2
 000C                   .dbline 26
 000C           ;  SEI();           //打开外部所有中断    两种表达方式是相同的
 000C 7894              sei
 000E                   .dbline -2
 000E                   .dbline 27
 000E           ; }
 000E           L1:
 000E                   .dbline 0 ; func end
 000E 0895              ret
 0010                   .dbend
                        .area vector(rom, abs)
                        .org 4
 0004 0C940800          jmp _int1_isr
                        .area text(rom, con, rel)
 0010                   .dbfile D:\AVRchengcu\PS2--AVR\ps2\main.c
                        .area data(ram, con, rel)
 0003                   .dbfile D:\AVRchengcu\PS2--AVR\ps2\main.c
 0003           L3:
 0003                   .blkb 1
                        .area idata
 0003 00                .byte 0
                        .area data(ram, con, rel)
 0004                   .dbfile D:\AVRchengcu\PS2--AVR\ps2\main.c
 0004           L4:
 0004                   .blkb 1
                        .area idata
 0004 00                .byte 0
                        .area data(ram, con, rel)
 0005                   .dbfile D:\AVRchengcu\PS2--AVR\ps2\main.c
                        .area text(rom, con, rel)
 0010                   .dbfile D:\AVRchengcu\PS2--AVR\ps2\main.c
 0010                   .dbfunc e int1_isr _int1_isr fV
 0010                   .dbsym s k L4 c
 0010                   .dbsym s cnt L3 c
                        .even
 0010           _int1_isr::
 0010 0E940000          xcall push_lset
 0014                   .dbline -1
 0014                   .dbline 32
 0014           ; 
 0014           ; //外部中断1中断服务函数
 0014           ; #pragma interrupt_handler int1_isr:2
 0014           ; void int1_isr(void)
 0014           ; {
 0014                   .dbline 35
 0014           ;       static unsigned char cnt = 0;
 0014           ;       static unsigned char k=0;
 0014           ;       if ( cnt == 0 )             //起始位
 0014 20900300          lds R2,L3
 0018 2220              tst R2
 001A 09F4              brne L5
 001C                   .dbline 36
 001C           ;       {;
 001C                   .dbline 36
 001C                   .dbline 37
 001C           ;       }
 001C 12C0              xjmp L6
 001E           L5:
 001E                   .dbline 38
 001E           ;       else if ( cnt <= 8 )    //数据位
 001E 88E0              ldi R24,8
 0020 20900300          lds R2,L3
 0024 8215              cp R24,R2
 0026 68F0              brlo L7
 0028                   .dbline 39
 0028           ;       {
 0028                   .dbline 40
 0028           ;               k >>= 1;
 0028 20900400          lds R2,L4
 002C 2694              lsr R2
 002E 20920400          sts L4,R2
 0032                   .dbline 41
 0032           ;               if (IRsignal==BIT(0)) 
 0032 89B3              in R24,0x19
 0034 8170              andi R24,1
 0036 8130              cpi R24,1
 0038 21F4              brne L8
 003A                   .dbline 42
 003A           ;                     k|= 0x80;
 003A 822D              mov R24,R2
 003C 8068              ori R24,128
 003E 80930400          sts L4,R24
 0042                   .dbline 43
 0042           ;       }
 0042           L7:
 0042                   .dbline 45
 0042           ;       else    //校验位和停止位
 0042           ;       {;
 0042                   .dbline 45
 0042                   .dbline 46
 0042           ;       }
 0042           L8:
 0042           L6:
 0042                   .dbline 47
 0042           ;       cnt++;
 0042 80910300          lds R24,L3
 0046 8F5F              subi R24,255    ; addi 1
 0048 80930300          sts L3,R24
 004C                   .dbline 48
 004C           ;       if ( cnt >= 11 )            //一帧数据接收完毕
 004C 8B30              cpi R24,11
 004E 10F1              brlo L11
 0050                   .dbline 49
 0050           ;       {
 0050                   .dbline 50
 0050           ;               cnt = 0;
 0050 2224              clr R2
 0052 20920300          sts L3,R2
 0056                   .dbline 51
 0056           ;               if ( k == 0xF0 )        //抬起标志
 0056 80910400          lds R24,L4
 005A 803F              cpi R24,240
 005C 21F4              brne L13
 005E                   .dbline 52
 005E           ;               {
 005E                   .dbline 53
 005E           ;                       KB_UpFlag = 1;
 005E 81E0              ldi R24,1
 0060 80930100          sts _KB_UpFlag,R24
 0064                   .dbline 54
 0064           ;               }
 0064 17C0              xjmp L14
 0066           L13:
 0066                   .dbline 56
 0066           ;               else
 0066           ;               {
 0066                   .dbline 57
 0066           ;                       if ( KB_UpFlag )
 0066 20900100          lds R2,_KB_UpFlag
 006A 2220              tst R2
 006C 21F0              breq L15
 006E                   .dbline 58
 006E           ;                       {
 006E                   .dbline 59
 006E           ;                               KB_UpFlag = 0;
 006E 2224              clr R2
 0070 20920100          sts _KB_UpFlag,R2
 0074                   .dbline 60
 0074           ;                       }
 0074 0FC0              xjmp L16
 0076           L15:
 0076                   .dbline 62
 0076           ;                       else
 0076           ;                       {
 0076                   .dbline 63
 0076           ;                               KB_Buf = k;
 0076 20900400          lds R2,L4
 007A 20920200          sts _KB_Buf,R2
 007E                   .dbline 64
 007E           ;                               k=0;
 007E 2224              clr R2
 0080 20920400          sts L4,R2
 0084                   .dbline 65
 0084           ;                               KB_HitFlag = 1;
 0084 81E0              ldi R24,1
 0086 80930000          sts _KB_HitFlag,R24
 008A                   .dbline 67
 008A           ; 
 008A           ;                 put_c(KB_Buf);
 008A 00910200          lds R16,_KB_Buf
 008E 1127              clr R17
 0090 0E940000          xcall _put_c
 0094                   .dbline 68
 0094           ;               }
 0094           L16:
 0094                   .dbline 69
 0094           ;               }
 0094           L14:
 0094                   .dbline 70
 0094           L11:
 0094                   .dbline -2
 0094                   .dbline 71
 0094           ;       }        
 0094           ; }
 0094           L2:
 0094 0E940000          xcall pop_lset
 0098                   .dbline 0 ; func end
 0098 1895              reti
 009A                   .dbend
 009A                   .dbfunc e main _main fV
                        .even
 009A           _main::
 009A                   .dbline -1
 009A                   .dbline 74
 009A           ; 
 009A           ; void main()
 009A           ; {
 009A                   .dbline 75
 009A           ;        init_devices();
 009A B2DF              xcall _init_devices
 009C                   .dbline 76
 009C           ;        init_USART(); 
 009C 0E940000          xcall _init_USART
 00A0                   .dbline 77
 00A0           ;        KB_Buf=0;
 00A0 2224              clr R2
 00A2 20920200          sts _KB_Buf,R2
 00A6           L18:
 00A6                   .dbline 79
 00A6                   .dbline 80
 00A6                   .dbline 81
 00A6           L19:
 00A6                   .dbline 78
 00A6 FFCF              xjmp L18
 00A8           X0:
 00A8                   .dbline -2
 00A8                   .dbline 83
 00A8           ;        while(1)
 00A8           ;        {
 00A8           ;           ;
 00A8           ;        }
 00A8           ;       
 00A8           ; }
 00A8           L17:
 00A8                   .dbline 0 ; func end
 00A8 0895              ret
 00AA                   .dbend

⌨️ 快捷键说明

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