(玩电子) 电子技术学习与研究
当前位置单片机教程网 >> 基础教程 >> 浏览文章

12课:单片机逻辑运算类指令

作者:佚名   来源:本站原创   点击数:x  更新时间2007年08月15日   字体

对单片机的累加器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

1 01101000后结果是0 11010001也就是C进位位的当成了0而A则变成了D1H

RR A和RRC A就不多谈了请大也考上面两个例程自行练习吧

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

例A=39H则执行SWAP A之后A中的值就是93H怎么正好是这么前后交换呢因为这是一个16进制数每1个16进位数字代表4个二进位注意如果是这样的A=39后面没H执行SWAP A之后可不是A=93要将它化成二进制再算39化为二进制是10111也就是00010111高4位是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: mov r6,#255

d2: nop

nop

nop

nop

djnz r6,d2

djnz r7,d1

ret

END

先让我们将程序写入片中装进实验板看一看现象

看到的是一个暗点流动的现象让我们来分析一下吧

前而的ORG 0000HLJMP STARTORG 30H等我们稍后分析从START开始MOV SP#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将A中的初始值改为7FH即可

2将RL A改为RR A即可

发表评论告诉好友收藏此文关闭窗口

文章评论

相关文章

Ƶ