首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

STC 串口接收20k左右数据存储到EEprom里,求解!该如何解决

2012-06-13 
STC 串口接收20k左右数据存储到EEprom里,求解!想到一个办法:首先按键擦除20k左右的EEPROM,然后在串口中断

STC 串口接收20k左右数据存储到EEprom里,求解!

想到一个办法:首先按键擦除20k左右的EEPROM,然后在串口中断里边接收边写数据 ?可行吗 ?急!

我现在操作遇到了问题,不知道是不是这个想法错了,求大家帮忙,先谢谢了

[解决办法]
楼主方法可行,不过不是很合理,中断里面不适合做大量数据处理,这回严重影响代码的实时性能。

也可以在中断里面接收数据,写eeprom的时候在主循环体,当然操作eeprom的时候要关中断。

[解决办法]
如果楼主可以控制,主机发送一帧,等待处理完再发另一帧,做双向协议,或者降低发送波特率,给接收端留出足够的处理时间,同时降低帧长度,帧长度降低到极限就是接收到一个bit写一个bit了。

主循环要尽量简洁,一旦接收到标志位,立即处理,实时性要好。


[解决办法]

探讨

引用:

什么问题?

不要在中断里面写,EEPROM的写操作是要耗时间的,你看24CXX的数据手册,写周期最多耗时5MS.

你最好建2个缓冲区,每个缓冲区的大小设成EEPROM的页大小,现将串口的数据存到缓冲1,1存满了则马上写入EEPROM并且将串口的数据缓存到缓存2,依次循环


刚测试了用波特率9600可以的,波特率用57600就会出现数据丢失的现象……

[解决办法]
一次写一整页这样做是可以省掉不少IIC操作中的START,STOP,能省那么一点时间=.=,
像前面说的,如果主机也是可以控制的,那最好就做成双向协议,主机发完一帧则等待下面操作完成返回确定再发下一帧
[解决办法]
自己定义协议来完成,一次发送一次数据包。比如:

数据包组成(简易的,具体自己定义):
头+数据包标识+有效数据长度+有效数据+尾

数据包:
0xaa 0x01 0x05 0x12 0x34 0x56 0x78 0x90 0x55 

说明:
oxaa表示数据包头
0x01表示数据包类型,此处定义 0x01为数据传输 0x02为应答
0x05表示有效数据长度,即后面的数据0x12 0x34 0x56 0x78 0x90 这5个,这里就可以放你要存储的数据了,比如一次写512B,你就可以放这么多数据进去
0x55表示数据包尾,一帧数据包结束

例子(本协议只是作为思路提示用):
上位机:0xaa 0x01 0x05 0x12 0x34 0x56 0x78 0x90 0x55 
下位机:接收数据,根据0x01标识知道是数据传输,然后处理后面的数据,存储到EEPROM,然后发送应答信号给上位机,0xaa 0x02 0x55 ,此数据包0x02为应答,注意可以加上有效数据用于表示正确存储没
上位机:收到0xaa 0x02 0x55 ,继续下一个数据包发送
下位机:继续如上处理。
上位机:发送完最后一帧
下位机:接收完最后一帧,应答
上位机:结束。

热点排行