找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 28|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机RAM读写实验程序Proteus仿真

[复制链接]
跳转到指定楼层
楼主
一、实验目的
1、 掌握RAM的读写方法;
2、 理解RAM和ROM的作用;
3、 熟练Proteus仿真软件的使用;
4、 熟练单片机实验箱的实验操作。

二、实验预习要求
1、主要知识点概述:掌握单片机RAM的结构;学会RAM的读写。
2、实验效果说明:将存入的RAM的数值读出用数码管显示出来。

三、实验设备和器件
一台PC 机  
一套 PROTEUS 仿真软件
一台实验箱  
一台ISP 下载器
一台51单片机仿真器 (可选)

四、实验要求
  1、在 DATA区定义一个字符变量并写入数据,把写入RAM中的数据读出来并用数码管显示出来。

五、实验原理
      数据存储器用于存放中间运算结果、数据暂存和缓冲、标识位等。80C51系列单片机的片内数据存储器除RAM块外。还有特殊功能寄存器(SFR)块。 通过查询AT89C52的数据手册可以知道:
      AT89C52 有 256 个字节的内部RAM,80H-FFH 高128 个字节与特殊功能寄存器(SFR)地址是重叠的,也就是高128字节的RAM 和特殊功能寄存器的地址是相同的,但物理上它们是分开的。
      当一条指令访问7FH以上的内部地址单元时,指令中使用的寻址方式是不同的,也即寻址方式决定是访问高128字节RAM 还是访问特殊功能寄存器。如果指令是直接寻址方式则为访问特殊功能寄存器。

六、原理图设计
总原理图:

1.在Proteus 中绘制单片机最小系统,包括主控芯片、晶振电路和复位电路。
2. 添加4位共阳数码管,段选A-DP利连接到P0口,P0口需要用排阻上拉,位选C0-C1利用标号连接到P2.0-P2.1口。

七、参考程序(含扩展实验,见附件)
八、实验思考题
1、将存储单元扩大到50,然后向RAM中连续写入数据,计算出这些数的累加和后显示在数码管上。

  1. #include <reg52.h>
  2. #include <intrins.h>

  3. #define uint unsigned int
  4. #define uchar unsigned char

  5. sbit C0 = P2^0;
  6. sbit C1 = P2^1;

  7. code uchar discode[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

  8. uchar idata ram_value = 68;

  9. void delay_ms(uint ms)
  10. {
  11.    uint i, j;
  12.    for(i = 0; i < ms; i++)
  13.    for(j = 0; j < 120; j++);
  14. }

  15. void main()
  16. {
  17.     uchar ten, one;
  18.    
  19.     ten = ram_value / 10;
  20.     one = ram_value % 10;

  21.     C0 = 0;
  22.     C1 = 0;
  23.     P0 = 0xFF;

  24.     while(1)
  25.                 {
  26.                         P0 = 0xFF;
  27.                         C0 = 1;
  28.                         C1 = 0;
  29.                         P0 = discode[ten];
  30.                         delay_ms(2);

  31.                         P0 = 0xFF;
  32.                         C0 = 0;
  33.                         C1 = 1;
  34.                         P0 = discode[one];
  35.                         delay_ms(2);
  36.     }
  37. }
复制代码
  1. #include <reg52.h>

  2. #define uchar unsigned char
  3. #define uint unsigned int
  4.        
  5. uchar code seg[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};

  6. void delay(uint t)
  7. {
  8.         while(t--);
  9. }

  10. void main()
  11. {
  12.         uchar idata buffer[50]; //RAM expand to 50
  13.         uint sum = 0;
  14.         uchar i, digits[4];


  15.         for(i = 0; i <=50; i++)
  16.         {
  17.                 buffer[i] = i;
  18.         }

  19.         for(i = 0; i <=50; i++)
  20.         {
  21.                 sum += buffer[i];
  22.         }

  23.         digits[0] = sum / 1000;
  24.         digits[1] = (sum / 100) % 10;
  25.         digits[2] = (sum / 10) % 10;
  26.         digits[3] = sum % 10;
  27.        
  28.         P2=0xaa;
  29.        
  30.         while(1)
  31.         {
  32.                
  33.                 P0=seg[digits[0]];
  34.                 P2=0x01;
  35.                 delay(5);
  36.                 P2=0x0;
  37.                 P0=0xff;
  38.                
  39.                 P0=seg[digits[1]];
  40.                 P2=0x02;
  41.                 delay(5);
  42.                 P2=0x0;
  43.                 P0=0xff;
  44.                
  45.                 P0=seg[digits[2]];
  46.                 P2=0x04;
  47.                 delay(5);
  48.                 P2=0x0;
  49.                 P0=0xff;
  50.                
  51.                 P0=seg[digits[3]];
  52.                 P2=0x08;
  53.                 delay(5);
  54.                 P2=0x0;
  55.                 P0=0xff;

  56.         }
  57. }
复制代码




以上2个文件程序下载:
Proteus仿真:无

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表