会用24C64的帮我看看哦

[复制链接]
2182|0
 楼主| ly700620 发表于 2008-9-23 18:56 | 显示全部楼层 |阅读模式
ck, ic, iic, sd, AC
下面是小弟的AT24C64的程序,弄了个把星期了,总是实现不了对其读写(我要读写的是浮点数),又不知道那里有问题,心中异常郁闷,请前辈们拉小弟一把!<br />void&nbsp;IIC_start()<br />{<br />EA=0;<br />SCK=0;<br />SDA=1;<br />_nop_();_nop_();_nop_();_nop_();<br />SCK=1;<br />_nop_();_nop_();_nop_();_nop_();<br />SDA=0;<br />_nop_();_nop_();_nop_();_nop_();<br />SCK=0;<br />_nop_();_nop_();_nop_();_nop_();<br />SDA=1;<br />}<br />void&nbsp;IIC_stop()<br />{<br />SCK=0;&nbsp;<br />SDA=0;<br />_nop_();_nop_();_nop_();_nop_();<br />SCK=1;&nbsp;<br />_nop_();_nop_();_nop_();_nop_();&nbsp;<br />SDA=1;&nbsp;<br />_nop_();_nop_();_nop_();_nop_();<br />SCK=0;&nbsp;<br />}<br />void&nbsp;IIC_ACK()<br />{<br />SDA=0;&nbsp;<br />SCK=1;<br />_nop_();_nop_();_nop_();_nop_();<br />SDA=0;&nbsp;<br />_nop_();_nop_();_nop_();_nop_();&nbsp;<br />SCK=0;&nbsp;<br />_nop_();_nop_();_nop_();_nop_();&nbsp;<br />SDA=1;&nbsp;<br />}<br />void&nbsp;IIC_NACK()&nbsp;<br />{&nbsp;<br />SDA=1;&nbsp;<br />SCK=1;&nbsp;<br />_nop_();_nop_();_nop_();_nop_();<br />SCK=0;&nbsp;<br />}<br />bit&nbsp;IIC_Check_ACK()<br />{<br />_nop_();_nop_();_nop_();_nop_();<br />SDA=1;<br />SCK=1;<br />if(SDA==1)<br />&nbsp;&nbsp;return&nbsp;1;<br />else<br />&nbsp;&nbsp;return&nbsp;0;<br />SCK=0;<br />}<br />void&nbsp;IIC_Send_Byte(&nbsp;unsigned&nbsp;char&nbsp;d)&nbsp;<br />{&nbsp;<br />unsigned&nbsp;char&nbsp;i=8;&nbsp;<br />while(i--)&nbsp;<br />&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;_nop_();_nop_();_nop_();_nop_();<br />&nbsp;&nbsp;&nbsp;if((d&0x80)==0x80)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDA=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCK=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();_nop_();_nop_();_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCK=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDA=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDA=0;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCK=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();_nop_();_nop_();_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCK=0;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;d=d&lt&lt1;&nbsp;<br />&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />}<br />unsigned&nbsp;char&nbsp;IIC_Receive_Byte()&nbsp;<br />{&nbsp;<br />unsigned&nbsp;char&nbsp;i=8,d;&nbsp;<br />while(i--)&nbsp;<br />&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;_nop_();_nop_();_nop_();_nop_();<br />&nbsp;&nbsp;&nbsp;SDA=1;&nbsp;<br />&nbsp;&nbsp;&nbsp;SCK=1;<br />&nbsp;&nbsp;&nbsp;d=d&lt&lt1;<br />&nbsp;&nbsp;&nbsp;if&nbsp;(SDA==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d=d|0x01;&nbsp;<br />&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d=d|0xfe;<br />&nbsp;&nbsp;&nbsp;SCK=0;&nbsp;<br />&nbsp;&nbsp;&nbsp;}&nbsp;<br />return&nbsp;d;&nbsp;<br />}&nbsp;<br />void&nbsp;IIC_Save_float(unsigned&nbsp;int&nbsp;addr,float&nbsp;n)<br />{<br />unsigned&nbsp;char&nbsp;i,*p=&n;<br />for(i=0;i&lt4;i++)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;IIC_start();<br />&nbsp;&nbsp;&nbsp;IIC_Send_Byte(0xA0);<br />&nbsp;&nbsp;&nbsp;if(IIC_Check_ACK()==1)&nbsp;return;<br />&nbsp;&nbsp;&nbsp;IIC_Send_Byte(addr/256);<br />&nbsp;&nbsp;&nbsp;if(IIC_Check_ACK()==1)&nbsp;return;<br />&nbsp;&nbsp;&nbsp;IIC_Send_Byte(addr%256);<br />&nbsp;&nbsp;&nbsp;if(IIC_Check_ACK()==1)&nbsp;return;<br />&nbsp;&nbsp;&nbsp;IIC_Send_Byte(*p);<br />&nbsp;&nbsp;&nbsp;if(IIC_Check_ACK()==1)&nbsp;return;<br />&nbsp;&nbsp;&nbsp;IIC_stop();<br />&nbsp;&nbsp;&nbsp;_nop_();_nop_();_nop_();_nop_();<br />&nbsp;&nbsp;&nbsp;p++;<br />&nbsp;&nbsp;&nbsp;addr++;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;EA=1;<br />}<br />void&nbsp;IIC_Read_float(unsigned&nbsp;int&nbsp;addr,float&nbsp;n)<br />{<br />unsigned&nbsp;char&nbsp;i,*p=&n;<br />for(i=0;i&lt4;i++)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;IIC_start();&nbsp;<br />&nbsp;&nbsp;&nbsp;IIC_Send_Byte(0xA0);<br />&nbsp;&nbsp;&nbsp;if(IIC_Check_ACK()==1)&nbsp;return;<br />&nbsp;&nbsp;&nbsp;IIC_Send_Byte(addr/256);<br />&nbsp;&nbsp;&nbsp;if(IIC_Check_ACK()==1)&nbsp;return;<br />&nbsp;&nbsp;&nbsp;IIC_Send_Byte(addr%256);<br />&nbsp;&nbsp;&nbsp;if(IIC_Check_ACK()==1)&nbsp;return;<br />&nbsp;&nbsp;&nbsp;IIC_start();<br />&nbsp;&nbsp;&nbsp;IIC_Send_Byte(0xA1);<br />&nbsp;&nbsp;&nbsp;if(IIC_Check_ACK()==1)&nbsp;return;<br />&nbsp;&nbsp;&nbsp;*p=IIC_Receive_Byte();<br />&nbsp;&nbsp;&nbsp;_nop_();_nop_();_nop_();_nop_();<br />&nbsp;&nbsp;&nbsp;IIC_NACK();<br />&nbsp;&nbsp;&nbsp;IIC_stop();<br />&nbsp;&nbsp;&nbsp;p++;<br />&nbsp;&nbsp;&nbsp;addr++;<br />&nbsp;&nbsp;&nbsp;}<br />EA=1;<br />}&nbsp;<br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

11

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部