打印
[AVR单片机]

modbus里EEPROM的读写问题(ICC编写)

[复制链接]
2835|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,可以不死等

使用特权

评论回复
5
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位。后面的都写不进去

使用特权

评论回复
6
疯子8972| | 2010-12-7 21:47 | 只看该作者
单独用可以
加在协议里用不可以
重新查看程序结构   估计可以解决

使用特权

评论回复
7
疯子8972| | 2010-12-7 21:49 | 只看该作者
在学生的时候也碰到这样的问题过
自己写了一段代码   单独可以用
加在同学写的一段代码里   就不可以了
还是整体框架问题
现在工作了    在单位制定了一套程序的框架规则
这样的问题就再也没遇到过

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

10

帖子

1

粉丝