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

📄 adkey.lst

📁 1
💻 LST
📖 第 1 页 / 共 2 页
字号:
MPASM  5.06.4                         ADKEY.ASM   7-27-2007  17:03:52         PAGE  1


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00001 
                      00002 #INCLUDE <P16F877A.INC>        ;
                      00001         LIST
                      00002 ; P16F877A.INC  Standard Header File, Version 1.00    Microchip Technology, Inc.
                      00400         LIST
                      00003 
  00000020            00004 KEYRES     EQU   0X20   ;键值的ASCII码
  00000021            00005 ADKEYH     EQU   0X21   ;模拟键盘输入A/D转换结果的高8位
  00000022            00006 KEYRES_B   EQU   0X22   ;键值转存
  00000023            00007 COUNTLINE  EQU   0X23   ;延时计数器
  00000024            00008 LED_DATA   EQU   0X24   ;要显示的数值
  00000025            00009 CLKCOUNT   EQU   0X25   ;脉冲记数器
                      00010 
                      00011 #DEFINE    SRCLK   PORTC,3;  SPI CLK
                      00012 #DEFINE    RCLK    PORTC,4;  完成脉冲线
                      00013 #DEFINE    SER     PORTC,5;  SPI SDO
                      00014 
                      00015 
                      00016 ;因程序在2K范围内,goto ,call指令不考虑对PCLATH的处理,查表例外。
                      00017 
0000                  00018   ORG  0X00
0000   0000           00019   NOP
0001   2810           00020   GOTO  ADKEY_1
                      00021 
0010                  00022    ORG  0X10         ;读取键值判断测试程序入口
0010                  00023 ADKEY_1
0010   2029           00024    CALL  INITADKEY;
0011   2072           00025    CALL  PRELED;
0012   30FF           00026    MOVLW 0XFF
0013   00A3           00027    MOVWF COUNTLINE;
0014                  00028 ADKEY_2
0014   2033           00029    CALL  GETADKEY
0015   3030           00030    MOVLW 0X30
0016   0620           00031    XORWF KEYRES,W
0017   1D03           00032    BTFSS STATUS,Z
0018   281A           00033    GOTO  ADKEY_3     ;键值不为30(有键),去抖动
0019   2814           00034    GOTO  ADKEY_2
001A                  00035 ADKEY_3
001A   0BA3           00036    DECFSZ COUNTLINE,F;延时去抖动
001B   281A           00037    GOTO  ADKEY_3
001C   0820           00038    MOVF  KEYRES,W
001D   00A2           00039    MOVWF KEYRES_B    ;转移键值
001E                  00040 ADKEY_4
001E   2033           00041    CALL  GETADKEY    ;
001F   3030           00042    MOVLW 0X30
0020   0620           00043    XORWF KEYRES,W
0021   1D03           00044    BTFSS STATUS,Z
0022   281E           00045    GOTO  ADKEY_4     ;键未释放,键值与前一次读入一致,继续AD,
0023   0822           00046    MOVF  KEYRES_B,W  ;键已释放,键值为0x30
0024   00A4           00047    MOVWF LED_DATA;insert some display,USE PORTC;
0025   2079           00048    CALL  MONILED;
0026   30FF           00049    MOVLW 0XFF
0027   00A3           00050    MOVWF COUNTLINE
MPASM  5.06.4                         ADKEY.ASM   7-27-2007  17:03:52         PAGE  2


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0028   2814           00051    GOTO  ADKEY_2
                      00052 
0029                  00053 INITADKEY    ;A/D 转换初始化子程序
0029   018C           00054      CLRF    PIR1;
002A   3041           00055      MOVLW   0X41;
002B   009F           00056      MOVWF   ADCON0;      ENABLE AD,AN0,LEFT MODE,VDD,AD 转换时钟为 FOSC/8
002C   1683           00057      BSF     STATUS,RP0;
002D   018B           00058      CLRF    INTCON;       采用查询法,不需要中断
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
002E   018C           00059      CLRF    PIE1;
                      00060 
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
002F   1405           00061      BSF     TRISA,0;
0030   300E           00062      MOVLW   0X0E;                右移位模式,高8位存在ADRESH,only RA0 analog port,VDD,VSS
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
0031   009F           00063      MOVWF   ADCON1;
0032   0008           00064         RETURN
                      00065 ;************************************
0033                  00066 GETADKEY                           ;读取键值处理子程序
                      00067 
0033   151F           00068      BSF     ADCON0,GO             ;启动AD转换
0034   191F           00069      BTFSC   ADCON0,GO             ;等待A/D转换结束
0035   2834           00070      GOTO    $-1
0036   081E           00071      MOVF    ADRESH,W              ;读取并存储A/D 转换结果
0037   00A1           00072      MOVWF   ADKEYH                ;判断键值1~9,若无键按下,认为键值为0
0038   3031           00073      MOVLW   0X31                  ;
0039   00A0           00074      MOVWF   KEYRES
003A   30CB           00075 KEY1 MOVLW   0XCB                  ;CC为S1按下对应A/D转换数字量的高8位
003B   0221           00076      SUBWF   ADKEYH,W              ;比较阈值设为CB可增强抗干扰能力
003C   1C03           00077      BTFSS   STATUS,C              ;采用逐键比较判断
003D   283F           00078      GOTO    KEY2
003E   2871           00079      GOTO    KEYOUT
003F   0AA0           00080 KEY2 INCF    KEYRES,F
0040   30A8           00081      MOVLW   0XA8                  ;A9为S2按下对应A/D转换数字量的高8位
0041   0221           00082      SUBWF   ADKEYH,W
0042   1C03           00083      BTFSS   STATUS,C
0043   2845           00084      GOTO    KEY3
0044   2871           00085      GOTO    KEYOUT
0045   0AA0           00086 KEY3 INCF    KEYRES,F
0046   308F           00087      MOVLW   0X8F                  ;90为S3按下对应A/D转换数字量的高8位
0047   0221           00088      SUBWF   ADKEYH,W
0048   1C03           00089      BTFSS   STATUS,C
0049   284B           00090      GOTO    KEY4
004A   2871           00091      GOTO    KEYOUT
004B   0AA0           00092 KEY4 INCF    KEYRES,F
004C   307D           00093      MOVLW   0X7D                   ;7E为S4按下对应A/D转换数字量的高8位
004D   0221           00094      SUBWF   ADKEYH,W
004E   1C03           00095      BTFSS   STATUS,C
004F   2851           00096      GOTO    KEY5
0050   2871           00097      GOTO    KEYOUT
0051   0AA0           00098 KEY5 INCF    KEYRES,F
0052   306F           00099      MOVLW   0X6F                  ;70为S5按下对应A/D转换数字量的高8位
0053   0221           00100      SUBWF   ADKEYH,W
MPASM  5.06.4                         ADKEY.ASM   7-27-2007  17:03:52         PAGE  3


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0054   1C03           00101      BTFSS   STATUS,C
0055   2857           00102      GOTO    KEY6
0056   2871           00103      GOTO    KEYOUT
0057   0AA0           00104 KEY6 INCF    KEYRES,F
0058   3063           00105      MOVLW   0X63                  ;64为S6按下对应A/D转换数字量的高8位
0059   0221           00106      SUBWF   ADKEYH,W
005A   1C03           00107      BTFSS   STATUS,C
005B   285D           00108      GOTO    KEY7
005C   2871           00109      GOTO    KEYOUT
005D   0AA0           00110 KEY7 INCF    KEYRES,F
005E   305A           00111      MOVLW   0X5A                 ;5B为S7按下对应A/D转换数字量的高8位
005F   0221           00112      SUBWF   ADKEYH,W
0060   1C03           00113      BTFSS   STATUS,C
0061   2863           00114      GOTO    KEY8
0062   2871           00115      GOTO    KEYOUT
0063   0AA0           00116 KEY8 INCF    KEYRES,F
0064   3053           00117      MOVLW   0X53               ;54为S8按下对应A/D转换数字量的高8位
0065   0221           00118      SUBWF   ADKEYH,W
0066   1C03           00119      BTFSS   STATUS,C
0067   2869           00120      GOTO    KEY9
0068   2871           00121      GOTO    KEYOUT
0069   0AA0           00122 KEY9 INCF    KEYRES,F
006A   304C           00123      MOVLW   0X4C              ;4D为S9按下对应A/D转换数字量的高8位
006B   0221           00124      SUBWF   ADKEYH,W
006C   1C03           00125      BTFSS   STATUS,C
006D   286F           00126      GOTO    KEY0
006E   2871           00127      GOTO    KEYOUT
006F   3030           00128 KEY0 MOVLW   0X30              ;无键按下,返回30作为主函数判断有无键按下的设定值
0070   00A0           00129      MOVWF    KEYRES           ;也可以设定其他不与键值冲突的数值
0071                  00130 KEYOUT
0071   0008           00131      RETURN
                      00132 
0072                  00133 PRELED
0072   0187           00134      CLRF    PORTC;
0073   3008           00135      MOVLW   0X8
0074   00A5           00136      MOVWF   CLKCOUNT;
0075   1683           00137      BSF     STATUS,RP0;
                      00138 
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
0076   0187           00139      CLRF    TRISC;   MAKE RC3,RC4,RC5 OUTPUT
0077   1283           00140      BCF     STATUS,RP0;
0078   0008           00141      RETURN
                      00142 
0079                  00143 MONILED;     入口参数LED_DATA,为0-9ASCALL码
                      00144 ;芯片全部在时钟上升沿完成动作,故需在低电平期间完成数据的变化。
0079   3000           00145          MOVLW   HIGH LED_TABLE
007A   008A           00146          MOVWF   PCLATH;
007B   300F           00147      MOVLW   0X0F;
007C   05A4           00148      ANDWF   LED_DATA,F;得到0-9;
007D   0824           00149      MOVF    LED_DATA,W;
007E   2098           00150      CALL    LED_TABLE;
007F   00A4           00151      MOVWF   LED_DATA;  得到0-9对应的LED段码;该码表与SPI主模式下码表一致,故模拟时,高位                
                                 ;  先送出,芯片最高工作频率30M故不需要特别的延时
MPASM  5.06.4                         ADKEY.ASM   7-27-2007  17:03:52         PAGE  4


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0080   3000           00152      MOVLW       HIGH MONILED
0081   008A           00153          MOVWF   PCLATH;                        切换PC高位
0082   1207           00154          BCF     RCLK;
0083                  00155 GOGOGO
0083   1187           00156      BCF     SRCLK;
0084   0DA4           00157      RLF     LED_DATA,F;
0085   1803           00158      BTFSC   STATUS,C;
0086   2888           00159      GOTO    SETSER;
0087   288A           00160      GOTO    CLRSER;
0088                  00161 SETSER
0088   1687           00162      BSF     SER;
0089   288B           00163      GOTO    SETSRCLK;
008A                  00164 CLRSER
008A   1287           00165      BCF     SER;
008B                  00166 SETSRCLK
008B   0000           00167      NOP
008C   0000           00168      NOP
008D   1587           00169      BSF     SRCLK
008E   0000           00170      NOP
008F   0BA5           00171      DECFSZ  CLKCOUNT,F;
0090   2883           00172      GOTO    GOGOGO;
0091   1207           00173      BCF     RCLK;干扰太厉害,必须在这清0,然后制造上升沿
0092   0000           00174      NOP
0093   0000           00175      NOP
0094   1607           00176      BSF     RCLK;
0095   3008           00177      MOVLW   0X8;
0096   00A5           00178      MOVWF   CLKCOUNT;
0097   0008           00179      RETURN
                      00180 
                      00181 
0098                  00182 LED_TABLE        ;七段码调整 如果表出现PCL溢出,要调整表的位置
0098   0782           00183      ADDWF   PCL,F
0099   3400 3406 345B 00184      DT 0X00,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F
       344F 3466 346D 
       347D 3407 347F 
       346F 
                      00185 
                      00186 
                      00187 
                      00188      END
MPASM  5.06.4                         ADKEY.ASM   7-27-2007  17:03:52         PAGE  5


SYMBOL TABLE
  LABEL                             VALUE 

ACKDT                             00000005
ACKEN                             00000004
ACKSTAT                           00000006
ADCON0                            0000001F
ADCON1                            0000009F
ADCS0                             00000006
ADCS1                             00000007
ADCS2                             00000006
ADDEN                             00000003
ADFM                              00000007
ADIE                              00000006
ADIF                              00000006
ADKEYH                            00000021
ADKEY_1                           00000010
ADKEY_2                           00000014
ADKEY_3                           0000001A
ADKEY_4                           0000001E
ADON                              00000000
ADRESH                            0000001E
ADRESL                            0000009E
BCLIE                             00000003
BCLIF                             00000003
BF                                00000000
BRGH                              00000002
C                                 00000000
C1INV                             00000004
C1OUT                             00000006
C2INV                             00000005
C2OUT                             00000007
CCP1CON                           00000017
CCP1IE                            00000002
CCP1IF                            00000002
CCP1M0                            00000000
CCP1M1                            00000001
CCP1M2                            00000002
CCP1M3                            00000003
CCP1X                             00000005
CCP1Y                             00000004
CCP2CON                           0000001D
CCP2IE                            00000000
CCP2IF                            00000000
CCP2M0                            00000000
CCP2M1                            00000001
CCP2M2                            00000002
CCP2M3                            00000003
CCP2X                             00000005
CCP2Y                             00000004
CCPR1H                            00000016
CCPR1L                            00000015
CCPR2H                            0000001C
CCPR2L                            0000001B
CHS0                              00000003
CHS1                              00000004
MPASM  5.06.4                         ADKEY.ASM   7-27-2007  17:03:52         PAGE  6


SYMBOL TABLE
  LABEL                             VALUE 

⌨️ 快捷键说明

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