52单片机如何对PC串口发送来的数据进行存储,存储在哪?RAM还是ROM中?
ROM不是存储程序的么,怎么存储接受数据?数据大小为1160字节,跪求精通串口通信大神解救,百思不得其解啊!如果连续发送三次数据,大小分别是1160,1360,1800字...
ROM不是存储程序的么,怎么存储接受数据?数据大小为1160字节,跪求精通串口通信大神解救,百思不得其解啊!如果连续发送三次数据,大小分别是1160,1360,1800字节要怎么分别存储在单片机中?怎么定义存储地点?新人接触串口通信。。。能有具体C程序解释更棒了!
展开
5个回答
展开全部
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,否则会产生冲突。
定义你的接收缓冲区:
#define MAX_BUF_LEN 1800
xdata char cRxdBuf[MAX_BUF_LEN];//data 指底128bytes,idata指高128bytes,xdata指外部RAM
另外,接外部RAM时记得禁止扩展的1024Bytes,否则会产生冲突。
追问
感谢你,资料查了很多,大概懂你的意思,我还是想用片内EEPROM来存放这三组数据,而且片内EEPROM有4K已经满足大小的要求了
追答
哦,你一定要这样作那也可以哈,不过超过擦出次数你的东西就挂掉了,另外STC手册上有例程,可以直接拿来用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
STC单片机内部有部分空间是EEPROM,可以存储数据。
串口收到的数据存在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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果数据要保存,建议用EEPROM!掉电可保存。比如24C02,引脚少,通信简单。
数据保存在RAM中,一般52单片机有256字节的RAM,像STC好多单片机都有1k的RAM扩展,也有EEPROM扩展。
数据保存在RAM中,一般52单片机有256字节的RAM,像STC好多单片机都有1k的RAM扩展,也有EEPROM扩展。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其实每次只能发一个字节,储存在串口特定ram里,如果不够大需要外加存储芯片
追问
嗯,RAM不是只有128个字节么?没办吧储存数据啊
追答
存数据速度也不快呀,还不如找个spi的ram
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数据太多了吧,简易把数据精简
追问
显示图片,没办法再精简了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |