2017-05-21 10:13:23 AndyNikolas 阅读数 2712
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    3995 人正在学习 去看看 朱有鹏

定义

单片机首先将欲修改的寄存器的内容读回ALU,对相应位进行修改,然后再整个写回原来的寄存器地址,完成该功能的指令就叫做“读-改-写”指令。

读锁存器和读引脚的区别

在51单片机中“读-修改-写”是单片机内部自己执行的,它发生在写IO口的时候,当写IO口的时候它先把IO的当前状态读回来,根据要写的数据修改读回来的数据,再写到IO口;读引脚是直接读引脚的当前状态,当前引脚是高电平,读回来的就是高电平,低电平时读回来的就是低电平

读的两种方式

在对并行口P0~P3操作时,这类指令从端口的锁存器读出数据而不是引脚处。
而MOV等非“读-改-写”指令,则是从端口的引脚处读数据。

单片机从端口读入数据的通道有两个,一个是从锁存器引入,一个是从输出引脚处引入,分别叫做“读锁存器”和“读引脚”。单片机在进行端口输出时,经常要参考其上一次的输出状态。
例如,需要将连接到端口的LED闪烁。编程序时往往需要从输出引脚读前一次的输出状态,将其求反后输出。但如果上次是输出“1”使LED点亮,这时候虽然端口上输出逻辑是“1”,但是由于LED的二极管作用将输出高电平拉至“0”电平(0.7V左右),通过引脚读进来就是“0”而非“1”了。这样,将“0”求反后输出还是“1”,就起不到使灯闪烁的目的了。但是,如果这时读的不是端口而是锁存器的输出端Q,则实现闪烁的功能就正常。上述例子很好地说明了为什么单片机在设置读端口功能后还要设置读锁存器这一功能。

读引脚由传送指令MOV实现
读锁存器用到的“读-改-写”指令用 ANL P0,A等实现

2018-12-06 09:02:46 CHENYUNHE 阅读数 180
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    3995 人正在学习 去看看 朱有鹏

本篇博客主要列出了单片机的主要指令,供开发人员参考。作为一个单片机初学者,记住指令特别的痛苦,不过主要还是要理解,多练习指令,写多了就记住了,这是一个很自然的过程。

目录

 

一、寻址方式

二、指令分类

1 数据传送类指令

2 算术运算类指令


一、寻址方式

寻址方式有七种:

1.立即寻址 

如:MOV A,#3AH

2.直接寻址

如:MOV  A,3AH

3.寄存器寻址

如:MOV  A,R2

4.寄存器间接寻址

如:MOV  A,@R0

5.变址寻址

如:MOVC  A,@A+DPTR

6.相对寻址

如:JC  03H

7.位寻址

如:SETB 3DH

二、指令分类

对于刚接触指令的人来说,记住指令是非常痛苦的,其实只需要记住两个图就OK了。

上述两个图全面的展示了指令的操作,箭头所指的方向表示某一值或某一地址里面的值可以送入。

下面分类介绍指令:

1 数据传送类指令

1.1  内部RAM数据传送指令

(1)累加器为目的操作数的指令

MOV A,Rn         ;(Rn)->A
MOV A,dir        ;(dir)->A
MOV A,@Ri        ;((Ri))->A
MOV A,#data      ;data->A

(2)以寄存器Rn为目的操作数的指令

MOV Rn,A            ;(A)->Rn
MOV Rn,dir          ;(dir)->Rn
MOV Rn,#data        ;data-.Rn

(3)以直接地址为目的操作数的指令

MOV dir,A               ;(A)->dir
MOV dir,Rn              ;(Rn)->dir
MOV dir,dir             ;(dir)->dir
MOV dir,@Ri             ;((Ri))->dir
MOV dir,#data           ;data->dir

(4)以间接地址为目的操作数的指令

MOV @Ri,A               ;(A)->(Ri)
MOV @Ri,dir             ;(dir)->(Ri)
MOV @Ri,#data           ;data->(Ri)

(5)16位数据传送指令

MOV DPTR,#data16        ;dataH->DPH,dataL->DPL

1.2 外部数据传送指令

MOVX A,@DPTR            ;((DPTR))->A
MOVX @DPTR,A            ;(A)->(DPTR)
MOVX A,@Ri              ;((Ri))->A
MOVX @Ri,A              ;(A)->(Ri)

1.3 查表指令

MOVC A,@A+PC            ;(PC)+1->PC,((A)+(PC))->A
MOVC A,@A+DPTR          ;((A)+(DPTR))->A

1.4 堆栈操作指令

PUSH dir            ;(SP)+1->SP,(dir)->(SP)
POP dir             ;((SP))->dir,(SP)-1->SP

1.5 交换指令

XCH A,Rn            ;(A)<->(Rn)
XCH A,dir           ;(A)<->(dir)
XCH A,@Rn           ;(A)<->((Rn))
XCHD A,@Ri          ;(A3~0)<->((Ri3~0))
SWAP A;             ;(A3~0)<->(A7~4)

2 算术运算类指令

2.1 加法指令

ADD A,Rn            ;(A)+(Rn)->A
ADD A,dir           ;(A)+(dir)->A
ADD A,@Ri           ;(A)+((Ri))->A
ADD A,#data         ;(A)+data->A

2.2 带进位加法指令

ADDC A,Rn            ;(A)+(Rn)+CY->A
ADDC A,dir           ;(A)+(dir)+CY->A
ADDC A,@Ri           ;(A)+((Ri))+CY->A
ADDC A,#data         ;(A)+data+CY->A

2.3 带借位减法指令

SUBB A,Rn            ;(A)-(Rn)-CY->A
SUBB A,dir           ;(A)-(dir)-CY->A
SUBB A,@Ri           ;(A)-((Ri))-CY->A
SUBB A,#data         ;(A)-data-CY->A

2.4 乘法指令

MUL AB            ;(A)X(B)->BA,B15~8,A7~0

2.5 除法指令

DIV AB            ;A/B->A,A%B->B

2.6 减1指令

DEC A            ;(A)-1->A
DEC Rn           ;(Rn)-1->Rn
DEC dir          ;(dir)-1->dir
DEC @Ri          ;((Ri))-1->(Ri)

2.7 十进制调整指令

DA A

(by:CHENYUNHE 2018-12-6 https://blog.csdn.net/CHENYUNHE/ )

2018-12-07 15:47:22 CHENYUNHE 阅读数 95
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    3995 人正在学习 去看看 朱有鹏

这篇博客的内容是指令系统的另一部分,上部分请看上篇博客。单片机指令系统(1)

目录

 

三、逻辑操作类指令

1 逻辑“与”指令

2 逻辑“或”指令

3 逻辑“异或”指令

4 循环移位指令

5 取反指令

6 清0指令

四、控制转移指令

1 无条件转移指令

2 条件转移指令

3 间接转移指令

4 调用子程序及返回指令

5 空操作指令

五、位操作类指令

1 位数据传送指令

2 位修正指令

3 位逻辑运算指令

4 判位转移指令


三、逻辑操作类指令

1 逻辑“与”指令

ANL A,Rn                  ;(A)^(Rn)->A
ANL A,dir                 ;(A)^(dir)->A
ANL A,@Ri                 ;(A)^((Ri))->A
ANL A,#data               ;(A)^data->A
ANL dir,A                 ;(dir)^(A)->dir
ANL dir,#data             ;(dir)^data->dir

2 逻辑“或”指令

ORL A,Rn                  ;(A)V(Rn)->A
ORL A,dir                 ;(A)V(dir)->A
ORL A,@Ri                 ;(A)V((Ri))->A
ORL A,#data               ;(A)Vdata->A
ORL dir,A                 ;(dir)V(A)->dir
ORL dir,#data             ;(dir)Vdata->dir

3 逻辑“异或”指令

;此处的+表示异或的符号
XRL A,Rn                  ;(A)+(Rn)->A
XRL A,dir                 ;(A)+(dir)->A
XRL A,@Ri                 ;(A)+((Ri))->A
XRL A,#data               ;(A)+data->A
XRL dir,A                 ;(dir)+(A)->dir
XRL dir,#data             ;(dir)+data->dir

4 循环移位指令

RL A                ;循环左移
RR A                ;循环右移
RLC A               ;带进位位CY循环左移
RRC A               ;带进位位CY循环右移

5 取反指令

CPL A          ;把A取反的值放入A

6 清0指令

CLR A      ;0->A

四、控制转移指令

1 无条件转移指令

LJMP addr16             ;addr16->PC
AJMP addr11             ;(PC)+2->PC,addr11->PC.10~PC.0
SJMP rel                ;(PC)+2+rel->PC

2 条件转移指令

JZ rel              ;(A)=0:(PC)+2+rel->PC
                    ;(A)!=0:(PC)+2->PC

JNZ REL             ;(A)!=0:(PC)+2+rel->PC
                    ;(A)=0:(PC)+2->PC

CJNE A,dir,rel      ;(A)=(dir):(PC)+3->PC,0->C
                    ;(A)>(dir):(PC)+3+rel->PC,0->C
                    ;(A)<(dir):(PC)+3+rel->PC,1->C

CJNE A,#data,rel    ;(A)=data:(PC)+3->PC,0->C
                    ;(A)>data:(PC)+3+rel->PC,0->C
                    ;(A)<data:(PC)+3+rel->PC,1->C

CJNE Rn,#data,rel   ;(Rn)=data:(PC)+3->PC,0->C
                    ;(Rn)>data:(PC)+3+rel->PC,0->C
                    ;(Rn)<data:(PC)+3+rel->PC,1->C

CJNE @Ri,#data,rel  ;((Ri))=data:(PC)+3->PC,0->C
                    ;((Ri))>data:(PC)+3+rel->PC,0->C
                    ;((Ri))<data:(PC)+3+rel->PC,1->C

DJNZ Rn,rel         ;(Rn)-1->Rn,
                    ;Rn!=0:(PC)+2+rel->PC
                    ;Rn =0:(PC)+2->PC

DJNZ dir,rel        ;(dir)-1->dir
                    ;(dir)!=0:(PC)+3+rel->PC
                    ;(dir) =0:(PC)+3->PC

3 间接转移指令

JMP @A+DPTR        ;(A)+(DPTR)->PC

4 调用子程序及返回指令

LCALL addr16     ;(PC)+3->PC,(SP)+1->SP
                 ;(PC.7~PC.0)->(SP),(SP)+1->SP
                 ;(PC.15~PC.8)->(SP),addr16->PC

ACALL addr11     ;(PC)+2->PC,(SP)+1->SP
                 ;(PC.7~PC.0)->(SP),(SP)+1->SP
                 ;(PC.15~PC.8)->(SP),addr11->PC.10~PC.0

RET              ;((SP))->PC.15~PC.8,(SP)-1->SP
                 ;((SP))->PC.7~PC.0,(SP)-1->SP

RETI             ;同时清除优先级转态触发器

5 空操作指令

NOP                ;单字节指令产生1个机器周期

五、位操作类指令

1 位数据传送指令

MOV C,bit             ;(bit)->C
MOV bit,C             ;(C)->bit

2 位修正指令

CLR C              ;0->C
CLR bit            ;0->bit
CPL C              ;进位位取反
CPL bit;           ;位取反
SETB C;            ;1->C
SETB bit           ;1->bit

3 位逻辑运算指令

ANL C,bit             ;(C)^(bit)->C
ANL C,/bit            ;(C)^(/bit)->C ,/表示取反
ORL C,bit             ;(C)V(bit)->C
ORL C,/bit            ;(C)V(/bit)->c

4 判位转移指令

JC rel               ;(C)=1,(PC)+2+rel->PC
                     ;(C)=0,(PC)+2->PC

JNC rel              ;(C)=0,(PC)+2+rel->PC
                     ;(C)=1,(PC)+2->PC

JB bit,rel           ;(bit)=1,(PC)+3+rel->PC
                     ;(bit)=0,(PC)+3->PC

JNB bit,rel          ;(bit)=0,(PC)+3+rel->PC
                     ;(bit)=1,(PC)+3->PC

JBC bit,rel          ;(bit)=1,(PC)+3+rel->PC,0->bit
                     ;(bit)=0,(PC)+3->PC

希望这篇博客对你学习单片机指令有用!

(by:CHENYUNHE 2018-12-7 https://blog.csdn.net/CHENYUNHE/ )

2016-08-03 23:25:11 Anthoney15 阅读数 432
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    3995 人正在学习 去看看 朱有鹏
单片机执行程序的过程,实际上就是执行我们所编制程序的过程。即逐条指令的过程。计算机每执行一条指令都可分为三个阶段进行。即取指令-----分析指令-----执行指令。


取指令的任务是:根据程序计数器PC中的值从程序存储器读出现行指令,送到指令寄存器。

分析指令阶段的任务是:将指令寄存器中的指令操作码取出后进行译码,分析其指令性质。如指令要求操作数,则寻找操作数地址。
计算机执行程序的过程实际上就是逐条指令地重复上述操作过程,直至遇到停机指令可循环等待指令。
一般计算机进行工作时,首先要通过外部设备把程序和数据通过输入接口电路和数据总线送入到存储器,然后逐条取出执行。但单片机中的程序一般事先我们都已通过写入器固化在片内或片外程序存储器中。因而一开机即可执行指令。

下面我们将举个实例来说明指令的执行过程:开机时,程序计算器PC变为0000H。然后单片机在时序电路作用下自动进入执行程序过程。执行过程实际上就是取出指令(取出存储器中事先存放的指令阶段)和执行指令(分析和执行指令)的循环过程。
例如执行指令:MOV A,#0E0H,其机器码为“74H E0H”,该指令的功能是把操作数E0H送入累加器,0000H单元中已存放74H,0001H单元中已存放E0H。当单片机开始运行时,首先是进入取指阶段,其次序是:1 程序计数器的内容(这时是0000H)送到地址寄存器;
2 程序计数器的内容自动加1(变为0001H);
3 地址寄存器的内容(0000H)通过内部地址总线送到存储器,以存储器中地址译码电跟,使地址为0000H的单元被选中;
4 CPU使读控制线有效;
5 在读命令控制下被选中存储器单元的内容(此时应为74H)送到内部数据总线上,因为是取指阶段,所以该内容通过数据总线被送到指令寄存器。
至此,取指阶段完成,进入译码分析和执行指令阶段。

由于本次进入指令寄存器中的内容是74H(操作码),以译码器译码后单片机就会知道该指令是要将一个数送到A累加器,而该数是在这个代码的下一个存储单元。所以,执行该指令还必须把数据(E0H)从存储器中取出送到CPU,即还要在存储器中取第二个字节。其过程与取指阶段很相似,只是此时PC已为0001H。指令译码器结合时序部件,产生74H操作码的微操作系列,使数字E0H从0001H单元取出。因为指令是要求把取得的数送到A累加器,所以取出的数字经内部数据总线进入A累加器,而不是进入指令寄存器。至此,一条指令的执行完毕。单片机中PC=0002H,PC在CPU每次向存储器取指或取数时自动加1,单片机又进入下一取指阶段。这一过程一直重复下去,直至收到暂停指令或循环等待指令暂停。CPU就是这样一条一条地执行指令,完成所有规定的功能。



欢迎大家加入单片机学习交流群317049241 点击【单片机/嵌入式学习】

2011-10-12 09:18:36 adDDDDD12 阅读数 2714
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    3995 人正在学习 去看看 朱有鹏

为了加深初学者对51单片机指令的理解,现在把指令执行的过程在此详细说明,希望对你有启发!


单片机执行程序的过程,实际上就是执行我们所编制程序的过程。即逐条指令的过程。计算机每执行一条指令都可分为三个阶段进行。即取指令-----分析指令-----执行指令。

取指令的任务是:根据程序计数器PC中的值从程序存储器读出现行指令,送到指令寄存器。

分析指令阶段的任务是:将指令寄存器中的指令操作码取出后进行译码,分析其指令性质。如指令要求操作数,则寻找操作数地址。
计算机执行程序的过程实际上就是逐条指令地重复上述操作过程,直至遇到停机指令可循环等待指令。

一般计算机进行工作时,首先要通过外部设备把程序和数据通过输入接口电路和数据总线送入到存储器(PC将BIOS代码置于ROM中,通过从硬盘加载操作系统到内存,接着将控制权交给0S,执行应用程序),然后逐条取出执行。


但单片机中的程序一般事先我们都已通过写入器固化在片内或片外程序存储器中。因而一开机即可执行指令。(从ROM中取出程序执行)。

下面我们将举个实例来说明指令的执行过程:

开机时,程序计算器PC变为0000H。然后单片机在时序电路作用下自动进入执行程序过程。执行过程实际上就是取出指令(取出存储器中事先存放的指令阶段)和执行指令(分析和执行指令)的循环过程。

例如执行指令:MOV A,#0E0H,其机器码为“74H E0H”,该指令的功能是把操作数E0H送入累加器,

0000H单元中已存放74H,0001H单元中已存放E0H。当单片机开始运行时,首先是进入取指阶段,其次序是:
1 程序计数器的内容(这时是0000H)送到地址寄存器;

2 程序计数器的内容自动加1(变为0001H);

3 地址寄存器的内容(0000H)通过内部地址总线送到存储器,以存储器中地址译码电跟,使地址为0000H的单元被选中;

4 CPU使读控制线有效;

5 在读命令控制下被选中存储器单元的内容(此时应为74H)送到内部数据总线上,因为是取指阶段,所以该内容通过数据总线被送到指令寄存器。至此,取指阶段完成,进入译码分析和执行指令阶段。
   由于本次进入指令寄存器中的内容是74H(操作码),以译码器译码后单片机就会知道该指令是要将一个数送到A累加器,而该数是在这个代码的下一个存储单元。所以,执行该指令还必须把数据(E0H)从存储器中取出送到CPU,即还要在存储器中取第二个字节。其过程与取指阶段很相似,只是此时PC已为0001H。指令译码器结合时序部件,产生74H操作码的微操作系列,使数字E0H从0001H单元取出。因为指令是要求把取得的数送到A累加器,所以取出的数字经内部数据总线进入A累加器,而不是进入指令寄存器。至此,一条指令的执行完毕。单片机中PC="0002H",PC在CPU每次向存储器取指或取数时自动加1,单片机又进入下一取指阶段。这一过程一直重复下去,直至收到暂停指令或循环等待指令暂停。CPU就是这样一条一条地执行指令,完成所有规定的功能。



附:51ROM和RAM

ROM

(1)ROM专门用来存放经调试正确的应用程序及固定的表格和常数,51单片机从ROM中取出指令,译码并执行。

(2)某些特定单元用来保留用于特定的程序入口地址。通常在入口处设置无条件转移指令,使其转向对应的程序段处执行,比如复位后的初始化引导程序采用ORG 0000H LJMP MAIN 至主程序执行 ,而中断入口地址处 ORG 0003H LJMP IE0_0 ,跳至外部中断零的中断复位程序执行。


RAM

(1)用来存放随机数据,对外部RAM通常采用间接寻址法mov r0,#20h mov a,@r0;


MCS-51系列单片机指令表

博文 来自: weixin_41995541
没有更多推荐了,返回首页