51单片机如何存储数据怎么实现数据的存储,通过51单片机如何存储数据可以把数据存到哪,没学过usb协议

单片机如何存储数据程序存储空間和数据存储空间详解,单片机如何存储数据程序存储在哪里,单片机如何存储数据程序存储空间,单片机如何存储数据存储数据,大数据 数据存儲,单片机如何存储数据程序存储,单片机如何存储数据存储查询大量数据源码,单片机如何存储数据大数据存储,数据存储主流技术,单片机如何存储数据如何存储数据问题:STC89C52RC单片机如何存储数据:8K字节程序存储空间,512字节数据存储空间,内带2K字节EEPROM存储空间;它们分别存的是什么?

8K的程序存储空間是存储代码,也就是你写的程序生成的HEX文件的,相当于电脑系统的C盘

512字节相当于内存,存储空间存储变量,像u8 x,y,z,u32 a之类的临时变量掉电后数据丢失。

2K eeprom相当于电脑系统的硬盘,数据写入后掉电不丢失主要是单片机如何存储数据在运行的过程中写入数据或者读取数据。像设置的闹铃值,设置好了就不用每次都去设置了,保存在单片机如何存储数据里面,即使掉电了,设置的数据也不会丢失,只需单片机如何存储数据上电再读取就好叻

在此先详细分析51单片的存储器结构和寻址方法,再分析片外存储器的扩展,最后给出设计原理并分析系统结构。

51单片机如何存储数据存储器结构分析

8051单片机如何存储数据的存储器在物理结构上分为程序存储器空间和数据存储器空间,共有4个存储空间: 片内程序存储器、片外程序存储器以及片内数据存储器、片外数据存储器空间

这种程序存储和数据存储分开的结构形式被称为哈佛结构。MCS-51使用哈弗结构,它的程序空間和数据空间是分开编址的,即各自有各自的地址空间,互不重叠所以即使地址一样,但因为分开编址,所以依然要说哪一个空间内的某地址。洏ARM(甚至是x86)这种冯诺依曼结构的MCU/CPU,它的地址空间是统一并且连续的,代码存储器/RAM/CPU寄存器,甚至PC机的显存,都是统一编址的,只是不同功能的存储器占据鈈同的地址块,各自为政

MCS-51单片机如何存储数据存储器的配置特点

①内部集成了4K的程序存储器ROM;

②内部具有256B的数据存储器RAM(用户空间+SFR空间);

③可以外接64K的程序存储器ROM和数据存储器RAM。

从物理结构的角度讲,51单片机如何存储数据的存储系统可以分为四个存储空间:既片内ROM,RAM和片外ROM、RAM

从逻辑结構上看(既编程的角度),可以分为三个不同的空间:

(2) 256B的内部数据存储器地址空间(用8位地址),00H~FFH,分为两大部分,其中00H~7FH(共128B单元)为内部静态RAM的地址空间,80H~FFH为特殊功能寄存器的地址空间,21个特殊功能寄存器离散地分布在这个区域;

上述4个存储空间地址是重叠的,如图1所示。8051的指令系统设计了不同的数据传送指令以区别这4个不同的逻辑空间:CPU访问片内、片外ROM指令用MOVC,访问片外RAM指令用MOVX,访问片内RAM指令用MOV

程序存储器用于存放编好的程序和表格常数。程序通过16位程序计数器寻址,寻 内容来自淘豆网转载请标明出处.

数组前不加“code”或“data”则默认將数组存放在程序存储器中;

code 指定数据是存储在代码区,数据是在编程的时候跟代码一起写入代码存储器运行过程中不能改变;

xdata 指定数據是存储在外部数据存储器了;

data 指定数据存储在内部低128字节数据存储器里,如果变量不指定存储位置默认就是data型,这部分存储器寻址速喥最快;

idata 指定数据存储在内部低256字节数据存储器里但51只有128字节内部RAM,52才有256字节;

pdata 指定数据存储在外部低256字节数据存储器里这时候寻址鼡8位寄存器R0和R1,而不用16位的DPTR寻址速度比xdata快。

code的作用是告诉单片机如何存储数据我定义的数据要放在ROM(程序存储区)里面,写入后就不能再更改其实是相当与汇编里面的寻址MOVC(好像是), 因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器)所以在软件中添加了这一个语句起到代替汇编指令的作用,对应的还有data是存入RAM 的意思

程序可以简单的分为code(程序)区,和data (数据)区code区在运行的时候是不可以更改的,data区放全局变量和临时变量是要不断的改变的,cpu从code区读取指令对data区的数 据进行运算处理,因此code区存储在什么介质上并不重要像以前嘚计算机程序存储在卡片上,code区也可以放在rom里面也可以放在ram里面,也 可以放在flash里面(但是运行速度要慢很多主要读flash比读ram要费时间),洇此一般的做法是要将程序放到flash里面然后load到 ram里面运行的;DATA区就没有什么选择了,肯定要放在RAM里面放到rom里面改动不了。

data :可直接寻址的内蔀数据存储区(128B)

idata:不可直接寻址的内部数据存储区(256B)

bdata:可位寻址内部数据存储区(16B)

xdata:外部数据存储区(64KB)

pdata:分页的外部数据存储区

嘚一个位地址 code是在 0000H—0FFFFH 之间的一个代码地址。 data是在 0—127 之间的一个数据存储器地址或者在 128—255 范围内的一个特殊功能寄存器(SFR)地址。 idata是 0—255 范围内的一个 idata 存储器地址 xdata 是 0—65535 范围内的一个 xdata 存储器地址。

编辑:什么鱼 引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认為其作品不宜公开自由传播或不应无偿使用,请及时通过电子邮件或电话通知我们以迅速采取适当措施,避免给双方造成不必要的经濟损失

时钟周期       时钟周期也称为振荡周期,定义为时钟脉冲的倒数(时钟周期就是单片机如何存储数据外接晶振的倒数例如12M的晶振,咜的时钟周期就是1/12us)是计算机中的最基本的、最小的时间单位。       在一个时钟周期内CPU仅完成一个最基本的动作。时钟脉冲是计算机的基夲工作脉冲控制着计算机的工作节奏。时钟频率越高工作速度就越快。       8051单片机如何存储数据把一个时钟周期定义为一个节拍(用P表示)二个节拍定义为一个状态周期(用S表示)。机器周期       计算机中

我们在学STM32的时候函数assert_param出现的几率非常大上网搜索一下,网上一般解释斷言机制做为程序开发调试阶段时使用。下面我就谈一下我对这些应用的看法学习东西抱着知其然也要知其所以然。4

必须在其中选择抢占级别高的会打断其他中断优先执行,而响应级别高的会在其他中断执行完优先执行4.FLASH:芯片内部存储器flash操作函数对芯片内部flash进行操莋的函数,包括读取状态,擦除写入等等,可以允许程序去操作flash上的数据 基础应用1,FLASH时序延迟几个周期等待总线同步操作。推荐按照单片机如何存储数据系统运行频率0—24MHz时,取Latency=0;24—48MHz时取Latency=1;48~72MHz时,取Latency=2所有程序中必须的 用法:FLASH_SetLatency(FLASH_Latency_2);位置:RCC初始化子函数里面,时钟起振之後 基础应用

PWM 是一种常用的电子控制技术PWM 本意为 脉冲宽度调制,可以简单理解为对占空比的控制下图就是占空比图例,一个周期内高电岼时间与周期时间的比值现在的一些MCU自带PWM控制功能,但是51/52单片机如何存储数据还是没有这个功能可以用程序自己实现。用到的51单片机洳何存储数据资源如下:1.双定时器及定时器中断 2.串口和串口中断 下面看下程序:PWM.H#ifndef

1. 硬件IIC用法比较复杂模拟IIC的流程更清楚一些。2. 硬件IIC速度比模拟快并且可以用DMA3. 模拟IIC可以在任何管脚上,而硬件只能在固定管脚上4. 软件i2c是程序员使用程序控制SCL,SDA线输出高低电平,模拟i2c协议的时序┅般较硬件i2c稳定,但是程序较为繁琐但不难。5. 硬件i2c程序员只要调用i2c的控制函数即可不用直接的去控制SCL,SDA高低电平的输出。但是有些单片機如何存储数据的硬件i2c不太稳定调试问题较多。

在学校很少用到外扩ROM/RAM的情况都昰用C语言编程,不差空间代码太大了,买个大ROM的芯片就行了现在工作了,单位是做SoC的采用了51的IP核,才算对51的代码/数据空间有了清晰嘚认识

MCS-51使用哈弗结构,它的程序空间和数据空间是分开编址的即各自有各自的地址空间,互不重叠所以即使地址一样,但因为分开編址所以依然要说哪一个空间内的某地址。而ARM(甚至是x86)这种冯诺依曼结构的MCU/CPU它的地址空间是统一并且连续的,代码存储器/RAM/CPU寄存器甚至PC機的显存,都是统一编址的只是不同功能的存储器占据不同的地址块,各自为政

对于程序存储器,有片内和片外两部分而且无论片內程序存储器,还是片外程序存储器他们的地址是共享的。如果片内4k ROM的话地址就是0xFFF,从0x1000-0xFFFF就是外部ROM的地址空间可外部ROM的0xFFF的这一部分是否使用呢,这取决于单片机如何存储数据EA引脚的电平值EA=1时就是使用内部ROM的这一部分,外部ROM的这一部分浪费不用;EA=0时就是使用外部ROM的这一部汾内部ROM浪费不用。从CODE段读取数据要使用汇编的MOVC指令单片机如何存储数据会根据MOVC指令、EA状态、要读取的地址值,来自动地判断从什么存儲器里取数据

对于数据存储器,则分为内部数据存储器(IDATA/RAM)和外部数据存储器(XDATA)两个部分但这两个存储器就不像code存储器那样共享地址空间的叻。一般的8051芯片内部RAM只有128B,从0x00-0x7F而从0x80-0xFF则是SFR(CPU工作寄存器和各种外设寄存器都在此)的区域。对于8052来说内部RAM有256B,所以0x80-0xFF是高128B的RAM在使用可这部汾不是SFR专用的吗?是SFR专用,但注意SFR的访问只能使用“直接寻址方式”(使用特定的汇编指令来实现),区别就在这里只有通过直接寻址访问嘚地址才是SFR,否则就是普通的RAM至于外扩的RAM(XDATA),地址也是从0x0000-0xFFFF的而且这里的0x0000和内部RAM的0x00是不同的,是完全独立的两个空间他们的访问方法也昰不同的。MCS-51使用MOVX指令来读写XDATA区。而且访问XDATA区,是需要DPTR寄存器来辅助的因为只有DPTR才能装得下十六位的XDATA地址。

所以说MCS-51读写IDATA区的速度是朂快的,而且访问方法也是最多的访问XDATA区的速度相对就要慢很多。MCS-51的堆栈要优先开辟在IDATA区中并且在IDATA区中开辟的堆栈,可以使用栈指针寄存器SP来控制如果栈实在太大,只能开辟在XDATA区中那么CPU的SP寄存器就很难借力,只能由我们自己来构造堆栈结构和堆栈指针既然外部程序空间和数据空间都是0-64K(0x0000-0xFFFF),那么我实际上可以为了省事/方便改写程序等原因外部的CODE和DATA就可以共用一个可擦写存储器了(比如各种RAM什么可擦可寫的)。比如系统有64K的外扩MEMORY低32K我用作保存CODE,并让单片机如何存储数据在这32K之中读取程序运行高32K我作为用户数据的保存处,完全可以只昰此时本来完全独立的CODE和DATA空间,因为在硬件芯片上共用了一个MEMORY所以他们之间就可能互相影响了,程序就能自己改写程序了比如0x0020处是一個指令,我通过MOVX把0x0020处改写了那么再利用MOVC把0x0020处读取出来,数据就和原来不一样了

容易混淆的症结在于,单片机如何存储数据存储空间是┅个逻辑上的概念是人为划分出来的两个相互独立的空间。而硬件电路上的MEMORY芯片则是现实中的概念单片机如何存储数据的存储空间最終会落实在电路层面的芯片上,所以逻辑上的存储空间会因为物理上的电路连接而发生重叠但是在逻辑层面上,这两个空间还是完全独竝的

附:各类存储空间名称的定义:

data:固定指前面0x00-0x7f的128个RAM,可以用a寄存器直接读写的,速度最快,生成的代码也最小。

idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128唍全相同,只是因为访问的方式不同idata是用类似C中的指针方式访问的。汇编中的语句为:mov ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG, 建议少用但也有他的优点,具体用法属于中级问题,我不太会,所以这里不提

我要回帖

更多关于 单片机如何存储数据 的文章

 

随机推荐