[AVR单片机] modbus里EEPROM的读写问题(ICC编写)

[复制链接]
3663|6
 楼主| tx900901 发表于 2010-10-12 09:01 | 显示全部楼层 |阅读模式
void EEPROMWRITE(void)
{   
uint8 i,s=0;
for(s=0;s<receCount-4;s++)
{
buf1[s]=receBuf[s+2];
}
EEPROM_WRITE(0x20,buf1);
delayms(200);
s=0;
EEPROM_READ(0x20,buf2);
delayms(100);
sendBuf[0]=buf1[0];
sendBuf[1]=buf1[1];
sendBuf[2]=buf1[2];
sendBuf[3]=buf1[3];
sendCount = 4;
beginSend();
}

简单的程序,串口接收发送用中断,不加在协议里,那出来单独用就没问题,正常读写,加在协议里之后,通过查看EEPROM数据发现只能在0x20和0x21里写进去,后2位数据没写进去。而且最后没有串口数据输出  恼死了!~
 楼主| tx900901 发表于 2010-10-12 09:30 | 显示全部楼层
没人遇到过么?
airwill 发表于 2010-10-12 19:53 | 显示全部楼层
啥叫"不加在协议里"?
你好好看看你的程序:

EEPROM_WRITE(0x20,buf1);
delayms(200);
s=0;
EEPROM_READ(0x20,buf2);
delayms(100);

这么长时间的 delay, 不出问题才怪呢!
snakeemail 发表于 2010-10-12 22:53 | 显示全部楼层
用状态机写E2rom,可以不死等
 楼主| tx900901 发表于 2010-10-14 14:22 | 显示全部楼层
void main(void)
{
        unsigned char temp,s=0;
    port_init();
        uart0_init();

        while(1)
{
USART_Flush();
while(s<4)
{
PORTD &= ~(1 << PD2);
temp=receive();
buf1[s]=temp;
s++;
}
EEPROM_WRITE(0x20,buf1);
s=0;
EEPROM_READ(0x20,buf2);
PORTD |= (1 << PD2);
puts(buf2);
PORTD &= ~(1 << PD2);       
}
}


这样就是不加在协议里。在协议里延时去掉一样不可以,只能写进前2位。后面的都写不进去
疯子8972 发表于 2010-12-7 21:47 | 显示全部楼层
单独用可以
加在协议里用不可以
重新查看程序结构   估计可以解决
疯子8972 发表于 2010-12-7 21:49 | 显示全部楼层
在学生的时候也碰到这样的问题过
自己写了一段代码   单独可以用
加在同学写的一段代码里   就不可以了
还是整体框架问题
现在工作了    在单位制定了一套程序的框架规则
这样的问题就再也没遇到过
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

10

帖子

1

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