位数据指针) 二、数据指针赋值指令(16位数据指针) 数据指针赋值指令( 位数据指针
当要对片外的RAM和I/O接口进行访问时,或进行查表操作 时,通常要对DPTR赋值。指令为: MOV DPTR, #data16 Eg:将数据指针DPTR指向外部 :将数据指针 指向外部RAM的2000H单元。 单元。 指向外部 的 单元 MOV DPTR, #2000H
以通用寄存器间接地址为目的的传送指令: 条 以通用寄存器间接地址为目的的传送指令:( 3条)
注意:我们只可以将程序存储器中的数据传出( 注意:我们只可以将程序存储器中的数据传出(读 ),而不能将数据传入 写入)程序存储器。 而不能将数据传入( 出),而不能将数据传入(写入)程序存储器。 因此,语句: 因此,语句: MOVC @ADPTR , A MOVC @APC , A 都是错误的。 都是错误的。 思考题: 单片机的运算能力比较差, 思考题:MCS-51单片机的运算能力比较差,想想 单片机的运算能力比较差 能不能利用查表方式来进行函数y=sin(x)的运算? 的运算? 能不能利用查表方式来进行函数 的运算
常用助记符: 常用助记符: MOV 单片机内部RAM中的数据传递 MOVX 累加器和单片机外部数据存储器间数据传递 MOVC 累加器和程序存储器之间的数据传递 XCH 累加器和某个内部RAM单元进行数据交换 XCHD 累加器和某个内部RAM单元进行低半字节数据交换 PUSH 将某个内部RAM单元的数据压入堆栈 POP 将堆栈内的数据弹出
注意:只有累加器 才能把数据传到外部 才能把数据传到外部RAM,或接收从外 注意:只有累加器A才能把数据传到外部 , 部数据存储器传回的数据。 部数据存储器传回的数据。 比如: 比如:MOVX 20H, @DPTR , MOVX @DPTR,SBUF , MOVX @DPTR,R2 , MOVX @DPTR,@R1 , 都是错误的 思考:如果要将内部 思考:如果要将内部RAM中40H单元中的数据传递到外部 中 单元中的数据传递到外部 RAM的2000H单元中,应怎么样才能解决?试写出相应程序。 单元中, 的 单元中 应怎么样才能解决?试写出相应程序。
中存放有0~9间的某个数,现要求查出该数 间的某个数, 例:在累加器A中存放有 在累加器 中存放有 间的某个数 段共阴显示代码, 的7段共阴显示代码,并将代码传回累加器。 段共阴显示代码 并将代码传回累加器。 解决方案:在程序存储器中划出一个区域用于存放0~9的7 段共阴显示代码,比如将代码存放在0400H开始的地方。程序 如下: :
字节交换指令指内部RAM中的某个单元和累加器 之间进行 中的某个单元和累加器A之间进行 字节交换指令指内部 中的某个单元和累加器 数据交换,可以是整个字节,也可以是半个字节。包含3种交换 数据交换,可以是整个字节,也可以是半个字节。包含 种交换 方式: 方式: 1、整字节交换指令: 、整字节交换指令: XCH A, Rn ; (A) ← →(Rn) , XCH A, direct ; (A) ← →(direct) XCH A, @Ri ; (A) ← →((Ri))
注意:在使用 进行间址寻址时 只可使用R0和 。 进行间址寻址时, 注意:在使用Ri进行间址寻址时,只可使用 和R1。
以通用寄存器Rn为目的的传送指令: 条 以通用寄存器 为目的的传送指令:( 3条) 为目的的传送指令
Eg:将数据指针DPTR指向存于 :将数据指针 指向存于ROM中的表格首地址。 中的表格首地址。 指向存于 中的表格首地址 MOV DPTR,#TABLE
使用DPTR和Ri进行间接寻址 和 进行间接寻址 使用 MOVX A, @DPTR ;A ←((DPTR))片外 , MOVX A,@Ri , ;A ←((Ri))片外 MOVX @DPTR,A ;(DPTR)片外←(A) , MOVX @Ri,A , ;(Ri)片外←(A) 注意: 注意: 该指令用于在单片机和外部RAM、扩展 的数据传送; 的数据传送; 该指令用于在单片机和外部 、扩展I/O的数据传送 使用Ri时 只能访问低8位地址为 位地址为00H~FFH地址段; 地址段; 使用 时,只能访问低 位地址为 地址段 使用DPTR时,能访问 地址段。 使用 时 能访问0000H ~ FFFFH地址段。 地址段
MCS-51单片机指令系统包括111条指令 MCS-51单片机指令系统包括111条指令 单片机指令系统包括111 按功能能划分为以下5 按功能能划分为以下5类: 1. 数据传送和交换指令(29条) 数据传送和交换指令(29条 算术运算指令(24条 2. 算术运算指令(24条) 3. 逻辑运算指令(24条) 逻辑运算指令(24条 控制转移指令(17条 4. 控制转移指令(17条) 位操作指令(17条 5. 位操作指令(17条)
数据传送和交换类指令主要有以下几种: 数据传送和交换类指令主要有以下几种:
内部数据传递指令 数据指针赋值指令 片外数据传送指令 ROM数据访问指令 ROM数据访问指令 栈操作指令 数据交换指令
