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

📄 henhao.lst

📁 此代码是一个键盘程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
A51 MACRO ASSEMBLER  HENHAO                                                               09/25/2008 16:42:26 PAGE     1


MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN henhao.OBJ
ASSEMBLER INVOKED BY: C:\Keil51\C51\BIN\A51.EXE henhao.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     
  00B0                 2     bitACK                          BIT             P3.0
  00B1                 3     bitDAT                          BIT             P3.1
  00B3                 4     bitOVERFLOW                     BIT             P3.3
  00B4                 5     bitDECODE                       BIT             P3.4
  00B5                 6     bitD74                          BIT             P3.5
  00B7                 7     bitCLK74                        BIT             P3.7
                       8     
                       9     
                      10     
  0000                11     bitStrollLockKey                BIT             00H
  0008                12     bitParityBak                    BIT             08H
  0001                13     blnNumLockKey                   BIT             01H
  0002                14     blnCapsLockKey                  BIT             02H
  0003                15     blnShiftKeyDown                 BIT             03H
  0004                16     blnHaveKey                      BIT             04H
  0005                17     blnDataValid                    BIT             05H
  0006                18     blnTimer0Overflow               BIT             06H
  0009                19     blnChoose                       BIT             09H
  000A                20     blnFifoFull                     BIT             0AH
  000B                21     blnFifoNull                     BIT             0BH
  000C                22     blnOddByte                      BIT             0CH
                      23     
                      24     
                      25     
                      26     
                      27     
  0030                28     gBitCounter                     DATA            30H
  0031                29     gByteCounter                    DATA            31H
  0032                30     CodeReg_1                       DATA            32H
  0033                31     CodeReg_2                       DATA            33H
  0034                32     FifoBufferBegin                 EQU             34H
  0035                33     FifoBufferEnd                   EQU             35H
  0036                34     TmpOddByte                      DATA            36H
  0060                35     FifoBuffer                      EQU             60H
  0020                36     FifoBufferLength                EQU             20H
  0040                37     ReceiveBuffer                   EQU             40H
  0050                38     RestoreBuffer                   EQU             50H
  0048                39     Init_TL0                        EQU             48H
  00F4                40     Init_TH0                        EQU             0F4H         
                      41             
                      42             
0000                  43             ORG 0
0000 020057           44             LJMP START
0003                  45             ORG 03H
0003 020021           46             LJMP INT0_SERVE
000B                  47             ORG 0BH 
000B                  48     T0_SERVE:
000B C28C             49             CLR             TR0                                ;Counter stop
000D D2B4             50             SETB    bitDECODE                          ;Illume the yellow light
000F D206             51             SETB    blnTimer0Overflow                  ;Setting the timer overflow symbol
0011 300404           52             JNB             blnHaveKey,T0_SERVE1               ;Have key?               
0014 D205             53             SETB    blnDataValid                       ;Seting the data valid symbol
0016 C204             54             CLR             blnHaveKey                         ;Clean the have key symbol
0018                  55     T0_SERVE1:
0018 758A48           56             MOV     TL0,#Init_TL0                      ;Setting the timer
001B 758CF4           57             MOV     TH0,#Init_TH0
001E D28C             58             SETB    TR0                                ;Startup the timer
A51 MACRO ASSEMBLER  HENHAO                                                               09/25/2008 16:42:26 PAGE     2

0020 32               59             RETI
                      60     ;*********************************************          
0021                  61     INT0_SERVE:
0021 C28C             62             CLR             TR0                                ;Stop count
0023 200528           63         JB          blnDataValid,EXIT1                 ;data valid?
0026 C0E0             64             PUSH    ACC                                    ;Protect the spot
0028 C0D0             65             PUSH    PSW
002A C007             66             PUSH    07H
002C C2B4             67             CLR     bitDECODE                          ;Put out the yellow light               
                                 
002E 300605           68             JNB     blnTimer0Overflow,NOT_NEWRECEIVE   ;New receive?
0031 D204             69             SETB    blnHaveKey
0033 753000           70             MOV     gBitCounter,#0
0036                  71     NOT_NEWRECEIVE:                                ;new receive
0036 0530             72             INC     gBitCounter
0038 A2B1             73             MOV     C,bitDAT
003A 120227           74             LCALL   RLC_STORE                          ;Store a bit
003D C206             75             CLR     blnTimer0Overflow                  ;Clean the timer overflow symbol
003F 758A48           76             MOV     TL0,#Init_TL0                      ;Setting the timer
0042 758CF4           77             MOV     TH0,#Init_TH0
0045 D007             78             POP             07H                                             ;Resume the spot
0047 D0D0             79             POP     PSW                                
0049 D0E0             80             POP     ACC
004B D28C             81             SETB    TR0                                             ;Startup the timer
004D 32               82             RETI
004E                  83     EXIT1:
004E 758A48           84             MOV     TL0,#Init_TL0                       ;Setting the timer
0051 758CF4           85             MOV     TH0,#Init_TH0        
0054 D28C             86             SETB    TR0                                 ;Startup the timer          
0056 32               87             RETI
                      88     ;Main progress begin
0057                  89     START:
0057 74FF             90             MOV             A,#0FFH                                                         ;Ke
                             yboard replacement 
0059 12046F           91             LCALL   COMMAND
005C 7DFF             92             MOV             R5,#0FFH
005E                  93     DELAY:
005E 7EFF             94             MOV             R6,#0FFH
0060 DEFE             95             DJNZ    R6,$
0062 DDFA             96             DJNZ    R5,DELAY
0064 753000           97             MOV     gBitCounter,#0                        ;Clean the bit count symbol
0067 758901           98             MOV     TMOD,#01H                          ;Setting the counter
006A 758A48           99             MOV     TL0,#Init_TL0                     
006D 758CF4          100             MOV     TH0,#Init_TH0
0070 7940            101             MOV     R1,#ReceiveBuffer
0072 120232          102             LCALL   CLR_BUFFER                                              ;Clean the receive 
                             buffer
0075 C20A            103             CLR             blnFifoFull                                             ;Clean the 
                             FIFO full symbol
0077 D20B            104             SETB    blnFifoNull                      ;CLean the FIFO empty symbol              
                                  
0079 C205            105             CLR     blnDataValid                     ;Clean the data valid symbol
007B C203            106             CLR     blnShiftKeyDown                  ;Place the special key symbol
007D C202            107             CLR     blnCapsLockKey                                  
007F C200            108             CLR             bitStrollLockKey
0081 C20C            109             CLR             blnOddByte
0083 D201            110             SETB    blnNumLockKey
0085 D209            111             SETB            blnChoose                                       ;Choose the kind of
                               key code 
0087 C2B5            112             CLR             bitD74                                                  ;put out th
                             e green light
0089 C2B7            113             CLR             bitCLK74
008B D2B7            114             SETB    bitCLK74
008D 753460          115             MOV             FifoBufferBegin,#FifoBuffer             ;initialize FIFO
0090 753560          116             MOV             FifoBufferEnd,#FifoBuffer
0093 D28C            117             SETB    TR0                                ;Startup the counter
A51 MACRO ASSEMBLER  HENHAO                                                               09/25/2008 16:42:26 PAGE     3

0095 D288            118             SETB    IT0                                ;Place to symbol bit
0097 D2A8            119             SETB    EX0
0099 D2A9            120             SETB    ET0
009B D2AF            121             SETB    EA
009D 1204A5          122             LCALL   LEDCTRL                                                         ;lighten th
                             e NumLock key light
                     123     ;***************************************                
00A0                 124     MAINLOOP:
00A0 300530          125             JNB             blnDataValid,ASKFORSEND              ;Is the data valid?
00A3 1201D7          126             LCALL   RESUME                                                          ;Yes,restor
                             e the data
00A6 C205            127             CLR     blnDataValid                                            ;Clean the datavali
                             d symbol
00A8 64FF            128             XRL             A,#0FFH                              ;Is the data 0FFH?
00AA 60F4            129             JZ              MAINLOOP                             ;Yes,return
00AC 20090C          130             JB              blnChoose,CODE_1                      ;The kind of key code
00AF 1204BE          131             LCALL   FINDVIKEYCODE                                           ;Find the virtual k
                             ey code
00B2 F533            132             MOV             CodeReg_2,A                                             ;store the 
                             virtual key code         
00B4 64FF            133             XRL     A,#0FFH                                                 ;Is the code 0FFH?
00B6 60E8            134             JZ              MAINLOOP                             ;Yes,return
00B8 0200CD          135             LJMP    FIFO                                 ;No,send the code to FIFO
00BB                 136     CODE_1:
00BB 1200DC          137             LCALL   FINDSCAN                                                        ;Find the s
                             can code
00BE F5F0            138             MOV             B,A
00C0 64FF            139             XRL             A,#0FFH                              ;Is the data 0FFH in ACC?
00C2 60DC            140             JZ              MAINLOOP                                                          ;
                             Yes,return
00C4 E5F0            141             MOV     A,B
00C6 64FE            142             XRL             A,#0FEH                                                         ;Is
                              the data 0FEH in ACC?
00C8 6003            143             JZ              FIFO                                                            ;Ye
                             s,send the code to FIFO 
00CA 1202CE          144             LCALL   ChangeASCII                         ;Find the ASCII code 
00CD                 145     FIFO:
00CD 1203F4          146             LCALL   FIFO_STORE                                                      ;Store the 
                             code in FIFO
00D0 1204A5          147             LCALL   LEDCTRL                             ;Setting the pilot lamp on keyboard
00D3                 148     ASKFORSEND:
00D3 30B003          149             JNB             bitACK,RETURN                        ;Get ready incept ?
00D6 120425          150             LCALL   READFIFO                                                        ;Break out 
                             the code from FIFO and send
00D9                 151     RETURN: 
00D9 0200A0          152             LJMP    MAINLOOP                                                        ;Return
                     153     ;**********************************************************     
00DC                 154     FINDSCAN:       
00DC E531            155             MOV             A,gByteCounter
00DE B40106          156             CJNE    A,#01H,JUDGE_1                    ;One byte?
00E1 12011A          157             LCALL   PROCESS_ONEBYTE                                   ;Yes,FInd the scan code 
00E4 020119          158             LJMP    JUDGE_7
00E7                 159     JUDGE_1:
00E7 E531            160             MOV             A,gByteCounter
00E9 6402            161             XRL             A,#02H                                                          ;Tw
                             o byte?
00EB 7006            162             JNZ             JUDGE_2
00ED 120151          163             LCALL   PROCESS_TWOBYTE                                         ;Yes,return
                     164     
00F0 020119          165             LJMP    JUDGE_7
00F3                 166     JUDGE_2:
00F3 E531            167             MOV             A,gByteCounter
00F5 6403            168             XRL             A,#03H                                                          ;Th
                             ree byte?
00F7 601E            169             JZ              JUDGE_6                                                         ;Ye
                             s,return
A51 MACRO ASSEMBLER  HENHAO                                                               09/25/2008 16:42:26 PAGE     4

00F9                 170     JUDGE_3:
00F9 E531            171             MOV             A,gByteCounter
00FB 6404            172             XRL             A,#04H                                                          ;Fo
                             ur byte?
00FD 7006            173             JNZ             JUDGE_4
00FF 120177          174             LCALL   PROCESS_FOURBYTE                     ;Yes,find the scan code 
0102 020119          175             LJMP    JUDGE_7
0105                 176     JUDGE_4:
0105 E531            177             MOV             A,gByteCounter
0107 6406            178             XRL             A,#06H                                                          ;Si
                             x byte?

⌨️ 快捷键说明

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