欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
關于51單片機模擬iic讀寫at24c256問題
[打印本頁]
作者:
1518419198
時間:
2021-2-17 21:49
標題:
關于51單片機模擬iic讀寫at24c256問題
我在網上找到了一個24c64的程序(不確定能用),看到內存地址相關的是先發送地址高8位,在發送地址低8位,我的24c256也是這樣寫的,但是不可以讀和寫(用外部燒錄器讀取沒變化,寫入單片機讀不出來),11.0592晶振,stc89c516RD+單片機,WP接地,a0,a1,a2接地,SCL接P01,SDA接P02,因GND不夠用,將WP接P24并置低電平
下面是我的單片機程序,求大佬指點一下
#include <reg52.h>
#include <intrins.h>
#define ui unsigned int
#define uc unsigned char
sbit IIC_SCL = P0^1;
sbit IIC_SDA = P0^2;
sbit IIC_WP = P2^4;
void delay0(){;;}
void IIC_start(){
IIC_SDA = 1;
delay0();
IIC_SCL = 1;
delay0();
IIC_SDA = 0;
delay0();
}
void IIC_stop(){
IIC_SDA = 0;
delay0();
IIC_SCL = 1;
delay0();
IIC_SDA = 1;
delay0();
}
void IIC_ACK(){
uc i;
IIC_SCL = 1;
delay0();
while((IIC_SDA == 1) && (i < 250)) i++;
IIC_SCL = 0;
delay0();
}
void IIC_Init(){
IIC_SDA = 1;
delay0();
IIC_SCL = 1;
delay0();
}
void IIC_WR_byte(uc dat){
uc i;
for(i = 0;i < 8;i ++){
dat <<= 1;
IIC_SCL = 0;
delay0();
IIC_SDA = CY;
delay0();
IIC_SCL = 1;
delay0();
}
IIC_SCL = 0;
delay0();
IIC_SDA = 1;
delay0();
}
uc IIC_RD_byte(){
uc i,dat;
IIC_SCL = 0;
delay0();
IIC_SDA = 1;
delay0();
for(i = 0;i < 8;i ++){
IIC_SCL = 1;
delay0();
dat = (dat << 1) | IIC_SDA;
delay0();
}
return dat;
}
void IIC_WR_ADD_256(uc add1,add2,dat){
IIC_start();
IIC_WR_byte(0xa0);
IIC_ACK();
IIC_WR_byte(add1);
IIC_WR_byte(add2);
IIC_ACK();
IIC_WR_byte(dat);
IIC_stop();
}
uc IIC_RD_ADD_256(uc add1,add2){
uc dat;
IIC_start();
IIC_WR_byte(0xa0);
IIC_ACK();
IIC_WR_byte(add1);
IIC_WR_byte(add2);
IIC_ACK();
IIC_start();
IIC_WR_byte(0xa1);
IIC_ACK();
dat = IIC_RD_byte();
IIC_stop();
return dat;
}
void main(){
IIC_WP = 0;
IIC_Init();
IIC_WR_ADD_256(0x10,0x10,0xf0);
P0 = IIC_RD_ADD_256(0x00,0x01);
while(1);
}
作者:
心有浮生
時間:
2021-2-18 10:44
要延時啊
作者:
51jia
時間:
2021-2-18 10:51
樓主可以找IC的規格書看一下,首先要保證I2C協議正確,其次要注意IC讀寫時序和方式,一步步的查找問題,最后解決問題。
作者:
xhaity
時間:
2021-2-18 11:04
1,寫完要等待寫周期完成才能讀出來
2,發地址高位后,也需要等待應答位
3,讀數時,發完讀指令,需要向EEPROM發送應答位,表示單片機準備好接受,而不是等待應答位
4,以上都改好了還不行的話,就用示波器查波形是否正確。
作者:
she
時間:
2021-2-19 11:29
IIC_WR_byte(add1); IIC_WR_byte(add2);之間好像還要加個IIC_ACK();,dat = IIC_RD_byte();后面好像還要加個非應答;最好還是用示波器抓下波形看時序對不對
作者:
黃youhui
時間:
2021-2-20 13:44
IIC通訊地址呢?
作者:
zhangweiyu
時間:
2021-2-20 21:54
xhaity 回答是正確的,你地址1和地址2之間沒有應答,寫完之后沒有延時5~10毫秒
作者:
cn_zhx
時間:
2021-2-21 11:43
主要是時序配合的問題,配合不好是不行的
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1