日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 昵稱9287347 2012-03-23

/*
stc89le52rc內(nèi)部EEPROM的C51讀寫(xiě)程序
串口命令(9600)
1.0x35可以寫(xiě)eeprom第一個(gè)字節(jié)數(shù)據(jù)0x0c
2.0x34可以使用檢查eeprom第一個(gè)字節(jié)的數(shù)據(jù),正確就會(huì)反饋一串字符
3.0x33可以讀取eeprom前256個(gè)字節(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) //寫(xiě)入數(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); //寫(xiě)已經(jīng)有數(shù)據(jù)的扇區(qū)前要寫(xiě)擦除
     NOP5;
     NOP5;
     NOP5;          //可以適當(dāng)增減延時(shí)
     NOP5;
     NOP5;
     NOP5;
     NOP5;
     EEPROM_WRITE(DATA_FLASH_START_ADDR,TEST_CODE);//寫(xiě)一個(gè)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();
}
}
 

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多