www.8951.com

进入论坛

淘宝网店

软件下载

返回主页 单片机教程 单片机软件 电路设计 电子基础 网站产品 购买方式  进入论坛 软件下载

单片机指令(一)

 

    指令就是编程者给单片机下的命令,也就是我们平常所说的单片机软件,前面我们已经陆续地讲到了一些指令,但还远远不够,从这一课开始就要全面的讲解指令了,希望大家多动手实验,巩固所学的知识,说实在的,其实单片机并不难学。

    为了让大家比较容易记忆,按照常规分类,我把单片机的111 条指令分成了五类—即数据传递类指令、算术运算类指令、逻辑运算类指令、控制转移类指令和位操作指令。这一课先来看数据传递类指令:一.数据传递类指令数据传递类指令是单片机中用的最多的指令,在51 系列单片机的111 条指令中共有28 条是数据传递类指令,前面我们已经学到了几条,比如MOV R1,#250;MOV A,R6 等,那么它们是怎么分类的呢?请往下看:

 

 1. 以累加器为目的操作数的指令
(1)MOV A,Rn
(2)MOV Rn,A
(3)MOV A,direct
(4)MOV A,@Ri
(5)MOV A,#data
指令(1)把Rn 中的数送入累加器A,Rn 代表工作寄存器R0-R7(以后我们只要写到Rn 都代表R0-R7 ,这一点请大家记住了);
指令(2)则相反,把工作寄存器中的数送入累加器A 中;
指令(3)是把直接地址中的数送入累加器A 中,driect 就代表直接地址(以后也相同);
指令(4)就是上一课我们讲的寄存器间接寻址,什么意思?这里再重复一遍,就是看一下工作寄存器中是什么值,把这个值作为地址,把这个地址中的数送入累加器A 中,Ri 代表什么意思呢?就是工作寄存器R0 或者R1(以后如果写Ri 都代表R0 或R1);
指令(5)就是把立即数(也叫常数)直接送入累加器A 中,很显然data 就代表立即数(以后也相同),其实这个我们以前提到过,加#的数就代表送入的是这个数的本身。

 

 接下来举几个实例加以说明,大家可以用DUBG8051 这个软件验证一下:

A.MOV R7,#250;MOV A,R7 ;将工作寄存器R7 中的值250 送入A,R7 中的值保持不变。

B.MOV A,#250;MOV R7,A;将A 中的值250 送入工作寄存器R7,A 中的值保持不变。

C.MOV 30H,#250;MOV A,30H ;将内存30H 单元中的值250 送入A,30H 单元中的值保持不变。

D.MOV 20H,#250;MOV R0,#20;MOV A,@R0 ;先看R0 中是什么值,把这个值作为地址,并将这个地址单元中的值送入A 中。执行命令前R0 中的值为20H,则是将20H 单元中的值250 送入A 中。

E.MOV A,#250 ;将立即数250 送入A 中,执行完本条指令后,A 中的值是250。

 

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

(1)MOV Rn,A

(2)MOV Rn,direct

(3)MOV Rn,#data 举几个实例大家自行分析一下:

A.MOV R7,A ;

B.MOV R7,30H ;

C.MOV R7,#20 ;

这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。

 

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

34 _ 单片机教程(MCS-51 系列) (1) MOV direct,A 例如:MOV 30H,A(将累加器A 中的数送入内存单元30H)(2)MOV direct,Rn 例如:MOV 30H,R7(将寄存器R7 中的数送入内存单元30H)(3)MOV direct,direct 例如:MOV 30H,20H(将内存单元20H 中的数送入内存单元30H)(4)MOV direct,@Ri 例如:MOV 30H,@R0 (看一下R0 中是什么值,把这个值作为地址,并将这个地址单元中的值送入A 中。如执行指令前R0 中的值为20H,则是将20H 单元中的值送入A 中)。(5)MOV direct,#data 例如:MOV 30H,#20(将立即数20 送入内存单元30H)

 

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

(1)MOV @Ri,A (2)MOV @Ri,direct (3)MOV @Ri,#data16 这三条指令就不介绍了,大家自行分析一下,不过有一点希望大家记住,Ri只能用工作寄存器R0或者R1。

 

     5. 十六位数的传递指令

MOV DPTR,#data16 指令说明:这是51 单片机中唯一的一条16 位立即数传递指令,大家知道51 系列单片机是一种8 位单片机,8 位单片机所能表示的最大数只能是28=0-255 。讲到这里大家应该明白了,为什么我们前面的实验中立即数不能大于255 。如果现在有个数是1234H (即二进制0001 0010 0011 0100),我们要把它送入DPTR ,该怎么办呢?当然有办法,INTEL 公司已经把DPTR 分成了两个寄存器,DPH 和DPL (看一下前面的特殊功能寄存器介绍),我们只要把12H( 高8 位)送入DPH ,把34H( 低8 位)送入DPL 中去就可以了,所以执行指令MOV DPTR,#1234H 和执行指令MOV DPH,#12H(1); MOV DPL,#34H(2);是一样的。二.指令练习请写出下列每条指令的执行结果,并用DUBG8051 软件进行验证,看结果是否正确。

1.MOV 12H,#34H

2.MOV R0,#23H

3.MOV R7,#22H

4.MOV R1,12H

5.MOV A,@R0

6.MOV 34H,@R1

7.MOV 45H,34H

8.MOV 12H,DPH

9.MOV R0,DPL

单片机经典教程

 第一课 单片机的概述和分类

 第二课 单片机引脚功能介绍

 第三课 单片机内部结构(一)

 第四课 单片机内部结构(二)

 第五课 单片机内部结构(三)

 第六课 单片机内部结构(四)

 第七课 单片机内部结构(五)

 第八课 单片机内部结构(六)

 第九课  单片机是如何工作的?

 第十课 寻址是如何实现的

 第十一课 单片机的指令(一)

 第十二课 单片机的指令(二)

 第十三课 单片机的指令(三)

 第十四课 单片机的指令(四)

 第十五课 单片机的指令(五)

 第十六课 单片机程序的设计

 第十七课 单片机定时/计数器

 第十八课 单片机的中断系统

 第十九课 定时与中断实验一

 第二十课 定时与中断实验二

 第二十一课 键盘接口与编程一

 第二十二课 键盘接口与编程二

 第二十三课 数码管接口与编程1

 第二十四课 数码管接口与编程2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

XL2000单片机开发板&实验仪 XL600+51mini仿真器 xl400+51mini开发板 XL400单片机学习开发板 XL600编程实验单片机开发板
 
EP3.0支持stc双串口编程器 Ep51 单片机编程器 Top853 usb通用编程器 Top2007多功能编程器 GENIUS UPL800通用编程  

编辑:学林单片机@ 修订1.3 2010-01-25  学林电子,中国单片机学习板和开发板第一品牌   本文8951.com版权所有,未经书面批准转载必究。

当前共1030篇单片机基础入门文章,更多精彩内容请进入学林单片机论坛   联系我们 法律声明  粤ICP备05015330号