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

📄 kb.lst

📁 ps/2键盘程序 采用第2套编码方式
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  KB                                                                   12/03/2005 20:16:44 PAGE     1


MACRO ASSEMBLER A51 V7.10
OBJECT MODULE PLACED IN KB.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE KB.ASM SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ;晶振: 11.0592
  0090                 2     RED_LED         EQU P1.0
  0091                 3     GREEN_LED       EQU P1.1
                       4     
  00B3                 5     KEY_CLOCK       EQU P3.3
  00B4                 6     KEY_DATA        EQU P3.4
                       7     
  0014                 8     DLY20           EQU 20;14H;17
  001E                 9     DLY30           EQU 30;1EH;27
  0028                10     DLY40           EQU 40;28H;36
  0032                11     DLY50           EQU 50;32H;45
                      12     
0000                  13             org     0000H
0000 020050           14             ljmp    start
0050                  15             org     0050H
0050                  16     start:
0050 758130           17             mov     sp,#0030H
0053 7590FF           18             mov     p1,#0FFH
0056 75A0FF           19             mov     p2,#0FFH
0059 79FF             20             mov     r1,#0FFH
005B 7BFF             21     l1:     mov     r3,#0FFH
005D DBFE             22             djnz    r3,$
005F D9FA             23             djnz    r1,l1
                      24     
0061 D2B3             25             setb    KEY_CLOCK
0063 D2B4             26             setb    KEY_DATA
0065                  27     loop:
0065 D290             28             setb    RED_LED
0067 C291             29             clr     GREEN_LED
0069                  30     key0:
0069 30A011           31             jnb     P2.0,key1
006C 30A112           32             jnb     P2.1,key2
006F 30A213           33             jnb     P2.2,key3
0072 30A314           34             jnb     P2.3,key4
0075 30A415           35             jnb     P2.4,key5
0078 30A516           36             jnb     P2.5,key6
007B 80EC             37             jmp     key0;
007D                  38     key1:
007D 7C16             39             mov     r4,#16H ;1
007F 8012             40             jmp     key
0081                  41     key2:
0081 7C1E             42             mov     r4,#1EH ;2
0083 800E             43             jmp     key
0085                  44     key3:
0085 7C26             45             mov     r4,#26H ;3
0087 800A             46             jmp     key
0089                  47     key4:
0089 7C25             48             mov     r4,#25H ;4
008B 8006             49             jmp     key
008D                  50     key5:
008D 7C2E             51             mov     r4,#2EH ;5
008F 8002             52             jmp     key
0091                  53     key6:
0091 7C36             54             mov     r4,#36H ;6
0093                  55     key:
0093 D291             56             setb    GREEN_LED
0095 C290             57             clr     RED_LED
0097                  58     loopa1:
A51 MACRO ASSEMBLER  KB                                                                   12/03/2005 20:16:44 PAGE     2

0097 30B3FD           59             jnb     KEY_CLOCK,$     ;1. 等待时钟转为高电平
009A 7932             60             mov     r1,#DLY50       ;2. 延时 50us
009C D9FE             61             djnz    r1,$            ;        50us*11.0592/12-1
009E 30B3F6           62             jnb     KEY_CLOCK,loopa1;3. 不是高电平的话,回到第一步
00A1 30B4C1           63             jnb     KEY_DATA,loop   ;4. 不是高电平的话,放弃发送,转为接收
00A4 7914             64             mov     r1,#DLY20       ;5. 延时20us
00A6 D9FE             65             djnz    r1,$            ;       20us*11.0592/12-1
                      66             ;6. 发送起始位 0
00A8 C2B4             67             clr     KEY_DATA        
00AA 7914             68             mov     r1,#DLY20       ;6.1 延时20us
00AC D9FE             69             djnz    r1,$            ;       20us*11.0592/12-1
00AE C2B3             70             clr     KEY_CLOCK       ;6.2 拉低时钟
00B0 7928             71             mov     r1,#DLY40       ;6.3 延时40us
00B2 D9FE             72             djnz    r1,$            ;       40us*11.0592/12-1
00B4 D2B3             73             setb    KEY_CLOCK       ;6.4 释放时钟
00B6 7914             74             mov     r1,#DLY20       ;6.5 延时20us
00B8 D9FE             75             djnz    r1,$            ;       20us*11.0592/12-1
                      76             ;测试主机是否放弃这次传送
                      77     
                      78             ;7. 发送8位数据
00BA E4               79             clr     a
00BB FD               80             mov     r5,a            ;r5为发送计数
00BC 7B00             81             mov     r3,#0   ;效验位计数复位
00BE 7E01             82             mov     r6,#01
00C0                  83     nexta1:
00C0 EE               84             mov     a,r6
00C1 5C               85             anl     a,r4    ;要发送的字符放在r4中
00C2 7004             86             jnz     bita1
00C4 C2B4             87             clr     KEY_DATA
00C6 8003             88             sjmp    nexta2
00C8                  89     bita1:  
00C8 D2B4             90             setb    KEY_DATA
00CA 0B               91             inc     r3      ;为1的个数加1
00CB                  92     nexta2: 
00CB 7914             93             mov     r1,#DLY20       ;延时20us
00CD D9FE             94             djnz    r1,$            ;       20us*11.0592/12-1
00CF C2B3             95             clr     KEY_CLOCK       ;拉低时钟
00D1 7928             96             mov     r1,#DLY40       ;延时40us
00D3 D9FE             97             djnz    r1,$            ;       40us*11.0592/12-1
00D5 D2B3             98             setb    KEY_CLOCK       ;释放时钟
00D7 7914             99             mov     r1,#DLY20       ;延时20us
00D9 D9FE            100             djnz    r1,$            ;       20us*11.0592/12-1
                     101             ;测试主机是否放弃这次传送
                     102             ;JNB    KEY_CLOCK,SEND_BYTE
00DB EE              103             mov     a,r6
00DC 25E0            104             add     a,acc
00DE FE              105             mov     r6,a
00DF 0D              106             inc     r5              ;发送位数加1
00E0 BD08DD          107             cjne    r5,#08,nexta1   ;连续发送8位
                     108             ;发送效验位
00E3 EB              109             mov     a,r3    
00E4 5401            110             anl     a,#01
00E6 6004            111             jz      nexta3
00E8 C2B4            112             clr     KEY_DATA
00EA 8002            113             sjmp    nexta4
00EC                 114     nexta3:
00EC D2B4            115             setb    KEY_DATA
00EE                 116     nexta4:
00EE 7914            117             mov     r1,#DLY20       ;延时20us
00F0 D9FE            118             djnz    r1,$            ;       20us*11.0592/12-1
00F2 C2B3            119             clr     KEY_CLOCK       
00F4 7928            120             mov     r1,#DLY40       ;延时40us
00F6 D9FE            121             djnz    r1,$            ;       40us*11.0592/12-1
00F8 D2B3            122             setb    KEY_CLOCK
00FA 7914            123             mov     r1,#DLY20       ;延时20us
00FC D9FE            124             djnz    r1,$            ;       20us*11.0592/12-1
A51 MACRO ASSEMBLER  KB                                                                   12/03/2005 20:16:44 PAGE     3

                     125             ;测试主机是否放弃这次传送
                     126             ;JNB    KEY_CLOCK,SEND_BYTE
                     127             ;发送停止位
00FE D2B4            128             setb    KEY_DATA
0100 7914            129             mov     r1,#DLY20       ;延时20us
0102 D9FE            130             djnz    r1,$            ;       20us*11.0592/12-1
0104 C2B3            131             clr     KEY_CLOCK
0106 7928            132             mov     r1,#DLY40       ;延时40us
0108 D9FE            133             djnz    r1,$            ;       40us*11.0592/12-1
010A D2B3            134             setb    KEY_CLOCK
010C 791E            135             mov     r1,#DLY30       ;延时30us
010E D9FE            136             djnz    r1,$            ;       30us*11.0592/12-1
                     137     
                     138     ;==================================================================
0110                 139     loopb1:
0110 30B3FD          140             jnb     KEY_CLOCK,$     ;1. 等待时钟转为高电平
0113 7932            141             mov     r1,#DLY50       ;2. 延时 50us
0115 D9FE            142             djnz    r1,$            ;        50us*11.0592/12-1
0117 30B3F6          143             jnb     KEY_CLOCK,loopb1;3. 不是高电平的话,回到第一步
011A 30B4F3          144             jnb     KEY_DATA,loopb1 ;4. 不是高电平的话,放弃发送,转为接收
011D 7914            145             mov     r1,#DLY20       ;5. 延时20us
011F D9FE            146             djnz    r1,$            ;       20us*11.0592/12-1
                     147             ;6. 发送起始位 0
0121 C2B4            148             clr     KEY_DATA        
0123 7914            149             mov     r1,#DLY20       ;6.1 延时20us
0125 D9FE            150             djnz    r1,$            ;       20us*11.0592/12-1
0127 C2B3            151             clr     KEY_CLOCK       ;6.2 拉低时钟
0129 7928            152             mov     r1,#DLY40       ;6.3 延时40us
012B D9FE            153             djnz    r1,$            ;       40us*11.0592/12-1
012D D2B3            154             setb    KEY_CLOCK       ;6.4 释放时钟
012F 7914            155             mov     r1,#DLY20       ;6.5 延时20us
0131 D9FE            156             djnz    r1,$            ;       20us*11.0592/12-1
                     157             ;测试主机是否放弃这次传送
                     158     
                     159             ;7. 发送8位数据
0133 E4              160             clr     a
0134 FD              161             mov     r5,a            ;r5为发送计数
0135 7B00            162             mov     r3,#0           ;效验位计数复位
0137 7E01            163             mov     r6,#01
0139                 164     nextb1:
0139 EE              165             mov     a,r6
013A 54F0            166             anl     a,#0F0H         ;发送F0
013C 7004            167             jnz     bitb1
013E C2B4            168             clr     KEY_DATA
0140 8003            169             sjmp    nextb2
0142                 170     bitb1:  
0142 D2B4            171             setb    KEY_DATA
0144 0B              172             inc     r3              ;为1的个数加1
0145                 173     nextb2: 
0145 7914            174             mov     r1,#DLY20       ;延时20us
0147 D9FE            175             djnz    r1,$            ;       20us*11.0592/12-1
0149 C2B3            176             clr     KEY_CLOCK       ;拉低时钟
014B 7928            177             mov     r1,#DLY40       ;延时40us
014D D9FE            178             djnz    r1,$            ;       40us*11.0592/12-1

⌨️ 快捷键说明

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