📄 cfctrlv10.lst
字号:
256
257 ************************************************/
258 void delayms( uchar ticks )
259 {
260 1 uint Count;
261 1 uchar Tick;
262 1 for (Tick=ticks;Tick>0;Tick--)
263 1 {
264 2 for (Count=0;Count<=500;Count++);
265 2 wdgclr=!wdgclr;
266 2 }
267 1
268 1 }
269 /************************************************************************/
270 /* PROCEDURE: Erase_One_Sector */
271 /* */
272 /* This procedure can be used to erase a total of 4096 bytes. */
273 /* */
274 /* Input: */
275 /* Dst DESTINATION address where the erase operation starts */
276 /* */
277 /* Output: */
278 /* NONE */
279 /************************************************************************/
280
281 void Erase_One_Sector (uint Sec)
282 {
283 1 // uchar xdata *Temp;
284 1 //Temp=0x0000;
285 1 FPGH=(page/256)&0x03;FPGL=5;
286 1 XBYTE[0x8555]=0Xaa;
287 1 FPGL=2;
288 1 XBYTE[0x8aaa]=0x55;
289 1 FPGL=5;
290 1 XBYTE[0x8555]=0X80;
291 1 FPGL=5;
292 1 XBYTE[0x8555]=0Xaa;
293 1 FPGL=2;
294 1 XBYTE[0x8aaa]=0X55;
295 1 FPGH=Sec/256;FPGL=Sec%256;
296 1 XBYTE[0x8000]=0x30;
297 1 delayms(25); /* Delay time = Tse */
298 1 }
299
300 /************************************************************************/
301 /* PROCEDURE: Check_Toggle_Ready */
302 /* */
303 /* During the internal program cycle, any consecutive read operation */
C51 COMPILER V7.06 CFCTRLV10 10/27/2004 11:26:40 PAGE 6
304 /* on DQ6 will produce alternating 0's and 1's (i.e. toggling between */
305 /* 0 and 1). When the program cycle is completed, DQ6 of the data will */
306 /* stop toggling. After the DQ6 data bit stops toggling, the device is */
307 /* ready for next operation. */
308 /* */
309 /* Input: */
310 /* Dst Must already be set-up by the caller */
311 /* */
312 /* Output: */
313 /* None */
314 /************************************************************************/
315
316 void Check_Toggle_Ready (uchar xdata *Dst)
317 {
318 1 uchar Loop = TRUE;
319 1 uchar PreData;
320 1 uchar CurrData;
321 1 uchar TimeOut = 0;
322 1 wdgclr=!wdgclr;
323 1 PreData = *Dst;
324 1 PreData = PreData & 0x40;
325 1 while ((TimeOut< 0xff) && (Loop))
326 1 {
327 2 CurrData = *Dst;
328 2 CurrData = CurrData & 0x40;
329 2 if (PreData == CurrData)
330 2 Loop = FALSE; /* ready to exit the while loop */
331 2 PreData = CurrData;
332 2 TimeOut++;
333 2 wdgclr=!wdgclr;
334 2 }
335 1 }
336 /************************************************************************/
337 /* PROCEDURE: Program_One_Byte */
338 /* */
339 /* This procedure can be used to program ONE byte of data to the */
340 /* 39VF016. */
341 /* */
342 /* NOTE: It is necessary to first erase the sector containing the */
343 /* byte to be programmed. */
344 /* */
345 /* Input: */
346 /* Src The BYTE which will be written to the 39VF016 */
347 /* Dst DESTINATION address which will be written with the */
348 /* data passed in from Src */
349 /* */
350 /* Output: */
351 /* None */
352 /************************************************************************/
353
354 void Program_One_Byte (uchar Src, uchar xdata *Dst)
355 {
356 1 // uchar xdata *Temp;
357 1 uchar xdata *DestBuf;
358 1 wdgclr=!wdgclr;
359 1
360 1 DestBuf = Dst;
361 1 FPGH=(page/256)&0x03;FPGL=5;
362 1 XBYTE[0x8555]=0Xaa;
363 1 FPGL=2;
364 1 XBYTE[0x8aaa]=0x55;
365 1 FPGL=5;
C51 COMPILER V7.06 CFCTRLV10 10/27/2004 11:26:40 PAGE 7
366 1 XBYTE[0x8555]=0Xa0;
367 1 FPGH=page/256;FPGL=page%256;
368 1 *DestBuf=Src;
369 1 Check_Toggle_Ready(DestBuf); /* wait for TOGGLE bit to get ready */
370 1 }
371
372 /************************************************************************/
373 /* PROCEDURE: Program_One_Sector */
374 /* */
375 /* This procedure can be used to program a total of 4096 bytes of data */
376 /* to the SST39VF016. */
377 /* */
378 /* NOTES: 1. It is necessary to first erase the sector before the */
379 /* programming. */
380 /* 2. This sample code assumes the destination address passed */
381 /* from the calling function is the starting address of the */
382 /* sector. */
383 /* */
384 /* Input: */
385 /* Src SOURCE address containing the data which will be */
386 /* written to the 39VF016 */
387 /* Dst DESTINATION address which will be written with the */
388 /* data passed in from Src */
389 /* */
390 /* Output: */
391 /* None */
392 /************************************************************************/
393 /*
394 void Program_One_Sector (uint Dst)
395 {
396 uchar xdata *SourceBuf;
397 uchar xdata *DestBuf;
398
399 uint Index;
400 page=Dst;
401 SourceBuf = 0x1000;
402 DestBuf = 0x8000;
403
404 Erase_One_Sector(Dst); /* erase the sector first */
405 /*
406 for (Index = 0; Index < 4096; Index++)
407 {
408 Program_One_Byte( *SourceBuf, DestBuf);
409 DestBuf++;
410 SourceBuf++;
411 }
412 }
413 */
414 void Program_One_Sector (uint Dst)
415 {
416 1 uchar xdata *SourceBuf;
417 1 uchar xdata *DestBuf;
418 1
419 1 uint Index;
420 1 page=Dst;
421 1 SourceBuf = 0x1008;
422 1 DestBuf = 0x8000;
423 1
424 1 Erase_One_Sector(Dst); /* erase the sector first */
425 1
426 1 for (Index = 0; Index < 4096; Index++)
427 1 {
C51 COMPILER V7.06 CFCTRLV10 10/27/2004 11:26:40 PAGE 8
428 2 Program_One_Byte( *SourceBuf, DestBuf);
429 2 DestBuf++;
430 2 SourceBuf++;
431 2 }
432 1 }
433
434 /*
435 void Program_One_Sector (uint Dst)
436 {
437 uchar xdata *SourceBuf;
438 uchar xdata *DestBuf;
439 uchar fpgh0,fpgh1,fpgl1;
440 uint Index;
441 page=Dst; //sector number
442 fpgh0=(page/256)&0x06;
443 fpgh1=page/256;
444 fpgl1=page%256;
445
446 SourceBuf = 0x1008; //ram address
447 DestBuf = 0x8000; //flash address
448 Erase_One_Sector(Dst); /* erase the sector first */
449 /*
450 for (Index = 0; Index < 4096; Index++)
451 {
452 FPGH=fpgh0;FPGL=5;
453 XBYTE[0x8555]=0Xaa;
454 FPGL=2;
455 XBYTE[0x8aaa]=0x55;
456 FPGL=5;
457 XBYTE[0x8555]=0Xa0;
458 FPGH=fpgh1;FPGL=fpgl1;
459 *DestBuf=*SourceBuf;
460 Check_Toggle_Ready(DestBuf);
461 DestBuf++;
462 SourceBuf++;
463 }
464 }
465 */
466 //***********************************************
467 // 接收数据
468 //************************************************
469 void rece_picture(bit type)
470 {
471 1 uint i;
472 1 uchar xdata *op;
473 1 uchar xdata *sp; //0x1000 test 0x1000
474 1 wdgclr=!wdgclr;
475 1 if(type)
476 1 op=0;
477 1 else
478 1 op=0x0000;
479 1 sp=0x1008;
480 1 for(i=0;i<1024;i++)*op++=*sp++; //写入RAM 1000H 单元 位图数据
481 1 }
482 //********************************************
483 void delay1s()
484 {
485 1 uint i,j;
486 1 for(i=0;i<0xfff;i++)
487 1 {for(j=0;j<0x8;j++);
488 2 wdgclr=!wdgclr;
489 2 }
C51 COMPILER V7.06 CFCTRLV10 10/27/2004 11:26:40 PAGE 9
490 1 }
491 //***********************************************
492 void test()
493 {
494 1 //uchar xdata *rp;
495 1 uchar xdata *p;
496 1 //uchar xdata *sp;
497 1 p=0x0000;
498 1 memset(p,0x00,1024);
499 1 delay1s();//1
500 1 p=0x0000;
501 1 memset(p,255,255);
502 1 delay1s(); //4
503 1
504 1 p=0x0100;
505 1 memset(p,255,255);
506 1 delay1s(); //4
507 1
508 1 p=0x0200;
509 1 memset(p,255,255);
510 1 delay1s();//8
511 1
512 1 p=0x0300;
513 1 memset(p,255,255);
514 1 delay1s();//15
515 1 }
516
517 /*
518 ************************************
519 通讯协议解析 接收数据
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -