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

📄 wl010.lst

📁 单片机开发资料 基于51单片机的单片机开发板 包括《实验例程
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  WL010                                                                12/02/2005 21:33:07 PAGE     1


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

LOC  OBJ            LINE     SOURCE

                       1     ; /*******************************************************************************
                       2     ; *                                                                              *
                       3     ; *    File       : wl010.asm                                                    *
                       4     ; *    Date       : 2004-11-5                                                    *
                       5     ; *    Version    : 1.0                                                          *
                       6     ; *                                                                              *
                       7     ; ********************************************************************************
                       8     ; *    Description:                                                              *
                       9     ; *                 简易电子时钟                                                 *
                      10     ; *                 AN1---时调整                                                 *
                      11     ; *                 AN2---分调整                                                 *
                      12     ; *                                                                              *
                      13     ; *                                                                              *
                      14     ; *******************************************************************************/
                      15     CODE_SEG        SEGMENT CODE 
                      16     DATA_SEG        SEGMENT DATA 
                      17     STACK_SEG       SEGMENT IDATA
                      18     
                      19     
  00B2                20     AN1     BIT     P3.2
  00B4                21     AN2     BIT     P3.4
                      22     
----                  23             RSEG  DATA_SEG
0000                  24     KEY_S:          DS      1
0001                  25     KEY_V:          DS      1
0002                  26     DIS_DIGIT:      DS      1
0003                  27     SEC:            DS      1
0004                  28     DIS_INDEX:      DS      1
0005                  29     HOUR:           DS      1
0006                  30     MIN:            DS      1
0007                  31     SEC100:         DS      1
0008                  32     DIS_BUF:        DS      8
                      33             
  0008                34     BUF_HOUR_H      EQU     DIS_BUF         ; 小时十位
  0009                35     BUF_HOUR_L      EQU     DIS_BUF+1       ; 小时个位
  000B                36     BUF_MIN_H       EQU     DIS_BUF+3       ; 分十位
  000C                37     BUF_MIN_L       EQU     DIS_BUF+4       ; 分个位
  000E                38     BUF_SEC_H       EQU     DIS_BUF+6       ; 秒十位
  000F                39     BUF_SEC_L       EQU     DIS_BUF+7       ; 秒个位
                      40     
----                  41             RSEG    STACK_SEG
0000                  42     STACK:  DS      20      
                      43             
                      44     
                      45     ;===============================================================================
                      46     
----                  47     CSEG    AT      0000H
0000 020000   F       48             JMP     MAIN
                      49             
----                  50     CSEG    AT      0000BH
000B 020000   F       51             LJMP    TIMER0  
                      52     
----                  53     CSEG    AT      0001BH
001B 020000   F       54             LJMP    TIMER1
                      55     
                      56     ;===============================================================================
                      57     
                      58     
A51 MACRO ASSEMBLER  WL010                                                                12/02/2005 21:33:07 PAGE     2

----                  59             RSEG  CODE_SEG
0000                  60     MAIN:
                      61             USING   0
                      62             
0000 758100   F       63             MOV     SP, #(STACK-1)          ;
                      64             
                      65             
0003 7580FF           66             MOV     P0,#0FFH
0006 75A0FF           67             MOV     P2,#0FFH
0009 758911           68             MOV     TMOD,#011H              ; 定时器0, 1工作模式1, 16位定时方式
000C 758CFC           69             MOV     TH0,#0FCH
000F 758A17           70             MOV     TL0,#017H
0012 758DDC           71             MOV     TH1,#0DCH
0015 E4               72             CLR     A
0016 F58B             73             MOV     TL1,A
                      74             
0018 75000C   F       75             MOV     HOUR,#12                ; 
001B E4               76             CLR     A                       ; 
001C F500     F       77             MOV     MIN,A
001E F500     F       78             MOV     SEC,A
0020 F500     F       79             MOV     SEC100,A
                      80             
0022 E500     F       81             MOV     A,HOUR
0024 75F00A           82             MOV     B,#10
0027 84               83             DIV     AB
0028 900000   F       84             MOV     DPTR,#DIS_CODE
002B 93               85             MOVC    A,@A+DPTR
002C F500     F       86             MOV     BUF_HOUR_H,A            ; 时十位
002E E500     F       87             MOV     A,HOUR
0030 75F00A           88             MOV     B,#10
0033 84               89             DIV     AB
0034 E5F0             90             MOV     A,B
0036 93               91             MOVC    A,@A+DPTR
0037 F500     F       92             MOV     BUF_HOUR_L,A            ; 时个位
0039 E500     F       93             MOV     A,MIN
003B 75F00A           94             MOV     B,#10
003E 84               95             DIV     AB
003F 93               96             MOVC    A,@A+DPTR
0040 F500     F       97             MOV     BUF_MIN_H,A             ; 分十位
0042 E500     F       98             MOV     A,MIN
0044 75F00A           99             MOV     B,#10
0047 84              100             DIV     AB
0048 E5F0            101             MOV     A,B
004A 93              102             MOVC    A,@A+DPTR
004B F500     F      103             MOV     BUF_MIN_L,A             ; 分个位
004D E500     F      104             MOV     A,SEC
004F 75F00A          105             MOV     B,#10
0052 84              106             DIV     AB
0053 93              107             MOVC    A,@A+DPTR
0054 F500     F      108             MOV     BUF_SEC_H,A             ; 秒十位
0056 E500     F      109             MOV     A,SEC
0058 75F00A          110             MOV     B,#10
005B 84              111             DIV     AB
005C E5F0            112             MOV     A,B
005E 93              113             MOVC    A,@A+DPTR
005F F500     F      114             MOV     BUF_SEC_L,A             ; 秒个位
                     115             
0061 7500BF   F      116             MOV     BUF_HOUR_H+02H,#0BFH
0064 7500BF   F      117             MOV     BUF_HOUR_H+05H,#0BFH
                     118             
0067 7500FE   F      119             MOV     DIS_DIGIT,#0FEH
006A E4              120             CLR     A
006B F500     F      121             MOV     DIS_INDEX,A
                     122             
006D 75A88A          123             MOV     IE,#08AH                ; 使能timer0,1 中断
                     124             
A51 MACRO ASSEMBLER  WL010                                                                12/02/2005 21:33:07 PAGE     3

0070 D28C            125             SETB    TR0
0072 D28E            126             SETB    TR1
                     127             
0074 750003   F      128             MOV     KEY_V,#03H
                     129             
0077                 130     MAIN_LP:
0077 120000   F      131             LCALL   SCAN_KEY                ; 键扫描
007A 60FB            132             JZ      MAIN_LP                 ; 无键返回
                     133             
007C 7F0A            134             MOV     R7,#10                  ; 延时10ms
007E 120000   F      135             LCALL   DELAYMS                 ; 延时去抖动
0081 120000   F      136             LCALL   SCAN_KEY                ; 再次扫描
0084 60F1            137             JZ      MAIN_LP                 ; 无键返回
                     138             
0086 850000   F      139             MOV     KEY_V,KEY_S             ; 保存键值
0089 120000   F      140             LCALL   PROC_KEY                ; 键处理
008C 80E9            141             SJMP    MAIN_LP                 ; 调回主循环
                     142     
                     143     
                     144     ;===============================================================================
008E                 145     SCAN_KEY:
                     146     ; 扫键扫描子程序
                     147     ; 保存按键状态到key_s
                     148     ; 返回: A --- 按键是否按下(BOOL)
                     149     
008E E4              150             CLR     A
                     151             
008F A2B2            152             MOV     C,AN1                   ; 读按键AN1
0091 92E0            153             MOV     ACC.0,C
0093 A2B4            154             MOV     C,AN2                   ; 读按键AN2
0095 92E1            155             MOV     ACC.1,C
                     156             
0097 F500     F      157             MOV     KEY_S,A                 ;  保存按键状态到key_s
0099 6500     F      158             XRL     A,KEY_V
009B 22              159             RET     
                     160     
                     161     ;===============================================================================
009C                 162     PROC_KEY:
                     163     ; 键处理子程序
                     164     ; 传入参数: KEY_V --- 按键值
                     165     ; 返回值: 无
                     166     
009C C2AF            167             CLR     EA
                     168             
009E E500     F      169             MOV     A,KEY_V
00A0 30E005          170             JNB     ACC.0,PROC_AN1
00A3 30E107          171             JNB     ACC.1,PROC_AN2
00A6 8028            172             SJMP    END_PROC_KEY
                     173             
00A8                 174     PROC_AN1:                               ; 按键AN1处理
00A8 120000   F      175             LCALL   INC_HOUR                ; 小时加1
00AB 8023            176             SJMP    END_PROC_KEY
                     177     
00AD                 178     PROC_AN2:                               ; 按键AN2处理
00AD 0500     F      179             INC     MIN                     ; 分钟加1
                     180             
00AF E500     F      181             MOV     A,MIN                   ; 
00B1 D3              182             SETB    C
00B2 943B            183             SUBB    A,#59   
00B4 4003            184             JC      AN2_UPDATE_MIN          ; 如果分钟等于60,则分清0,小时加1
                     185             
00B6 E4              186             CLR     A                       ; 
00B7 F500     F      187             MOV     MIN,A
                     188     
00B9                 189     AN2_UPDATE_MIN:                         ; 更新分显示缓冲区
00B9 E500     F      190             MOV     A,MIN
A51 MACRO ASSEMBLER  WL010                                                                12/02/2005 21:33:07 PAGE     4

00BB 75F00A          191             MOV     B,#10
00BE 84              192             DIV     AB                      ; A = MIN / 10  
00BF 900000   F      193             MOV     DPTR,#DIS_CODE
00C2 93              194             MOVC    A,@A+DPTR
00C3 F500     F      195             MOV     BUF_MIN_H,A             ; 更新分十位
                     196             
00C5 E500     F      197             MOV     A,MIN
00C7 75F00A          198             MOV     B,#10
00CA 84              199             DIV     AB
00CB E5F0            200             MOV     A,B                     ; A = MIN % 10
00CD 93              201             MOVC    A,@A+DPTR
00CE F500     F      202             MOV     BUF_MIN_L,A             ; 更新分个位    
                     203             
00D0                 204     END_PROC_KEY:
00D0 D2AF            205             SETB    EA
00D2 22              206             RET     
                     207     
                     208     ;===============================================================================
                     209     
                     210             USING   0
00D3                 211     TIMER0:
                     212     ; 定时器0中断服程序, 用于数码管的动态扫描
                     213     ; DIS_INDEX --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量
                     214     ; DIS_DIGIT --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,
                     215     ;               选通P2.0口数码管
                     216     ; DIS_BUF   --- 显于缓冲区基地址                
                     217     
00D3 C0E0            218             PUSH    ACC
00D5 C0D0            219             PUSH    PSW
00D7 C000            220             PUSH    AR0
                     221             
00D9 758CFC          222             MOV     TH0,#0FCH
00DC 758A17          223             MOV     TL0,#017H
                     224             
00DF 75A0FF          225             MOV     P2,#0FFH                ; 先关闭所有数码管
                     226             
00E2 7400     F      227             MOV     A,#DIS_BUF              ; 获得显示缓冲区基地址
00E4 2500     F      228             ADD     A,DIS_INDEX             ; 获得偏移量
00E6 F8              229             MOV     R0,A                    ; R0 = 基地址 + 偏移量
00E7 E6              230             MOV     A,@R0                   ; 获得显示代码
00E8 F580            231             MOV     P0,A                    ; 显示代码传送到P0口
                     232             
00EA 8500A0   F      233             MOV     P2,DIS_DIGIT
                     234     
00ED E500     F      235             MOV     A,DIS_DIGIT             ; 位选通值左移, 下次中断时选通下一位数码管
00EF 23              236             RL      A
00F0 F500     F      237             MOV     DIS_DIGIT,A
                     238             
00F2 0500     F      239             INC     DIS_INDEX               ; DIS_INDEX加1, 下次中断时显示下一位
00F4 530007   F      240             ANL     DIS_INDEX,#0x07         ; 当DIS_INDEX等于8(0000 1000)时, 清0
                     241     
00F7 D000            242             POP     AR0
00F9 D0D0            243             POP     PSW
00FB D0E0            244             POP     ACC
                     245             

⌨️ 快捷键说明

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