⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sereerom.c

📁 此代码是实现将lwip协议移植于51单片机的测试程序
💻 C
字号:
//**********************************************************************************
//杨屹    2002/08/20    第一版
//串行flash操作函数(X5045/93LC66B)
//联系方法:gdtyy@ri.gdt.com.cn(2003/07/31以前有效)
//**********************************************************************************
//使用方法:
//    接口函数屏蔽了底层硬件操作,用户只需给出操作命令、起始地址、数据长度、数据指针
//即可操作硬件。
//**********************************************************************************
#include <general.h>
//#include <myconfig51.h>
//#include <SerEEROM.h>

bit Isbit7(unsigned char x)//内部使用,对用户透明
{
	x=x&0x80;
	if(x==0) return 0;
	else return 1;
}

bit Isbit15(unsigned int x)//内部使用,对用户透明
{
	x=x&0x8000;
	if(x==0) return 0;
	else return 1;
}

//X5045
bit opx5045(unsigned char cmd,unsigned int addr,unsigned int len,unsigned char *dat)//X5045操作函数
{
	unsigned char i;
	unsigned int j;
	unsigned char x;
	unsigned char adr,a8;

	adr=addr;
	a8=(addr>>5)&0x8;

	switch(cmd){
		case WREN:
		case WRDI:{
			while(sck==0);
			while(sck==1);
			xcs=0;
			for(i=0;i<8;i++){
				si=Isbit7(cmd);
				cmd=cmd<<1;
				while(sck==0);
				while(sck==1);
			}
			xcs=1;
			break;}
//		case WRDI:{
//			break;}
		case RDSR:{
			while(sck==0);
			while(sck==1);
			xcs=0;
			for(i=0;i<8;i++){
				si=Isbit7(cmd);
				cmd=cmd<<1;
				while(sck==0);
				while(sck==1);
			}
			for(i=0;i<8;i++){
				while(sck==0);
				x=x<<1;
				x=x|so;
				while(sck==1);
			}			
			xcs=1;
			*dat=x;
			break;}
		case WRSR:{
			x=*dat;
			while(sck==0);
			while(sck==1);
			xcs=0;
			for(i=0;i<8;i++){
				si=Isbit7(cmd);
				cmd=cmd<<1;
				while(sck==0);
				while(sck==1);
			}
			for(i=0;i<8;i++){				
				si=Isbit7(x);
				x=x<<1;
				while(sck==0);
				while(sck==1);
			}			
			xcs=1;			
			break;}
		case READ:{			
			cmd=cmd&0xF7;
			cmd=cmd|a8;
			xcs=1;
			while(sck==0);
			while(sck==1);
			xcs=0;
			for(i=0;i<8;i++){
				si=Isbit7(cmd);
				cmd=cmd<<1;
				while(sck==0);
				while(sck==1);
			}				
			for(i=0;i<8;i++){
				si=Isbit7(adr);		
				adr=adr<<1;
				while(sck==0);
				while(sck==1);
			}
			for(j=0;j<len;j++){
				for(i=0;i<8;i++){
					while(sck==0);
					x=x<<1;
					x=x|so;
					while(sck==1);
				}
				*(dat+j)=x;
			}
			xcs=1;			
			break;}
		case WRITE:{
			if(len>4) return 0;	
			
			cmd=cmd&0xF7;
			cmd=cmd|a8;

			while(sck==0);
			while(sck==1);
			xcs=0;
			for(i=0;i<8;i++){
				si=Isbit7(cmd);
				cmd=cmd<<1;
				while(sck==0);
				while(sck==1);
			}
			for(i=0;i<8;i++){
				si=Isbit7(adr);
				adr=adr<<1;
				while(sck==0);
				while(sck==1);
			}
			for(j=0;j<len;j++){
				x=*(dat+j);
				for(i=0;i<8;i++){				
					si=Isbit7(x);
					x=x<<1;
					while(sck==0);
					while(sck==1);
				}
			}			
			xcs=1;
			break;}
		default:{
			return 0;
			break;}
	}
	return 1;
}

//93LC66B
bit op93LC66B(unsigned char cmd,unsigned int addr,unsigned int len,unsigned int *dat)//93LC66B操作函数
{
	unsigned char i;
	unsigned int j;
	unsigned int x;
	unsigned char adr,a8;

	adr=addr;
	a8=(addr>>1)&0x80;

	xcs=0;
	switch(cmd){
		case ERASE:{
			while(sck==0);
			while(sck==1);
			xcs=1;
			for(i=0;i<3;i++){
				si=Isbit7(cmd);
				cmd=cmd<<1;
				while(sck==0);
				while(sck==1);
			}
			//si=Isbit7(a8);//9366A
			//while(sck==0);//9366A
			//while(sck==1);//9366A
			for(i=0;i<8;i++){
				si=Isbit7(adr);
				adr=adr<<1;
				while(sck==0);
				while(sck==1);
			}
			xcs=0;
			while(sck==0);
			while(sck==1);
			xcs=1;
			while(sck==0);
			while(sck==1);
			while(so==0);////////
			while(sck==0);
			while(sck==1);
			xcs=0;
			break;}
		case ERAL:{
			while(sck==0);
			while(sck==1);
			xcs=1;
			for(i=0;i<11;i++){//i<12 for 9366A
				si=Isbit7(cmd);
				cmd=cmd<<1;
				while(sck==0);
				while(sck==1);
			}
			xcs=0;
			while(sck==0);
			while(sck==1);
			xcs=1;
			while(sck==0);
			while(sck==1);
			while(so==0);////////
			while(sck==0);
			while(sck==1);
			xcs=0;
			break;}	
		case EWDS:
		case EWEN:{
			while(sck==0);
			while(sck==1);
			xcs=1;
			for(i=0;i<11;i++){//i<12 for 9366A
				si=Isbit7(cmd);
				cmd=cmd<<1;
				while(sck==0);
				while(sck==1);
			}			
			xcs=0;
			break;}		
		case READB:{
			while(sck==0);
			while(sck==1);
			xcs=1;
			for(i=0;i<3;i++){
				si=Isbit7(cmd);
				cmd=cmd<<1;
				while(sck==0);
				while(sck==1);
			}		
			//si=Isbit7(a8);//9366A
			//while(sck==0);//9366A
			//while(sck==1);//9366A
			for(i=0;i<8;i++){
				si=Isbit7(adr);
				adr=adr<<1;
				while(sck==0);
				while(sck==1);
			}
			for(j=0;j<len;j++){
				for(i=0;i<16;i++){//i<8 for 9366A
					while(sck==0);
					x=x<<1;
					x=x|so;
					while(sck==1);
				}
				*(dat+j)=x;
			}
			xcs=0;
			break;}
		case WRITEB:{
			x=*dat;
			while(sck==0);
			while(sck==1);
			xcs=1;
			for(i=0;i<3;i++){
				si=Isbit7(cmd);
				cmd=cmd<<1;
				while(sck==0);
				while(sck==1);
			}		
			//si=Isbit7(a8);//9366A
			//while(sck==0);//9366A
			//while(sck==1);//9366A
			for(i=0;i<8;i++){
				si=Isbit7(adr);
				adr=adr<<1;
				while(sck==0);
				while(sck==1);
			}
			for(i=0;i<16;i++){//i<8 for 9366A
				si=Isbit15(x);//Isbit7 for 9366A
				x=x<<1;
				while(sck==0);
				while(sck==1);
			}
			xcs=0;
			while(sck==0);
			while(sck==1);			
			xcs=1;
			while(sck==0);
			while(sck==1);
			while(so==0);////////
			while(sck==0);
			while(sck==1);
			xcs=0;
			break;}
		case WRAL:{
			x=*dat;
			while(sck==0);
			while(sck==1);
			xcs=1;
			for(i=0;i<11;i++){//i<12 for 9366A
				si=Isbit7(cmd);
				cmd=cmd<<1;
				while(sck==0);
				while(sck==1);
			}			
			for(i=0;i<16;i++){//i<8 for 9366A
				si=Isbit15(x);//Isbit7 for 9366A
				x=x<<1;
				while(sck==0);
				while(sck==1);
			}
			xcs=0;
			while(sck==0);
			while(sck==1);			
			xcs=1;
			while(sck==0);
			while(sck==1);
			while(so==0);////////
			while(sck==0);
			while(sck==1);
			xcs=0;
			break;}
		default:{
			return 0;
			break;}
	}
	return 1;
}

//extra:init IO port and convert 1bit to 4bit.
void initport(void)//初始化IO端口
{
	isin=1;linkok=1;txspeed=1;pow0=1;pow1=1;
}

void opBoardSel(unsigned char num)//板选输出
{
	unsigned char i;

	bcs=0;
	num=num<<4;
	while(sck==0);	
	while(sck==1);
	bcs=1;
	for(i=0;i<4;i++){
		bas=Isbit7(num);
		num=num<<1;
		while(sck==0);
		while(sck==1);
	}
	bcs=0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -