51单片机配合使用AT24C128B EEPROM程式修改
#include<reg52.h>#defineucharunsignedcharsbitsda=P2^0;sbitscl=P2^1;uchara;voiddelay()...
#include<reg52.h> #define uchar unsigned char sbit sda=P2^0; sbit scl=P2^1; uchar a; void delay() { ;; } void start() //开始信号{ sda=1; delay(); scl=1; delay(); sda=0; delay(); } void stop() //停止{sda=0; delay(); scl=1; delay(); sda=1; delay(); } void respons() //应答{uchar i; scl=1; delay(); while((sda==1)&&(i<250))i++; scl=0; delay(); } void init() { sda=1; delay(); scl=1; delay(); } void write_byte(uchar date) { uchar i,temp; temp=date; for(i=0;i<8;i++) { temp=temp<<1; scl=0; delay(); sda=CY; delay(); scl=1; delay(); // scl=0; // delay(); } scl=0; delay(); sda=1; delay(); } uchar read_byte() { uchar i,k; scl=0; delay(); sda=1; delay(); for(i=0;i<8;i++) { scl=1; delay(); k=(k<<1)|sda; scl=0; delay(); } return k; } void delay1(uchar x) { uchar a,b; for(a=x;a>0;a--) for(b=100;b>0;b--); }void write_add(uchar address,uchar date) { start(); write_byte(0xa0); respons(); write_byte(address); respons(); write_byte(date); respons(); stop(); } uchar read_add(uchar address) { uchar date; start(); write_byte(0xa0); respons(); write_byte(address); respons(); start(); write_byte(0xa1); respons(); date=read_byte(); stop(); return date; } void main() { init(); write_add(23,0xaa); delay1(100); P1=read_add(23); while(1); }以上是参考教材中的程式,使用的EEPROM是AT24C02。但现在我手里的单片机开发板使用的EEPROM是AT24C128B,不知如何根据以上程式修改?WORD ADDRESS我可以写到哪个位置? 这两个EEPROM有如下差异:
AT24C02,Byte Write时只有一个WORD ADDRESS,而AT24C128B有两个WORD ADDRESS 展开
AT24C02,Byte Write时只有一个WORD ADDRESS,而AT24C128B有两个WORD ADDRESS 展开
1个回答
展开全部
24C02只有256字节容量,所以一个WORD ADDRESS就能全部寻址了。
24C128是16K字节容量,因此必须要两个WORD ADDRESS才能全部寻址,所以在write_add和read_add函数中把address类型换成int型,write_byte(address)这里分两次写入,一次写入高字节,一次写入低字节。
24C128是16K字节容量,因此必须要两个WORD ADDRESS才能全部寻址,所以在write_add和read_add函数中把address类型换成int型,write_byte(address)这里分两次写入,一次写入高字节,一次写入低字节。
更多追问追答
追问
void write_add(uint address,uchar date)
{
......
write_byte(address/256);
respons();
write_byte(address%256);
respons();
......
}
在write_add和read_add时我做了以上修改,这样正确吗?
可不可以直接写出正确的code?
追答
是这样,然后试验吧。
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询