维晟WS51F7030 系列的总体架构
总体架构
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 立即寻址
立即寻址是在指令操作数中直接给出参与运算的操作数,指令举例如下:
mov a, #60h (这条指令把 60h 直接送到累加器 a)
1.1.2.2 直接寻址
直接寻址指令操作数给出的是参与运算操作数的地址。直接寻址方式只能用于特殊功能寄存器、内部数据区和位地址空间,而特殊功能寄存器和位地址空间只能用直接寻址方式访问。指令举例如下:
anl 50h, #91h (把 50h 单元中的数与 91h 相“与”,结果存放在 50h 单元中,其中 50h 为内部 ram的地址)
1.1.2.3 间接寻址
间接寻址采用 r0 或 r1 前添加”@”符号。假设 r1 中的数据是 40h,内部数据存储器 40h 单元的数据为 55h,则指令为mov a, @r1 (把数据 55h 传送至累加器 a)
1.1.2.4 寄存器寻址
寄存器寻址对选定的工作寄存器 r7-r0、累加器 a、通用寄存器 b、地址寄存器和进位 c 中的数进行操作,其中寄存器 r7-r0 由指令码的低 3 位,acc、b、dptr 及进位 c 隐含在指令码中。因此,寄存器寻址也包含一种隐含寻址方式。工作寄存器工作区由状态寄存器 psw 的 rs1、rs0 决定。指令操作数指定的寄存器均指当前工作区的寄存器。
inc r0 (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。
movc a, @a+dptr (累加器 a 为偏移量寄存器,其内容与地址寄存器 dptr 中的内容相加,其结果作为操作数的地址,取出该单元中的数送入累加器 a 中)
1.1.2.7 位寻址
位寻址是指对一些可进行位操作的内部 ram 和特殊功能寄存器进行位操作时的寻址方式。在进行位操作时,借助于进位位 c 作为位操作累加器,指令操作数直接给出该位的地址,然后根据操作码对该位进行位操作。mov c, 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 状态位会发生改变。