知ing

单片机原理及接口技术(第三版)

李朝青 编 / 北京航空航天大学出版社

不够沙雕很自卑 上传

查看本书

1、  指令:CPU根据人的意图来执行某种操作的命令

指令系统:一台计算机所能执行的全部指令集合

机器语言:用二进制编码表示,计算机能直接识别和执行的语言

汇编语言:用助记符、符号和数字来表示指令的程序语言

高级语言:独立于机器的,在编程时不需要对机器结构及其指令系统有深入了解的通用性语言

2、  见第1

3、  操作码   [目的操作数]  [,源操作数]

4、   

寻址方式

寻址空间

立即数寻址

程序存储器ROM

直接寻址

片内RAM128B、特殊功能寄存器

寄存器寻址

工作寄存器R0-R7ABCDPTR

寄存器间接寻址

片内RAM128B、片外RAM

变址寻址

程序存储器(@A+PC,@A+DPTR

相对寻址

程序存储器256B范围(PC+偏移量)

位寻址

片内RAM20H-2FH字节地址、部分SFR

5、  SFR:直接寻址,位寻址,寄存器寻址;片外RAM:寄存器间接寻址

6、  MOV  A40H  ;直接寻址(40H)→A

   MOV   R0A;寄存器寻址(A)→R0

   MOV  P1#0F0H  ;立即数寻址0F0P1

   MOV   @R0,30H;直接寻址(30H →(R0

   MOV  DPTR,#3848H;立即数寻址   3848HDPTR

   MOV  40H,38H;直接寻址 38H 40H

   MOV   R0,30H;直接寻址 30H R0

   MOV   P0,R0;寄存器寻址( R0 )→P0

   MOV   18H#30H  ;立即数寻址30H18H

   MOV   A@R0    ;寄存器间接寻址 ((R0)) A

   MOV   P2P1     ;直接寻址 P1)→P2

最后结果:(R0=38H,(A=40H,(P0=38H,(P1=P2=0F0H,(DPTR=3848H,(18H=30H,(30H=38H,(38H=40H,(40H=40H,(48H=38H

注意:→左边是内容,右边是单元

7、  用直接寻址,位寻址,寄存器寻址

8、   

MOV  A,DATA ;直接寻址 2字节1周期

MOV  A,#DATA ;立即数寻址 2字节1周期

MOV  DATA1,DATA2 ;直接寻址 3字节2周期

MOV  74H,#78H ;立即数寻址 3字节2周期

如果想查某一指令的机器码,字节数或周期数可查阅书本后面的附录A

9

MOV A,@R0 ;((R0))=80HA

MOV @R0,40H ;(40H)=08H(R0)

MOV 40H,A ;(A)=8040H

MOV R0,#35H ;35HR0

最后结果:(R0=35H    A=80H,(32H=08H,(40H=80H

10、用直接寻址,位寻址,寄存器寻址

11、只能采用寄存器间接寻址(用MOVX指令)

12、低128字节:直接寻址,位寻址,寄存器间接寻址,寄存器寻址(R0~R7

128字节:直接寻址,位寻址,寄存器寻址

13、采用变址寻址(用MOVC指令)

14、压缩BCD码在进行加法运算时应逢十进一,而计算机只将其当作十六进制数处理,此时得到的结果不正确。用DA  A指令调整(加06H60H66H

15、用来进行位操作

16ANL   A#17H      83H17H=03HA

ORL    17HA        34H03H=37H17H

XRL    A@R0        03H37H=34H

CPL    A             34H求反等于CBH

所以(A=CBH

17、(1SETB  ACC.0SETB  E0H    ;E0H是累加器的地址

(2)CLR ACC.7

   CLR  ACC.6

   CLR  ACC.5

   CLR  ACC.4

(3)CLR  ACC.6

   CLR  ACC.5

   CLR  ACC.4

   CLR  ACC.3 

18MOV  27HR7

MOV  26HR6

MOV  25HR5

MOV  24HR4

MOV  23HR3

MOV  22HR2

MOV  21HR1

MOV  20HR0

19MOV  2FH20

    MOV  2EH21

    MOV  2DH22

20CLR  C

MOV  A#5DH     ;被减数的低8位→A

MOV  R2#B4H    ;减数低8位→R2

SUBB  AR2       ;被减数减去减数,差→A

MOV  30HA       ;低8位结果→30H

MOV  A#6FH     ;被减数的高8位→A

MOV  R2#13H    ;减数高8位→R2

SUBB  AR2       ;被减数减去减数,差→A

MOV  31HA       ;高8位结果→30H

注意:如果在你的程序中用到了进位位,在程序开始的时候要记得清0进位位

21、(1A10

CJNE  A#0AHL1     ;(A)与10比较,不等转L1

LJMP  LABEL           ;相等转LABEL

L1JNC   LABEL           ;(A)大于10,转LABEL

或者:

CLR C

SUBB  A#0AH

JNC   LABEL

2A10

CJNE  A#0AHL1     ;(A)与10比较,不等转L1

RET                   ;相等结束

L1JNC  LABEL            ;(A)大于10,转LABEL

    RET                   ;(A)小于10,结束

或者:

CLR C

SUBB  A#0AH

JNC   L1

RET

L1JNZ  LABEL

RET

3A10

CJNE  A#0AHL1     ;(A)与10比较,不等转L1

L2LJMP  LABEL           ;相等转LABEL

L1JC   L2           ;(A)小于10,转L2

RET

或者:

CLR C

SUBB  A#0AH

JC   LABEL

JZ  LABEL

RET

22、(SP=23H,(PC=3412H

参看书上80

23、(SP=27H,(26H=48H,(27H=23H,(PC=3456H

参看书上79

 

24、不能。ACALL是短转指令,可调用的地址范围是2KB

在看这个题的时候同时看一下AJMP指令。同时考虑调用指令ACALLLCALL指令和RET指令的关系。

25   MOV  R2#31H   ;数据块长度→R2

       MOV  R0#20H   ;数据块首地址→R0

LOOPMOV  A@R0     ;待查找的数据→A

        CLR  C            ;清进位位

        SUBB A#0AAH    ;待查找的数据是0AAH

        JZ   L1            ;是,转L1

        INC  R0            ;不是,地址增1,指向下一个待查数据

        DJNZ  R2LOOP   ;数据块长度减1,不等于0,继续查找

        MOV  51H#00H   ;等于0,未找到,00H51H

        RET

   L1MOV  51H#01H    ;找到,01H51H

        RET

26    MOV  R2#31H     ;数据块长度→R2

        MOV  R0#20H   ;数据块首地址→R0

LOOPMOV  A@R0     ;待查找的数据→A

        JNZ  L1            ;不为0,转L1

        INC  51H           ;为000H个数增1

    L1INC  R0    ;地址增1,指向下一个待查数据

        DJNZ  R2LOOP   ;数据块长度减1,不等于0,继续查找

        RET

27    MOV  DPTR#SOURCE    ;源首地址→DPTR

        MOV  R0#DIST           ;目的首地址→R0

 LOOPMOVX  A@DPTR         ;传送一个字符

         MOV  @R0A

         INC  DPTR              ;指向下一个字符

         INC  R0

         CJNE  A#24HLOOP     ;传送的是“$”字符吗?不是,传送下一个字符

         RET

28   MOV  AR3    ;取该数高8位→A

       ANL   A#80H  ;取出该数符号判断

       JZ  L1           ;是正数,转L1

       MOV  AR4     ;是负数,将该数低8位→A

       CPL  A           ;低8位取反

       ADD  A#01H   ;加1

       MOV  R4A     ;低8位取反加1后→R4

       MOV  AR3     ;将该数高8位→A

       CPL  A           ;高8位取反

       ADDC  A#00H   ;加上低8位加1时可能产生的进位

       MOV  R3A     ;高8位取反加1后→R3

  L1 RET

29   CLR  C          ;清进位位C

       MOV  A31H    ;取该数低8位→A

       RLC  A           ;带进位位左移1

查看更多