52单片机如何对PC串口发送来的数据进行存储,存储在哪?RAM还是ROM中?

ROM不是存储程序的么,怎么存储接受数据?数据大小为1160字节,跪求精通串口通信大神解救,百思不得其解啊!如果连续发送三次数据,大小分别是1160,1360,1800字... ROM不是存储程序的么,怎么存储接受数据?数据大小为1160字节,跪求精通串口通信大神解救,百思不得其解啊!如果连续发送三次数据,大小分别是1160,1360,1800字节要怎么分别存储在单片机中?怎么定义存储地点?新人接触串口通信。。。能有具体C程序解释更棒了! 展开
 我来答
pengguismile
2013-11-27 · TA获得超过687个赞
知道小有建树答主
回答量:332
采纳率:100%
帮助的人:124万
展开全部
STC内部有256字节的ram,还有1024bytes的扩展RAM,请查看数据手册,但这显然不能满足你的要求,所以建议你使用外部扩展Ram,选择6264(8K)的RAM就可以了,怎么接请参看C51外部RAM扩展相关文档,另外不建议使用FlashRom存取,因为首先有写入次数限制,在写入时需要擦出整个扇区,不知道这样说你清楚不?
定义你的接收缓冲区:
#define MAX_BUF_LEN 1800
xdata char cRxdBuf[MAX_BUF_LEN];//data 指底128bytes,idata指高128bytes,xdata指外部RAM
另外,接外部RAM时记得禁止扩展的1024Bytes,否则会产生冲突。
追问
感谢你,资料查了很多,大概懂你的意思,我还是想用片内EEPROM来存放这三组数据,而且片内EEPROM有4K已经满足大小的要求了
追答
哦,你一定要这样作那也可以哈,不过超过擦出次数你的东西就挂掉了,另外STC手册上有例程,可以直接拿来用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一万光年MEGn0
2013-11-27 · TA获得超过3712个赞
知道大有可为答主
回答量:4602
采纳率:67%
帮助的人:1068万
展开全部
STC单片机内部有部分空间是EEPROM,可以存储数据。

串口收到的数据存在EEPROM中是可以的,但写数据前,需先擦除。

串口波特率是多少,写入数据有时间要求?
更多追问追答
追问
嗯,是STC的片,波特率是9600,写入数据的是时间没要求。有4K的EEPROM,但是C没学到家,不知道怎么样写这段数据存储程序,能具体点求教么?新人不懂的太多,时间又紧
追答

/*向单片机内部EEPROM空间读出一字节数据*/
uchar read_51flash_controlword(uint eeprom_addr)             
{
uchar temp;

IAP_CONTR=0X83;
IAP_CMD =read_cmd;//字节读命令,,

IAP_ADDRL=eeprom_addr&0xff;
IAP_ADDRH=eeprom_addr>>8;

IAP_TRIG=0X5a;
IAP_TRIG=0Xa5;//
//delay_nus(2);
Nop();
temp=IAP_DATA;

IAP_CONTR=0X00;
IAP_CMD =0X00;
IAP_TRIG=0X00;
IAP_ADDRH=0Xff;
IAP_ADDRL=0Xff;
return temp ;
}
void write_51eeprom_1byte(uint eeprom_addr,uchar w_data)//写数据到指定地址
{

IAP_CONTR=0X83;
IAP_CMD =program_cmd;//字节编程命令,,

IAP_ADDRL=eeprom_addr&0xff;
IAP_ADDRH=eeprom_addr>>8;

IAP_DATA =w_data;

IAP_TRIG=0X5a;
IAP_TRIG=0Xa5;//
Nop();
IAP_CONTR=0X00;
IAP_CMD =0X00;
IAP_TRIG=0X00;
IAP_ADDRH=0Xff;
IAP_ADDRL=0Xff;
}

/*擦除单片机内部EEPROM空间一个数据的扇区*/
void earse_one_sector_in51_ctr(uint  eeprom_page_addr)
{

EA=0;
IAP_CONTR=0X83;
IAP_CMD =erase_cmd;//字节擦除命令,, IAP_CMD

IAP_ADDRH=eeprom_page_addr>>8;
IAP_ADDRL=eeprom_page_addr;

IAP_TRIG=0X5a;
IAP_TRIG=0Xa5;//
//delay_nus(2);
Nop();
Nop();
IAP_CONTR=0X00;
IAP_CMD =0X00;
IAP_TRIG=0X00;
IAP_ADDRH=0Xff;
IAP_ADDRL=0Xff;
EA=1;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
古名壬
2013-11-27 · 超过14用户采纳过TA的回答
知道答主
回答量:61
采纳率:0%
帮助的人:23万
展开全部
如果数据要保存,建议用EEPROM!掉电可保存。比如24C02,引脚少,通信简单。
数据保存在RAM中,一般52单片机有256字节的RAM,像STC好多单片机都有1k的RAM扩展,也有EEPROM扩展。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友283d78e
2013-11-27 · 知道合伙人IT服务行家
百度网友283d78e
知道合伙人IT服务行家
采纳数:1491 获赞数:2981

向TA提问 私信TA
展开全部
其实每次只能发一个字节,储存在串口特定ram里,如果不够大需要外加存储芯片
追问
嗯,RAM不是只有128个字节么?没办吧储存数据啊
追答
存数据速度也不快呀,还不如找个spi的ram
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友cf2dd0a
2013-11-27
知道答主
回答量:18
采纳率:100%
帮助的人:13.7万
展开全部
数据太多了吧,简易把数据精简
追问
显示图片,没办法再精简了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式