51单片机程序和数据问题?

来源:百度知道 编辑:UC知道 时间:2024/05/18 07:30:55
rom我感觉是放数据的,每次用keil编译完的程序不都是放在rom中么,为什么树上管rom叫程序存储器,我感觉应该叫数据存储器啊。而ram是放各种变量和寄存器的,应该是程序存储器啊,我一直没搞懂,明白的告诉一下,谢谢!
ROM是程序存储器,每次烧写完成后程序就已经固化在里面,不可更改
程序,单片机上电不是可以反复擦写的么,为什么说是不可更改?
还有单片机rom出场时候给他写了一个程序,那个程序是不可更改的,我以前是这样理解的啊!!!

ROM是程序存储器,烧写完程序后就固化在里面了,不可随意改写;平常所说的可以反复擦写是指在特定电压(比正常工作电压要高很多)和时序下才能够进行的,而单片机在正常运行过程中的电压和时序都是无法满足擦写电压和时序的,所以说如果没有专门的烧写工具当然是不可更改的了;编译的代码是将人可以识别的程序语言转变成机器可以识别的二进制代码,然后将这些二进制数据存放在ROM中,虽然已经数据化了,但是表达的是程序的意思;当然,我们在编写程序的时候,程序语句中常会有很多的数据,而这些数据是存放在ROM中的,但是这些都是无法改变的数据,是已经固化了的;
RAM是存放变量的寄存器,存放的数据是根据程序的运行而进行变化的,里面的内容不是固定的,同时RAM在有电的时候才能够暂时保存数据,一旦掉电则里面存放的数据则会全部丢失;
另外,RAM中的内容是由CPU执行了ROM中的指令决定的,是随着指令的变化而变化的。

ROM的任务是存储程序,就是单片机执行的指令,所以叫做“程序存储器”;当然也可以存储数据,比如显示汉字使用的字模数据。对于RAM,在单片机总只是临时存储运算过程中产生的中间数据,所以RAM叫做“数据存储器”。

你还犯了个错:寄存器就等于RAM吗?二者是完全不同的概念,尽管有的寄存器可以当作RAM使用,但是寄存器的功能不是为了存储数据使用的。

ROM中的内容在断电之后不会丢失,RAM在复位或者断电之后数据就全没了。

对于补充问题的回答:ROM中的程序“不可变”是什么意思?就是ROM中的程序在执行时所实现的功能不能改变ROM的内容,或者说就是不能改变程序自身的结构——否则就不需要你自己写程序了,或者程序会混乱的不可收拾。最典型的例子就是AVR单片机的应用程序中(不包括Bootloader程序)中是禁止出现SPM指令的,在AVR单片机中SPM指令的作用就能改变ROM的内容,所以在单片机在执行指令时都会避开SPM指令。

但是在使用编程器或者下载线对单片机ROM中的程序改写时,那是外部因素造成的改变,而不是单片机内部ROM中程序做到的。 而在RAM中存储的内容,是可以被程序改变的,还有EEPROM也和RAM一样。

所以要明白“不可变”的含义,打比