93c46读写程序
发布时间:2008/5/27 0:00:00 访问次数:1711
#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) {
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) {
#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) {
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) {
上一篇:基于单片机的等精度数字测频
版权所有:51dzw.COM
深圳服务热线:13751165337 13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式
深圳服务热线:13751165337 13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)

深圳市碧威特网络技术有限公司
付款方式