乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      stc89le52rc內(nèi)部EEPROM的C51讀寫程序

       昵稱9287347 2012-03-23

      /*
      stc89le52rc內(nèi)部EEPROM的C51讀寫程序
      串口命令(9600)
      1.0x35可以寫eeprom第一個字節(jié)數(shù)據(jù)0x0c
      2.0x34可以使用檢查eeprom第一個字節(jié)的數(shù)據(jù),正確就會反饋一串字符
      3.0x33可以讀取eeprom前256個字節(jié)數(shù)據(jù)

      */
      #include<math.h>
      #include<stdio.h>
      #include<reg52.h>
      #include <intrins.h>
      #define NOP5 _nop_();_nop_();_nop_(); _nop_();_nop_();
      #define uchar unsigned char
      #define uint unsigned int

      sfr AUXR = 0x8e;
      sfr AUXR1 = 0xa2;
      sfr P4 = 0xe8;
      sfr XICON = 0xc0;
      sfr IPH = 0xb7;
      sfr WDT_CONTR = 0xe1;
      sfr ISP_DATA = 0xe2;
      sfr ISP_ADDRH = 0xe3;
      sfr ISP_ADDRL = 0xe4;
      sfr ISP_CMD = 0xe5;
      sfr ISP_TRIG = 0xe6;
      sfr ISP_CONTR = 0xe7;

      #define ENABLE_ISP 0x81     //小于20MHZ使用
      #define DATA_FLASH_START_ADDR 0x2000//stc89le52rc eeprom起始地址
      #define TEST_CODE 0x34

      uchar code start_string[]={"EEPROM first data correct!\n"};
      uint i=0,k;

      uchar EEPROM_READ(uint flash_addres);
      void IAP_disable();
      void EEPROM_FORMAT(uint flash_addres);
      void EEPROM_WRITE(uint flash_addres, isp_data);
      void test_read();
      void send_byte(uchar bt);
      void send_string(uchar *ptr, uchar len);
      void read_string(uint start_addr,uint num);

      void read_string(uint start_addr, uint num)
      {
      static uint j,temp;
      for(j=0;j<num;j++)
      {
         temp=EEPROM_READ(start_addr+j);
         NOP5;
         send_byte(temp);
      }
      }
      void send_string(uchar * ptr, uchar len)
      {
      static uint j;
      for(j=0;j<len;j++)
      {
         send_byte(*(ptr+j));
      }
      }

      void send_byte(uchar by)
      {
      SBUF=by;
      while(!TI);
      TI=0;
      }

      void IAP_disable()
      {
      ISP_CONTR=0;
      ISP_CMD=0;
      ISP_TRIG=0;
      }
      uchar EEPROM_READ(uint flash_addres) //讀取數(shù)據(jù)
      {
      uchar read;
      ISP_ADDRH=flash_addres>>8;
      ISP_ADDRL=flash_addres;
      ISP_CONTR=ENABLE_ISP;
      ISP_CMD=0x01 ;  

      EA=0;
      ISP_TRIG=0x46;
      ISP_TRIG=0xb9 ;
      NOP5;
      read=ISP_DATA;
      IAP_disable();
      EA=1;

      return(ISP_DATA);
      }

      void EEPROM_WRITE(uint flash_addres,isp_data) //寫入數(shù)據(jù)
      {
      ISP_ADDRH=flash_addres>>8;
      ISP_ADDRL=flash_addres;
      ISP_CONTR=ENABLE_ISP;
      ISP_CMD=0x02 ;

      EA=0;
      ISP_DATA=isp_data;

      ISP_TRIG=0x46;
      ISP_TRIG=0xb9;
      IAP_disable();
      EA=1;
      }

      void EEPROM_FORMAT(uint flash_addres) //擦除
      {
      ISP_ADDRH=flash_addres>>8;
      ISP_ADDRL=flash_addres;
      ISP_CONTR=ENABLE_ISP;
      ISP_CMD=0x03;

      EA=0;

      ISP_TRIG=0x46;
      ISP_TRIG=0xb9;
      IAP_disable();
      EA=1;

      }
      void test_read()
      {
      if(RI)
      {
         RI=0;
         switch(SBUF)
         {
          case 0x34:
           k=EEPROM_READ(DATA_FLASH_START_ADDR);
           NOP5;
           if(0x0c==k)
           {
            send_string(start_string,sizeof(start_string));
           }
           send_byte(k);
           k=0;
          break;
          case 0x33:
           read_string(DATA_FLASH_START_ADDR, 256);
           break;
          case 0x35:
          
           EEPROM_FORMAT(DATA_FLASH_START_ADDR); //寫已經(jīng)有數(shù)據(jù)的扇區(qū)前要寫擦除
           NOP5;
           NOP5;
           NOP5;          //可以適當(dāng)增減延時
           NOP5;
           NOP5;
           NOP5;
           NOP5;
           EEPROM_WRITE(DATA_FLASH_START_ADDR,TEST_CODE);//寫一個0x0c
           break;
          default:
           if(0xff==i)
           {
            i=0;
           }
           k=EEPROM_READ(DATA_FLASH_START_ADDR+(i++));
           send_byte(DATA_FLASH_START_ADDR+i);
           send_byte(k);
           k=0;
          break;
         }

      }
      void init()
      {
      TMOD=0x20;SCON=0x50;
      TL1=0xfd;TH1=0xfd;
      TR1=1;ET1=1;ES=1;

      }
      void main()
      {
      init();

      while(1)
      {
         test_read();
      }
      }
       

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多