一般可以存在,单片机的flash里,flash本来是用来存放程序的,但是如果程序没那么大,可以存在flash的末尾。
具体代码怎么实现,可以查阅一下资料,我就不详细描述了。
存flash 的时候要注意的地方有几点:
1,flash的擦写次数有限制,所以不要频繁储存
2,擦除flash的时候不要把代码擦除了!
还有一种方法是存在外置的eeprom里面,这种芯片保存数据比较安全可靠,容量也大,但是价格比较贵,一般是用SPI通讯来实现的!
纯手打,望采纳!
楼主还有什么不明白的可以追问。
可以,单片机中,保存数据有两种。其中一个副本是易失性内存,当电源关闭时,数据将消失。
一种是非易失性内存,即数据不会在断电后消失。您应该验证单个芯片是否提供了可写的非易失性内存。
有些单片机,数据可以存储在程序存储空间(FALSH),有些附加的数据存储空间(EEPROM),根据单片机的不同产品定位而有不同。
扩展资料:
单片机又称一百单片机,属于集成电路芯片。在单片机中主要包含CPU、只读存储器ROM和随机存取存储器RAM等,多样化的数据采集和控制系统可以使单片机完成各种复杂的 *** 作,无论是控制 *** 作符号,还是对系统的 *** 作指令都可以通过单片机来完成。
因此,单片机具有强大的数据处理技术和计算功能,可以在智能电子设备中得到充分的应用。简单地说,单片机就是众所周知的一种芯片,这种芯片形成了一个系统。
通过集成电路技术的应用,将数据的计算和处理能力装入芯片,实现数据的高速处理。
软件上要添加absacch头文件,并以如下方式声明数组或变量
xvar = XBYTE[0x1000]
然后对xvar赋值或取值即可
如果用汇编 要用 MOVX A,@DPTR 和/或 MOVX @DPTR,A 指令分别进行读写
硬件上要用到芯片6264和74LS373
C51芯片的PSEN ALE RD WR都要按照兼容方式连接
单片机可扩展性极佳,提供了丰富的微指令减轻开发者负担,利用寻址的差异区分存储空间
事实上,上述的解决方案非常经典,网上有很多相关资料,搜索关键字:单片机扩展RAM
程序存储器的里面存放的是单片机的灵魂,它就是工作程序。小的可能只有1KB(最多只能装1024条8位数据,因为实际指令还有许多2字节、3字节指令,所以它还装不下1024条指令)大的也有128KB的。这些8位数据要么在工厂里做摸子光刻进去,要么一次性的烧写进去,要么……用编程器这个特殊工具把调试成功的机器码装载进去,或者像AVR单片机那样自己花几块钱做一条下载线,把电脑里这些东西灌进去(或许是AVR最吸引人之处),它一旦进驻电脑的程序存储器中,除了借助上述装置便不能自由改写,在单片机运行时,只是从其中读出指令或固定的数据,所以给程序存储器一个"只读存储器"的别名,简写为ROM,包括用编程器写紫外线擦除内容的EPROM。用电擦除的EEPROM和现在新兴的FLASH ROM;一次性写入的ROM仅用于电路和程序固定的批量产品中,实际工作起来,都是一样的。
在实际的使用中,单片机运行时为了定位ROM中的数据,其实每个8位存储单元都有一个固定的“地址”,通常用16进数表示:例如对于一个所谓4K的ROM,地址从0000H到0FFFH,(即是从0000,00014095),单片机运行时从哪个地址取数据,完全由程序本身决定,并不要我们干预。记住,给单片机一通电,它经过一个短暂的复位过程,立即转向ROM的最低地址0000H,在这里面放置的往往是一条“跳转”指令,它从这里一步跳到另一个地址:程序的真正起始地址,例如51机的0080H。难道ROM中就只有指令不能来点别的?ROM是程序存储器,除了指令外还包括运行程序必须的某些固定数据。假如,我们要求在单片机的某口上输出00H到FFH(255)按正弦半波变化的数值,每秒10000次,那如果硬要它按照公式一个个计算,对于它来说未免力不从心,可是我们可以把预先计算好的数值存入ROM中,到时候直接取出。
提到数据存储器,它其实是个可以随时存取数据的一块存储器,也就是可以读(取)也可以写(存)的存储器,简称RAM。现在的单片机里面使用的RAM属于静态RAM或SRAM,这个和电脑用的内存条有所不同,只要你把数据写入SRAM后,只要不断电,或者不清除掉,这个数据就一直保存在那里,电脑是用的动态RAM,要不断给它加刷新脉冲才能保存数据。因为单片机处理的信息量比电脑小很多,所以它带的RAM也比较少:从完全不带、带128、256、……1K、2K到4K,比ROM少多了。因为实际上RAM只是作为数据临时存放的地方,除非进行图像处理需要存放大量的数据外,一般对于执行较简单任务的单片机,有这么多也够用,如果实在不够用也只能采取外加SRAM如6116、6264等等来扩展。为了对RAM单元存取8位二进数,当然也的和ROM一样用“地址”来标示它的具体位置假如某单片机有1K(1024)RAM,它的地址也是从0000到1024,或16进数的0000H到03FFH可见和ROM的地址是一样的,不会混淆不清?不会,因为读ROM是由单片机的程序指针或转移指令或查表指令进行,而这些指令是不会进入RAM区的,读写RAM是另外的数据传送指令,也不会进入ROM区,这点也是和电脑不同之处,后者程序和数据都在内存条里面,地址不同,如果窜位了就会造成不可预见后果。单片机的这种存储器结构也称为哈佛结构。
在这里本文中要说到的RAM,其在单片机里的用途主要是存放临时数据,例如用单片机测温,每秒测1次,显示1分钟的平均值(1分钟更新一次);我们先通过传感器,放大电路,A/D转换,把温度这个模拟量转变为成比例的二进数,然后每秒钟1次把数字量通过输入口顺序存入到单片机的RAM中,然后对他们进行两两求和再平均的计算(题外话:要单片机进行“除法“运算比较麻烦,例外的是除以2,4,8……却非常简单。运用“右移”指令1、2、3次便可)最后的数值显示出来,然后把这60个存储单元统统写0清除旧数据,下次又如此这般地循环进行。另外在单片机里面还有若干寄存器,数量不多但是作用很大,除了暂存数据,还可以交换、加工、传递等等,以及随时纪录单片机当前处于什么状态,输入输出口,也是作为特殊功能的寄存器存在,具体各有不同,就不是随便说说可以搞清楚的,要看有关书籍了。
参考资料来源:吴鉴鹰吧
贡献文档:百度文库《吴鉴鹰单片机项目实战精讲》
单片机开发板学习参考:吴鉴鹰单片机开发板
单片机是
哈弗结构。
同时读取程序存储器和数据存储器。
单片机自动完成赋予它的任务的过程,也就是单片机执行程序的过程,即一条条执行的指令的过程,所谓指令就是把要求单片机执行的各种 *** 作用的命令的形式写下来,这是在设计人员赋予它的指令系统所决定的,一条指令对应着一种基本 *** 作;单片机所能执行的全部指令,就是该单片机的指令系统,不同种类的单片机,其指令系统亦不同。为使单片机能自动完成某一特定任务,必须把要解决的问题编成一系列指令(这些指令必须是选定单片机能识别和执行的指令),这一系列指令的集合就成为程序,程序需要预先存放在具有存储功能的部件——存储器中。存储器由许多存储单元(最小的存储单位)组成,就像大楼房有许多房间组成一样,指令就存放在这些单元里,单元里的指令取出并执行就像大楼房的每个房间的被分配到了唯一一个房间号一样,每一个存储单元也必须被分配到唯一的地址号,该地址号称为存储单元的地址,这样只要知道了存储单元的地址,就可以找到这个存储单元,其中存储的指令就可以被取出,然后再被执行。
程序通常是顺序执行的,所以程序中的指令也是一条条顺序存放的,单片机在执行程序时要能把这些指令一条条取出并加以执行,必须有一个部件能追踪指令所在的地址,这一部件就是程序计数器PC(包含在CPU中),在开始执行程序时,给PC赋以程序中第一条指令所在的地址,然后取得每一条要执行的命令,PC在中的内容就会自动增加,增加量由本条指令长度决定,可能是1、2或3,以指向下一条指令的起始地址,保证指令顺序执行。
做这个题目,要有两个阶段,先求和,再除以8。
程序如下:
MOV R0, #30H ;设定数据起始地址
MOV R1, #8 ;共有8字节,将循环相加8次
MOV R2, #0 ;R2 R3清零
MOV R3, #0
LOOP:
MOV A, @R0 ;取来一个数字
ADD A, R3 ;和低8位相加
MOV R3, A
JNC QQQ ;无进位转移
INC R2 ;有则高8位加一
QQQ:
INC R0 ;修改地址指针
DJNZ R1, LOOP ;循环8次
;
;至此,求和完毕,和数在R2R3中。
;下面,要对和数除以8,求得平均值。
;除以8,可以编写一段16位数除以8位数的程序!
;也可以把这16位数,右移3位,也相当于除以8。
;下面,仅仅使用了5条指令,就完成了这个除以8的任务。
;
ANL A, #0F8H
ADD A, R2
RL A
SWAP A
MOV 40H, A ;按照要求,把平均值存40H
SJMP $
END
以上就是关于51单片机怎么实现数据的存储,通过51单片机可以把数据存到哪,没学过usb协议全部的内容,包括:51单片机怎么实现数据的存储,通过51单片机可以把数据存到哪,没学过usb协议、STC89C52单片机可以掉电保存数据吗、单片机C语言,怎么存储和调用一段数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)