请教24C256读写问题

[复制链接]
2781|0
 楼主| zjleejl 发表于 2007-7-5 09:40 | 显示全部楼层 |阅读模式
近几天在改写24C256的读写程序,原先的读写函数是每次16字节,改为每次20字节,调了好几天了还有问题,有的时候读写正常有的时候不对,想请教一下大家是不是会跟24C256存储结构有关系,比如不能跨页读写等等。还有这个函数应该是页读写方式吧?<br />下面的写函数大家帮忙看看有什么问题,先谢谢大家了<br />uchar&nbsp;RecToEeprom_xdbd(uint&nbsp;rec_num,&nbsp;uchar&nbsp;*write_data)<br />//rec_num是记录号,每条记录20字节,*write_data是要写入的数据<br />&nbsp;{<br />&nbsp;&nbsp;uchar&nbsp;i;<br />&nbsp;&nbsp;uchar&nbsp;j;<br /><br />&nbsp;&nbsp;union&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;addr[2];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//first_addr[0]=higher&nbsp;byte<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint&nbsp;val1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;xdata&nbsp;first;<br />&nbsp;&nbsp;uchar&nbsp;xdata&nbsp;cmp_data[20];<br />&nbsp;&nbsp;uchar&nbsp;xdata&nbsp;writ_cmd;<br />&nbsp;&nbsp;uchar&nbsp;xdata&nbsp;read_cmd;<br /><br />&nbsp;&nbsp;EWP=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//turn&nbsp;off&nbsp;<br />&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;_nop_();<br /><br />&nbsp;&nbsp;//first.val1=(rec_num&lt&lt4);<br />&nbsp;&nbsp;first.val1=(rec_num&nbsp;*&nbsp;20);&nbsp;&nbsp;&nbsp;&nbsp;//原来是16字节,改为20字节&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;i=paddr;<br />&nbsp;&nbsp;i=i*2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;programmable&nbsp;address&nbsp;to&nbsp;bits&nbsp;3:1<br />&nbsp;&nbsp;i|=faddr;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;add&nbsp;fixed&nbsp;address<br />&nbsp;&nbsp;i&=0xfe;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;specify&nbsp;write&nbsp;operation<br />&nbsp;&nbsp;writ_cmd=i;<br />&nbsp;&nbsp;i|=0x01;<br />&nbsp;&nbsp;read_cmd=i;<br /><br />&nbsp;&nbsp;for(j=0;j&lt9;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iic_start();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//writing&nbsp;section<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iic_shout(writ_cmd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iic_shout(first.addr[0]);&nbsp;&nbsp;//send&nbsp;high&nbsp;byte&nbsp;of&nbsp;address<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iic_shout(first.addr[1]);&nbsp;&nbsp;//send&nbsp;lower&nbsp;byte&nbsp;of&nbsp;addr<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//for(i=0;i&lt16;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt20;i++)&nbsp;&nbsp;&nbsp;&nbsp;//原来是16字节,改为20字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iic_shout(write_data);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iic_stop();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay_50us(120);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iic_start();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//reading&nbsp;section<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iic_shout(writ_cmd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iic_shout(first.addr[0]);&nbsp;&nbsp;&nbsp;//send&nbsp;high&nbsp;byte&nbsp;of&nbsp;address<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iic_shout(first.addr[1]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iic_stop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//????&nbsp;add&nbsp;temp<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();_nop_();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iic_start();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//second&nbsp;start&nbsp;for&nbsp;read<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iic_shout(read_cmd);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//send&nbsp;device&nbsp;address&nbsp;and&nbsp;write&nbsp;command<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*for(i=0;i&lt16;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp_data=iic_shin();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i&lt15)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iic_ack();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt20;i++)&nbsp;&nbsp;&nbsp;&nbsp;//原来是16字节,改为20字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp_data=iic_shin();//读出校验<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i&lt19)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iic_ack();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iic_nak();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iic_stop();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//for(i=0;i&lt16;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt20;i++)&nbsp;&nbsp;//原来是16字节,先改为20字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(write_data!=cmp_data)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//if(i==16)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//verifying&nbsp;success<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i&nbsp;==&nbsp;20)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//原来是16字节,改为20字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;EWP=1;<br />&nbsp;&nbsp;//EX0=1;<br />&nbsp;&nbsp;if(j&lt9)<br />&nbsp;&nbsp;&nbsp;&nbsp;return(0);<br />&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;return(1);<br />}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

13

帖子

0

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