单片机中级教程 第3章 指令系统 联系客服

发布时间 : 星期四 文章单片机中级教程 第3章 指令系统更新完毕开始阅读2dfe006e27d3240c8447ef92

这两条指令的功能是在以bit表示的位和位累加器CY之间进行数据传送。不影响其他标志。

注意,两个可寻址位之间没有直接的传送指令。若要完成这种传送,可以通过CY作为中间媒介来进行。

例3-23 将40H位的内容传送到20H位。

解: 传送通过CY来进行,但要注意保持原有CY的值不被破坏。 MOV 10H ,C ;暂存CY内容 MOV C , 40H ;40H位的值送CY

MOV 20H ,C ;CY的值送20H位

MOV C ,10H ;恢复CY内容

上述指令均属位操作指令(因CY作累加器),指令中的地址都是位地址,而不是存储单元的地址。

3.7.2 位置位、清零指令

CLR C ;CY← 0

CLR bit ;bit ← 0 SETB C ;CY← 1 SETB bit ;bit ← 1

上述指令的功能是对CY及可寻址位进行清零或置位操作。不影响其他标志。 3.7.3 位逻辑运算指令

位运算都是逻辑运算,有与、或、非三种,共六条指令。

ANL C ,bit ;CY←(CY)∧(bit)

ANL C ,/ bit ;CY←(CY )∧(bit) ORL C ,bit ;CY←(CY )∨(bit) ORL C ,/ bit ;CY←(CY )∨(bit)

CPL C ;CY←(CY) CPL C ;bit←(bit)

前四条指令的功能是将位累加器CY的内容与位地址中的内容(或取反后的内容)进行逻辑与、或操作,结果送入CY中,斜杠“/”表示将该位值取出后,先求反、再参加运算,不改变位地址中原来的值。

后二条指令的功能是把位累加器CY或位地址中的内容取反。 在位操作指令中,没有位的异或运算,如果需要,可通过上述位操作指令实现。 例3-24 设E,B,D都代表位地址,试编写程序完成E、B内容的异或操作,并将结果存入D中。

解: 可直接按D=EB+EB来编写。

MOV C,B ;从位地址中取数送CY ANL C,/E ;CY←(B)∧(E) MOV D ,C ;暂存

MOV C ,E ;取另一个操作数

25

ANL C ,/B ;CY←(E)∧(B) ORL C ,D ;进行EB?EB运算 MOV D ,C ;操作结果存D位

利用位逻辑运算指令,可以对各种组合逻辑电路进行模拟,即用软件方法来获得组合电路逻辑功能。

3.7.4 位控制转移指令

位控制转移指令都是条件转移指令,它以CY或位地址bit的内容作为转移的判断条件。 1.以CY为条件的转移指令

JC rel ;若(CY)=1, 则转移, PC←(PC)+2+rel

若(CY)?1,按顺序执行,PC←(PC)+2

JNC rel ;若(CY)=0, 则转移, PC←(PC)+2+rel 若(CY)?0,按顺序执行,PC←(PC)+2

这两条指令的功能是进位位CY为1或为0则转移,否则按顺序执行。指令均为双字节指令。

2.以位状态为条件的转移指令

JB bit ,rel ;若(bit)=1, 则转移,PC←(PC)+3+rel 若(bit)?1,按顺序执行,PC←(PC)+3

JNB bit ,rel ;若(bit)=0, 则转移,PC←(PC)+3+rel 若(bit)?0,按顺序执行,PC←(PC)+3

JBC bit ,rel ;若(bit)=1, 则转移,PC←(PC)+3+rel,同时bit←0 若(bit )?1,按顺序执行,PC←(PC)+3

这组指令的功能是直接寻址位为1或为0则转移,否则按顺序执行。指令均为三字节指令,所以PC要加3。

注意,JB和JBC指令的区别:两者转移的条件相同,所不同的是JBC指令在转移的同时,还能将直接寻址位清0,即一条JBC指令相当于两条指令的功能。

使用位操作指令可以使程序设计变得更加方便和灵活。在许多情况下可以避免字节屏蔽、测试、转移的操作,使程序更加简洁。

例3-25 试编程,在8051的P1.7位输出一个方波,方波周期为6个机器周期。 SETB P1.7 ;使P1.7位输出“1”电平 NOP ;延时2个机器周期 NOP

CLR P1.7 ;使P1.7位输出“0”电平

NOP ;延时2个机器周期 NOP

SETB P1.7 ;使P1.7位输出“1”电平 SJMP $ ;暂停

例3-26 试分析,执行完以下程序,程序将转至何处? ANL P1 ,#00H ;(P1)=00H

JB P1.6 ,LOOP1 ;因P1.6=0,程序按顺序往下执行

26

JNB P1.0 ,LOOP2 ;因P1.0=0,程序发生转移,转至LOOP2 ?

LOOP1:┇ LOOP2:┇

上述程序执行结果:程序将转至标号LOOP2处去执行程序。

思考题与习题

3-1 何为指令系统、机器语言和汇编语言? 3-2 简述MCS-51系列单片机指令的格式。

3-3 MCS-51系列单片机有哪几种寻址方式?各种寻址方式所对应的寄存器或存储器寻址空间如何?

3-4 若访问特殊功能寄存器,可使用那些寻址方式? 3-5 若访问外部RAM单元,可使用那些寻址方式? 3-6 若访问内部RAM单元,可使用那些寻址方式? 3-7 若访问内外程序存储器,可使用那些寻址方式?

3-8 对于8052单片机,内部RAM还存在高128字节,应采用何种寻址方式进行访问? 3-9 外部数据传送指令有几条?试比较下面每一组中两条指令的区别。

(1) MOVX A,@R1 , MOVX A,@DPTR (2) MOVX A,@DPTR , MOVX @DPTR,A

(3) MOV @R0 ,A , MOVX @ R0,A (4) MOVC A,@A+DPTR , MOVX A,@DPTR 3-10 已知(30H)=40H,(40H)=10H,(10H)=32H,(P1)=EFH,试写出执行以下程序段后有关单元的内容。

MOV R0, #30H MOV A, @R0 MOV R1, A

MOV B, @R1 MOV @R1, P1 MOV P2, P1 MOV 10H, #20H

MOV 30H, 10H

3-11 试写出完成以下数据传送的的指令序列。 (1)R1的内容传送R0;

(2)片外RAM 60H单元的内容送入R0;

(3)片外RAM 60H单元的内容送入片内RAM 40H单元; (4)片外RAM 1000H单元的内容送入片外RAM 40H单元; (5)ROM 2000H单元的内容送入R2;

27

(6)ROM 2000H单元的内容送入片内RAM 40H单元;

(7)ROM 2000H单元的内容送入片外RAM 0200H单元。

3-12 试编程,将外部RAM 1000H单元中的数据与内部RAM 60H单元中的数据相互交换。 3-13 已知ROM以TAB为起始地址的区域存放着0~9这10个数的平方值,试编写程序查找寄存器R7中数据的平方值(已知R7中存放的是0~9之间的数)。 3-14 已知(A)=5BH,(R1)=40H,(40H)=C3H,(PSW)=81H,试写出各条指令的执行结果,并说明程序状态字的状态。

(1) XCH A, R1 (2) XCH A, 40H (3) XCH A,@R1 (4) XCHD A, @R1

(5) SWAP A (6) ADD A, R1 (7) ADD A, 40H (8) ADD A, #40H (9) ADDC A, 40H (10) SUBB A, 40H (11)SUBB A, #40H

3-15 试分析下面两组指令的执行结果有何不同?

(1) MOV A,#0FFH (2) MOV A,#0FFH

INC A ADD A,#01H

3-16 编程计算2356H–4578H,并将差值存入R1R0中(R1存放结果的高8位 )。 3-17 已知(9A)=87H,(R0)=42H,(42H)=34H,请写出执行下列程序段后A的内容。

ANL A, #23H ORL 42H,A XRL A, @R0 CPL A

3-18 编程完成下述操作。

(1) 将外部RAM 1000H单元的所有位取反。

(2) 将外部RAM 60H单元的高2位清0,低两位变反,其余位保持不变。 3-19 DA A指令有什么作用?怎样使用?

3-20 已知外部RAM 1000H单元和2000H单元分别存放着一个8位无符号二进制数X与Y,试编程计算10X+32Y,并把结果存入内部RAM30H、31H单元(31H单元存放高8位)。 3-21 编程将外部RAM从 blcok1开始存放的10个数据传送到内部RAM以block2开始的地址单元中去

3-22 用8031单片机的P1口作输出,经驱动电路接8个发光二极管,见图3-10 。当输出位为“1”时,发光二极管点亮,输出为“0”时,发光二极管为暗。试编制灯亮移位程序,令8个发光二极管每次亮一个,循环左移,一个一个地亮,循环不止。

3-23。试用位操作指令实现逻辑操作: P1.0=(10H∨P1.0)∧(11H∨CY) 3-24 判断下面指令的正误,并简要说明原因。

(1) CLR A (2) CLR E0H (3) CLR ACC (4) CLR ACC.0 (5) CPL A (6) CPL E0H (7) CPL ACC (8) CPL ACC.0

28