亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 93c46.c

?? 單片機串行E2PROM驅動大全
?? C
字號:
//CSI93C46 是一個三總線的E2PROM 具有寫入速度快的特點而且可以擦寫100 萬次廣泛應用在無線
//電話點鈔機防盜報警器等系列產品上
//CSI93C46 一共有7 條指令如下表所示
//指令名稱開始位操作代碼地址編碼數據注釋
//讀1 1 0 A5 A4 A3 A2 A1 A0 讀出給出地址的16 位數據
//寫允許1 0 0 1 1 X X X X 所有寫入的操作前都必須寫允許
//寫1 0 1 A5 A4 A3 A2 A1 A0 D15-D0 把D15-D0 的內容寫到A5-A0 的地址中
//寫全部1 0 0 0 1 X X X X D15-D0 把所有的字都寫為D15-D0
//寫禁止1 0 0 0 0 X X X X 禁止所有寫入操作
//擦除1 1 1 A5 A4 A3 A2 A1 A0 擦除A5-A0 指向地址的內容
//擦全部1 0 0 1 0 X X X X 擦除ROM 里的所有內容
//注關于CSI93C46/56/57/66/86 詳見周立功單片機發展有限公司的CSI93C46/56/57/66/86 中文數據手冊
//管腳名稱功能
//CS 片選信號
//SK 時鐘輸入
//DI 串行數據輸入
//DO 串行數據輸出
//Vcc 電源+1.8 伏到6 伏
//GND 接地
//ORG 存儲器結構選擇
//NC 不用連接
//PE* 寫入保護
//\用C51 軟件包對CSI93C46 器件進行讀寫操作
/*=========================================================*/
/* CSI93C46 操作子程序*/
/* 注意:這里使用的CSI93C46 為16 位結構的EEROM */
/*=========================================================*/
#include <Reg764.h>
/*87LPC764 的頭文件*/
sbit CS_93C46=P1^6;
sbit SK_93C46=P1^4;
sbit DI_93C46=P1^2;
sbit DO_93C46=P1^3;
void delay1(unsigned int num)
{while(num!=0){num=num-1;}
}
/***********************************************************************/
/*名稱: START_93C46() */
/*說明: 用于93C46 的啟動防止由于CS_93C46 的改動而引起數據時序混亂*/
/***********************************************************************/
void START_93C46()
{
DO_93C46=1; /*防止DO 由于是低電平而無法輸入*/
CS_93C46=1;
/*開啟93C46*/
CS_93C46=0;
DI_93C46=0;
SK_93C46=0;
CS_93C46=1;
delay1(1000);
}
/***************************************************************************/
/*名稱:END_93C46() */
/*說明:用于93C46 的結束防止由于CS_93C46 的改動而引起數據線為0 而無法輸入*/
/***************************************************************************/
void END_93C46()
{
CS_93C46=0;
DI_93C46=1;
SK_93C46=1;
}
/***********************************************************************/
/*名稱:SEND_DATA_93C46() */
/*說明:在93C46 啟動下送入指定位數的數據*/
/*輸入: op_data 要輸入的數據*/
/* num 輸入的位數*/
/**********************************************************************/
void SEND_DATA_93C46(unsigned int op_data,unsigned char num)
{data unsigned char temp1;
op_data=op_data<<(16-num); /*左移去掉無用位*/
for(temp1=0;temp1<num;temp1++)
{if( (op_data&0X8000)==00 ){DI_93C46=0;}
else{DI_93C46=1;}
SK_93C46=1;SK_93C46=1;SK_93C46=1;SK_93C46=1;
SK_93C46=0;
op_data=op_data<<1;
}
}
/***********************************************************************/
/*名稱: EWEN_93C46() */
/*說明: 93C46 的編程啟動.操作碼(100 11XXXX) */
/***********************************************************************/
void EWEN_93C46()
{
START_93C46();
SEND_DATA_93C46(0X04,0X03); /*送入3 位操作碼*/
SEND_DATA_93C46(0X30,0X06); /*送入6 位地址*/
END_93C46();
}
/***********************************************************************/
/*名稱: EWDS_93C46() */
/*說明: 93C46 的編程關閉.操作碼(100 00XXXX) */
/**********************************************************************/
void EWDS_93C46()
{
START_93C46();
SEND_DATA_93C46(0X04,0X03);
SEND_DATA_93C46(0X00,0X06);
END_93C46();
} /***********************************************************************/
/*名稱:READ() */
/*說明:93C46 的字讀取程序*/
/*輸入:要讀取的字地址(6 位) */
/*輸出:讀取的字數值*/
/**********************************************************************/
unsigned int READ(unsigned char address)
{data unsigned char temp1;
data unsigned int temp2;
START_93C46();
SEND_DATA_93C46(0X06,0X03);
SEND_DATA_93C46(address,0X06);
temp2=0; /*存放返回數據的緩沖先清零*/
for(temp1=0;temp1<16;temp1++) /*循環讀出16 個數據*/
{temp2=temp2<<1;
SK_93C46=1;SK_93C46=0;
if(DO_93C46==1){temp2=temp2|0X01;}
}
END_93C46();
return temp2;
}
/**********************************************************************/
/*名稱:WRITE() */
/*說明:93C46 的字寫入程序*/
/*輸入: address 要寫入的字地址(6 位) */
/* op_data 要寫入的數據(16 位) */
/*輸出: 讀取的字數值*/
/**********************************************************************/
unsigned char WRITE(unsigned char address,unsigned int op_data)
{data unsigned char temp1;
data unsigned int temp2;
EWEN_93C46();
START_93C46();
SEND_DATA_93C46(0X05,0X03);
SEND_DATA_93C46(address,0X06);
SEND_DATA_93C46(op_data,0X10);
CS_93C46=0;
CS_93C46=1;
temp1=1;
temp2=50000; /*設置一個最大延時等待數值.注意在不同的晶振下延時是不同的*/
while(!DO_93C46)
{temp2=temp2-1;
if(temp2==0)
{temp1=0;
break; /*最大等待延時后說明擦除失敗*/
}
}
END_93C46();
EWDS_93C46();
return temp1;
}
/***********************************************************************/
/*名稱:ERASE() */
/*說明:93C46 的字擦除程序*/
/*輸入: address 要擦除的字地址(6 位) */
/**********************************************************************/
unsigned char ERASE(unsigned char address)
{data unsigned char temp1;
data unsigned int temp2;
EWEN_93C46();
START_93C46();
SEND_DATA_93C46(0X07,0X03);
SEND_DATA_93C46(address,0X06);
CS_93C46=0;
CS_93C46=1;
temp1=1;
temp2=50000;
while(!DO_93C46)
{temp2=temp2-1;
if(temp2==0)
{temp1=0;
break;
}
}
END_93C46();
EWDS_93C46(); /*返回表示擦除狀態的特征*/
return temp1;
}
/**********************************************************************/
/*名稱:ERAL() */
/*說明:93C46 的全部擦除程序*/
/**********************************************************************/
unsigned char ERAL()
{data unsigned char temp1;
data unsigned int temp2;
EWEN_93C46();
START_93C46();
SEND_DATA_93C46(0X04,0X03);
SEND_DATA_93C46(0X20,0X06);
CS_93C46=0;
CS_93C46=1;
temp1=1;
temp2=50000;
while(!DO_93C46)
{temp2=temp2-1;
if(temp2==0)
{temp1=0;
break;
}
}
END_93C46();
EWDS_93C46(); /*返回表示擦除狀態的特征*/
return temp1;
}
/***********************************************************************/
/*名稱:WRAL() */
/*說明:93C46 的寫全部程序*/
/*輸入: op_data 要寫入的數據(16 位) */
/*輸出: 讀取的字數值*/
/***********************************************************************/
unsigned char WRAL(unsigned int op_data)
{data unsigned char temp1;
data unsigned int temp2;
EWEN_93C46();
START_93C46();
SEND_DATA_93C46(0X04,0X03);
SEND_DATA_93C46(0X10,0X06);
SEND_DATA_93C46(op_data,0X10);
CS_93C46=0;
CS_93C46=1;
temp1=1;
temp2=50000; /*設置一個最大延時等待數值.注意在不同的晶振下延時是不同的*/
while(!DO_93C46)
{temp2=temp2-1;
if(temp2==0)
{temp1=0;
break;
}
}
END_93C46();
EWDS_93C46();
return op_data;
}


//軟件包為C51 嵌入匯編的一個子程序主要包括以下幾個函數
//讀函數
unsigned int read(unsigned char address);
//寫函數
void write(unsigned char address,unsigned int dat);
//寫全部函數
void wral(unsigned int dat);
//擦除函數
void erase(unsigned char address);
//擦全部函數
void eral();
//其中寫允許和寫禁止指令都已經包括在需要寫入的函數里面了
//下面是用C51 編寫的CSI93C46 的各個函數操作的程序
#include <reg764.h> /*加載P87LPC764 的頭文件*/
#define uchar unsigned char
#define uint unsigned int
uint read(uchar a); /*定義讀操作函數*/
void write(uchar b,uint c); /*定義寫操作函數*/
void eral(); /*定義擦全部操作函數*/
void wral(uint d); /*定義寫全部操作函數*/
void erase(uchar e); /*定義擦除操作函數*/
main()
{
uchar address;
uint dat;
eral(); /*擦除芯片全部內容*/
address=2;
dat=0;
dat=read(address); /*把地址為address 的內容讀出并存放在dat 中*/
address=2;
dat=0X1234;
write(address,dat); /*把dat 寫到地址為address 的單元上*/
address=2;
dat=0;
dat=read(address); /*把地址為address 的內容讀出并存放在dat 中*/
address=2;
erase(address); /*擦除地址為address 的內容*/
address=2;
dat=0;
dat=read(address); /*把地址為address 的內容讀出并存放在dat 中*/
dat=0x5678;
wral(dat); /*把dat 的內容寫滿e2prom*/
address=8;
dat=0;
dat=read(address); /*把地址為address 的內容讀出進行比較*/
address=0;
}
//上面的C51 程序可把變量dat 插入到觀察窗口中在適當的地方設置斷點來觀察
//操作舉例
//例1,把1234H 寫到CSI93C46 的所有存儲器當中
//dat=0x1234;
//wral(dat);
//例2,把CSI93C46 的10H 單元的內容擦除
//address=0x10;
//erase(address);

//整理:聶小猛。該資料來自“51單片機世界”http://go.163.com/~dz2000,歡迎訪問。
#include <reg52.h>
sbit CS=P2^7;
sbit SK=P2^6;
sbit DI=P2^5;
sbit DO=P2^4;

/*
extern unsigned char ReadChar(unsigned char address);
extern void WriteChar(unsigned char address,unsigned char InData);
extern void ReadString(unsigned char data *RamAddress,unsigned char RomAddress,unsigned char Number);
extern void WriteString(unsigned char data *RamAddress,unsigned char RomAddress,unsigned char Number);
*/

// Write enable must precede all programming modes.
void Ewen(void) {
	unsigned char temp,InData;
	CS=0;	
	SK=0;
	CS=1;
	InData=0x98;	// 10011XXXX
	for(temp=9;temp!=0;temp--) {	// 9
		DI=InData&0x80;
		SK=1;	SK=0;
		InData<<=1;
	}
	CS=0;
}

// Disables all programming instructions.
void Ewds(void) {
	unsigned char temp,InData;
	CS=0;
	SK=0;
	CS=1;
	InData=0x80;	// 10000XXXX
	for(temp=9;temp!=0;temp--) {	// 9
		DI=InData&0x80;
		SK=1;	SK=0;
		InData<<=1;
	}
	CS=0;
}

// Reads data stored in memory, at specified address.
unsigned int Read(unsigned char address) {
	unsigned char temp;
	unsigned int result;
	Ewen();
	SK=0;	DI=1;	// 110 A5-A0
	CS=0;	CS=1;
	SK=1;	SK=0;			// 1
	address=address&0x3f|0x80;
	for(temp=8;temp!=0;temp--) {	// 8
		DI=address&0x80;
		SK=1;	SK=0;
		address<<=1;
	}
	DO=1;
	for(temp=16;temp!=0;temp--) {	// 16
		SK=1;
		result=(result<<1)|DO;
		SK=0;
	}
	CS=0;
	Ewds();
	return(result);
}

// Writes memory location An - A0.
void Write(unsigned char address,unsigned int InData) {
	unsigned char temp;
	Ewen();
	SK=0;	DI=1;	// 101 A5-A0
	CS=0;	CS=1;
	SK=1;	SK=0;			// 1
	address=address&0x3f|0x40;
	for(temp=8;temp!=0;temp--) {	// 8
		DI=address&0x80;
		SK=1;	SK=0;
		address<<=1;
	}
	for(temp=16;temp!=0;temp--) {	// 16
		DI=InData&0x8000;
		SK=1;	SK=0;
		InData<<=1;
	}
	CS=0;	DO=1;
	CS=1;	SK=1;
	while(DO==0) {			// busy test
		SK=0;	SK=1;
	}
	SK=0;	CS=0;
	Ewds();
}

/*
// Erase memory location An - A0.
void Erase(unsigned char address) {
	unsigned char temp;
	Ewen();
	SK=0;	DI=1;	// 111 A5-A0
	CS=0;	CS=1;
	SK=1;	SK=0;			// 1
	address|=0xc0;
	for(temp=8;temp!=0;temp--) {	// 8
		DI=address&0x80;
		SK=1;	SK=0;
		address<<=1;
	}
	CS=0;	DO=1;
	CS=1;	SK=1;
	while(DO==0) {
		SK=0;	SK=1;
	}
	SK=0;	CS=0;
	Ewds();
}

// Erases all memory locations. Valid only at VCC = 4.5V to 5.5V.
void Eral(void) {
	unsigned char temp,InData;
	Ewen();
	CS=0;
	SK=0;
	CS=1;
	InData=0x90;	// 10010XXXX
	for(temp=9;temp!=0;temp--) {	// 9
		DI=InData&0x80;
		SK=1;	SK=0;
		InData<<=1;
	}
	CS=0;	DO=1;
	CS=1;	SK=1;
	while(DO==0) {
		SK=0;	SK=1;
	}
	SK=0;	CS=0;
	Ewds();
}

// Writes all memory locations. Valid only at VCC = 4.5V to 5.5V.
void Wral(unsigned int InData) {
	unsigned char temp,address;
	Ewen();
	CS=0;
	SK=0;
	CS=1;
	address=0x88;	// 10001XXXX
	for(temp=9;temp!=0;temp--) {	// 9
		DI=address&0x80;
		SK=1;	SK=0;
		address<<=1;
	}
	for(temp=16;temp!=0;temp--) {	// 16
		DI=InData&0x8000;
		SK=1;	SK=0;
		InData<<=1;
	}
	CS=0;	DO=1;
	CS=1;	SK=1;
	while(DO==0) {
		SK=0;	SK=1;
	}
	SK=0;	CS=0;
	Ewds();
}

*/

unsigned char ReadChar(unsigned char address) {
	unsigned char temp=address>>1;
	if(address&0x01) return((unsigned char)(Read(temp)>>8));
	else return((unsigned char)(Read(temp)));
}

void WriteChar(unsigned char address,unsigned char InData) {
	unsigned char temp=address>>1;
	if(address&0x01) Write(temp,(unsigned int)(Read(temp)&0x00ff|(InData<<8)));
	else Write(temp,(unsigned int)(Read(temp)&0xff00|InData));
}

void ReadString(unsigned char data *RamAddress,unsigned char RomAddress,unsigned char Number) {
	while(Number!=0) {
		*RamAddress=ReadChar(RomAddress);
		RamAddress++;
		RomAddress++;
		Number--;
	}
}

void WriteString(unsigned char data *RamAddress,unsigned char RomAddress,unsigned char Number) {
	unsigned int temp;
	if(Number==0) return;
	if(RomAddress&0x01) {
		WriteChar(RomAddress,*RamAddress);
		RamAddress++;
		RomAddress++;
		Number--;
	}
	if(Number==0) return;
	while(Number>>1) {
		temp=*RamAddress;
		RamAddress++;
		temp=temp|(*RamAddress)<<8;
		RamAddress++;
		Write(RomAddress>>1,temp);
		RomAddress++;
		RomAddress++;
		Number--;
		Number--;
	}
	if(Number) WriteChar(RomAddress,*RamAddress);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产高清精品网站| 午夜精品成人在线视频| 日韩一区二区三区四区| 在线不卡中文字幕播放| 欧美做爰猛烈大尺度电影无法无天| 国产91精品一区二区麻豆网站| 人禽交欧美网站| 日韩av一区二| 精品亚洲成a人| 黑人精品欧美一区二区蜜桃| 韩国v欧美v日本v亚洲v| 国产精品一区二区在线观看网站| 国产在线播放一区二区三区| 夫妻av一区二区| 不卡的av电影| 欧美色成人综合| 欧美一级搡bbbb搡bbbb| 久久综合久久综合久久| 日本一区二区三区电影| 亚洲精品日日夜夜| 亚洲成av人片一区二区三区| 免费观看日韩av| 国产大陆亚洲精品国产| 91美女片黄在线观看| 欧美久久免费观看| 国产亚洲综合色| 亚洲美女淫视频| 日韩影院免费视频| 成人午夜激情视频| 欧美日韩免费观看一区二区三区| 日韩一级大片在线观看| 国产女人水真多18毛片18精品视频| 国产精品视频你懂的| 亚洲一二三区不卡| 国产精品一区二区久久精品爱涩 | 丰满亚洲少妇av| 不卡av在线免费观看| 欧美一区二区三区喷汁尤物| 中文字幕乱码亚洲精品一区| 亚洲综合自拍偷拍| 国产精品一级片在线观看| 在线中文字幕一区二区| 国产精品久久久久久久久免费桃花| 亚洲一区在线观看免费观看电影高清| 免费人成在线不卡| 色婷婷久久久久swag精品| 精品处破学生在线二十三| 夜夜嗨av一区二区三区 | 国产精品美女久久久久高潮| 亚瑟在线精品视频| 9色porny自拍视频一区二区| 在线综合亚洲欧美在线视频| ㊣最新国产の精品bt伙计久久| 琪琪久久久久日韩精品| 91猫先生在线| 中文子幕无线码一区tr| 理论电影国产精品| 91精品欧美一区二区三区综合在 | 国产**成人网毛片九色 | 亚洲丝袜美腿综合| 国产最新精品免费| 欧美一区二区在线视频| 亚洲国产日韩在线一区模特| aaa欧美色吧激情视频| www国产精品av| 久久99精品一区二区三区三区| 91传媒视频在线播放| 中文字幕制服丝袜成人av | 亚洲高清视频中文字幕| 99re在线精品| 国产精品九色蝌蚪自拍| 国产99久久久国产精品潘金网站| 精品国产乱码久久久久久闺蜜| 亚洲国产wwwccc36天堂| 欧美午夜电影在线播放| 一区二区国产视频| 色综合久久九月婷婷色综合| 亚洲欧美日韩中文播放 | 粉嫩高潮美女一区二区三区| 精品国产一二三区| 国模一区二区三区白浆| 日韩免费性生活视频播放| 免费人成在线不卡| ww久久中文字幕| 成人免费看的视频| 亚洲欧美日韩成人高清在线一区| 不卡大黄网站免费看| 玉米视频成人免费看| 欧美日本视频在线| 国产一区福利在线| 久久久久久久久岛国免费| 成人精品小蝌蚪| 亚洲一区二区三区四区五区黄| 欧美性猛片xxxx免费看久爱| 五月婷婷综合激情| 欧美成人a∨高清免费观看| 国产精品一区二区在线播放| 亚洲欧美日韩综合aⅴ视频| 欧美日韩综合在线免费观看| 蜜桃91丨九色丨蝌蚪91桃色| 久久精品人人爽人人爽| 99视频有精品| 亚洲成人一区在线| www欧美成人18+| 在线欧美一区二区| 国内精品免费**视频| 国产精品国产三级国产a| 欧美乱妇15p| 国产精品羞羞答答xxdd| 亚洲在线视频网站| 精品国产3级a| 欧美午夜精品久久久久久超碰| 久久99久久精品欧美| 综合亚洲深深色噜噜狠狠网站| 欧美三级中文字幕在线观看| 国产一区二区成人久久免费影院| 亚洲欧美在线视频观看| 日韩三区在线观看| 91亚洲永久精品| 国内成+人亚洲+欧美+综合在线 | 欧美精品一二三区| 国产福利一区二区三区视频在线| 亚洲一区二区综合| 国产日韩一级二级三级| 欧美精品免费视频| 99国产精品久| 国产麻豆精品theporn| 亚洲sss视频在线视频| 亚洲欧洲在线观看av| 精品国产不卡一区二区三区| 欧美无人高清视频在线观看| 国产精品18久久久久久久久| 日韩精品三区四区| 亚洲日本成人在线观看| 日本一区二区三区四区| 久久综合狠狠综合久久综合88| 欧美三级韩国三级日本一级| 97精品电影院| 国产iv一区二区三区| 国产精品亚洲专一区二区三区| 石原莉奈在线亚洲三区| 亚洲小说欧美激情另类| 亚洲猫色日本管| 伊人性伊人情综合网| 日韩毛片在线免费观看| 国产精品久久久久久一区二区三区 | 99综合电影在线视频| 国产成人精品亚洲777人妖| 精品一区二区三区在线播放视频| 亚洲免费观看在线观看| 亚洲欧美日韩国产成人精品影院 | 欧美疯狂性受xxxxx喷水图片| 91麻豆国产精品久久| 成人av网在线| 91在线视频18| 91热门视频在线观看| 色综合久久中文字幕| 欧美性生活大片视频| 欧美日韩极品在线观看一区| 欧美精品18+| 日韩一区二区免费高清| 欧美一级黄色大片| 精品日韩欧美一区二区| 久久久久久**毛片大全| 中文字幕国产一区二区| 中文字幕中文字幕一区二区| 亚洲黄色免费电影| 亚洲风情在线资源站| 免费在线视频一区| 国产一区二区主播在线| 成人在线视频一区| 一本久道久久综合中文字幕| 欧美伊人久久久久久久久影院| 欧美日本在线播放| 精品91自产拍在线观看一区| 国产欧美精品日韩区二区麻豆天美| 中文天堂在线一区| 亚洲综合在线第一页| 日本vs亚洲vs韩国一区三区| 国产精品亚洲综合一区在线观看| 成人视屏免费看| 欧美女孩性生活视频| 亚洲精品在线免费播放| 亚洲色图欧美在线| 美女视频网站黄色亚洲| 成人国产精品视频| 欧美日韩成人在线| 中文av一区特黄| 五月天丁香久久| 国产99久久久国产精品潘金网站| 在线观看区一区二| 久久久久国产精品人| 亚洲一区二区三区四区在线观看| 激情五月婷婷综合网| 色综合天天性综合| 精品av久久707| 亚洲成人在线观看视频| 成人免费精品视频| 日韩视频在线永久播放| 亚洲最新在线观看|