单片机读指令和写指令_51单片机单串口同时实现at指令和调试信息输出时怎么输入指令 - CSDN
  • 定义单片机首先将欲修改的寄存器的内容回ALU,对相应位进行修改,然后再整个写回原来的寄存器地址,完成该功能的指令就叫做“-改-指令的两种方式在对并行口P0~P3操作时,这类指令从端口的锁存器读出数据...

    定义

    单片机首先将欲修改的寄存器的内容读回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等实现

    展开全文
  • 单片机指令系统(1)

    2018-12-06 09:02:46
    作为一个单片机初学者,记住指令特别的痛苦,不过主要还是要理解,多练习指令多了就记住了,这是一个很自然的过程。 目录   一、寻址方式 二、指令分类 1 数据传送类指令 2 算术运算类指令 一、寻址方式...

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

    目录

     

    一、寻址方式

    二、指令分类

    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/ )

    展开全文
  • 单片机执行程序的过程,实际上就是执行我们所编制程序的过程。即逐条指令的过程。计算机每执行一条指令都可分为三个阶段进行。即取指令-----分析指令-----执行指令。 取指令的任务是:根据程序计数器PC中的值...
    单片机执行程序的过程,实际上就是执行我们所编制程序的过程。即逐条指令的过程。计算机每执行一条指令都可分为三个阶段进行。即取指令-----分析指令-----执行指令。
    


    取指令的任务是:根据程序计数器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 点击【单片机/嵌入式学习】

    展开全文
  • 51单片机查表指令

    2018-08-04 12:17:19
    51单片机具有两条查表指令,用于从 ROM 中读出预存的数据:  MOVC A, @A + PC  MOVC A, @A + DPTR    问题:在“MOVC A,@A+DPTR”“MOVC A,@A+PC”中,分别使用了DPTRPC作基址,请问这两个基址代表什么...

    51单片机具有两条查表指令,用于从 ROM 中读出预存的数据:

        MOVC A, @A + PC
        MOVC A, @A + DPTR
        
        问题:在“MOVC A,@A+DPTR”和“MOVC A,@A+PC”中,分别使用了DPTR和PC作基址,请问这两个基址代表什么地址?使用中有何不同?  
    答案: 使用@A+DPTR基址变址寻址时,DPTR为常数且是表格的首地址,A为从表格首址到被访问字节地址的偏移量。 
    使用@A+PC基址变址寻址时,PC仍是下条指令首地址,而A则是从下条指令首地址到常数表格中的被访问字节的偏移量。 

    PC是程序计数器,DPTR是数据指针。用这个MOVC A,@A+DPTR比较方便的,DPTR是16位。范围广。建议使用。

    这两条都是查表指令,MOVC A,@A+PC,只能给累加器A赋值,所以只能查这条指令所在地址以后256字节范围内的代码或常数。
    而MOVC A,@A+DPTR,可以给DPTR赋给任何一个16位的地址值,所以查表范围可达整个程序存储器64K字节空间的代码或常数。

    其中前一条指令的用法,比较难,使用的时候,需要计算一个“偏移量”。不了解“指令的字节数”的人,都不清楚应该如何计算。
    做而论道曾在以前的文章中,介绍过“偏移量”的自动计算方法,可见如下链接:

    --------------------
    最佳答案:
    51单片机汇编语言有一条查表指令是:
        MOVC A, @A + DPTR
    它不是单独使用的,要和 DB 伪指令配套使用。

    例如:若累加器A中有一个0~9的数,请用查表法求出该数的平方值,设平方表表头地址为1000H。
    程序如下:
    ;-------------------------------------
        MOV DPTR, #1000H
        MOVC A, @A + DPTR 
        ……

        ORG 1000H
        DB   0, 1, 4, 9, 16, 25......
    ;-------------------------------------
    DB 伪指令从 ROM 1000H 开始,顺序存放了一系列的“平方”数据。
    MOVC A, @A+DPTR 指令中的A,如果等于0,就会在“平方”数据中取出第0个,就是0;
    MOVC A, @A+DPTR 指令中的A,如果等于1,就会在“平方”数据中取出第1个,就是1;
    MOVC A, @A+DPTR 指令中的A,如果等于2,就会在“平方”数据中取出第2个,就是4;
    MOVC A, @A+DPTR 指令中的A,如果等于3,就会在“平方”数据中取出第3个,就是9;
    …… 
    MOVC A, @A+DPTR 指令中的A,如果等于9,就会在“平方”数据中取出第9个,就是81。
    -------------------------------
    后记:
    这条指令的用法,相对前一条就简单了,事先并不需要计算“偏移量”。但是这条指令必须要使用寄存器DPTR。

    大家知道,凡是涉及到片外RAM存储单元的时候,基本上都要使用DPTR,这个DPTR寄存器通常是比较“繁忙”的,它形成了一个片内、片外之间,数据传传输的“瓶颈”。因此在读取ROM数据的时候,能够不用这后一条指令,就不要用它,应该尽量使用前一条指令。
    ==============================================================

    展开全文
  • 51单片机指令模拟器

    2020-02-24 22:56:29
    MCS-51单片机指令模拟器,除了DA指令外,其它指令都可以模拟。 实现了254条指令的模拟,并进行测试,但是测试还不够完整,只对关键指令完成测试,其它指令测试均人为检查过,DA指令还未实现,后面会实现 请到我的...
  • 51 单片机有四个 8 位的并行接口。... 单片机从端口读入数据的通道有两个,一个是从锁存器引入,一个是从输出引脚处引入,分别叫做“锁存器”引脚”。单片机在进行端口输出时,经常要参考其上一次的...
  • 51单片机具有两条查表指令,用于从 ROM 中读出预存的数据: MOVC A, @A + PC MOVC A, @A + DPTR其中前一条指令的用法,比较难,使用的时候,需要计算一个“偏移量”。不了解“指令的字节数”的人,都不清楚应该...
  • 说明:没有不带借位的单片机减法指令,如果需要做不带位的减法指令(在做第一次相减时),只要将CY清零即可。 如果是小数减大数,进位C会被置1 ,使用JC rel 转到处理程序去就可以了 例如: CLR C SUB...
  • 以累加器为目的操作数的指令 MOV A,Rn MOV A,direct MOV A,@Ri MOV A,#data 这组指令功能是把源地址单元中的内容送入直接地址,源操作数不变。 第一条指令中,Rn代表的是R0-R7。 第二条指令中,direct...
  • (1)引脚的结构图清楚吗? ...以上结构说明:引脚之前一定要对端口先置1,使mosfet ... V2截止,以免信号被拉低而错,这一点很容易理解。...(2)什么指令读端口?...一般的教科书上都会强调:端口的指令
  • 单片机汇编指令

    2010-02-23 14:16:00
    一个单片机所需执行指令的集合即为单片机指令系统。单片机使用的机器语言、汇编语言及高级语言,但不管使用是何种语言,最终还是要“翻译”成为机器码, 单片机才能执行之。现在有很多半导体厂商都推出了自己的...
  • 整理了一下51单片机指令,有的时候感觉这些指令集还是看英文文档比较好,毕竟指令源于英语。大致整理了一下,做的不好大家别介意。标准51指令数据传送类指令MOVmove传送MOVCmove code访问常数表(查表指令)MOVX...
  • 计算机每执行一条指令都可分为三个阶段进行,即取指令-----分析指令-----执行指令。取指令的任务是:根据程序计数器PC中的值从程序存储器读出现行指令,送到指令寄存器。分析指令阶段的任务是:将指令寄存器中的指令...
  • 数据传递类指令  以累加器为目的操作数的指令  MOV A,Rn  MOV A,direct  MOV A,@Ri  MOV A,#data  第一条指令中,Rn代表的是R0-R7。第二条指令中,direct就是指的直接地址,而第三条指令中,就是...
  • 单片机数据传送类指令教程:http://www.51hei.com/mcuteach/242.html寄存器教程:http://www.51hei.com/mcuteach/245.html我看懂了单片机传送类指令的教程!我觉得我自己好厉害啊哈哈哈哈哈哈哈。一遍看不懂看两遍,...
  • 51单片机指令

    2018-08-14 00:55:12
    指令说明 字节数 周期数 (数据传递类指令) MOV A,Rn 寄存器传送到累加器 1 1 MOV A,direct ...
  • 很多外部模块是使用串口的方式与单片机通信的,但有的...我们可以保留单片机串口与PC的连接,串口同时与模块连接,这样单片机的发送信息同时被模块PC收到了。 模块只对AT指令有反应,对其他格式不正确的指令无反应,
  • MCS-51系列单片机指令
  • 助记符 指令说明 字节数 周期数(数据传递类指令)MOV A,Rn 寄存器传送到累加器 1 1 MOV A,direct 直接地址传送到累加器 2 1 MOV A,@Ri 累加器传送到外部RAM(8 地址) 1 1 MOV A,#data 立即数传送到累加器 2 1...
  • 以前使用单片机也没注意单片机修改操作,最近终于遇到一些问题
1 2 3 4 5 ... 20
收藏数 25,879
精华内容 10,351
关键字:

单片机读指令和写指令