有谁能告诉我怎样写51单片机控制93c46的读写c语言程序

有谁能告诉我怎样写51单片机控制93c46的读写c语言程序,第1张

“93c46读写程序”

#include?

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=9temp!=0temp--)?{?//?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=9temp!=0temp--)?{?//?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=8temp!=0temp--)?{?//?8

DI=address&0x80

SK=1?SK=0

address<<=1

}

DO=1

for(temp=16temp!=0temp--)?{?//?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=8temp!=0temp--)?{?//?8

DI=address&0x80

SK=1?SK=0

address<<=1

}

for(temp=16temp!=0temp--)?{?//?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=8temp!=0temp--)?{?//?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=9temp!=0temp--)?{?//?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=9temp!=0temp--)?{?//?9

DI=address&0x80

SK=1?SK=0

address<<=1

}

for(temp=16temp!=0temp--)?{?//?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)

51单片机录入:dycxin 责任编辑:dycxin

93C46是一种串行EEPROM芯片,其中存储着一些数据。如果这些数据是程序代码,那么通常情况下可以将其读出来。但是需要注意的是,读取出来的数据可能会被加密、压缩或进行其他处理,需要逆向工程才能还原出原始代码。

为了读取93C46中的数据,通常需要使用EEPROM编程器或类似的设备,并按照芯片型号和接口规范进行连接。然后,使用相应的软件工具来读取和解析EEPROM中的数据。需要注意的是,EEPROM编程 *** 作具有一定的危险性,不当 *** 作可能会损坏芯片或数据,因此需要谨慎 *** 作并备份好原始数据。同时,在进行任何读取或修改EEPROM数据的 *** 作之前,请确保您对相关技术和法规有足够的了解,并且遵守相关规定。

1:先检查传感器信号线有无焊反,2:出现93C46是要短路重新标定就可以了。

输入6699/65008,去皮,去皮,放100kg,去皮

各个牌子的校正方法不一样,这是超众牌台式电子称的.


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/10960616.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-12
下一篇2023-05-12

发表评论

登录后才能评论

评论列表(0条)

    保存