返回主页 单片机教程XL2000开发板 单片机学习 自制编程器 单片机资料 软件下载 电子技术产品介绍如何购买 进入论坛

单片机教程第1课  教学资料单片机教程第18课  算术指令
单片机教程第2课  好书推荐单片机教程第19课  逻辑指令
单片机教程第3课  单片机不易掌握的概念单片机教程第20课  逻辑指令
单片机教程第4课  实战一:流水灯单片机教程第21课  转移指令
单片机教程第5课  实战二:唱歌单片机教程第22课  位操作
单片机教程第6课  测试一单片机教程第23课  计数定时器
单片机教程第7课  新教程前言单片机教程第24课  计数定时器
单片机教程第8课  总体规划单片机教程第25课  中断系统
单片机教程第9课  概述单片机教程第26课  中断练习
单片机教程第10课  单片机结构单片机教程第27课  定时计数实验2
单片机教程第11课  基本概念单片机教程第28课  串行口
单片机教程第12课  延时程序分析单片机教程第29课  串口实例
单片机教程第13课  延时程序分析单片机教程第30课  数码管编程
单片机教程第14课  并口结构单片机教程第31课  动态数码管编程
单片机教程第15课  结构分析单片机教程第32课  键盘接口编程
单片机教程第16课  寻址方式单片机教程第33课  键盘扫描编程
单片机教程第17课  上机练习 单片机教程第34课  指令介绍       平凡的单片机教程
 

三、逻辑运算类指令:

1.对累加器A的逻辑操作:

CLR  A ;将A中的值清0,单周期单字节指令,与MOV A#00H效果相同。

CPL   A ;将A中的值按位取反

 

RL            A;将A中的值逻辑左移

RLC  A ;将A中的值加上进位位进行逻辑左移

RR         A ;将A中的值进行逻辑右移

RRC       A ;将A中的值加上进位位进行逻辑右移

SWAP      A ;将A中的值高、低4位交换。

例:(A=73H,则执行CPL              A,这样进行:

73H化为二进制为01110011

逐位取反即为10001100,也就是8CH

RL     A是将(A)中的值的第7位送到第0位,第0位送1位,依次类推。

例:A中的值为68H,执行RL           A68H化为二进制为01101000,按上图进行移动。01101000化为11010000,即D0H

RLC         A,是将(A)中的值带上进位位(C)进行移位。

例:A中的值为68HC中的值为1,则执行RLC          A

101101000后,结果是0 11010001,也就是C进位位的值变成了0,而(A)则变成了D1H

RR    ARRC              A就不多谈了,请大家参考上面两个例子自行练习吧。

SWAP      A,是将A中的值的高、低4位进行交换。

例:(A=39H,则执行SWAP    A之后,A中的值就是93H。怎么正好是这么前后交换呢?因为这是一个16进制数,每116进位数字代表4个二进位。注意,如果是这样的:(A=39,后面没H,执行SWAP  A之后,可不是(A=93。要将它化成二进制再算:39化为二进制是10111,也就是000101114位是0001,低4位是0111,交换后是01110001,也就是71H,即113

练习,已知(A=39H,执行下列指令后写出每步的结果

CPL               A

RL                 A

CLR                     C

RRC                     A

SETB            C

RLC                     A

SWAP           A

通过前面的学习,我们已经掌握了相当一部份的指令,大家对这些枯燥的指令可能也有些厌烦了,下面让我们轻松一下,做个实验。

实验五:

ORG 0000H

LJMP START

ORG 30H

START:

MOV SP,#5FH

MOV A,#80H

LOOP:

MOV P1,A

RL A

LCALL DELAY

LJMP LOOP

delay:

       mov r7,#255

d1:   movr6,#255

d2:   nop

       nop

       nop

       nop

       djnz r6,d2

       djnz r7,d1

       ret

       END

先让我们将程序写入片中,装进实验板,看一看现象。看到的是一个暗点流动的现象,让我们来分析一下吧。

前而的ORG 0000HLJMP      STARTORG      30H等我们稍后分析。从START开始,MOVSP#5FH,这是初始化堆栈,在本程序中有无此句无关紧要,不过我们慢慢开始接触正规的编程,我也就慢慢给大家培养习惯吧。

MOV      A#80H,将80H这个数送到A中去。干什么呢?不知道,往下看。

MOV       P1A。将A中的值送到P1端口去。此时A中的值是80H,所以送出去的也就是80H,因此P1口的值是80H,也就是10000000B,通过前面的分析,我们应当知道,此时P17接的LED是不亮的,而其它的LED都是亮的,所以就形成了一个暗点。继续看,RL     ARL    A是将A中的值进行左移,算一下,移之后的结果是什么?对了,是01H,也就是00000001B,这样,应当是接在P10上的LED不亮,而其它的都亮了,从现象上看暗点流到了后面。然后是调用延时程序,这个我们很熟悉了,让这个暗点”“一会儿。然后又调转到LOOP处(LJMP    LOOP)。请大家计算一下,下面该哪个灯不亮了。。。。。对了,应当是接在P11上灯不亮了。这样依次循环,就形成了暗点流动这一现象。

问题:

1. 如何实现亮点流动?

2.如何改变流动的方向?

答案:

     1、将A中的初始值改为7FH即可。

     2、将RL A改为RR A即可。