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 + -
显示快捷键?