wl008.lst

来自「周立功的51单片机试验例程,我当年就是靠这个学会单片机的」· LST 代码 · 共 378 行 · 第 1/2 页

LST
378
字号
A51 MACRO ASSEMBLER  WL008                                                                02/17/2004 12:04:13 PAGE     1


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

LOC  OBJ            LINE     SOURCE

                       1     ;********************************************************************************
                       2     ;*                                                                              *
                       3     ;*    File       : wl008.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     ;*                 X5045读写演示程序                                            *
                      13     ;*                                                                              *
                      14     ;*                                                                              *
                      15     ;*                                                                              *
                      16     ;********************************************************************************
                      17     NAME    WL008
                      18     
                      19     CODE_SEG        SEGMENT CODE
                      20     ;DATA_SEG       SEGMENT DATA
                      21     STACK_SEG       SEGMENT IDATA
                      22     
  0094                23     CS      BIT     P1.4
  0092                24     SI      BIT     P1.2
  0090                25     SCK     BIT     P1.0
  0093                26     SO      BIT     P1.3
                      27     
  0006                28     WREN_INST       EQU     06H             ; 写入使能指令(WREN)
  0004                29     WRDI_INST       EQU     04H             ; 写入禁止指令(WRDI)
  0001                30     WRSR_INST       EQU     01H             ; 写入状态寄存器指令(WRSR)
  0005                31     RDSR_INST       EQU     05H             ; 读取状态寄存器指令(RDSR)
  0002                32     WRITE_INST      EQU     02H             ; 写入存储器指令(WRITE)
  0003                33     READ_INST       EQU     03H             ; 读取存储器指令(READ)
                      34     
  0055                35     BYTE_ADDR       EQU     55H             ; 字节模式写入地址
  0011                36     BYTE_DATA       EQU     11H             ; 字节模式写入数据
  01F0                37     PAGE_ADDR       EQU     1F0H            ; 页写入模式地址
  0022                38     PAGE_DATA1      EQU     22H             ; 页模式写入第一个示
  0033                39     PAGE_DATA2      EQU     33H             ; 页模式写入第二个示
  0044                40     PAGE_DATA3      EQU     44H             ; 页模式写入第雀鍪据
                      41     
  0000                42     STATUS_REG      EQU     00H             ; 要写入到状态寄存器的值
                      43     
  0099                44     MAX_POLL        EQU     99H             ; 最大查询次数
                      45     
                      46     
----                  47             RSEG    STACK_SEG
0000                  48     STACK:          DS      20
                      49     
                      50     ;******************************************************************************************
                      51     ;*      CODE
                      52     ;******************************************************************************************
----                  53             CSEG    AT      0000H           ; 复位向量
0000 020000   F       54             LJMP    MAIN
                      55     
                      56                                                     
                      57     
----                  58             RSEG    CODE_SEG
A51 MACRO ASSEMBLER  WL008                                                                02/17/2004 12:04:13 PAGE     2

0000                  59     MAIN:
0000 758100   F       60             MOV     SP,#(STACK-1)           ; 初始化栈指针
0003 C2AF             61             CLR     EA                      ;
                      62     
0005 D293             63             SETB    SO                              ; 初始化I/O口
0007 C292             64             CLR     SI
0009 C290             65             CLR     SCK
000B D294             66             SETB    CS
000D 120000   F       67             LCALL   WREN_CMD                ; 使能写入
0010 120000   F       68             LCALL   WRSR_CMD                ; 写入00H到状态寄存器
0013 120000   F       69             LCALL   WREN_CMD                ; 使能写入
0016 120000   F       70             LCALL   BYTE_WRITE              ; 写入11H到地址55H (字节写入)
0019 120000   F       71             LCALL   BYTE_READ               ; 读取地址55H处的数据(字节读取)
001C 120000   F       72             LCALL   WREN_CMD                ; 使能写入
001F 120000   F       73             LCALL   PAGE_WRITE              ; 页写入22H/33H/44H到地址1F0/1F1/1F2H
0022 120000   F       74             LCALL   SEQU_READ               ; 连续读取地址1F0/1F1/1F2H
0025 120000   F       75             LCALL   RST_WDOG                ; 清除看门狗
0028 120000   F       76             LCALL   WRDI_CMD                ; 写入禁止指令
                      77             
002B D294             78             SETB    CS
002D                  79     MAIN_LP:
002D 80FE             80             SJMP    MAIN_LP
                      81     ;******************************************************************************************
                      82     ;* WREN_CMD: 写入使能指令
                      83     ;* 传入参数: 无
                      84     ;* 返回值: 无
                      85     ;******************************************************************************************
002F                  86     WREN_CMD:
002F C290             87             CLR     SCK
0031 C294             88             CLR     CS
0033 7406             89             MOV     A, #WREN_INST
0035 120000   F       90             LCALL   OUTBYT                  ; 传送写入使能指令
0038 C290             91             CLR     SCK
003A D294             92             SETB    CS
003C 22               93             RET
                      94     
                      95     ;******************************************************************************************
                      96     ;* WRDI_CMD: 写入禁止指令
                      97     ;* 传入参数: 无
                      98     ;* 返回值: 无
                      99     ;******************************************************************************************
003D                 100     WRDI_CMD:
003D C290            101             CLR     SCK
003F C294            102             CLR     CS
0041 7404            103             MOV     A,#WRDI_INST
0043 120000   F      104             LCALL   OUTBYT                  ; 传送写入禁止指令
0046 C290            105             CLR     SCK
0048 D294            106             SETB    CS
004A 22              107             RET
                     108     
                     109     ;******************************************************************************************
                     110     ;* WRSR_CMD: 写入数据到状态寄存器
                     111     ;* 传入参数: 无
                     112     ;* 返回值: 无
                     113     ;******************************************************************************************
004B                 114     WRSR_CMD:
004B C290            115             CLR     SCK
004D C294            116             CLR     CS
004F 7401            117             MOV     A,#WRSR_INST
0051 120000   F      118             LCALL   OUTBYT                  ; 传送状态寄存器写入指令
0054 7400            119             MOV     A,#STATUS_REG
0056 120000   F      120             LCALL   OUTBYT                  ; 传送要写入的数据
0059 C290            121             CLR     SCK
                     122                                                                
                     123     
005B D294            124             SETB    CS
A51 MACRO ASSEMBLER  WL008                                                                02/17/2004 12:04:13 PAGE     3

005D 120000   F      125             LCALL   WIP_POLL                ; 检测写入进度
0060 22              126             RET
                     127     ;******************************************************************************************
                     128     ;* RDSR_CMD: 读取状态寄存器
                     129     ;* 传入参数: 无
                     130     ;* 返回值: A --- 状态寄存器值
                     131     ;******************************************************************************************
0061                 132     RDSR_CMD:
0061 C290            133             CLR     SCK
0063 C294            134             CLR     CS
0065 7405            135             MOV     A, #RDSR_INST
0067 120000   F      136             LCALL   OUTBYT                  ; 传送状态寄存器读取指令
006A 120000   F      137             LCALL   INBYT                   ; 读取状态寄存器
006D C290            138             CLR     SCK
006F D294            139             SETB    CS
0071 22              140             RET
                     141     ;******************************************************************************************
                     142     ;* BYTE_WRITE: 单一字节写入
                     143     ;* 传入参数: 无
                     144     ;* 返回值: 无
                     145     
                     146     ;******************************************************************************************
0072                 147     BYTE_WRITE:
0072 900055          148             MOV     DPTR,#BYTE_ADDR         ; 设置要写入的地址
0075 C290            149             CLR     SCK
0077 C294            150             CLR     CS
0079 7402            151             MOV     A,#WRITE_INST
007B 8583F0          152             MOV     B,DPH
007E A2F0            153             MOV     C,B.0
0080 92E3            154             MOV     ACC.3,C
0082 120000   F      155             LCALL   OUTBYT                  ; 传送写指令和地址最高位
0085 E582            156             MOV     A,DPL
0087 120000   F      157             LCALL   OUTBYT                  ; 传送地址低字节
008A 7411            158             MOV     A,#BYTE_DATA
008C 120000   F      159             CALL    OUTBYT                  ; 传送要写入的字节数据   
008F C290            160             CLR     SCK
0091 D294            161             SETB    CS
0093 120000   F      162             LCALL   WIP_POLL                ; 检测写入进度
0096 22              163             RET
                     164     
                     165     ;******************************************************************************************
                     166     ;* BYTE_READ: 单一字节读取
                     167     ;* 传入参数: 无
                     168     ;* 返回值: A --- 读取的字节
                     169     
                     170     ;******************************************************************************************
0097                 171     BYTE_READ:
0097 900055          172             MOV     DPTR,#BYTE_ADDR         ; 设置要读取的地址
009A C290            173             CLR     SCK
009C C294            174             CLR     CS
009E 7403            175             MOV     A,#READ_INST
00A0 8583F0          176             MOV     B,DPH

⌨️ 快捷键说明

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