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

📄 wl012.lst

📁 计数器实验 * * 定时器1工作于16位计数模式
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  WL012                                                                02/12/2004 12:06:14 PAGE     1


MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN wl012.OBJ
ASSEMBLER INVOKED BY: d:\Keil\C51\BIN\A51.EXE wl012.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ;********************************************************************************
                       2     ;*                                                                              *
                       3     ;*    File       : wl012.asm                                                    *
                       4     ;*    Date       : 2004-1-5                                                     *
                       5     ;*    Version    : 1.0                                                          *
                       6     ;*                                                                              *
                       7     ;*    Author     : Freeman          freeman@willar.com                          *
                       8     ;*    Company    : Willar           www.willar.com                              *
                       9     ;*                                                                              *
                      10     ;********************************************************************************
                      11     ;*    Descriptoon:                                                              *
                      12     ;*                 计数器实验                                                   *
                      13     ;*                                                                              *
                      14     ;*    计数值单位,寄存器与数码管对应关系:                                        *
                      15     ;*                                                                              *
                      16     ;* --- 单位 ---------- 数码管端口 ---- 缓冲区 ---------                         *
                      17     ;*      X                 P20        DIS_BUF+7                                  *
                      18     ;*      X                 P21        DIS_BUF+6                                  *
                      19     ;*      X                 P22        DIS_BUF+5                                  *
                      20     ;*     万位               P23        DIS_BUF+4                                  *
                      21     ;*     千位               P24        DIS_BUF+3                                  *
                      22     ;*     百位               P25        DIS_BUF+2                                  *
                      23     ;*     十位               P26        DIS_BUF+1                                  *
                      24     ;*     个位               P27        DIS_BUF+0                                  *
                      25     ;*                                                                              *
                      26     ;********************************************************************************
                      27     
                      28     NAME    WL012
                      29     
                      30     CODE_SEG        SEGMENT CODE  
                      31     DATA_SEG        SEGMENT DATA 
                      32     STACK_SEG       SEGMENT IDATA        
                      33     
----                  34             RSEG    DATA_SEG
0000                  35     DIS_DIGIT:      DS      1
0001                  36     DIS_INDEX:      DS      1
0002                  37     DIS_BUF:        DS      8
000A                  38     TMP:            DS      1
                      39     
----                  40             RSEG    STACK_SEG
0000                  41     STACK:          DS      20      
                      42     
                      43     ;===============================================================================
----                  44     CSEG    AT      00000H
0000 020000   F       45             LJMP    MAIN
                      46             
----                  47     CSEG    AT      0000BH
000B 020000   F       48             LJMP    TIMER0
                      49     
                      50     ;===============================================================================
----                  51             RSEG    CODE_SEG
0000                  52     MAIN:
0000 758100   F       53             MOV     SP,#(STACK-1);
                      54     
0003 7580FF           55             MOV     P0,#0FFH
0006 75A0FF           56             MOV     P2,#0FFH
0009 758951           57             MOV     TMOD,#051H              ; 定时器1工作模式1, 16位计数方式
                      58     
A51 MACRO ASSEMBLER  WL012                                                                02/12/2004 12:06:14 PAGE     2

000C E4               59             CLR     A
000D F58D             60             MOV     TH1,A
000F F58B             61             MOV     TL1,A
0011 758CFC           62             MOV     TH0,#0FCH
0014 758A17           63             MOV     TL0,#017H
                      64      
                      65             ; 初始化显示缓冲区
0017 7500FF   F       66             MOV     DIS_BUF+07H,#0FFH       ; 最数小于65536, 所以前三个数码不显示
001A 7500FF   F       67             MOV     DIS_BUF+06H,#0FFH
001D 7500FF   F       68             MOV     DIS_BUF+05H,#0FFH
                      69     
0020 7500C0   F       70             MOV     DIS_BUF+04H,#0C0H       ; 0xc0是'0'的显示代码
0023 7500C0   F       71             MOV     DIS_BUF+03H,#0C0H
0026 7500C0   F       72             MOV     DIS_BUF+02H,#0C0H
0029 7500C0   F       73             MOV     DIS_BUF+01H,#0C0H
002C 7500C0   F       74             MOV     DIS_BUF,#0C0H
                      75     
002F 75007F   F       76             MOV     DIS_DIGIT,#07FH         ; 初始显示P27口数码管
                      77     
0032 F500     F       78             MOV     DIS_INDEX,A
                      79     
0034 75A882           80             MOV     IE,#082H                ; 使能TIMER0中断
                      81     
0037 D28C             82             SETB    TR0
0039 D28E             83             SETB    TR1
                      84     
003B 80FE             85             SJMP    $
                      86             
                      87     ; END OF MAIN
                      88     
                      89     ;===============================================================================
                      90             USING   1
003D                  91     TIMER0:
                      92     ; 定时器0中断服程序, 用于数码管的动态扫描
                      93     ; DIS_INDEX --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量
                      94     ; DIS_DIGIT --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,
                      95     ;               选通P2.0口数码管
                      96     ; DIS_BUF   --- 显于缓冲区基地址                
                      97     
003D C0E0             98             PUSH    ACC
003F C0D0             99             PUSH    PSW
0041 C082            100             PUSH    DPL
0043 C083            101             PUSH    DPH
0045 75D008          102             MOV     PSW, #08H               ; WORK 1
                     103             
                     104             USING   1
                     105             
0048 758CFC          106             MOV     TH0,#0FCH
004B 758A17          107             MOV     TL0,#017H
                     108             
004E 75A0FF          109             MOV     P2,#0FFH                ; 先关闭所有数码管
                     110             
0051 7400     F      111             MOV     A,#DIS_BUF              ; 获得显示缓冲区基地址
0053 2500     F      112             ADD     A,DIS_INDEX             ; 获得偏移量
0055 F8              113             MOV     R0,A                    ; R0 = 基地址 + 偏移量
0056 E6              114             MOV     A,@R0                   ; 获得显示代码
0057 F580            115             MOV     P0,A                    ; 显示代码传送到P0口
                     116             
0059 8500A0   F      117             MOV     P2,DIS_DIGIT            ; 
                     118     
005C E500     F      119             MOV     A,DIS_DIGIT             ; 位选通值右移, 下次中断时选通下一位数码管
005E 03              120             RR      A
005F F500     F      121             MOV     DIS_DIGIT,A
                     122             
0061 0500     F      123             INC     DIS_INDEX               ; DIS_INDEX加1, 下次中断时显示下一位
0063 530007   F      124             ANL     DIS_INDEX,#0x07         ; 当DIS_INDEX等于8(0000 1000)时, 清0
A51 MACRO ASSEMBLER  WL012                                                                02/12/2004 12:06:14 PAGE     3

                     125             
0066 E500     F      126             MOV     A,DIS_INDEX
0068 7003            127             JNZ     END_TIMER0
                     128             
006A 120000   F      129             LCALL   UPDATE_DISBUF
                     130             
006D                 131     END_TIMER0:
006D D083            132             POP     DPH
006F D082            133             POP     DPL
0071 D0D0            134             POP     PSW
0073 D0E0            135             POP     ACC
                     136             
0075 32              137             RETI
                     138     
                     139     ; END OF timer0
                     140     

⌨️ 快捷键说明

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