检查了N边了,实在看不出哪里有错。仿真就是不成功::
一下是程序代码:
#include #define uchar unsigned char #define uint unsigned int sbit scl=P2^5; sbit sda=P2^6; uchar a; void delay1(uint x)//ÑÓʱ³ÌÐò0 { uchar y,z; for(y=x;y>0;y--) for(z>110;z>0;z--); } void delay() { ; ; } //ÑÓʱ³ÌÐò1£¬Î¢Ð¡ÑÓʱ void IICstop() //IICÖÕÖ¹ÐźŠ{ sda=0;delay(); scl=1;delay(); sda=1;delay(); } void IICstart() //IICÆðʼÐźŠ{ sda=1;delay(); scl=1;delay(); sda=0;delay(); } void respons() {uchar i; scl=1; delay(); while((sda==1)&&(i<250))i++; scl=0; delay(); } void init_iic()//IIC³õʼ»¯ { sda=1;delay(); scl=1;delay(); } void write_iicbyte(uchar date)//IICдһ¸ö×Ö½Ú { 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(); sda=1; delay(); } uchar read_byte()//IIC¶ÁÒ»¸ö×Ö½Ú { uchar i,j,k; scl=0; delay(); sda=1; delay(); for(i=0;i<8;i++) { scl=1; delay(); if(sda==1) j=1; else j=0; k=(k<<1)|j; scl=0; delay(); } return k; } void write_add(uchar address,uchar date) { IICstart(); write_iicbyte(0xa0); respons(); write_iicbyte(address); respons(); write_iicbyte(date); respons(); IICstop(); } uchar read_add(uchar address) { uchar date; IICstart(); write_iicbyte(0xa0); respons(); write_iicbyte(address); respons(); IICstart(); write_iicbyte(0xa1); respons(); date=read_byte(); IICstop(); return date; } void main() { init_iic(); write_add(0x03,0x55); delay1(100); read_add(0x03); a=read_add(0x03); P0=a; while(1); }
这是仿真的电路图
给你一份可以用的程序
读不出来肯定是你时序不对,好好对比下
都喜欢用仿真啊
不靠谱
真的是这样,把我都要快磨死了,仿真这么不靠谱。
都是I2C的EEPROM,换个器件居然可以。
不管怎么说,真的十分谢谢你。