📄 wl008.lst
字号:
170 //* 单一字节读取
171 //* 传入参数: 无
172 //* 返回值: 读取的字节
173
174 unsigned char byte_read()
175 {
176 1 unsigned int addr;
177 1 unsigned char read_data;
178 1
179 1 addr = BYTE_ADDR; // 设置要读取的地址
C51 COMPILER V7.08 WL008 02/17/2004 12:04:27 PAGE 4
180 1 SCK = 0;
181 1 CS = 0;
182 1 if(addr & 0x100)
183 1 {
184 2 outbyt(READ_INST | 0x08);// 传送读取指令和地址最高位"1"
185 2 }
186 1 else
187 1 {
188 2 outbyt(READ_INST); // 传送读取指令和地址最高位"0"
189 2 }
190 1 outbyt((unsigned char)addr); // 传送地址低字节
191 1 read_data = inbyt(); // 读取字节
192 1 SCK = 0;
193 1 CS = 1;
194 1
195 1 return read_data;
196 1 }
197
198 //********************************************************************************************
199 //* 页写入
200 //* 传入参数: 无
201 //* 返回值: 无
202
203 void page_write()
204 {
205 1 unsigned int addr;
206 1 addr = PAGE_ADDR; // 设置要写入的地址
207 1 SCK = 0;
208 1 CS = 0;
209 1 if(addr & 0x100)
210 1 {
211 2 outbyt(WRITE_INST | 0x08); //传送写入指令和地址最高位"1"
212 2 }
213 1 else
214 1 {
215 2 outbyt(WRITE_INST); // 传送写入指令和地址最高位"0"
216 2 }
217 1 outbyt((unsigned char)addr); // 传送地址低字节
218 1 outbyt(PAGE_DATA1); // 传送第一个字节数据
219 1 outbyt(PAGE_DATA2); // 传送第二个字节数据
220 1 outbyt(PAGE_DATA3); // 传送第三个字节数据
221 1 SCK = 0;
222 1 CS = 1;
223 1 wip_poll(); // 检测写入进度
224 1 }
225
226 //********************************************************************************************
227 //* 连续读取3个字节
228 //* 传入参数: 无
229 //* 返回值: 最后一次读取的字节
230
231 unsigned char sequ_read()
232 {
233 1 unsigned int addr;
234 1 unsigned char read_data;
235 1
236 1 addr = PAGE_ADDR; // 设置第一个字节的地址
237 1 SCK = 0;
238 1 CS = 0;
239 1 if(addr & 0x100)
240 1 {
241 2 outbyt(READ_INST | 0x08); //传送读取指令和地址最高位"1"
C51 COMPILER V7.08 WL008 02/17/2004 12:04:27 PAGE 5
242 2 }
243 1 else
244 1 {
245 2 outbyt(READ_INST); // 传送读取指令和地址最高位"0"
246 2 }
247 1 outbyt((unsigned char)addr); // 传送地址低字节
248 1
249 1 inbyt(); // 读取第一个字节
250 1 inbyt(); // 读取第二个字节
251 1 read_data = inbyt(); // 读取第三个字节
252 1
253 1 SCK = 0;
254 1 CS = 1;
255 1
256 1 return read_data;
257 1 }
258
259 //********************************************************************************************
260 //* 复位看门狗定时器
261 //* 传入参数: 无
262 //* 返回值: 无
263
264 void rst_wdog()
265 {
266 1 CS = 0;
267 1 _nop_();
268 1 _nop_();
269 1 CS = 1;
270 1 }
271
272 //********************************************************************************************
273 //* 写入进度查询
274 //* 传入参数: 无
275 //* 返回值: 无
276
277 void wip_poll()
278 {
279 1 unsigned char i; // 设置最大的查询次数
280 1
281 1 //// 如果WIP位为'1'并且未达到最大查询次数, 则继续查询
282 1 //// 如果WIP位为'0', 则写入周期完成, 返回
283 1 for(i = 0; i < MAX_POLL; i++)
284 1 {
285 2 if(rdsr_cmd() & 0x01) // 读取状态寄存器
286 2 {
287 3 continue;
288 3 }
289 2 return;
290 2 }
291 1 }
292
293
294 //********************************************************************************************
295 //* 传送字节数据到EEPROM, 高位在前
296 //* 传入参数: write_data --- 要传送的字节
297 //* 返回值: 无
298
299 void outbyt(unsigned char write_data)
300 {
301 1 unsigned char i;
302 1 for(i = 0; i < 8; i++)
303 1 {
C51 COMPILER V7.08 WL008 02/17/2004 12:04:27 PAGE 6
304 2 SCK = 0;
305 2 SI = (bit)(write_data & 0x80); //传送一个位到SI
306 2 write_data <<= 1;
307 2 SCK = 1;
308 2 }
309 1 SI = 0;
310 1 }
311
312 //********************************************************************************************
313 //* 从EEPROM接收数据, 高位在前
314 //* 传入参数: 无
315 //* 返回值: A --- 接收到的字节
316
317 unsigned char inbyt()
318 {
319 1
320 1 unsigned char i;
321 1 unsigned char read_data;
322 1 for(i = 0; i < 8; i++)
323 1 {
324 2 SCK = 0;
325 2 read_data <<= 1;
326 2 SCK = 1;
327 2 read_data |= (unsigned char)SO;
328 2 }
329 1 return read_data;
330 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -