51单片机汇编学习笔记1——内部结构
这篇文章主要讲一下51单片机的内部结构、资源。我使用的单片机是AT89C51这款。所以也是依据这款单片机来讲51单片机的内部结构。
还有声明一下这个系列的文章是偏向于讲解用汇编语言对51进行编程,所以对一些专有名词不会专门解释,但会讲清楚意思。
上图是51单片机的内部结构示意图。
主要是要知道51单片机内部是有哪些资源以及它的框架。像最基础的IO口,比较重要的有中断、串口、定时器,这些会放在第8小节以后。值得一提的是51单片机的数据存储器和程序存储器是在物理上分离的,数据存储器就是单片机的RAM,而程序存储器是单片机的ROM,是典型的哈佛结构。中央处理单元依靠地址总线和数据总线与各个模块之间传递数据,进而实现各种功能。因为51的中央处理单元是一个8位的微控制器,所以它的数据总线也是8位的。(地址总线图里面没有表示出来)。
关于程序存储器,看下图
51系列的单片机是只有4KB,52系列属于增强版有8KB, 当你将EA引脚拉成低电平的时候是可以进行外部扩展程序存储器的。这个在11小节扩展原理的时候会讲到。
关于数据存储器,看下图
可能第一眼看这个图会有点晕。那就一部分一部分的看。
在看之前先补充一些必备知识:1、Q:什么叫寄存器 A:其实寄存器的实质还是存储器,只不过当你往里面写入数据时单片机会执行某一动作。
1、可直接寻址空间:它的地址范围是000H到007FH。然后,什么是可直接寻址呢?
这就涉及到51汇编的寻址方式。51汇编有7种寻址方式,分别是:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、相对寻址、变址寻址、位寻址。
a)立即寻址:是直接将某个数写入某块地址(或寄存器)。 MOV A ,#1234H
MOV指令表示将某个操作数放入(复制到)某个地址或寄存器中。(就是往某个地址或寄存器里面写数据)。#+数字,表示数据,相对的如果不加#,则表示地址号。MOV A ,#1234H就是表示将十六进制的1234放到寄存器A中。(注意寄存器A是51单片机的特殊寄存器,后面会讲到)。
b) 直接寻址:就是将某个地址里面的数放到(复制到)某个特殊寄存器中。MOV A, 3AH
与立即寻址不同的是指令中出现的是操作数的地址号,而不是直接的数据(操作数)。
c) 寄存器寻址:就是指令中将指定的寄存器的内容作为操作数。INC R0
R0是51单片机的一个特殊寄存器。INC R0的意思是将R0中的数自加一。
d) 寄存器间接寻址:这个解释比较绕,直接上指令
MOV 22H,#0AAH ;往22H这个地址写入一个数0AAH
MOV R0,#22H ;往R0寄存器里面写入一个数22H
MOV A,@R0 ;将R0寄存器里面的值作为操作数的地址,也就是说@R0相当于地址号22H。那么MOV A,@R0 也就是 MOV A,22H,然后将22H这个地址里面的数复制到(写到)寄存器A中。
e) 相对寻址: 这个寻址方式主要用在转移指令中。比如在IO口输入里常用 JB bit rel.
这个暂时不了解也没问题。因为后面讲IO口输入的时候会讲到。(主要是还没开始讲指令格式,还要有几个知识要铺垫)。
f) 变址寻址: 变址寻址通常和DPTR(数据指针,其实也是一个特殊寄存器)有关。直接看指令MOVC A ,@A+DPTR
这个其实在后面扩展原理和接口技术那一小节的时候才会用到。先暂时不讲。
g) 位寻址:即对数据位操作。上面的都是对8位数据进行操作,而位寻址是对一位数据进行操作。但位寻址是有指定区域的,也就是数据存储器那个图里面标明的20H~2FH。
MOV C,2BH ;C是51的状态寄存器的一个位。
好了重新回到这个图
应该就能大概明白可直接寻址空间、特殊寄存器、可位寻址区。 他们对应着不同的寻址方式。
现在主要来讲一下右侧的3个部分。
1、工作寄存器组0~3:每次你只能使用其中的一组,而每一组里面有寄存器R0~R7(这8个寄存器是帮助你编程用的,用来存放你程序中的数据。类似于8个变量,虽然这么说不是很准确)。默认是工作寄存器组0;想要用其他组可以通过设置状态寄存器(PSW)的RS0,RS1位来实现。
2、可位寻址区:有16个字节单元。可进行字节寻址也可进行位寻址。
3、堆栈区:也叫用户自定义区。其实就是用来对数据做临时保护的。
具体想要对堆栈有更多的了解可以看一下『教程』堆栈是个啥?_哔哩哔哩_bilibili 这个视频
重点要重点堆栈遵循先入后出原则。
最后是特殊功能寄存器:
看看就行。
主要是要了解PSW寄存器
主要了解是进位,借位运算对PSW寄存器的影响。
加法练习(带进位的加法)_哔哩哔哩_bilibili 带进位的加法
减法练习_哔哩哔哩_bilibili 减法
这一小节,可以说很枯燥。都是一些基本的知识。可以说到最后这些都是一些常识类的知识了。
其实重点就两个:1、7种寻址方式 2、PSW寄存器
对于内部结构要理解,要有个大概。需要达到的程度就是当你以后写汇编程序的时候你心里面要清楚自己是在对那一块地址(寄存器)进行操作。
好了,结束。----------------------------------------------------------------------------------------------------------
51单片机汇编学习笔记1——内部结构相关推荐
- 51单片机汇编学习笔记9——定时计数器
这一小节介绍一下51单片机的一个重要外设定时计数器. 顾名思义定时计数器主要是两种功能:定时.计数. 定时:就是当你开启定时器后到了设定的时间他会触发中断,然后去执行中断服务函数里面的程序. 计数:主 ...
- 51单片机汇编学习笔记4——子函数
这一小节讲一下子函数的编写格式和调用. 子函数的调用 先讲一下子函数的格式 以之前讲到的延时函数为例 :延时函数 DELAYS :MOV R1,#0FFH ;往R1寄存器中放入一个数(立即寻址)0ff ...
- 51单片机汇编学习笔记6——IO口输入
这一小节讲一下IO口的输入. 输出是 直接对P1口赋值. 输入本质上是读取引脚的状态,被拉高还是被拉低.(这里暂不涉及模拟量的输入) IO口的输入 核心指令 JB JNB JB bit rel 例如: ...
- 51单片机汇编学习(一)点亮你的LED灯
本帖为使用汇编编写51单片机的学习笔记,本帖使用软件为keil5,因为没有实际硬件,所以选择porteus仿真软件,因为是第一篇,所以内容多有赘述,详细说明了工程建立等,因为文章太长所以编程和仿真分开 ...
- 51单片机汇编学习例程(9)——ADC0809篇
ASM9_ADC0808: ADC0808采集ADC参数,数码管显示 (注意代码显示不全,最下面有Keil源码和Proteus工程) /** ************************** ...
- 51单片机入门学习笔记(上)
笔记整理自B站UP主江科大自化协教程<51单片机入门教程-2020版 程序全程纯手打 从零开始入门> 所用单片机为普中51 STC89C52单片机2022新款,文中所提到的调试现象及结果也 ...
- 江科大51单片机入门学习笔记合集
文章目录 软件下载 介绍 STC89C52RC 命名规则 芯片介绍 开发板介绍 逻辑运算 C语言语法 函数在C语言基础上做的拓展 重入函数 中断函数 外部函数 sfr sbit 51单片机最小系统组成 ...
- 51单片机汇编学习11——扩展原理与接口技术
终于到这一小节了.这一节讲扩展原理与接口技术. 那么什么是扩展原理&接口技术呢?其实主要是3种. 1.扩展一个程序存储器 2.扩展一个数据存储器 3.扩展IO口 1.扩展程序存储器 其实这个扩 ...
- 51单片机汇编学习10——串口通讯
这一小节写一下串口通讯. 建议先去了解一下什么串行通讯. 推荐一个视频3分钟理解通信协议之串口UART到底是个啥?_哔哩哔哩_bilibili 因为串口通讯涉及的寄存器相对较多.所以尽量要自己去看看S ...
- 51单片机汇编学习例程(7)——74HC595数码管篇
7.ASM7_Seg_595: 74HC595控制数码管静态显示 (注意代码显示不全,最下面有Keil源码和Proteus工程) /** **************************** ...
最新文章
- github结合TortoiseGit使用sshkey,无需输入账号和密码
- 小时候有哪些丑事,让你终身难忘?
- 后台java规范参数_详解Java后端优雅验证参数合法性
- Java的对象和类 以学生管理系统为例
- python官网解释器选哪个_Python解释器的选择,初学者必看
- web前端面试高频考点——Vue面试题
- 15分钟学会使用Git和远程代码库
- R语言中三线表是什么?使用table1包绘制(生成)三线表实战
- C++11 时间编程(3)时间点表示time_point,时钟类型,当前时间获取
- intel edison固件更新
- 最好的开源网络入侵检测工具
- 人月神话(二)外科手术队伍、贵族专制、民主政治和系统设计
- Java进度条(excel文件解析)的实现
- 2021-05-24 Nyquist图背后的信息
- win 10 输入法自定义切换快捷键(rime)
- 斐讯R1音箱安装悟空遥控,并实现DLNA推送
- 7.微信小程序(布局适配与物理逻辑像素)
- android绑定交通卡,安卓手机公交卡的用法
- 教育机构布局短视频,解决获客成本高问题
- 楼天城男人八题之博弈
热门文章
- mysql查询名字重复四次以上的人名_怎么查询数据库中重复字段的名字
- 基于JAVA超市自助购物系统的设计与实现
- TraceView工具如何使用
- 错误解决:java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to star
- 将mysql数据库批量导出为word三线表格形式
- 史上最全的ocr文字识别体验,让你一次用个够
- 微博如何发订阅消息_微博怎么添加订阅 - 卡饭网
- MyEclipse字体和保护色设置
- 最全最新cpu显卡天梯图_电脑显卡天梯图2019排行榜——2019显卡CPU天梯图排行榜...
- 周立功开发板安装linux,极速搭建周立功IMX283A ARM Linux开发环境(1)