总体架构
1.1 8051内核
1.1.1简介
标准 8051 即 MCS-51 为 12 周期的 8051 CPU,而 WS51F7030 系列芯片采用的是单周期 8051 CPU,完全兼容MCS-51 指令集。
1.1.2寻址方式
8051 的内核寻址方式有:立即寻址、直接寻址、间接寻址、寄存器寻址、相对寻址、变址寻址和位寻址。
1.1.2.1立即寻址
立即寻址是在指令操作数中直接给出参与运算的操作数,指令举例如下:
MOVA, #60H (这条指令把 60H直接送到累加器A)
1.1.2.2直接寻址
直接寻址指令操作数给出的是参与运算操作数的地址。直接寻址方式只能用于特殊功能寄存器、内部数据区和位地址空间,而特殊功能寄存器和位地址空间只能用直接寻址方式访问。指令举例如下:
ANL50H, #91H(把50H 单元中的数与 91H相“与”,结果存放在50H 单元中,其中 50H为内部RAM的地址)
1.1.2.3间接寻址
间接寻址采用 R0 或 R1 前添加”@”符号来表示。假设 R1 中的数据是 40H,内部数据存储器 40H 单元的数据为 55H,则指令为MOVA, @R1(把数据55H 传送至累加器A)
1.1.2.4寄存器寻址
寄存器寻址对选定的工作寄存器R7-R0、累加器 A、通用寄存器 B、地址寄存器和进位 C 中的数进行操作,其中寄存器 R7-R0 由指令码的低 3 位表示,ACC、B、DPTR 及进位 C 隐含在指令码中。寄存器寻址也包含一种隐含寻址方式。工作寄存器工作区由状态寄存器PSW 的 RS1、RS0 决定。指令操作数指定的寄存器均指当前工作区的寄存器。
INCR0 (R0中的数据+1写回R0)
1.1.2.5相对寻址
相对寻址是将程序计数器 PC 中的当前值与指令第二字节给出的数相加,其结果作为转移指令的转移地址。转移地址也成为转移目的地址,PC中的当前值成为基地址,指令第二字节给出的数成为偏移量。由于目的地址是相对于 PC中的基地址而言,这种寻址方式成为相对寻址。偏移量为带符号的数,所能表示的范围为+127--128。这种寻址方式主要用于转移指令。
JC$+50H (表示若进位位 C为0,则程序计数器 PC中的内容不改变,即不转移。若进位位C 为1,则以 PC中的当前值及基地址,加上偏移量50H 后得到的结果作为该转移指令的目的地址)
1.1.2.6变址寻址
在变址寻址方式中,指令操作数制定一个存放变址基址的变址寄存器。变址寻址时,偏移量与变址基值相加,其结果作为操作数的地址。变址寄存器有程序计数器PC 和地址寄存器 DPTR。
MOVCA, @A+DPTR(表示累加器 A为偏移量寄存器,其内容与地址寄存器DPTR 中的内容相加,其结果作为操作数的地址,取出该单元中的数送入累加器A 中)
1.1.2.7位寻址
位寻址是指对一些可进行位操作的内部 RAM和特殊功能寄存器进行位操作时的寻址方式。在进行位操作时,借助于进位位 C作为位操作累加器,指令操作数直接给出该位的地址,根据操作码对该位进行位操作。MOVC, 20H(将地址为20H 的位操作寄存器值送入进位位C 中)
1.1.3寄存器描述
1.1.3.1程序计数器PC
程序计数器 PC 寄存器为 16 位,是专门用来控制指令执行顺序的寄存器,它没有寄存器地址。单片机上电或复位后,PC值为 0,单片机从零地址开始执行程序。
1.1.3.2累加器ACC
累加器 ACC 是一个常用的专用寄存器,指令系统中采用 A 作为累加器的助记符,常用于存放算术或逻辑运算的操作数及运算结果。
1.1.3.3通用寄存器B
B 在乘除法运算中需要和 ACC配合使用。MUL AB 指令把 ACC 和 B 中8 位无符号数相乘,所得的 16 位乘积的低字节存放在 A 中,高字节存放在 B 中。DIV AB 指令用 B 除以 A,整数商存放在 A 中,余数存放在 B 中。寄存器 B 还可以用作通用暂存寄存器。
1.1.3.4堆栈指针SP
堆栈指针 SP 是一个 8 位专用寄存器。它指示出堆栈顶部在内部 RAM 块中的位置。系统复位后,SP 初始化位 07H,使得堆栈事实上由 08H 单元开始,考虑 08H-1FH 单元分别属于工作寄存器组 1-3,若在程序设计中用到这些区,则 SP 改变为 80H 或更大的为宜。在程序调试中,经常出现堆栈溢出的情况,为了方便找到程序故障,设置了一个记录堆栈的寄存器SPMAX,可以通过 Debug 接口读出,地址 0x1A。
1.1.3.5数据指针DPTR
数据指针 DPTR0/DPTR1是两个 16 位专用寄存器,它们的高位字节寄存器用 DP0H/DP1H表示,低位字节寄存器用 DP0L/DP1L 表示,通过 DPS(PSW.1)可选择使用 DPTR0/DPTR1。每个 DPTR 既可以作为一个 16 位寄存器来处理,也可以作为 2 个独立的 8 位寄存器 DP0H/DP1H 和 DP0L/DP1L 来处理。
1.1.3.6状态寄存器PSW
状态寄存器 PSW 是 CPU 的状态寄存器。在 CPU 做算术运算或者逻辑运算时,对应的 PSW 状态位会发生改变。