单片机原理及精华总结(3)

2019-04-23 14:50

图2-7 HMOS型单片机内部振荡器OSC 1) 程序计数器PC(Promgram Counter)

程序计数器PC是一个二进制16位的程序地址寄存器,专门用来存放下一条需要执行指令的内存地址,能自动加1。CPU执行指令时,它是先根据程序计数器PC中的地址从存储器中取出当前需要执行的指令码,并把它送给控制器分析执行.随后程序计数器PC中地址码自动加1,以便为CPU取下一个需要执行的指令码作准备。当下一个指令码取出执行后,PC又自动加1。这样,程序计数器PC一次次加1,指令就被一条条地执行。所以,需要执行程序的机器码必须在程序执行前预先一条条地按序放到程序存储器中,并为程序计数器PC设置成程序第一条指令的内存地址。8051程序计数器PC由16个触发器构成,故它的编码范围为0000H~FFFFH,共64K。这就是说,805l对程序存储器的寻址范围为64KB。如果想为8051配置大于64KB的程序存储器.就必须在制造8051器件时加长程序计数器的位数。但在实际应用中,64KB的程序存储器通常已足够了。

2) 累加器A(Accumulator)

累加器A又记作ACC,是一个具有特殊用途的二进制8位寄存器,专门用来存放操作数或运算结果。在CPU执行某种运算前,两个操作数中的一个通常应放在累加器A中,运算完成后累加器A中便可得到运算结果。例如,在如下的3+5加法程序中

MOV A, #03H ;A←3

ADD A, #05H ;A←A+05H

第一条指令是把加数3预先送入累加器A,为第二条加法指令的执行作了准备。因此,第二条指令执行前累加器A中为加数3,在执行后变为两数之和8。

3) 通用寄存器B(General Purpose Register)

通用寄存器B是专门为乘法和除法设置的寄存器,也是一个二进制8位寄存器,由8个触发器组成.该寄存器在乘法或除法前,用来存放乘数或除数,在乘法或除法完成后用于存放乘积的高8位或除法的余数。现以乘法运算为例加以说明:

MOV A, #05H ;A←5 MOV B, #03H ;B←3

MUL AB ;BA←A×B=5×3

- 11 -

上述程序中,前面两条是传送指令,是进行乘法前的准备指令。因此,乘法指令执行前累加器A和通用寄存器B中分别存放了两个乘数,乘法指令执行完后,积的高8位自动在B中形成, 积的低8位自动在A中形成。

4) 程序状态字PSW(Program Status Word)

PSW是一个8位标志寄存器,用来存放指令执行后的有关状态。PSW中各位状态通常是在指令执行过程中自动形成的,但也可以由用户根据需要采用传送指令加以改变。它的各标志位定义如下:

其中,PSW7为最高位,PSW0为最低位。

①进位行志位Cy(Carry):用于表示加减运算过程中最高位A7(累加器最高位)有无进位或借位。在加法运算时,若累加器A中最高位A7有进位,则Cy=1;否则Cy=0。在减法运算时,若A7有了借位,则Cy=1;否则Cy=0。此外,CPU在进行移位操作时也会影响这个标志位。

②辅助进位位AC(Auxiliary Carry):用于表示加减运算时低4位(即A3)有无向高4位(即A4)进位或借位。若AC=0, 则表示加减过程中A3没有向A4进位或借位;若AC=1,则表示加减过程中A3向A4有了进位或借位。

③用户标志位F0(Flag zero):F0标志位的状态通常不是机器在执行指令过程中自动形成的,而是由用户根据程序执行的需要通过传送指令确定的。该标志位状态一经设定,便由用户程序直接检测,以决定用户程序的流向。

④寄存器选择位RS1和RS0:8051共有8个8位工作寄存器,分别命名为R0~R7。工作寄存器R0~R7,常常被用户用来进行程序设计,但它在RAM中的实际物理地址是可以根据需要选定的。RS1和RS0就是为了这个目的提供给用户使用,用户通过改变RS1和RS0的状态可以方便地决定R0~R7的实际物理地址。工作寄存器R0~R7的物理地址和RS1、RS0之间的关系如表2-3所列。

表2-3 RS1、RS0对工作寄存器的选择

采用8051或803l做成的单片机控制系统.开机后的RS1和RS0总是为零状态,故R0-R7的物理地址为00H-07H,即R0的地址为00H,R1的地址为01H?,R7的地址为07H。但若机器执行如下指令

MOV PSW,#08H ;PSW←08H

- 12 -

则RS1、RS0显然为01B,故R0-R7的物理地址变为08H-0FH。因此,用户利用这种方法可以很方便地达到保护R0-R7中数据的目的,这对用户的程序设计是非常有利的。

⑤溢出标志位OV(Overflow):可以指示运算过程中是否发生了溢出,由机器执行指令过程中自动形成。若机器在执行运算指令过程中,累加器A中运算结果超出了8位数能表示的范围,即-128~+127,则OV标志自动置1,否则OV=0。因此,人们根据执行运算指令后的OV状态就可判断累加器A中的结果是否正确。

⑥奇偶标志位P(Parity):PSW1为无定义位,用户也可不使用。PSW0为奇偶标志位P,用于指示运算结果中1的个数的奇偶性。若P=1,则累加器A中1的个数为奇数;若P=0,则累加器A中1的个数为偶数。

[例2.1] 设程序执行前F0=0,RS1RS0=00B,请问机器执行如下程序后 MOV A,#0FH ;A←0FH ADD A,#F8H ;

PSW中各位的状态是什么?

解:上述加法指令执行时的人工算式是:

式中:CP为最高位进位,为l;CS为次高位进位,也为1; F0、RS1和RS0由用户设定,加法指令也不会改变其状态;Cy为1,AC为l(因为加法过程中低4位向高4位有进位);P也为1(因为运算结果中1的个数为3,是奇数);OV状态由如下关系确定

OV=CP①CS=1①l=0 所以PSW=ClH

5) 堆栈指针SP(Stack Pointor)

堆栈指针SP是一个8位寄存器,能自动加1或减1,专门用来存放堆栈的栈顶地址。

人们在堆放货物时,总是把先入栈的货物堆放在下面,后入栈的货物堆放在上面,一层一层向上堆。取货时的顺序和堆货顺序正好相反,最后入栈的货物最先被取走,最先入栈的货物最后被取走。因此,货栈的堆货和取货符合“先进后出”或“后进先出”的规律。

计算机中的堆栈类似于商业中的货栈,是一种能按:“先进后出”或“后进先出”规律存取效据的RAM区域。这个区域是可大可小的.常称为堆栈区。8051片内RAM共有128B,地址范围力00H~7FH,放这个区域中的任何子域都可以用

- 13 -

作堆栈区,即作为堆栈来用。堆栈有栈顶和栈底之分,栈底由栈底地址标识,栈顶由栈顶地址指示。栈底地址是固定不变的,它决定了堆栈在RAM中的物理位置。栈顶地址始终在SP中,即由SP指示,是可以改变的,它决定堆栈中是否存放有数据。因此,当堆栈中为空无数据时,栈顶地址必定与栈底地址重合,即SP中一定是栈底地址;当堆栈中存放的数据越多,SP中的栈顶地址比栈底地址就越大。这就是说,SP就好像是一个地址指针,始终指示着堆栈中最上面的那个数据。通常堆栈由如下指令设定:

MOV SP, #DATA ;SP←data

若把指令中的data用70H替代,则机器执行这条指令后就设定了堆栈的栈底地址70H。此时,堆栈中尚未压入数据,即堆栈是空的.故SP中的70H地址就是堆栈的栈顶地址,如图2-8(a)所示。堆栈中数据是由PUSH指令压入和POP指令弹出的,PUSH指令能使SP中内容加1,POP指令则使SP减1。例如:如下程序可以把X压入堆栈

MOV A, #X ;A←X

PUSH ACC ;SP←SP+1,SP←ACC

第一条指令可以把X送入累加器A。第二条指令先使SP加1变为71H.然后把累加器A中的X取出来按SP(即71H)压入堆栈,如图2-8(b)所示.如果要继续向堆栈中压入数据,则可继续使用PUSH指令。如果要从堆栈中弹出数据,则可使用POP指令。

由于堆栈区在程序中没有标识,因此程序设计人员在进行程序设计时应主动给可能的堆栈区空出若干存储单元,这些单元是禁止用传达指令存放数据的,只能由PUSH和POP指令访问它们。

图2-8 堆栈示意图

6) 数据指针DPTR(Data Pointer)

数据指针DPTR是一个16位的寄存器,由两个8位寄存器DPH和DPL拼成,其中,DPH为DPTR的高8位,DPL为DPTR的低8位。DPTR可以用来存放片内ROM的地址,也可以用来存放片外RAM和片外ROM的地址。例如,设片外RAM的的2000H单元中有一个数x.若要把它取人累加器A,则可采用如下程序

- 14 -

MOV DPTR, #2000H ;DPTR←2000H MOVX A, @DPTR ;A←X

第一条指令执行后,机器自动把2000H装入DPTR,第二条指令执行时,机器自动把DPTR中的2000H作为外部RAM的地址,并根据这个地址把x取到累加器A中。其中,第二条指令操作码助记符中的X指示DPTR中的2000H是外部RAM的地址。

2.2.1.2存储器结构

MCS-51的存储器不仅有ROM和RAM之分,而且有片内和片外之分。MCS-5l的片内存储器集成在芯片内部,是MCS-51的一个组成部分;片外存储器是外接的专用存储器芯片,MCS-51只提供地址和控制命令,需要通过印刷电路板上三总线才能联机工作。

图2-9 MCS-51 存储器地址分配 (1) 存储器地址分配

不论是单片机的片内还是片外存储器,MCS-51对某存储单元的读/写地址都是由MCS-51提供的,存储器的地址分配有三个地址空间,这三个地址空间是:ROM存储器地址空间(包括片内ROM和片外ROM),地址范围是0000H~FFFFH;片内RAM地址空间,地址范围是00H~FFH;片外RAM地址空间,地址范围是0000H~FFFFH,如图2-9所示。 (2) 片内ROM

8031内部没有ROM,只有8051才有4KB ROM,地址范围为0000H~0FFFH。无论8031还是8051,都可以外接外部ROM,但片内和片外之和不能超过64KB。8051和87C5l有64KB ROM的寻址区,其中0000H~0FFFH的4KB地址区可以为片内ROM和片外ROM公用,1000H~FFFFH的60KB地址区为片外ROM所专用。在0000H~0FFFH的4KB地址区,片内ROM可以占用,片外ROM也可以占用,但不能为两者同时占用。为了指示机器的这种占用,器件设计者为用户提供了一条专用的控制引脚EA。若EA接+5v高电平,则机器使用片内4KB ROM;若

- 15 -


单片机原理及精华总结(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《材料力学》附录I++截面的几何性质+习题解

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: