从零开始51单片机教程 —— 13 单片机逻辑运算类指令

发布者:平静的33号最新更新时间:2012-02-16 关键字:单片机  逻辑运算  指令 手机看文章 扫描二维码
随时随地手机看文章

对单片机的累加器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 A。68H化为二进制为01101000,按上图进行移动。01101000化为11010000,即D0H。

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

例:A中的值为68H,C中的值为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,也就是0001,0111高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 0000H、LJMP START、ORG 30H等我们稍后分析。从START开始,MOV SP,#5FH,这是初始化堆栈,在本程序中有无此句无关紧要,不过我们慢慢开始接触正规的编程,我也就慢慢给大家培养习惯吧。

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

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

问题:

如何实现亮点流动?

如何改变流动的方向?

答案:

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

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

关键字:单片机  逻辑运算  指令 引用地址:从零开始51单片机教程 —— 13 单片机逻辑运算类指令

上一篇:从零开始51单片机教程 —— 12 单片机算术运算指令
下一篇:从零开始51单片机教程 —— 14 单片机逻辑与或异或指令详解

推荐阅读最新更新时间:2024-03-16 12:53

学好单片机必须要了解的8个电路设计
单片机上拉电阻的选择 大家可以看到复位电路中电阻R1=10k时RST是高电平 ,而当R1=50时RST为低电平,很明显R1=10k时是错误的,单片机一直处在复位状态时根本无法工作。出现这样的原因是由于RST引脚内含三极管,即便在截止状态时也会有少量截止电流,当R取的非常大时,微弱的截止电流通过就产生了高电平。 LED串联电阻的计算问题 通常红色贴片LED:电压1.6V-2.4V,电流2-20mA,在2-5mA亮度有所变化,5mA以上亮度基本无变化。 端口出现不够用的情况 这时可以借助扩展芯片来实现,比如三八译码器74HC138来拓展。
[单片机]
学好<font color='red'>单片机</font>必须要了解的8个电路设计
MCU解密全攻略 为何所有MCU都能被破解(三)
可编程的智能卡制造商走得更远,干脆砍掉标准的编程接口。取而代之的是启动模块,可以在代码载入后擦掉或屏蔽掉自己。这些卡只能在初始化时被编程一次,之后只能响应使用者的嵌入软件所支持的读写存在卡里的数据或程序。   图1-9 意法ST的ST16系列智能卡芯片表面金属层的敏感网格。   近期的一些智能卡使用存储器总线编码(Bus encryption)技术来防止微探测攻击。即使破解者获得数据总线的数据也不可能知道密码或别的敏感信息。这种保护措施直指侵入式和半侵入式攻击。但非侵入式攻击仍然可以像正常的CPU一样访问控制非编码信息。事实上,几年前就发现廉价地破解编码信息的方法。   图1-10 100倍显微镜下的英飞凌Infineo
[模拟电子]
<font color='red'>MCU</font>解密全攻略 为何所有<font color='red'>MCU</font>都能被破解(三)
基于AVR单片机的电子时钟
通过几天的AVR单片机学习,用AVR系列单片机中的ATMEGA16,LCD液晶屏LC1602,温度采集模块DS18B20,时钟模块DS1302,5V升压IC,和三个按键,以及一些电子元件完成了数字时钟系统的设计。在一块液晶显示屏上实现动态,时、分、秒、年、月、日、星期、温度数据的显示, 通过三个按键,S1调时键、S2时间加键、S3时间减键、实现时钟的年、月、日、星期、时、分、秒、的调整。本系统设计大部分功能由软件来实现,使电路简单明了。这次制作源代码,是从我已前的一个小制作基于51单片机的DS1302时钟上移植过来的所以制作没用多少时间。一开始用51单片机做这电子钟在调试时还是出了不少问题如,没考虑到51单片机P0口没有内至上拉电
[单片机]
TLCS-870系列单片机结构与应用
东芝公司的TLCS-870系列单片机为高性能8位单片机系列产品。该系统产品有几十种类型,它们具相同的CPU模块和指令系统,各种类型都有廉价的掩膜ROM和一次性可编程的OTP。 TLCS -870系列产品是功能很强的一类单片机,可广泛应用于工业控制、家用电路、仪器仪表、办公设备、能信和交通等领域。本文简要介绍TLCS-870系列产品的结构、性能与实际应用。图1所示为TLCS-870系列单片机的命名法则。表1给出了TMP87C800/H00L型单片机的功能和封装形式。 1 结构 TLCS -870系列单片机中的各种型号具有基本相同的结构,它们都有一个相同的标准CPU模块,只是内部的其它资源随型号而异。该系统单片机的程序存贮
[单片机]
TLCS-870系列<font color='red'>单片机</font>结构与应用
【自学51单片机】2 --​keil软件编写程序、烧录程序和点亮LED
1、 外设 LED 介绍 LED小灯 即发光二极管,发光二极管为二极管中的一种,二极管中有阳极和阴极,电流从正极流向负极导通,反向阻断。其中贴片发光二极管,正向导通电压在1.8V — 2.2V之间,靠电流驱动,工作电流在1mA – 20mA之间,1mA – 5 mA之间LED小灯亮度变化明显,5 mA – 20mA之间LED小灯亮度变化不大,20mA以上LED小灯易烧坏。 贴片发光二极管 2、计算限流电阻 LED小灯电路 1. 限流电阻: 电阻的阻值大小变化可以直接改变整条电路的电流大小,称为限流电阻。 2. 该开发板VCC电压为5V,GND接地为0V,贴片LED电压大概在2V左右,限流电阻电压为3V左右,要使LED灯
[单片机]
【自学51<font color='red'>单片机</font>】2 --​keil软件编写程序、烧录程序和点亮LED
51单片机(AT89C52)外部中断程序
#include reg52.h #define uchar unsigned char #define uint unsigned int #define DELAY 1000 void delay(uint z) //1ms { uint x,y; for(x=z;x 0;x--) for(y=111;y 0;y--); } void main() { uchar i,dt; EA=1; //开总中断 EX1=1; //开外部中断1 // IT1=0; //设置外部中断1为低电平触发 IT1=1; //设置外部中断1为下降沿触发 while(1)
[单片机]
51<font color='red'>单片机</font>(AT89C52)外部中断程序
51单片机-中断
#include <reg52.h> #include <intrins.h> unsigned int dd, i; void key() interrupt 0{ if(i == 0) P2 = dd; else{ dd = _crol_(dd,1); P2 = dd; } i++; } void main(){ EA = 1; //中断允许总控制位使能 EX0 = 1; //外部中断0中断允许位 IT0 = 1
[单片机]
51<font color='red'>单片机</font>-中断
单片机各类指令详解
  数据传递类指令   以累加器为目的操作数的指令   MOV A,Rn   MOV A,direct   MOV A,@Ri   MOV A,#data   第一条指令中,Rn代表的是R0-R7。第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚才讲过的。第四条指令是将立即数data送到A中。   下面我们通过一些例子加以说明:   MOV A,R1 ;将工作寄存器R1中的值送入A,R1中的值保持不变。   MOV A,30H ;将内存30H单元中的值送入A,30H单元中的值保持不变。   MOV A,@R1 ;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送入A中。如执行命令前R1中的值为20
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved