您当前的位置:五五电子网电子知识电子学习电脑-单片机-自控术语MCS-51单片机位操作指令 正文
MCS-51单片机位操作指令

MCS-51单片机位操作指令

点击数:7912 次   录入时间:03-04 11:58:51   整理:http://www.55dianzi.com   电脑-单片机-自控术语

  MCS-51单片机内部有一个性能优异的位处理器,实际上是一个一位微处理器,它有自己的位变量操作运算器、位累加器(借用进位标志CY)和存储器(位寻址区中的各位)等。MCS-51指令系统加强了对位变量的处理能力,具有丰富的位操作指令,可以完成以位变量为对象的传送、运算、控制转移等操作。位操作指令的操作对象是内部RAM的位寻址区,即字节地址为20H~2FH单元中连续的128位(位地址为00H~7FH),以及特殊功能寄存器中可以进行位寻址的各位。
  
  位条件转移指令也是位操作指令的子集,已在讲座(六)控制转移类指令中介绍过。下面介绍位变量传送、控制和运算指令。
  
  1.位数据传送指令:
  
  主要用于对位操作累加器C进行数据传送,均为双字节指令。
  
  MOVC,bit该指令的功能是将直接寻址位的内容送入位累加器CY中,不影响其他标志。
  
  MOVbit,C该指令是将CY的内容传送到直接寻址位。
  
  2.位控制修正指令
  
  这类指令的功能分别是清除、取反、置位进位标志C或直接寻址位,执行结果不影响其他标志。
  
  CLRC位累加器,CY清零。
  
  CLRbit直接寻址位清零。
  
  SETBC位累加器CY置位。
  
  SETBbit直接寻址位置位。
  
  CPLC位累加器CY取反。
  
  CPLbit直接寻址位取反。
  
  3.位逻辑运算指令
  
  这类指令的功能是把进位C的内容及直接位地址的内容逻辑“与”、“或”后的操作结果送回到C中。斜杠“/”表示对该位取反后再参与运算,但不改变原来的数值。
  
  ANLC,bit位累加器CY逻辑“与”直接寻址位,其结果送位累加器CY中。
  
  ANLC,/bit直接寻址位取反后同位累加器CY逻辑“与”,其结果送位累加器CY中。
  
  ORLC,bit位累加器CY逻辑“或”直接寻址位,其结果送位累加器CY中。
  
  ORLC,/bit直接寻址位取反后同位累加器CY逻辑“或”,其结果送位累加器CY中。
  
  需要说明的是,在汇编语言级指令格式中,位地址bit有多种表示方式:
  
  (1)直接(位)地址方式,如:
  
  0DH。
  
  (2)字节地址.位方式,如:
  
  21H.5。
  
  (3)寄存器名.位方式,如ACC.7,但不能写成A.7。
  
  (4)位定义名方式,如:RSO。
  
  (5)用伪指令BIT定义位名方式,如:FlBITPSW.1,经定义后,允许在指令中用Fl来代替PSW.l。
  
  接下来做实验,感性认识所学这些指令的作用。
  
  现在我们做实验,在Sl板上实现:将Pl.0置低电平后,点亮P2.0的LED(即实现将Pl.0的状态传送到P2.0)。在我的文档中建立一个文件目录(Sll),然后建立Sll.uv2的工程项目,最后建立源程序文件(Sll.asm)。
  
  输入下面的程序:

  编译通过后,进行模拟仿真,打开Pl、P3口,将Pl.0的打勾取消(即为低电平),按下键盘的Fl0,发现P2.0也为低电平。若将Pl.0置高电平,则P2.0也为高电平。这样,实现了将Pl.0的状态传送到P2.0。软件模拟仿真输出结果见下图。进行实验时,将Sll文件夹中的Sll.hex文件烧录到89C51芯片中,将芯片插入到Sl型LED输出试验板上,将Pl.0口处的短路块拔出(用作输入时,需将输出的短路块拔出),在Sl实验板上通电运行后,一开始P2.0处的LED并不亮。将试验线一端插“0”电平插针,另一端插Pl.0脚外相连的插针,LED点亮。拿开试验线,LED又不亮。

  我们对程序进行分析解释。
  
  序号l(程序解释,以下同):程序开始。
  
  序号2:跳转到MAIN主程序处。
  
  序号3:主程序MAIN从地址0030H开始。
  
  序号4:将Pl.0的外部输入内容传送给位累加器CY中。
  
  序号5:将位累加器CY的内容传送给P2.0中。
  
  序号6:调用延时子程序,维持发光管点亮。
  
  序号7:跳转到MAIN处反复执行。
  
  序号8~12:延时子程序。
  
  序号13:程序结束。
  
  再做一个实验,在Sl板上实现:比较Pl口与P3口输入的两个数大小。,若Pl数小把P0.0点亮;若P3数小则把P0.7点亮;若两数相等,把P0.4点亮。在我的文档中建立一个文件目录(S12),然后建立S12.uv2的工程项目,最后建立源程序文件(S12.asm)。
  
  输入下面的程序:

  编译通过后,将其烧录到89C51芯片中,将芯片插入到Sl型LED输出试验板上,将Pl口、P3口处的短路块全部拔出(此时Pl、P3的输入均为FFH),Sl实验板上通电运行。一开始PO.4处的LED点亮。将试验线一端插“0”电平插针,另一端插Pl.0脚外相连的插针,P1的输入变成FEH,Pl<P3,P0.0处的LED点亮。反之,将试验线插P3.0脚外相连的插针,P3的输入变成FEH,P3<Pl,P0.7处的LED点亮。读者可以自己选择输入大小进行更多的比较实验。
  
  程序详释。
  
  序号1(程序解释,以下同):程序开始。
  
  序号2:跳转到MAIN主程序处。
  
  序号3:主程序MAIN从地址0030H开始。
  
  序号4~7:P0~P3口初始化(均置高电平)。
  
  序号8:将Pl口内容传送给累加器A。
  
  序号9:比较P2口内容与累加器A中内容之大小。若P2=A中内容,则程序顺序执行,位累加器(也称进位位)CY=0。
  
  P2≠A中内容,则程序跳转至Ll处,若P2<A中内容,CY=0;若P2>A中内容,CY=1。
  
  序号10:P0.4置零,点亮对应的LED。
  
  序号11:调用延时子程序,维持LED点亮。
  
  序号12:跳转到MAIN主程序处循环执行。
  
  序号13:判位累加器,若为l,跳转至L2处;若为0,顺序执行。
  
  序号14:P0.7置零,点亮对应的LED。
  
  序号15:调用延时子程序,维持LED点亮。
  
  序号16:跳转到MAIN主程序处循环执行。
  
  序号17:P0.0置零,点亮对应的LED。
  
  序号18:调用延时子程序,维持LED点亮。
  
  序号19:跳转到MAIN主程序处循环执行。
  
  序号20~24:延时子程序。
  
  序号25:程序结束。
  
  学习、实验做到这个阶段,相信大部分人已对所学指令有了感性认识,也学会了初步的编程。也许有人会问,是否每行指令结束一定要加分号?在这里,我们说,如你不加注释(中文或英文),则不需分号。但若要加注释,则一定要加分号。因为汇编器对分号及后面的该行内容不作编译。通常,为了使一个程序具有良好的可读性,注释是必不可少的。分号是英文的标点符号,而注释通常是中文的。我们也可以预先在每行结束处加上分号,以便随时添加注释。总之,加不加分号应依是否有注释而定,加了也没错。
  
  另有有人会问:S2试验板接上5V稳压电源后怎么不工作?回答是:由于S2板上已设计安装了7805三端稳压器,因此输入插座的电压应大于8V,而我们提供的TOP851编程器(邮购代号Bl)配带的电源适配器正好是9V,因此只需将编程器9V电源插入S2板的电源插座即可正常工作。
  
  如要用5V稳压电源对S2板供电还需再焊出引线插座,反而显得麻烦。Sl板使用5V稳压电源供电。




本文关键字:单片机  电脑-单片机-自控术语电子学习 - 电脑-单片机-自控术语