📄 93c66.lst
字号:
186 2 op_data=op_data<<1;
187 2 }
188 1 }
189 /***********************************************************************/
190 /*名称: EWEN_93c66() */
191 /*说明: 93c66 的编程启动.操作码(100 11XXXXXXX) */
192 /***********************************************************************/
193 void EWEN_93c66()
194 {
195 1 START_93c66();
196 1 SEND_DATA_93c66(0X0013,0X05); /*送入3 位操作码+11*/
197 1 SEND_DATA_93c66(0X0000,Addr_bit-2); /*送入9 位地址*/
198 1 END_93c66();
199 1 }
200 /***********************************************************************/
201 /*名称: EWDS_93c66() */
202 /*说明: 93c66 的编程关闭.操作码(100 00XXXXXXX) */
203 /**********************************************************************/
204 void EWDS_93c66()
205 {
206 1 START_93c66();
207 1 SEND_DATA_93c66(0X0004,0X03);
208 1 SEND_DATA_93c66(0X0000,Addr_bit);
209 1 END_93c66();
210 1 }
211 /***********************************************************************/ /*名称:READ() */
212 /*说明:93c66 的字读取程序 */
213 /*输入:要读取的字节地址(9 位) */
214 /*输出:读取的字数值 */
215 /**********************************************************************/
216 unsigned char READ(unsigned int address)
217 {
218 1 unsigned char temp1;
219 1 unsigned char temp2;
220 1 START_93c66();
221 1 SEND_DATA_93c66(0X0006,0X03);
222 1 SEND_DATA_93c66(address,Addr_bit);
223 1 temp2=0; /*存放返回数据的缓冲先清零*/
224 1 for(temp1=0;temp1<8;temp1++) /*循环读出8 个数据*/
225 1 {
226 2 temp2=temp2<<1;
227 2 SK_93c66=1;SK_93c66=0;
228 2 if(DO_93c66==1)
229 2 {temp2=temp2|0X01;}
230 2 }
231 1 END_93c66();
232 1
233 1 return temp2;
234 1 }
235 /**********************************************************************/
236 /*名称:WRITE() */
237 /*说明:93c66 的字写入程序 */
238 /*输入: address 要写入的字节地址(9 位) */
239 /* op_data 要写入的数据(8 位) */
C51 COMPILER V7.09 93C66 10/31/2005 17:27:24 PAGE 5
240 /*输出: 读取的字数值 */
241 /**********************************************************************/
242 unsigned char WRITE(unsigned int address,unsigned int op_data)
243 {
244 1 unsigned char temp1;
245 1 unsigned int temp2;
246 1 EWEN_93c66();
247 1 START_93c66();
248 1 SEND_DATA_93c66(0X0005,0X03);
249 1 SEND_DATA_93c66(address,Addr_bit);
250 1 SEND_DATA_93c66(op_data,0X08);
251 1 CS_93c66=0;
252 1 CS_93c66=1;
253 1 temp1=1;
254 1 temp2=50000; /*设置一个最大延时等待数值.注意在不同的晶振下延时是不同的*/
255 1 while(!DO_93c66)
256 1 {
257 2 temp2=temp2-1;
258 2 if(temp2==0)
259 2 {
260 3 temp1=0;//temp1=0则写入失败
261 3 CD_3=0;
262 3 P0=0X08;
263 3 delay1(60000);
264 3 P0=0;
265 3 CD_3=1;
266 3 //break; /*最大等待延时后说明擦除失败*/
267 3 }
268 2 }
269 1 END_93c66();
270 1 EWDS_93c66();
271 1
272 1 return temp1;
273 1 }
274 /***********************************************************************/
275 /*名称:ERASE() */
276 /*说明:93c66 的字擦除程序 */
277 /*输入: address 要擦除的字地址(9 位) */
278 /**********************************************************************/
279 /*
280 unsigned char ERASE(unsigned char address)
281 {data unsigned char temp1;
282 data unsigned int temp2;
283 EWEN_93c66();
284 START_93c66();
285 SEND_DATA_93c66(0X07,0X03);
286 SEND_DATA_93c66(address,0X06);
287 CS_93c66=0;
288 CS_93c66=1;
289 temp1=1;
290 temp2=50000;
291 while(!DO_93c66)
292 {temp2=temp2-1;
293 if(temp2==0)
294 {temp1=0;
295 break;
296 }
297 }
298 END_93c66();
299 EWDS_93c66(); //返回表示擦除状态的特征
300 return temp1;
301 }
C51 COMPILER V7.09 93C66 10/31/2005 17:27:24 PAGE 6
302 */
303
304
305 /**********************************************************************/
306 /*名称:ERAL() */
307 /*说明:93c66 的全部擦除程序 */
308 /**********************************************************************/
309 /*
310 unsigned char ERAL()
311 {data unsigned char temp1;
312 data unsigned int temp2;
313 EWEN_93c66();
314 START_93c66();
315 SEND_DATA_93c66(0X04,0X03);
316 SEND_DATA_93c66(0X20,0X06);
317 CS_93c66=0;
318 CS_93c66=1;
319 temp1=1;
320 temp2=50000;
321 while(!DO_93c66)
322 {temp2=temp2-1;
323 if(temp2==0)
324 {temp1=0;
325 break;
326 }
327 }
328 END_93c66();
329 EWDS_93c66(); //返回表示擦除状态的特征
330 return temp1;
331 }
332 */
333
334
335 /***********************************************************************/
336 /*名称:WRAL() */
337 /*说明:93c66 的写全部程序 */
338 /*输入: op_data 要写入的数据(16 位) */
339 /*输出: 读取的字数值 */
340 /***********************************************************************/
341 /*
342 unsigned char WRAL(unsigned int op_data)
343 {data unsigned char temp1;
344 data unsigned int temp2;
345 EWEN_93c66();
346 START_93c66();
347 SEND_DATA_93c66(0X04,0X03);
348 SEND_DATA_93c66(0X10,0X06);
349 SEND_DATA_93c66(op_data,0X10);
350 CS_93c66=0;
351 CS_93c66=1;
352 temp1=1;
353 temp2=50000; //设置一个最大延时等待数值.注意在不同的晶振下延时是不同的
354 while(!DO_93c66)
355 {temp2=temp2-1;
356 if(temp2==0)
357 {temp1=0;
358 break;
359 }
360 }
361 END_93c66();
362 EWDS_93c66();
363 return op_data;
C51 COMPILER V7.09 93C66 10/31/2005 17:27:24 PAGE 7
364 }
365
366 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 300 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 4
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -