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

📄 up51s010.lst

📁 UP51C开发板所有源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  UP51S010                                                             01/06/2005 15:17:35 PAGE     1


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

LOC  OBJ            LINE     SOURCE

                       1     ;/*******************************************************************************
                       2     ;*                                                                              *
                       3     ;*    File       : uP51s010.c                                                   *
                       4     ;*    Date       : 2004-9-5                                                     *
                       5     ;*    Version    : 1.0                                                          *
                       6     ;*                                                                              *
                       7     ;*    Author     : kevin           kevin@dz51.com                               *
                       8     ;*    Company    : Http://www.dz51.com                                          *
                       9     ;*                                                                              *
                      10     ;********************************************************************************
                      11     ;*    Descriptoon:                                                              *
                      12     ;*                 计数器实验                                                   *
                      13     ;*                 定时器1工作于16位计数模式,记录外部脉冲的个数;              *
                      14     ;*                 定时器0工作于定时模式,用于进行动态扫描显示                  *
                      15     ;*                                                                              *
                      16     ;*                 此程序可用按键AN4来演示,但是由于按键有抖动现象,所以每按一次*
                      17     ;*                 有可能产生多次计数脉冲                                       *
                      18     ;*                                                                              *
                      19     ;*        程序运行后按下AN4,则数码管记数增加!                                  *
                      20     ;*                                                                              *
                      21     ;********************************************************************************
                      22     ;*    计数值单位,寄存器与数码管对应关系:                                        *
                      23     ;*                                                                              *
                      24     ;* --- 单位 ---------- 数码管端口 ---- 缓冲区 ---------                         *
                      25     ;*     千位               P23       DIS_BUF+3                                   *
                      26     ;*     百位               P22       DIS_BUF+2                                   *
                      27     ;*     十位               P21       DIS_BUF+1                                   *
                      28     ;*     个位               P20       DIS_BUF+0                                   *
                      29     ;*                                                                              *
                      30     ;********************************************************************************
                      31     
                      32     NAME    WL012
                      33     
                      34     CODE_SEG        SEGMENT CODE  
                      35     DATA_SEG        SEGMENT DATA 
                      36     STACK_SEG       SEGMENT IDATA        
                      37     
----                  38             RSEG    DATA_SEG
0000                  39     DIS_DIGIT:      DS      1
0001                  40     DIS_INDEX:      DS      1
0002                  41     DIS_BUF:        DS      4
0006                  42     TMP:            DS      1
                      43     
----                  44             RSEG    STACK_SEG
0000                  45     STACK:          DS      20      
                      46     
                      47     ;===============================================================================
----                  48     CSEG    AT      00000H
0000 020000   F       49             LJMP    MAIN
                      50             
----                  51     CSEG    AT      0000BH
000B 020000   F       52             LJMP    TIMER0
                      53     
                      54     ;===============================================================================
----                  55             RSEG    CODE_SEG
0000                  56     MAIN:
0000 758100   F       57             MOV     SP,#(STACK-1);
                      58     
A51 MACRO ASSEMBLER  UP51S010                                                             01/06/2005 15:17:35 PAGE     2

0003 7580FF           59             MOV     P0,#0FFH
0006 75A0FF           60             MOV     P2,#0FFH
0009 758951           61             MOV     TMOD,#051H              ; 定时器0工作模式1, 16位定时方式
                      62                                                             ; 定时器1工作模式1, 16位计数方式
000C E4               63             CLR     A
000D F58D             64             MOV     TH1,A
000F F58B             65             MOV     TL1,A
0011 758CFC           66             MOV     TH0,#0FCH
0014 758A17           67             MOV     TL0,#017H
                      68      
                      69             ; 初始化显示缓冲区
                      70     
0017 7500C0   F       71             MOV     DIS_BUF+03H,#0C0H       ; 0xc0是'0'的显示代码
001A 7500C0   F       72             MOV     DIS_BUF+02H,#0C0H
001D 7500C0   F       73             MOV     DIS_BUF+01H,#0C0H
0020 7500C0   F       74             MOV     DIS_BUF,#0C0H
                      75     
0023 7500FE   F       76             MOV     DIS_DIGIT,#0FEH ; 初始显示P20口数码管
0026 F500     F       77             MOV     DIS_INDEX,A
                      78     
0028 75A882           79             MOV     IE,#082H                ; 使能TIMER0中断
                      80     
002B D28C             81             SETB    TR0
002D D28E             82             SETB    TR1
                      83     
002F 80FE             84             SJMP    $
                      85             
                      86     ; END OF MAIN
                      87     
                      88     ;===============================================================================
                      89             USING   1
0031                  90     TIMER0:
                      91     ; 定时器0中断服程序, 用于数码管的动态扫描
                      92     ; DIS_INDEX --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量
                      93     ; DIS_DIGIT --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,
                      94     ;               选通P2.0口数码管
                      95     ; DIS_BUF   --- 显于缓冲区基地址                
                      96     
0031 C0E0             97             PUSH    ACC
0033 C0D0             98             PUSH    PSW
0035 C082             99             PUSH    DPL
0037 C083            100             PUSH    DPH
0039 75D008          101             MOV     PSW, #08H               ; WORK 1
                     102             
                     103             USING   1
                     104             
003C 758CFC          105             MOV     TH0,#0FCH
003F 758A17          106             MOV     TL0,#017H
                     107             
0042 75A0FF          108             MOV     P2,#0FFH                ; 先关闭所有数码管
                     109             
0045 7400     F      110             MOV     A,#DIS_BUF              ; 获得显示缓冲区基地址
0047 2500     F      111             ADD     A,DIS_INDEX             ; 获得偏移量
0049 F8              112             MOV     R0,A                    ; R0 = 基地址 + 偏移量
004A E6              113             MOV     A,@R0                   ; 获得显示代码
004B F580            114             MOV     P0,A                    ; 显示代码传送到P0口
                     115             
004D 8500A0   F      116             MOV     P2,DIS_DIGIT            ; 
                     117     
0050 E500     F      118             MOV     A,DIS_DIGIT             ; 位选通值右移, 下次中断时选通下一位数码管
0052 23              119             RL      A
0053 F500     F      120             MOV     DIS_DIGIT,A
                     121             
0055 0500     F      122             INC     DIS_INDEX               ; DIS_INDEX加1, 下次中断时显示下一位
0057 530003   F      123             ANL     DIS_INDEX,#0x03         ; 当DIS_INDEX等于4(0000 0100)时, 清0
                     124             
A51 MACRO ASSEMBLER  UP51S010                                                             01/06/2005 15:17:35 PAGE     3

005A E500     F      125             MOV     A,DIS_INDEX
005C 7003            126             JNZ     END_TIMER0
                     127             
005E 120000   F      128             LCALL   UPDATE_DISBUF
                     129             
0061                 130     END_TIMER0:
0061 D083            131             POP     DPH
0063 D082            132             POP     DPL
0065 D0D0            133             POP     PSW
0067 D0E0            134             POP     ACC
                     135             
0069 32              136             RETI
                     137     

⌨️ 快捷键说明

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