注:
1.ROM:只读存储器,单片机的只读存储区大多用于存储程序固又称程序存储器。
51单片机是EPROM,所谓的EPROM是可擦除的只读存储器。可以把原来的程序擦除了,再写一个新的进去。
断电后是可以保存的,数据存储器(RAM)是不能保存的。
RAM只能在程序执行的时候不断地重新存储定义的变量。如int x,int y
可以通过code这个指令来将定义的变量放在ROM,而不是RAM中,节省RAM资源
2.RAM:随机存取存储器,用于存储定义的变量等,速度快
51单片机的RAM存储容量远小于ROM,但是速度非常之快
内部详细图示
内部的结构看似十分复杂,但是大致上可以分为两个部分:运算器(红色框)和控制器(蓝色框)。
运算器:主要作用是进行加减乘除和逻辑运算
内部的结构可以上网查询
控制器:控制单片机的各种操作
程序执行过程
1.程序地址
程序开始的时候,要先知道第一条程序的地址,这个通过PC(程序计数器)知道。
比如刚开始的时候地址是0000H,这个是16进制的。
当这个地址送给地址寄存器后,即取出第一条指令后,PC自动加1,准备取出下一条指令。
2.程度读取
地址寄存器知道指令的地址后,就从ROM(只读存储器)里面取出地址所指向的一条指令。
并把取出来的指令放到指令寄存器中,经过指令编码器编译
3.数据处理
指令有可能要用到加减乘除和赋值语句的判断。经过指令编码器,就知道要取出那些定义的数据或者哪些赋值语句。
通过总线来调取我们要用到的数据。并通过运算器来运算。
比如说我们定义了int x和int y,这两个数据放在RAM中。
当我们取出了一个a = x + y 的指令后,需要x和y的值来计算。
那么通过上一张图的取数据的过程后取出了x和y的数据
通过运算器来运算。
如图,取出x和y进入黑色框(运算器)中来的到最终结果
最终的结果还会通过a这个变量存储在数据存储器(RAM)中
4.操作器件
当然,除了计算这种步骤外,还有一种情况就是来直接控制IO口的高低电平或者其他的器件了。
关键字:51单片机 内部结构
引用地址:
51单片机的内部结构和程序执行过程解析
推荐阅读最新更新时间:2024-11-17 07:44
基于51单片机的电源延时检测器的设计
//此程序应一个网友要求而作, 批初步在硬件上测试通过 //晶振11.0592M,50ms常数是4c00,2ms常数是f8cc //功能为检测断电延时时间,是否合格(是否在2ms到50ms之间。) //2007/12/24 #include reg51.h sbit led0=P1^0; //显示错误 sbit led1=P1^1; //显示错误 //led0与led1同时亮,则测试通过,只亮一个,则错误,两个全不亮,则异常 sbit starttest=P1^2; //检测开始信号,被测电源关闭时,同时产生的信号
[单片机]
51单片机编写60秒倒计时程序
#include reg52.h #define guan P0 #define wei P2 #define uchar unsigned char #define uint unsigned int uint m=0; uchar a1,a0,k=0,j,k,s=60; sbit beep=P2^3; unsigned char code weiyu ={0x1f,0x2f,0x4f,0x8f}; //代码与P2对应做位处理,显示相应的位 unsigned char code table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x
[单片机]
MCS-51单片机的指令时序
时序是用定时单位来描述的,MCS-51的时序单位有四个,它们分别是节拍、状态、机器周期和指令周期,接下来我们分别加以说明。 节拍与状态: 我们把振荡脉冲的周期定义为节拍(为方便描述,用P表示),振荡脉冲经过二分频后即得到整个单片机工作系统的时钟信号,把时钟信号的周期定义为状态(用S表示),这样一个状态就有两个节拍,前半周期相应的节拍我们定义为1(P1),后半周期对应的节拍定义为2(P2)。 机器周期: MCS-51有固定的机器周期,规定一个机器周期有6个状态,分别表示为S1-S6,而一个状态包含两个节拍,那么一个机器周期就有12个节拍,我们可以记着S1P1、S1P2……S6P1、S6P2,一个机器周期共包
[单片机]
51单片机点阵解析
感谢大熙熙 对51单片机点阵代码的详细分析 http://www.cnblogs.com/one-meter/p/4188277.html 网址阐述了他对代码的解析 不过部分代码解析不够透彻 我融入了个人对代码的理解 并且做了详细的解析 代码参考了普中给的代码 网上代码很多可以自己下载测试 代码如下 #include reg52.h #include intrins.h //重定义 函数变量 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //spi 所使用的 3个管脚
[单片机]
51单片机入门 - 定时器中断应用实例
定时器中断应用实例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 设计要求: 每秒点亮P1.0口的发光二极管一次,然后熄灭,使发光二极管形成闪烁效果 实现思路: 通过定时/计数器,每秒触发一次P1.0取反 涉及到的功能模块:定时器,中断,LED操作 定时器装填: 需要计数每秒的话,计数921600时溢出即可,在四种方式定时方式中,最大的计数范围是方式2:6553
[单片机]
实现位变量反转功能
//////////////////////////////////////////////////////// 在51单片机中有个特殊的变量 sbit (位变量) 用它做一个变量反转是很简单的, nuber=!nuber就实现了。 为什么需要这个功能呢? 下面看一个程序 假设 LED是一个灯,LED=1为亮,LED=0为灭。 那么我想要他200毫秒闪烁, while(1) { LED=!LED; delay_ms(200); } 这是51单片机的写法。 在c语言中这样是不可取的,因为我们不能去映射某一位,(其实是我不会把寄存器映射某一位出来操作) 所以通常我用的都是函数LED_ON(),
[单片机]
51单片机驱动LCD1602程序详解
51单片机LCD1602程序详解 LCD1602 工业字符型液晶。1602是指LCD显示的内容为16X2,即可以显示两行,每行16个字符。 特殊接口说明 RS:寄存器选择输入端 RS=1:指向数据寄存器 RS=0:指向指令寄存器 RW:读写控制输入端 RW=0:写操作 RW=1:读操作 E:使能信号输入端 读操作时,高电平有效; 写操作时,下降沿有效; 程序编写: #include《reg51.h》 #include《intrins.h》 //其中有nop函数的定义 /*对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时
[单片机]
基于51单片机的数控直流稳压电源的设计与实现
1 引言 直流稳压电源是电子技术常用的设备之一,广泛的应用于教学、科研等领域。传统的多 功能直流稳压电源功能简单、难控制、可靠性低、干扰大、精度低且体积大、复杂度高。普 通直流稳压电源品种很多.但均存在以下问题:输出电压是通过粗调(波段开关)及细调(电 位器)来调节。这样,当输出电压需要精确输出,或需要在一个小范围内改变时(如 1.02~1.03V),困难就较大。另外,随着使用时间的增加,波段开关及电位器难免接触不良, 对输出会有影响。常常通过硬件对过载进行限流或截流型保护,电路构成复杂,稳压精度也 不高。本文设计了一种以单片机为核心的智能化高精度简易直流电源,克服了传统直流电压 源的缺点,具有很高的应用价值。 2 系统硬件设
[单片机]