51指令系统(2)

发布者:huanli最新更新时间:2015-10-12 来源: eefocus关键字:指令系统 手机看文章 扫描二维码
随时随地手机看文章
编程1:将存于内部RAM地址20H~25H的6位非压缩BCD码转换为对应的ASCII码依次存至30H开始的连续内部RAM单元中。

 

分析:非压缩BCD码00H、01H、02H、…、09H对应ASCII码30H、31H、32H、…、39H,两者差为30H;

 

程序如下:

LL:   MOV R0,#20H   ;源数据串开始地址装入R0

      MOV R1,#30H   ;目的数据串开始地址装入R1

      MOV R2,#6     ;循环次数装入R2

L0:   MOV A,@R0     ;取一字节非压缩BCD码

      ORL A,30H     ;转化为对应ASCII码

      MOV @R1,A     ;保存至对应目的位置

      INC R0        ;修改源数据地址以指向下一位置

      INC R1        ;修改目的数据地址指向下一位置

      DJNZ R2,L0    ;循环进行下一字节的处理

      RET           ;处理结束,程序返回

编程2:实现将0~49之间的偶数依次存于内部RAM地址20H开始的字节单元,将奇数依次存于内部RAM地址40H开始的字节单元。

 

程序如下:

LL:   MOV R0,#20H   ;偶数存放开始地址装入R0

      MOV R1,#40H   ;奇数存放开始地址装入R1

      CLR A         ;起始数码=0

L0:   MOV A,@R0     ;存放一个偶数

      INC A         ;数码加1

      MOV A,@R1     ;存放一个奇数

      INC A         ;数码加1

      INC R0        ;修改偶数存放地址指针指向下一位置

      INC R1        ;修改奇数存放地址指针指向下一位置

      CJNE A,#50,L0 ;是否所有数码都已放完,未完则继续循环

      RET           ;工作完成,程序返回

 

编程3:实现5字节10位压缩BCD码加法。设两个加数分别存放于内部RAM地址40H和45H开始的字节单元(低位字节在前),相加结果存放于内部RAM地址4AH开始的字节单元,不考虑超出5字节压缩BCD码存储范围以外的进位。

 

程序如下:

LL:   MOV R0,#40H   ;加数A的开始地址装入R0

      MOV R1,#45H   ;加数B的开始地址装入R1

      MOV R2,#4AH   ;和数存放开始地址装入R2

      MOV R3,#5     ;循环次数装入R3

      CLR C         ;初始清零CY

L0:   MOV A,@R0     ;取加数A当前字节

      ADDC A,@R1    ;加上加数B当前字节,通过带进位加法考虑低位字节可能的进位

      AD A          ;调整运算结果为BCD码,可能的进位保存在CY中(以下的指令执行均不影响CY)

      XCH A,R2      ;以下三条交换指令交换和数指针到R1,加数B指针到R2

      XCH A,R1      ;

      XCH A,R2      ;

      MOV @R1,A     ;保存和数当前字节

      XCH A,R2      ;以下三条交换指令恢复加数B指针到R1,和数指针到R2

      XCH A,R1      ;

      XCH A,R2      ;

      INC R0        ;修改加数A存放地址指针指向下一位置

      INC R1        ;修改加数B存放地址指针指向下一位置

      INC R2        ;修改和数存放地址指针指向下一位置

      DJNZ R3,L0    ;循环次数减1,若不为0则继续循环

      RET           ;工作结束,程序返回

关键字:指令系统 引用地址:51指令系统(2)

上一篇:51指令系统(1)
下一篇:51单片机基础(4)

推荐阅读最新更新时间:2024-03-16 14:35

基于51单片机矩阵键盘程序
主程序1: void main() { uchar i,j,k i=0; j=0; while(1) { i=key();//键盘循环扫描,其值赋给变量数组table if(i!=0)//键盘子程序返回值非0,即有按键按下 { table =i;//将值存在变量数组中 j++; } if(j==6) { j=0; for(k=0;k 6;k++)//当数组存满6位时核对 { P3=table ;//P3接有一排指示灯 delay (1000);
[单片机]
基于C8051F040的CAN总线中继器设计与实现
   0 引言   20世纪80年代初,德国BOSCH公司提出了控制器局域网(Controller Area Network,CAN)来解决汽车内部的信号传输问题。由于CAN总线优良的稳定性和实时性能、成熟的仲裁和同步技术,加上开放式总线结构、短报文高速通讯、远程通讯能力、硬件CRC超强的纠错和扩展功能,以及控制简单、应用成本低等优点,已经被越来越多地应用到分布式远程自动控制、安全监控及电力系统等网络控制系统领域,并被公认为最有前途的现场总线技术之一。   中继器是网络物理层的一种介质连接设备,可以将同一层的两段网络进行互连,也可以实现上下层不同总线的互连,起到网桥和网关的作用。在大中型远程的CAN总线系统中经常会使用到中继器
[单片机]
51单片机学习(二)74HC595模块实现点阵屏
引言: 74HC595是一个实现串行转并行功能的芯片,这也是我们51单片机学习接触到的第一个通过控制时序线完成数据输入输出的芯片,这样的芯片在以后会遇到很多,像是完成数据存储的EEPROM需要用到的I2C协议,还有完成计时功能的时钟DS1302,他们在与主机进行交互时必然需要数据的输入和读取,所以我们在输入读取时就需要控制几根由引脚控制的总线,通过控制这些总线的电平变化,我们就可以完成数据输入和读取。这些都是我自己的理解,有错误的地方希望可以得到指正。 在此之前我先讲一下在学习这些模块中需要理解的一些知识: 总线:一般的我们会有几根时钟线,其中一根数据时钟线负责暂时存放一位数据,一根输入时钟线能将数据时钟线的数据发送到
[单片机]
<font color='red'>51</font>单片机学习(二)74HC595模块实现点阵屏
Keil C51安装
Keil uVision2是目前使用广泛的单片机开发软件,它集成了源程序编辑和程序调试于一体,支持汇编、C、PL/M语言。 这里我们仅仅介绍 Keil uVision 的简单使用,更详细的使用方法见光盘。 keil C51 v6.12 的安装: 先运行光盘中 单片机软件setupsetup.exe 安装程序,选择安装 Eval Version 版进行安装。一直点击 Yes 或 Next ,直到 Finish 完成。 之后运行同目录中的 Keil uv2 汉化安装.exe 安装汉化程序。 安装好后,在桌面上会产生快捷图标, keil C51 v6.12 的使用: 点击桌面快捷图标,可以直接进入主画面:
[单片机]
Keil C<font color='red'>51</font>安装
51 中断系统 外部中断0 外部中断1
51单片机的中断系统结构 中断允许控制 CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。 EX0(IE.0),外部中断0允许位; ET0(IE.1),定时/计数器T0中断允许位; EX1(IE.2),外部中断0允许位; ET1(IE.3),定时/计数器T1中断允许位; ES(IE.4),串行口中断允许位; EA (IE.7), CPU中断允许(总允许)位。 中断请求标志 1、TCON的中断标志 IT0(TCON.0),外部中断0触发方式控制位。 当IT0=0时,为电平触发方式。 当IT0=1时,为边沿触发方式(下降沿有效)。 I
[单片机]
<font color='red'>51</font> 中断系统 外部中断0 外部中断1
51单片机学习:动态数码管实验
实验名称:动态数码管实验 接线说明: 实验现象:下载程序后“数码管模块”显示01234567 注意事项: ***************************************************************************************/ #include reg52.h typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; #define SMG_A_DP_PORT P0 //使用宏定义数码管段码口 //定义数码管位选信号控制脚 sbit LSA=P2^2; sbit LSB=P2^3; sbit L
[单片机]
深入理解51单片机串口通信及通信实例
  串口通信的原理   串口通信(SerialCommunications)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验
[单片机]
深入理解<font color='red'>51</font>单片机串口通信及通信实例
基于C8051F060单片机和K9F2808UOC存储器实现数据采集系统的设计
从上个世纪九十年代起,电子技术在钻井井下得到应用。但井下钻具的振动会给很多传感器带来不利影响。 特别是对测量井下钻头姿态的惯性导航传感器影响巨大,在随钻振动环境中,如果对信号不作处理,根本就不能测量出正确的井斜角和方位角,也就无法实现井眼轨迹随钻控制的要求。本文介绍应用SoC芯片中的DMA技术对振动的高速采集和存储功能的实现方法,并给出了钻井环境中测试的结果。 1 方法的提出 传统的数据采集方法采用CPU直接控制的方式进行数据采集,数据传送需要经过CPU的中转才能存入存储器,传送速度慢且采集速率受到CPU的限制,极大影响了系统的采样频率,不能满足对振动信号高速采集的要求。而在DMA传送方式下,数据传送不经过CPU,由DMA
[单片机]
基于C80<font color='red'>51</font>F060单片机和K9F2808UOC存储器实现数据采集系统的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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