存储器卡读写实验讲述.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
西 安年月日 实验目的 了解串行总线的工作原理; 通过实验了解存储器卡存、取数据的过程。 实验器材 1.KEIL软件; 2.PROTEUS仿真软件。 实验内容 往24C04芯片中写入一个数据(如“129”),然后再从24C04芯片中读出刚才的数据并把它显示在数码管上。 实验步骤 硬件电路仿真 使用Proteus软件画出如图1所示的电路图,要求:使用两个按钮来分别模拟读卡和拔卡(清除数据)的过程,用一个发光二极管来模拟卡座上电的过程。(注:电路图画好后,给存储器24C04导入24C04.bin文件,给51单片机导入hex文件) 图 1 硬件电路图 2.软件编写 图2 程序流程图 程序截图: 图3 实验结果 刚开始运行时,单片机没有读取任何数据,此时数码管显示数字为0;当“读卡”按钮按下时,此时发光二极管亮,数码管显示预先存入24C04芯片的数值;当“清除”按钮按下时,此时此时发光二极管灭,数码管数值清零。 图4 图5 图 五 通过本次实验我了解了存储器卡存、取数据的过程,同时了解串行总线的工作原理。实验在程序编写过程中遇到了问题,还是参考过老师以及网上的程序得到同学的帮助,才大体上完成。每次实验都有新的收获,以后我会更加努力学习的。 六 #include reg52.h #includeintrins.h #define uint unsigned int #define uchar unsigned char #define NOP4() {_nop_();_nop_();_nop_();_nop_();} //延时4us sbit SCL = P1^0; //SCL引脚 sbit SDA = P1^1; //SDA引脚 sbit BUTTON = P1^5; //定义读卡按键 sbit LED = P1^6;//定义模拟上电卡座 sbit BUTTONQ = P1^7;//定义模拟取卡按键 uint shu; //定义写入变量 //数码管显示数组 uchar code DUAN_XUAN[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 }; //延迟函数 void Delay(uint x){ uchar i; while(x--){ for(i=0;i120;i++); } } void DelayMS(uint x){ uchar t; while(x--){ for(t=120;t0;t--); } } /*IIC启动*/ void Start(){ SDA=1;SCL=1;NOP4();SDA=0;NOP4();SCL=0; } /*IIC停止*/ void Stop(){ SDA=0;SCL=0;NOP4();SCL=1;NOP4();SDA=1; } /*读取应答*/ void RACK(){ SDA=1;NOP4();SCL=1;NOP4();SCL=0; } /*发送非应答信号*/ void NO_ACK(){ SDA=1;SCL=1;NOP4();SCL=0;SDA=0; } /*向24c04中写一字节*/ void Write_A_Byte(uchar b){ uchar i; for(i=0;i8;i++){//循环移入8位 b=1;SDA=CY;_nop_();SCL=1;NOP4();SCL=0; } RACK(); //读取应答 } /*向24c04中读一字节*/ uchar Receive_A_Byte(){ uchar i,d; for(i=0;i8;i++){ SCL=1;d=1;d|=SDA;SCL=0; } return d; } /*任意地址写数据*/ void Write_Random_Address_Byte(uchar add,uchar dat){ Start(); Write_A_Byte(0xa0); Write_A_Byte(add); Write_A_Byte(dat); Stop(); DelayMS(10); } /*当前地址读数据*/ uchar Read_Current_Address_Data(){ uchar d; Start(); Write_A_Byte(0xa1); d=Receive_A_Byte(); NO_ACK(); Stop(); return d; } /*任意地址读数据*/ uchar Random_Read(uchar addr){ Start(); Write_A_Byte(0xa0)

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档