问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

单片机C语言,怎么存储和调用一段数据

发布网友 发布时间:2022-04-26 08:51

我来回答

4个回答

热心网友 时间:2022-06-26 03:33

软件上要添加absacc.h头文件,并以如下方式声明数组或变量
xvar = XBYTE[0x1000]
然后对xvar赋值或取值即可

如果用汇编 要用 MOVX A,@DPTR 和/或 MOVX @DPTR,A 指令分别进行读写

硬件上要用到芯片6264和74LS373

C51芯片的PSEN ALE RD WR都要按照兼容方式连接

单片机可扩展性极佳,提供了丰富的微指令减轻开发者负担,利用寻址的差异区分存储空间.

事实上,上述的解决方案非常经典,网上有很多相关资料,搜索关键字:单片机扩展RAM

热心网友 时间:2022-06-26 03:33

用的是外部的EEPROM么,如HT24LC04,可以查看外部flash的芯片资料,然后编写程序。一般是不可以直接调用的,必须要自己写 读,写 函数,然后调用自己的函数实现读写功能。如果能提供 flash的资料 ,可以给你写一段代码参考。

热心网友 时间:2022-06-26 03:34

unsigned char xdata 声明外部存储空间,这样保存的数据就在外部数据存储空间里面

热心网友 时间:2022-06-26 03:34

MSP430 FLASH型单片机的FLASH存储器模块根据不同的容量分为若干段,其中信息存储器SegmengA及SegmentB各有128字节,其他段有512字节。SegmentB的地址是:0x01000h到0x107F,SegmentA的地址是:0x01080h到0x010FFh。其他段的地址根据容量不同,从0xFFFFh开始,每512字节为一段进行分配。
FLASH存储器写入数据时,每一位只能由“1”变成“0”,不能由“0”变成“1“,因此,当我们有数据要保存到FLASH存储器时,要先对目标段进行整段擦除操作,擦除操作使的对应段FLASH存储器变成全“1”。下面是擦除FLASH段的子程序,配置好必要的寄存器后,向段中任意地址写入数据,及擦除一段。
void flash_clr(int *ptr)
{
_DINT(); //关中断
FCTL3 = 0x0A500; //* Lock = 0 开锁
FCTL1 = 0x0A502; //* Erase = 1 使能擦除
*((int *) ptr) = 0; //* 擦除段
} FLASH存储器可以按字节写入,也可以按字写入。 void flash_write_int8(int8_t *ptr, int8_t value) // 字节写入 { _DINT();
FCTL3 = 0x0A500; // Lock = 0 开锁

FCTL1 = 0x0A540; // Write = 1使能写入
*((int8_t *) ptr) = value; // 写入数据
}
void flash_write_int16(int16_t *ptr, int16_t value) // 字写入 { _DINT();
FCTL3 = 0x0A500; /* Lock = 0 */ FCTL1 = 0x0A540; /* Write = 1 */
*((int16_t *) ptr) = value; /* Program the flash */ }

// FLASH存储器可以连续写入 按字节写入指定的数量的数据
void flash_memcpy(char *ptr, char *from, int len)
{
_DINT();
FCTL3 = 0x0A500; /* Lock = 0 */
FCTL1 = 0x0A540; /* Write = 1 */
while (len) { *ptr++ = *from++; len--; } } 在我们的应用程序中可以将要保存的数据放在一个自定义的结构中,例如:
typedef struct Setup
{
float gain_ch0; // 0通道增益 float gain_ch1; // 1通道增益 float gain_ch2; // 2通道增益
char init_flag; //初始化标记,恒为0xAA;
}SETUP;
我们定义了一个SETUP结构,存放三个AD通道的增益,以及其他要掉电保存的信息,init_flag的作用是标志FLASH的参数是否已被正确初始化,当我们设置了FLASH参数后,将init_flag置一个固定值,例如设为0xAAh,在程序开始运行时,检查init_flag,当init_flag的值为0xAAh时,表明参数已被初始化。
使用FLASH参数:在程序中定义一个SETUP类型的指针变量,通过这个指针访问FLASH中的参数。例如:
#define SegmentA 0x1080
float temp;
SETUP *p_setup_flash = (SETUP *) SegmentA
if(p_setup_flash-> init_flag == 0xAA)
{
temp = p_setup_flash->gain_ch0;
}
修改FLASH信息:由于FLASH不能象RAM一样直接修改,可以将FLASH信息拷贝到RAM中,修改相应参数后,重新保存到FLASH存储器中,之前要先擦除FLASH存储区。例如:
SETUP *p_setup;
SETUP buf; // 临时变量
p_setup = (SETUP *) SegmentA // 指向FLASH memcpy((char *) buf, (char *) p_setup_flash, sizeof(SETUP)); // 拷贝到RAM p_setup = &buf; // 指向RAM
p_setup-> gain_ch0 = 1.02; // 修改参数

flash_memcpy((char *) p_setup_flash, (char *) buf, sizeof(SETUP)); // 拷贝到FLASH
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 安卓上有没有一款带鼠标指针的模拟器? 淘宝商品的淘口令能不能解析出淘宝的商品链接? Arduino适合做产品开发吗 请求安卓编程高手,关于安卓手机连接蓝牙鼠标显示鼠标指针的问题。。。 科学爱眼保护视力体会感受手抄报 淘口令怎么改成网址 安卓4.2.2接了鼠标后 如何去除鼠标指针的加速度? 学习单片机要有哪些基础知识? 求四年级以怎样保护眼睛为题的作文 安卓上有没有一款带鼠标指针的浏览器。 以"怎样保护眼睛"为题写一篇周记 android屏幕出现黑色鼠标指针,一会儿便消失了,这是怎么一回事 108颗佛珠绳怎么打结 安卓应用不识别鼠标指针 需要用msp430g2553 flash掉电保存数据,flash能读能写,就是不能掉电后保存数据,请高手解决! 坐办公室怎么锻炼身体 保护视力教育心得体会 安卓x86安装教程9.0鼠标指针怎么调? MSP430如何接收485格式数据(不定长)并取出存放在数组里面? 平时会长时间坐着,有什么好的办法做些有氧运动吗? 保护眼睛远离近视的活动感受怎么写? 108颗佛珠的含义转发结束语 我看到了一款萤火虫的鼠标指针 可下载完却是安卓软件? 保护眼睛的唯美的宣传语 Lenovo/联想 Yoga13有鼠标指针吗 安卓用VNC模拟ubuntu后,显示白色界面,有鼠标指针,没有其他图标的怎么办? excel表格上有个小三角怎么加 android在虚拟机上怎么关机 人民*受理破产申请前一年内,涉及债务人财产的哪些行为,管理人有权请求人民*予以撤销? 想进bios打开VT然后玩安卓模拟器,但是按下F2或者Delete之后(华硕主板)就是黑屏,只有鼠标指针能动。 陆风X7的车机互联怎么用? 腊肉怎么蒸? 给发送淘口令链接自动生成优惠券链接那个是怎么弄的? 电视里边的红外接收器坏了,怎么换电视里边的红外接收器坏了,怎么换 怎么蒸腊肉好吃又简单窍门 雷蛇曼巴眼镜蛇鼠标和雷蛇炼狱蝰蛇CF版鼠标点评对比 求真正懂得设置4G版雷蛇曼巴眼镜蛇鼠标,玩FPS游戏类--CS/CF 雷蛇曼巴游戏鼠标无法移动 雷蛇曼巴鼠标的宏在CF中怎么设置 小学作文500字