END12345678 发表于 2009-3-12 20:34:48

马老师,书上484页《例16.4批量读写24C56程序》通过串口传出来的数据很奇怪

马老师,书上484页《例16.4批量读写24C56程序》通过串口传出来的数据很奇怪,串口截图如下:
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_425272.jpg
11 (原文件名:串口截图.jpg)
//////////////////////////////////////////////////////////////////////////////
主程序如下
    I2C_init();                                    // initialize the I2C bus
    for (i=0;i<200;i++) {data=i;}    // 数组赋值
    EEprom_Write(0x0aa,200,data);       // 从0x00aa起写200个字节
    for (i=0;i<200;i++) {data=0;}    // 数组清零
    EEprom_read(0x0aa,200,data);      // 从0x00aa起读200个字节
    for (i=0;i<200;i++) {putchar(data);} // 送PC检验
    while (1){};
///////////////////////////////////////////////////////////////////////////////////////
按照上面的程序,串口输出应该0----199的16进制形式啊,怎么会出现这样的结果呢,我是直接用光盘里面的HEX

END12345678 发表于 2009-3-13 09:15:39

截图中的串口数据也刚好是200个

END12345678 发表于 2009-3-13 14:46:25

顶一下,还在找原因

kevinzcp 发表于 2009-3-13 15:00:18

有可能是下位机连续发送数据过多,串口高度助手反应不过来!

END12345678 发表于 2009-3-13 19:13:27

但是我每次复位都是这样啊,我把串口发送的地方加上点时间间隔试试

END12345678 发表于 2009-3-13 22:22:24

试验看看

avr-qq 发表于 2009-3-13 23:32:00

波特率对否

END12345678 发表于 2009-3-13 23:41:39

波特率9600,程序是9600

machao 发表于 2009-3-15 15:24:05

是书上的代码问题,还是你的硬件有问题?你先测试单字节读写是否正常。

END12345678 发表于 2009-3-15 20:17:30

例16.1单字节读写是可以的,
另外我用的是24C02,
采用例子16.4的时候将
#define Page_size    64   //24c256页字节数
换成下面的
#define Page_size    16   //24c02页字节数
用串口得到的结果和上面是一样的

machao 发表于 2009-3-15 22:19:42

哈,问题就在这里了,还是硬件的问题(使用器件不同)。24C02与24C256的命令有区别,请查看24C02的手册。

在24C02设置内部存储器的地址指针格式中,地址字只有一个字节,而24C256是2个字节(参见比较P469图16-9)。

因此只是改个定义是不够的,代码中相应的部分也需要改动。

希望你能真正了解和掌握I2C协议,通过例子去体会协议与设计思路和方法,不是简单的抄代码。

书中的例程不是通用代码,是针对24C256的。书中所有的例程都不是通用代码,目的是让学习者掌握真正的方法和思路,学会自己编写符合自己需要的程序。

书中所有例程的代码都是我自己编写并调试通过的。但如果你接错一根线,系统就会不正常,甚至不能工作。况且还有许多具体情况,如溶丝位设置不同,外部连接不同等,都会出问题。嵌入式系统本身就有硬件和软件紧密联系不可分割的特点,出了问题怎么就说软件不对吗?

END12345678 发表于 2009-3-15 23:21:05

谢谢马老师的解答.因为开始我也修改了一些地方,一直没有找到原因,所以想老师请教,谢谢了。

yangyongwen 发表于 2009-3-16 09:44:40

马老师的程序,我试过了,没问题

apple1007 发表于 2009-3-17 11:28:42

佩服马老师!
页: [1]
查看完整版本: 马老师,书上484页《例16.4批量读写24C56程序》通过串口传出来的数据很奇怪