wl008.lst
来自「单片机开发资料 基于51单片机的单片机开发板 包括《实验例程」· LST 代码 · 共 361 行 · 第 1/2 页
LST
361 行
169 //* 返回值: 读取的字节
170
171 unsigned char byte_read()
172 {
173 1 unsigned int addr;
174 1 unsigned char read_data;
175 1
176 1 addr = BYTE_ADDR; // 设置要读取的地址
177 1 SCK = 0;
178 1 CS = 0;
179 1 if(addr & 0x100)
C51 COMPILER V7.08 WL008 11/03/2004 11:09:37 PAGE 4
180 1 {
181 2 outbyt(READ_INST | 0x08);// 传送读取指令和地址最高位"1"
182 2 }
183 1 else
184 1 {
185 2 outbyt(READ_INST); // 传送读取指令和地址最高位"0"
186 2 }
187 1 outbyt((unsigned char)addr); // 传送地址低字节
188 1 read_data = inbyt(); // 读取字节
189 1 SCK = 0;
190 1 CS = 1;
191 1
192 1 return read_data;
193 1 }
194
195 //********************************************************************************************
196 //* 页写入
197 //* 传入参数: 无
198 //* 返回值: 无
199
200 void page_write()
201 {
202 1 unsigned int addr;
203 1 addr = PAGE_ADDR; // 设置要写入的地址
204 1 SCK = 0;
205 1 CS = 0;
206 1 if(addr & 0x100)
207 1 {
208 2 outbyt(WRITE_INST | 0x08); //传送写入指令和地址最高位"1"
209 2 }
210 1 else
211 1 {
212 2 outbyt(WRITE_INST); // 传送写入指令和地址最高位"0"
213 2 }
214 1 outbyt((unsigned char)addr); // 传送地址低字节
215 1 outbyt(PAGE_DATA1); // 传送第一个字节数据
216 1 outbyt(PAGE_DATA2); // 传送第二个字节数据
217 1 outbyt(PAGE_DATA3); // 传送第三个字节数据
218 1 SCK = 0;
219 1 CS = 1;
220 1 wip_poll(); // 检测写入进度
221 1 }
222
223 //********************************************************************************************
224 //* 连续读取3个字节
225 //* 传入参数: 无
226 //* 返回值: 最后一次读取的字节
227
228 unsigned char sequ_read()
229 {
230 1 unsigned int addr;
231 1 unsigned char read_data;
232 1
233 1 addr = PAGE_ADDR; // 设置第一个字节的地址
234 1 SCK = 0;
235 1 CS = 0;
236 1 if(addr & 0x100)
237 1 {
238 2 outbyt(READ_INST | 0x08); //传送读取指令和地址最高位"1"
239 2 }
240 1 else
241 1 {
C51 COMPILER V7.08 WL008 11/03/2004 11:09:37 PAGE 5
242 2 outbyt(READ_INST); // 传送读取指令和地址最高位"0"
243 2 }
244 1 outbyt((unsigned char)addr); // 传送地址低字节
245 1
246 1 inbyt(); // 读取第一个字节
247 1 inbyt(); // 读取第二个字节
248 1 read_data = inbyt(); // 读取第三个字节
249 1
250 1 SCK = 0;
251 1 CS = 1;
252 1
253 1 return read_data;
254 1 }
255
256 //********************************************************************************************
257 //* 复位看门狗定时器
258 //* 传入参数: 无
259 //* 返回值: 无
260
261 void rst_wdog()
262 {
263 1 CS = 0;
264 1 _nop_();
265 1 _nop_();
266 1 CS = 1;
267 1 }
268
269 //********************************************************************************************
270 //* 写入进度查询
271 //* 传入参数: 无
272 //* 返回值: 无
273
274 void wip_poll()
275 {
276 1 unsigned char i; // 设置最大的查询次数
277 1
278 1 //// 如果WIP位为'1'并且未达到最大查询次数, 则继续查询
279 1 //// 如果WIP位为'0', 则写入周期完成, 返回
280 1 for(i = 0; i < MAX_POLL; i++)
281 1 {
282 2 if(rdsr_cmd() & 0x01) // 读取状态寄存器
283 2 {
284 3 continue;
285 3 }
286 2 return;
287 2 }
288 1 }
289
290
291 //********************************************************************************************
292 //* 传送字节数据到EEPROM, 高位在前
293 //* 传入参数: write_data --- 要传送的字节
294 //* 返回值: 无
295
296 void outbyt(unsigned char write_data)
297 {
298 1 unsigned char i;
299 1 for(i = 0; i < 8; i++)
300 1 {
301 2 SCK = 0;
302 2 SI = (bit)(write_data & 0x80); //传送一个位到SI
303 2 write_data <<= 1;
C51 COMPILER V7.08 WL008 11/03/2004 11:09:37 PAGE 6
304 2 SCK = 1;
305 2 }
306 1 SI = 0;
307 1 }
308
309 //********************************************************************************************
310 //* 从EEPROM接收数据, 高位在前
311 //* 传入参数: 无
312 //* 返回值: A --- 接收到的字节
313
314 unsigned char inbyt()
315 {
316 1
317 1 unsigned char i;
318 1 unsigned char read_data;
319 1 for(i = 0; i < 8; i++)
320 1 {
321 2 SCK = 0;
322 2 read_data <<= 1;
323 2 SCK = 1;
324 2 read_data |= (unsigned char)SO;
325 2 }
326 1 return read_data;
327 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 351 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 9
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?