我的IIC写AT24C64的程序,怎么写不进去,但是能读出来255,我是按照datasheet上的时序写的,第一次做这东西,是不是有问题啊,请各位大侠指点侠,谢谢了<br /><br /><br />void delay()<br />{ ;; }<br />void start() //开始信号<br />{ <br /> sda=1;<br /> delay();<br /> scl=1;<br /> delay();<br /> sda=0;<br /> delay();<br />}<br /><br />void stop() //停止<br />{<br /> sda=0;<br /> delay();<br /> scl=1;<br /> delay();<br /> sda=1;<br /> delay();<br />}<br /><br />void ack() //应答<br />{<br /> unsigned char i;<br /> scl=1;<br /> delay();<br /> while((sda==1)&&(i<250))i++;<br /> scl=0;<br /> delay();<br />}<br /><br />void init()<br />{<br /> sda=1;<br /> delay();<br /> scl=1;<br /> delay();<br />}<br /><br />void write_byte(unsigned char date)<br />{<br /> unsigned char i,temp;<br /> temp=date;<br /><br /> for(i=0;i<8;i++)<br /> {<br /> temp=temp<<1;<br /> scl=0;<br /> delay();<br /> sda=CY;<br /> delay();<br /> scl=1;<br /> delay();<br /> }<br /> scl=0;<br /> delay();<br /> sda=1;<br /> delay();<br />}<br /><br />unsigned char read_byte()<br />{<br /> unsigned char i,k;<br /> scl=0;<br /> delay();<br /> sda=1;<br /> delay();<br /> for(i=0;i<8;i++)<br /> {<br /> scl=1;<br /> delay(); <br /> k=(k<<1)|sda;<br /> scl=0;<br /> delay(); <br /> }<br /> return k;<br />}<br /><br /><br />void write_add(unsigned int address,unsigned char date)//<br />{<br /> start();<br /> write_byte(0xa0);<br /> ack();<br /> write_byte(address/256);<br /> ack();<br /> write_byte(address%256);<br /> ack();<br /> write_byte(date);<br /> ack();<br /> stop();<br />}<br /><br />unsigned char read_add(unsigned int address)<br />{<br /> unsigned char date;<br /> start();<br /> write_byte(0xa0);<br /> ack();<br /> write_byte(address);<br /> ack();<br /> start();<br /> write_byte(0xa1);<br /> ack();<br /> date=read_byte();<br /> stop();<br /> return date;<br />}<br /> |
|