相对寻址方式是为了程序的相对转移而设计的,其夜里是以PC的内容为基址,加上给出的偏移量作为转移地址,从而实现程序的转移。转移的目的地址可参见如下表达式:
目的地址=转移指令地址+转移指令字接数+偏移量
值得注意的是,偏移量是有正负号之分的,偏移量的取值范围是当前PC值的-128~+127之间。
如前面任务中的 TIME1:‥
TIME2:‥ ?? DJNZ R7,TIME2 DJNZ R6,TIME1
??
其中DJNE‥指令中的TIME1、TIME2就属此类,这里目的地址我们是用符号地址表示的。
4.指令在CPU内部的执行过程?
指令是以二进制的形式存放在程序存储器中的,CPU执行指令的过程是不断的从程序存储器取指令,指令译码器对指令进行译码,并发出与指令相应的微操作信号,完成指令的执行。在这一过程当中,需要根据相应的时序进行操作,程序存储器操作时序如图3.3所示
图3.3 MCS-51单片机取指时序
5.数据传送指令应用举例
【例3.1】 在程序存储器中从而2000H单元开始依次存放置0~9的平方值:0、1、4、9、?、81,要求依据累加器A中的值(0~9)来查找所对应的平方值,分析下述程序的结果。
MOV DPTR,#2000H
MOV A,#09H MOVC A,@A+DPTR 执行结果:(DPTR)=2000H,(A)=51H。
【例3.2】 仍以上例程序存储器中 2000H单元开始存放0~9的平方值,以PC作为基址寄存器进行查表,设MOVC指令所在地址(PC)=1FF0F。
解:偏移量=2000H—(1FF0H+1)=0FH 相应的程序如下:
MOV A,#09H ADD A,#0FH MOVC A,@A+PC 执行结果:(PC)=1FF1H,(A)=51H
这是以PC作为基址寄存器,CPU取完该指令操作码时PC会自动加工厂,指向下一条指令的第一个字节地址,即此时是用(PC)+1作为基址的,目标地址为(A)+(PC)+1。另外,由于累加器A中的内容为8位无符号整数,这不使得本指令查表范围只能在以PC当前值开始后256个字节范围内(即(PC)+1H~100H),使表格地址空间分配受到限制。同时编程时还需进行偏移量的计算,即MOVC A,@A+PC指令所在地址与表格存放首地址间的距离量计算,并需要一条加法指令ADD进行地址调整(ADD指令将在下节介绍)。偏移量计算公式为:
偏移量=表首地址—(MOVC指令所在地址+1)
【例3.3】 若在程序存储器中2000H单元开始依次存放0~9的平方值,数据指针(DPTR)=3A00H,用查一指令取出2003H单元的数据后,要求保持DPTR中的内容不变,完成以上功能的程序如下:
MOV A, #03H ;(A)←03H PUSH DPH ;保护DPTR高8位入栈 PUSH DPL ;保护DPTR低8位入栈 MOV DPTR,#2000H ;(DPTR)←2000H MOVC A,@A+DPTR ;(A)←(2000H+03H) POP DPL ;弹出DPTR低8位 POP DPH ;弹出DPTR高8位,(先进后出) 执行结果:(A)=09H,(DPTR)=3A00H。
由此可见,虽然在程序中改变了DPTR的内容,但利用PUSH和POP指令可对其进行保护和恢复,要注意的是堆栈先进后出的原则,否则DPH弹出时互换。
3.2 单片机做加、减、乘、除运算
〖学习目标〗: 通过学习任务三的完成方法,掌握MCS-51单片机的算术运算指令的23功能及运算指令对程序状态字的影响。 〖任务描述〗: 利用单片机的算术运算指令进行加、减、乘、除运算,并将结果送P1口发光二极管显示。 3.2.1 硬件电路 硬件电路采用实验开发板上的电路,如图3.4所示。 VCCRP1VCC1D112345678S2S1S4R56D5S3XTAL11.0592MS2S1S4S313121514VCC31191891716P10P11P12P13P14P15P16P17INT1INT0T1T0EA/VPX1X2RESETRDWRRXDTXDALE/PPSEN10113029U3P00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P273938373635343332212223242526272812345678SD116151413121110914DR12R23D2CR34D3R45D4R67D612345678SD2161514131211109R78D7C133PC233PR89D8 图3.4 单片机做加、减、乘、除运算的电路图 工作原理 利用P0口、P2口外接的拨动开关设制运算的数据,利用单片机的算术运算指令进行加、减、乘、除运算,并将结果送P1口发光二极管显示。 3.2.2 程序设计 1. 加法运算程序 ORG 0000H MOV A,P0 1TitleSizeLetterDate:File:2315-Jul-2005Sheet of C:\\Documents and Settings\\Administrator\\桌面Drawn By:\\MyDesign.ddb4NumberRevisionBAMOV R0,P2 ADD A,R0 MOV P1,A SJMP $ END
2. 减法运算程序
ORG 0000H MOV A,P0
MOV R0,P2 SUBB A,R0 MOV P1,A SJMP $ END
3. 乘法运算程序
ORG 0000H MOV A,P0 MOV B,P2 MUL AB MOV P1,A SJMP $ END
4. 除法运算程序
ORG 0000H MOV A,P0 MOV B,P2 DIV AB MOV P1,A SJMP $ END
3.2.3 源程序的编辑、编译、下载
打开“伟福”模拟仿真软件进行程序的编辑、编译。
打开“ISP下载软件”将目标文件下载到ISP-4实验开发板上的AT89S51单片机芯片,观察程序运行结果。
3.2.4 相关知识
前面的任务里,在加、减、乘、除的过程中,只要改变P0、P2口数据发光二极管的亮灭就发生变化,下面我们来分析任务实现的过程。
1. 单片机是怎样做加、减、乘、除运算的?
在单片机CPU内部集成的算术运算部件(主要有加法器和乘法器、除法器),可以完成加、减、乘、除运算,单片机的算术运算指令经过指令译码器译码后产生的控制信号控制算术运算部件工作产生运算结果。
2. MCS-51单片机有哪些算术运算指令?
相关推荐: