*在学习51之前,最先接接触到的是Arduino,这个东西上手确实十分的简单,可以做出来一些小玩意,但是它的性能终究是不够强大,对于一些比较厉害的作品,用Arduino就显得心有余而力不足了,所以现在开始学习51和stm32。51的学习在大学本科阶段,在学校课堂上学到的基本上是一些理论知识,这些东西也确实有一定的必要,毕竟掌握了都是自己的。所以说我准备对这些理论的知识进行一个整理。好,废话不多说,现在切入正题。
对于一般的大学教材,前面两章基本上都是对单片机的一些基本的介绍,主要就是一些对单片机硬件结构认识过程,这个主要是让我们有个总体的认识,开始适应单片机的学习。这些东西就忽略了吧。就从51系列单片机的指令系统开始吧。这里使用汇编语言编写程序的。(以上都是废话,自动忽略)*
51系列单片机的指令系统
一:单片机指令系统的概述
(1)总共111条指令
(单字节指令49条,双字节指令45条,三字节指令17条)
(一个机器周期、12个时钟震荡周期指令64条,两个机器周期、24个时钟震荡周期指令45条、乘除两条指令位4个机器周期)
(12MHZ晶振:机器周期位1us)
(2)51指令不区分大小写
(3)指令格式:操作码+操作数
二:单片机的寻址方式
(1)寄存器寻址方式:MOV A,Rn
(2)直接寻址方式:MOV A,40H
(寻址范围:第一:内部RAM的128个单元、第二:特殊功能寄存器SFR,除了以单元形式外还能用寄存器符号形式:即MOV A,80H==MOV A,P0)
(3)寄存器间接寻址:(寄存器中放的是操作数地址、寄存器前面加标志符@)例如:MOV R1,#40H MOV A ,@R1
(寻址范围:第一:访问内部RAM、第二:片外数据存储器的64k字节的间接寻址、第三:片外的数据存储器的低256字节、第四:堆栈区)
(4)立即寻址方式:(操作数在指令中直接给出,需在操作数前面加上#,如果首位是A-F,前面还加0)例如:MOV A,#40H MOV A,#0FFH
(5)基址寄存器加变址寄存器间址寻址方式:(以DPTRPC作为基址寄存器,以累加器A作为变址寄存器)
(6)位寻址方式:例如:MOV A,40H 把40H的值送到进位位C
(寻址范围:第一:内部RAM位寻址区、第二:特殊功能寄存器中的可寻址位)
(7)相对寻址方式:(目的地址=转移指令所在地址+转移指令字节数+rel(带符号的8位二进制数的补码数))
三:51系列单片机的指令系统及一般说明
(1)分类介绍:
数据传送类(28条)
算数操作类(24条)
逻辑运算类(25条)
控制转移类(17条)
位操作类 (17条)
(2)指令中符号的意义:
Rn
当前寄存器区8个工作寄存器
Ri
当前选中的寄存器区中可做间接寻址寄存器的2个寄存器
Direct
直接地址,即8位内部数据存储单元或者特殊功能寄存器地址
#data
包含指令中的8位立即数
#data
包含指令中的16位立即数
rel
相对转移指令中的偏移量,8位带符号的补码数
DPTR
数据指针,可用作16位的数据地址寄存器
bit
内部RAM或者SFR中直接寻址位
C(Cy)
进位标志位或者位处理机制中的累加器
addr11
11位目的地址
addr16
16位目的地址
@
间接寻址寄存器
(x)x
中的内容
((X))
由X寻址的单元中的内容
---->
箭头右边内容被箭头左边所替代
(持续更新中!!!)