资讯详情

C8051F12X操作FLASH存储器程序

MODE 为数据线的输入输出模式 为单片机的PXMDOUT DBOUT 为输出模式 DBus 为数据端口 Px /--------FL命令传送------// void Comm_Latch_Cycle(uchar COMMAND) { uchar SFRPAGE_SAVE = SFRPAGE; SFRPAGE = CFIG_PAGE; DBMODE = DBOUT; ALE=0; ALE=0; CLE=1; RE=1; WE=1; DBus=COMMAND; //WRI COMMAND WE=0; WE=1; CLE=0; ALE=0; SFRPAGE = SFRPAGE_SAVE; } //------------------ 传送地址------------------------------ void Add_Latch_Cycle(uint A ) //传送地址,ADDR为页地址,从addr页第0字节开始 { uchar SFRPAGE_SAVE = SFRPAGE; SFRPAGE = CONFIG_PAGE; DBMODE= DBOUT; CLE=0; ALE=1; RE=1; WE=1; DBus=0; //A0-A7,column address WE=0; WE=1; DBus=(uchar)ADDR; //A9-A16 ,Row Address page address A12-A29 WE=0; WE=1; DBus=(uchar)(ADDR>>8); //A17-A24,Row Address WE=0; WE=1; ALE=0; CLE=0; SFRPAGE = SFRPAGE_SAVE; } //读状态,状态正确时返回0,错误时返回1 uchar Status_Read(void) { uchar Status; Comm_Latch_Cycle(0x70); Status=Read_Byte(); Status=Status & 0x01; return Status; //status=0 erease ok else failled } //从FLASH读一个字节 uchar Read_Byte(void) //read one byte from flash { uchar Rdata; char SFRPAGE_SAVE = SFRPAGE; SFRPN=CONFIG_PAGE; DBMODE = DBIN; //Data Bus input mode DBus = 0xFF; ALE =0; CLE =0; RE =1; RE =0; Rdata =DBus; RE=1; SFRPAGE = SFRPAGE_SAVE; return(Rdata); } //------------------Block Erease------------------------------ uchar Block_Erase(uint page_number) // { uchar SFRPAGE_SAVE = SFRPAGE; SFRPAGE = CONFIG_PAGE; DBMODE= DBOUT; Comm_Latch_Cycle(0x60); ALE=1; CLE=0; DBus=(uchar)page_number; //A9-A16 WE=0; WE=1; DBus=(uchar)(page_number>>8); //A17-A24 WE=0; WE=1; ALE=0; CLE=0; Comm_Latch_Cycle(0xD0); SFRPAGE = CONFIG_PAGE; RB = 1; while(!RB); SFRPAGE=SFRPAGE_SAVE; return Status_Read(); //status =1,Bad Block; Status = 0, Erease OK }

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台