单片机实验报告-片内外RAM的数据转移

一、实验目的:

1.掌握C51编程基础,C51程序结构。

2.掌握C51数据类型、函数设计。

3.掌握C51程序的编辑、编译、调试和运行

 

二、编程提示 

  1. 编程将片外8000H单元开始的10字节的内容移至8100H开始的各单元中。8000H单元开始的10字节内容用编程方式赋值。
  2. 编程将片内50H单元开始10字节的内容初始化为0~9,然后移至55H开始的各单元中。
  3. 在片外RAM的2000~200FH中查找零,把零的个数放在2010H中。
  4. Number单元是字数据单元,将其拆分成十进制数, 存入 Result 数组。Number单元地址为片内0x30。三、流程图

               

实验内容1程序流程                                     实验内容3程序流程

    

 

      四、每小题代码及流程图

  1. 编程将片外8000H单元开始的10字节的内容移至8100H开始的各单元中。8000H单元开始的10字节内容用编程方式赋值

代码:

#include<absacc.h>

#include<reg51.h>

#define uchar unsigned char

void main(void)

{

 uchar xdata *xdp1;

 uchar xdata *xdp2;

 uchar data i;

 xdp1=0x8000;

 xdp2=0x8100;

 for(i=0;i<=9;i++)

 {

   *(xdp1+i)=10+i;

 }

 for(i=0;i<=9;i++)

 {

   *(xdp2+i)=*(xdp1+i);

 }

}

#include<reg51.h>

#define uchar unsigned char

xdata uchar rom8000[10] _at_ 0x8000;

xdata uchar rom8100[10] _at_ 0x8100;

void main(void)

{

 uchar data i;

 for(i=0;i<=9;i++)

 {

   rom8000[i]=i;

 }

 for(i=0;i<=9;i++)

 {rom8100[i]=rom8000[i]; }}

结果:

分析:

1.用for循环给片外8000H赋值,值从0A开始,

2.再把8000H的值传给8100H

 

2、编程将片内50H单元开始10字节的内容初始化为0~9,然后移至55H开始的各单元中。

代码:

#include<absacc.h>

#include<reg51.h>

#define uchar unsigned char

void main(void)

{

 uchar data *dp1;

 uchar data *dp2;

 uchar data i;

 dp1=0x50;

 dp2=0x5e;

 for(i=0;i<=9;i++)

 {

   *(dp1+i)=i;

 }

 for(i=0;i<10;i++)

 {

   *(dp2-i)=*(dp1-i+9);

 }

}

结果:

 

分析:

1.用for循环给片内50H开始赋值,值开始为0,赋值10个数一直到59H单元

2.用59H开始将其单元的内容值赋给5e结束的单元,最后变为55-5E单元的内容分别为50-59H单元的内容

 

3、在片外RAM的2000~200FH中查找零,把零的个数放在2010H中

代码:

#include<absacc.h>

#include<reg51.h>

#define uchar unsigned char

void main(void)

{

 uchar xdata *xdp1;

 uchar xdata *xdp2;

 uchar data i;

 xdp1=0x2000;

 xdp2=0x2010;

 *xdp2=0x00;

 for(i=0;i<16;i++)

 {

   if(i%2==0)

   *(xdp1+i)=0;

   else  

   *(xdp1+i)=i;

 }

  for(i=0;i<16;i++)

  {

     if(*(xdp1+i)==0)  

 *xdp2=*xdp2+1;

  }

}

#include<reg51.h>

#define uchar unsigned char

xdata uchar rom2000[16] _at_ 0x2000;

xdata uchar rom2010 _at_ 0x2010;

void main(void)

{

 uchar data i;

rom2010=0;

 for(i=0;i<16;i++)

 {

   if(i%2==0)

   rom2000[i]=0;

   else  

   rom2000[i]=i;

 }

  for(i=0;i<16;i++)

  {

     if(rom2000[i]==0)  

 rom2010=rom2010+1;  }}

结果:

 

分析:

  1. 用i是否整除2判断存到片外2000H-200F内存单元,能整出为0,不能整除为i
  2. 最后统计为8个0

4、Number单元是字数据单元,将其拆分成十进制数, 存入 Result 数组。Number单元地址为片内0x30

代码:

#include<absacc.h>

#include<reg51.h>

#define uint unsigned int

#define uchar unsigned char

void main(void)

{uint data  *Number;

 uchar data   Result[2],c[5];

 uchar data i,j;

 Number=0x30;

 *Number=23456;

 c[0]=*Number/100000;

 c[1]=*Number%100000/10000;

 c[2]=*Number%10000/1000;

 c[3]=*Number%1000/100;

 c[4]=*Number%100/10;

 c[5]=*Number%10;

 for(i=0,j=0;i<5,j<3;i=i+2,j++)

 {Result[j]=c[i]*(0x10)+c[i+1];}}

#include<absacc.h>

#include<reg51.h>

#define uint unsigned int

#define uchar unsigned char

data uint number _at_ 0x30;

data uchar result[2] _at_ 0x40;

void main(void)

{

 uchar data  c[5];

 uchar data i,j;

 number=23456;

 c[0]=number/100000;

 c[1]=number%100000/10000;

 c[2]=number%10000/1000;

 c[3]=number%1000/100;

 c[4]=number%100/10;

 c[5]=number%10;

 for(i=0,j=0;i<5,j<3;i=i+2,j++)

 {

  result[j]=c[i]*(0x10)+c[i+1];

 }

}

结果:

 

分析:

  1. 在Number单元是字数据单元存的内容为23456,十六制为5BA0H
  2. 变化之后为00,02,03,04,05,06
  3. 两个数存到Result 数组的一个内存单元,最后值为02,34,56
  4. 存储类型默认为AUTO,存储模式为small模式,存储器类型为data,则Number单元、Result 单元分配之后,会出现覆盖情况

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机实验-定时中断

一.实验目的 1.掌握51单片机定时器工作原理。 2.掌握51单片机中断系统工作原理。 3.掌握定时器初始化编程。 4.掌握中断程序的编写和调试。 二.实验设备和器件 1.KEIL软件 2.PROTEUS仿真软件 3.伟福实验箱 三&#xff0e;实验内容 &#xff08;1&#xff09;编程实…

2018全球最值得关注的60家半导体公司,7家中国公司新上榜 | 年度榜单

编译 | 张玺 四月来源&#xff1a;机器之能由《EE Times》每年评选全球值得关注的 60 家新创半导体公司排行榜——『Silicon 60』&#xff0c;今年已经迈向第 19 届&#xff0c;今年的关键词仍然是「机器学习」(machine learning)&#xff0c;它正以硬件支持的运算形式强势崛起…

单片机实验报告-串口实验

一.实验目的 1. 掌握 51 单片机串口工作原理。 2. 掌握 51 单片机串口初始化编程。 3. 掌握 51 单片机串口的软硬件编程。 二.实验设备和器件 1.KEIL软件 2.PROTEUS仿真软件 3.伟福实验箱 三&#xff0e;实验内容 &#xff08;1&#xff09;编程实现&#xff1a…

学习率周期性变化

学习率周期性变化&#xff0c;能后解决陷入鞍点的问题&#xff0c;更多的方式请参考https://github.com/bckenstler/CLR base_lr:最低的学习率 max_lr:最高的学习率 step_size&#xff1a;&#xff08;2-8&#xff09;倍的每个epoch的训练次数。 scale_fn(x)&#xff1a;自…

清华发布《人工智能AI芯片研究报告》,一文读懂人才技术趋势

来源&#xff1a;Future智能摘要&#xff1a;大数据产业的爆炸性增长下&#xff0c;AI 芯片作为人工智能时代的技术核心之一&#xff0c;决定了平台的基础架构和发展生态。 近日&#xff0c;清华大学推出了《 人工智能芯片研究报告 》&#xff0c;全面讲解人工智能芯片&#xf…

开发者账号申请 真机调试 应用发布

技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong 开发者账号申请 真机调试 应用发布 技术博客http://www.cnblogs.com/ChenYilong/新浪微博http://weibo.com/luohanchenyilong 要解决的问题 • 开发者账号申请 • 真机调试 • 真机调…

单片机实验-DA实验

一、实验目的 1、了解 D/A 转换的基本原理。 2、了解 D/A 转换芯片 0832 的性能及编程方法。 3、了解单片机系统中扩展 D/A 转换的基本方法。 二.实验设备和器件 1.KEIL软件 2.实验箱 三&#xff0e;实验内容 利用 DAC0832&#xff0c;编制程序产生锯齿波、三角波、正弦…

进化三部曲,从互联网大脑发育看产业互联网的未来

摘要&#xff1a;从互联网的左右大脑发育看&#xff0c;产业互联网可以看做互联网的下半场&#xff0c;但从互联网大脑的长远发育看&#xff0c;互联网依然处于大脑尚未发育成熟的婴儿时期&#xff0c;未来还需要漫长的时间发育。参考互联网右大脑的发育历程&#xff0c;我们判…

pycharm远程连接服务器(docker)调试+ssh连接多次报错

一&#xff0c;登入服务器建docker nvidia-docker run -it -v ~/workspace/:/workspace -w /workspace/ --namefzh_tf --shm-size 8G -p 1111:22 -p 1112:6006 -p 1113:8888 tensorflow/tensorflow:1.4.0-devel-gpu bash 二&#xff0c;开ssh服务 apt-get update apt-get i…

Verilog HDL语言设计4个独立的非门

代码&#xff1a; module yanxu11(in,out); input wire[3:0] in; output reg[3:0] out; always (in) begin out[0]~in[0]; out[1]~in[1]; out[2]~in[2]; out[3]~in[3]; end endmodule timescale 1ns/1ns module test(); reg[3:0] in; wire[3:0] out; yanxu11 U(…

深度长文:表面繁荣之下,人工智能的发展已陷入困境

来源&#xff1a;36氪编辑&#xff1a;郝鹏程摘要&#xff1a;《连线》杂志在其最近发布的12月刊上&#xff0c;以封面故事的形式报道了人工智能的发展状况。现在&#xff0c;深度学习面临着无法进行推理的困境&#xff0c;这也就意味着&#xff0c;它无法让机器具备像人一样的…

Verilog HDL语言设计一个比较电路

设计一个比较电路&#xff0c;当输入的一位8421BCD码大于4时&#xff0c;输出为1&#xff0c;否则为0&#xff0c;进行功能仿真&#xff0c;查看仿真结果&#xff0c;将Verilog代码和仿真波形图整理入实验报告。 代码&#xff1a; module yanxu12(in,out); input wire[3:0] i…

交叉熵

1.公式 用sigmoid推导 上式做一下转换&#xff1a; y 视为类后验概率 p(y 1 | x)&#xff0c;则上式可以写为&#xff1a; 则有&#xff1a; 将上式进行简单综合&#xff0c;可写成如下形式&#xff1a; 写成对数形式就是我们熟知的交叉熵损失函数了&#xff0c;这也是交叉熵…

第5章 散列

我们在第4章讨论了查找树ADT&#xff0c;它允许对一组元素进行各种操作。本章讨论散列表(hash table)ADT&#xff0c;不过它只支持二叉查找树所允许的一部分操作。 散列表的实现常常叫作散列(hashing)。散列是一种以常数平均时间执行插入、删除和查找的技术。但是&#xff0c;那…

谷歌自动驾驶是个大坑,还好中国在构建自己的智能驾驶大系统

来源&#xff1a;张国斌中国有堪称全球最复杂的路况&#xff0c;例如上图是去年投入使用的重庆黄桷湾立交桥上下共5层&#xff0c;共20条匝道&#xff0c;堪称中国最复杂立交桥之最&#xff0c;据称走错一个路口要在这里一日游&#xff0c;这样的立交桥如果让谷歌无人驾驶车上去…

Verilog HDL语言设计计数器+加法器

完成课本例题4.12&#xff0c;进行综合和仿真&#xff08;包括功能仿真和时序仿真&#xff09;&#xff0c;查看仿真结果&#xff0c;将Verilog代码和仿真波形图整理入实验报告。 功能文件&#xff1a; module shiyan1(out,reset,clk); input reset,clk; output reg[3:0] ou…

自动驾驶寒冬与否,关键看“芯”

来源&#xff1a;智车科技摘要&#xff1a;2018年&#xff0c;全世界瞩目的半导体行业大事件无疑是高通收购恩智浦了。虽然&#xff0c;最终这笔收购案以失败结尾&#xff0c;但高通的收购恩智浦的意图就是出自于拓展汽车芯片市场。智能汽车芯片的重要性也得以突显。前不久&…

如何知道自己的CPU支持SLAT

因为WP8 SDK发布&#xff0c;很多WP8的开发者们也开始陆续安装WP8的SDK的&#xff0c;然而安装WP8的SDK有很多软件和硬件的要求&#xff0c;其中有一个就是——要求CPU支持二级地址转换&#xff08;SLAT&#xff09;&#xff0c;如果CPU不支持二级地址转换的话&#xff0c;在电…

opencv基础知识及其一些例子

opencv官网 一.插值法 1.最近邻插值 上图可看出f(p)f(Q11),缺点可能出现明显的块状。 2.线性插值 3.双线性插值 通过线性插值确定R1和R2,最终在确定P 二.cv2.putText 图片添加文字 import cv2 img cv2.imread(caijian.jpg) font cv2.FONT_HERSHEY_SIMPLEXimgzi cv2.putT…

Verilog HDL语言设计实现过程赋值+译码器

完成课本例题6.11、6.12&#xff0c;进行综合和仿真&#xff08;功能仿真&#xff09;&#xff0c;查看综合和仿真结果&#xff0c;整理入实验报告。 6.11 module shiyan21(in,clk,out1,out2); input clk,in; output out1,out2; reg out1,out2; always (posedge clk) beg…