EEPROM器件读写例程设计.docx

上传人:b****6 文档编号:5363269 上传时间:2022-12-15 格式:DOCX 页数:15 大小:1.26MB
下载 相关 举报
EEPROM器件读写例程设计.docx_第1页
第1页 / 共15页
EEPROM器件读写例程设计.docx_第2页
第2页 / 共15页
EEPROM器件读写例程设计.docx_第3页
第3页 / 共15页
EEPROM器件读写例程设计.docx_第4页
第4页 / 共15页
EEPROM器件读写例程设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

EEPROM器件读写例程设计.docx

《EEPROM器件读写例程设计.docx》由会员分享,可在线阅读,更多相关《EEPROM器件读写例程设计.docx(15页珍藏版)》请在冰豆网上搜索。

EEPROM器件读写例程设计.docx

EEPROM器件读写例程设计

学号:

0120810340631

课程设计

 

题目

EEPROM器件读写例程设计

学院

计算机科学与技术学院

专业

计算机科学与技术

班级

0806班

姓名

张军

指导教师

姚寒冰

 

2011

6

23

 

课程设计任务书

学生姓名:

张军专业班级:

计算机0806班

指导教师:

姚寒冰工作单位:

计算机科学与技术学院

题目:

EEPROM器件读写例程设计

初始条件:

1.课程设计使用ZG211硬件综合实验平台(8051单片机),使用AT24C01接口芯片和辅助芯片以及器件;

2.ZG211有程序设计集成开发环境,程序设计语言为C语言;

3.ZG211硬件综合实验平台使用说明书;

要求完成的主要任务:

(包括课程设计工作量及其技术要求,撰写说明书具体要求)

1.学习使用ZG211硬件综合实验平台,程序设计集成开发环境;

2.根据课程设计题目,进行需求分析,搞清楚课程设计需要设计需求和需要解决的设计内容。

3.查阅和学习课程设计题目需要的接口芯片资料,掌握I2C接口芯片的使用方法和编程要领。

查阅和学习课程设计题目需要的辅助芯片以及器件资料。

4.设计接口芯片和辅助芯片以及器件与8051单片机连接硬件电路原理图。

5.设计与硬件电路原理图对应的C语言程序(或8051汇编语言)。

给出程序流程图。

在集成开发环境中调试程序。

给出程序的详细注释。

能够解释使用程序模拟电路时序信号和数据。

6.撰写课程设计报告,1)详细陈述以上的设计过程;2)详细陈述电路的调试过程。

时间安排:

第17周:

1.熟悉ZG211硬件综合实验平台,KEILCUVISION2集成开发环境;查阅接口芯片资料,熟悉接口芯片和它的使用方法。

2.设计硬件电路原理图,。

第18周:

1.使用C语言或汇编语言设计和调试接口程序。

2.撰写计算机硬件综合设计报告。

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

EEPROM器件读写例程设计

1.实验目的

掌握IO口操作;

掌握显示及键盘芯片的运用;

掌握I2C总线操作

2.实验设备

PC机一台,ZG-211单片机系统实验板一块,实验连接线若干,芯片:

CH451,89S52,CD4052并口编程线一根,串口通讯线1根,配套电源1个

ZG-211图片:

 

3.实验要求

1.学习使用ZG211硬件综合实验平台,程序设计集成开发环境;

2.根据课程设计题目,进行需求分析,搞清楚课程设计需要设计需求和需要解决的设计内容。

3.查阅和学习课程设计题目需要的接口芯片资料,掌握接口芯片的使用方法和编程要领。

查阅和学习课程设计题目需要的辅助芯片以及器件资料。

4.设计接口芯片和辅助芯片以及器件与8051单片机连接硬件电路原理图。

5.设计与硬件电路原理图对应的C语言程序(或8051汇编语言)。

给出程序流程图。

在集成开发环境中调试程序。

给出程序的详细注释。

能够解释使用程序模拟电路时序信号和数据。

6.能正常操作LED数码显示;能通过中断方式接收按键信息;能正确读写EEPROM芯片

4.实验原理

单片机系统常用EEPROM芯片在掉电情况下保存一些重要数据。

本实验板采用的芯片是AT24C02,可存储256个字节,重复擦写1,000,000次,数据保存100年以上。

该芯片通过I2C总线接口进行操作,I2C协议原理请看2.3.5节。

其原理图如下:

5.实验步骤

5.1硬件连接

将并口线插在实验板与PC机的并口插座上;

CH451与CPU连接实验线路见图2-2;按图2-28连接实验线路

仔细检查无误后,接通电源。

(图中箭头表示需要接线的地方)

5.2软件设计

进入KEILC开发环境。

首先根据2.3.4I2C协议内容,编写I2C函数,由于AT24C02

的I2C接口᳔大频率是400KHZ,所以在程序中对一个IO口操作完后,请延时2.5us(实验板上CPU晶振为11.0592MHZ,一个指令周期为1.08us)。

写好I2C读写函数后,可以对AT24C02进行操作。

AT24C02的写从地址为0XA0,写时WP要置0(打开写保护),写完后置为1;读从地址为0XA1。

先将CD4052的通道选为2,连接CPU与AT24C02。

向AT24C02中地址为0X00到0X07的单元,写入数据0X01,0X02,0X03,0X04,0X05,0X06,0X07后,再从AT24C02中读出,进行比较。

如果一致则显示1,错误则显示0。

5.3编译下载

程序编译成功后,打开联机下载软件,将HEX文件下载到89S52中,观看程序运行结果。

如有问题则修改程序,再次下载。

(请注意:

AT24C02的擦写次数有限,频繁擦写会影响其使用寿命。

调试成功后,请将I2C读写程序、AT24C02读写程序,写成函数,以供其他模块调用。

6.实验成功标志

按下1号按键,显示“001”,同时向AT24C02中指定位置写入数据;

按下2号按键,从AT24C02中指定位置读出数据并显示,应与写入数据一致;

7.简要调试过程

1.利用在线编程这个软件读入程序ExpBoard.hex

2.操作ZG-211单片机电路板上面的按钮,观察实验现象是否符合说明书

3.如果不符合,进入程序文件夹进行修改程序,直至得到理想的显示结果

8.程序代码

主函数

#include

#include"reg52.h"

#include"def.h"

#include"sub.h"

#include"beep.h"

#include"func.h"

#include"display.h"

#include"eeprom.h"

unsignedcharkey_data=0;

main()

{

unsignedchareep_temp[2];

unsignedchartemp=0;

//MCU初始化

InitMCU();

set_8255();

//开关蜂鸣器,表示开始工作

speak_on();

delay_1ms(50);

speak_off();

Display_TEST();

eep_temp[0]=0x55;//测试值

while

(1)

{

if(key_data!

=0)//若有键按下

{

temp=key_data;

key_data=0;

switch(temp)

{

case0x40:

//1

//将测试值写入EEPROM

AT24C02Write(eep_temp,0,1);

display_int((int)(eep_temp[0]));

break;

case0x49:

//2

AT24C02Read(eep_temp,0,1);

display_int((int)(eep_temp[0]));

break;

default:

break;

}

}

}

}

具体函数

#include"reg52.h"

#include"def.h"

#include"display.h"

#include"sub.h"

#include"func.h"

externunsignedcharkey_print;

externunsignedcharkey_data;

/*******************************************************\

|函数名send_disp_data|

|函数功能向CH451芯片发送命令|

|参数comm:

命令体|

|_data:

命令参数|

|返回值无|

\*******************************************************/

voidsend_disp_data(unsignedcharcomm,unsignedchar_data)

{

unsignedchari;

//送8BIT数据

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

{

DIN=(_data>>i)&0x01;

DCLK=1;

DCLK=0;

DCLK=1;

}

//送4BIT命令

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

{

DIN=(comm>>i)&0x01;

DCLK=1;

DCLK=0;

DCLK=1;

}

LOAD=1;

LOAD=0;

LOAD=1;

}

/*******************************************************\

|函数名send_comm|

|函数功能向CH451芯片发送命令|

|参数comm:

命令体|

|返回值无|

\*******************************************************/

voidsend_comm(unsignedcharcomm)

{

unsignedchari;

//送4BIT命令

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

{

DIN=(comm>>i)&0x01;

DCLK=1;

DCLK=0;

DCLK=1;

}

LOAD=1;

LOAD=0;

LOAD=1;

}

/*******************************************************\

|函数名disp_initialize|

|函数功能向CH451芯片发送初始化命令|

|参数无|

|返回值无|

\*******************************************************/

voiddisp_initialize()

{

chang_4052

(1);

DIN=0;

DIN=1;

DCLK=1;

LOAD=1;

DOUT=1;

send_disp_data(CH451_SETSYS,0x03);//设定系统参数

send_disp_data(CH451_SETDIS,0x80);//设定显示参数

}

/*******************************************************\

|函数名key|

|函数功能中断函数,获取当前按键状态|

|参数无|

|返回值无|

\*******************************************************/

voidkey()interrupt0

{

unsignedchari,temp;

EX0=0;//关中断

key_data=0;

temp=0;

send_comm(CH451_KEY);

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

{

temp=DOUT;

key_data=key_data|(temp<<(6-i));

DCLK=1;

DCLK=0;

DCLK=1;

}

/*key_print=key_data;

send_disp_data(CH451_LOAD0,0x10);

send_disp_data(CH451_LOAD1,0x10);

send_disp_data(CH451_LOAD2,key_data/10);

send_disp_data(CH451_LOAD3,key_data%10);

*/

EX0=1;//中断

}

/*******************************************************\

|函数名Display_TEST|

|函数功能测试显示LED数码管|

|参数无|

|返回值无|

\*******************************************************/

voidDisplay_TEST()

{

//初始化显示芯片

disp_initialize();

//延时

delay_1ms(100);

//送显“12345678”

send_disp_data(CH451_LOAD0,0x01);

send_disp_data(CH451_LOAD1,0x02);

send_disp_data(CH451_LOAD2,0x03);

send_disp_data(CH451_LOAD3,0x04);

send_disp_data(CH451_LOAD4,0x05);

send_disp_data(CH451_LOAD5,0x06);

send_disp_data(CH451_LOAD6,0x07);

send_disp_data(CH451_LOAD7,0x08);

delay_1ms(200);

//display_int(555);

//延时

delay_1ms(200);

//开中断,接受按键信息

EX0=1;

//"--------"

send_disp_data(CH451_LOAD0,0x12);

send_disp_data(CH451_LOAD1,0x12);

send_disp_data(CH451_LOAD2,0x12);

send_disp_data(CH451_LOAD3,0x12);

send_disp_data(CH451_LOAD4,0x12);

send_disp_data(CH451_LOAD5,0x12);

send_disp_data(CH451_LOAD6,0x12);

send_disp_data(CH451_LOAD7,0x12);

/*send_disp_data(CH451_LOAD0,0x08);

send_disp_data(CH451_LOAD1,0x08);

send_disp_data(CH451_LOAD2,0x08);

send_disp_data(CH451_LOAD3,0x08);

send_disp_data(CH451_LOAD4,0x08);

send_disp_data(CH451_LOAD5,0x08);

send_disp_data(CH451_LOAD6,0x08);

send_disp_data(CH451_LOAD7,0x08);

*/

}

/*******************************************************\

|函数名display_int|

|函数功能显示一个整数|

|参数无|

|返回值无|

\*******************************************************/

voiddisplay_int(unsignedintm)

{

send_disp_data(CH451_LOAD0,0x10);

send_disp_data(CH451_LOAD1,0x10);

send_disp_data(CH451_LOAD2,0x10);

if(m/10000)

{

send_disp_data(CH451_LOAD3,m/10000);

}

else

{

send_disp_data(CH451_LOAD3,0x10);

}

if((!

(m/1000)%10)&&(!

(m/10000)))

{

send_disp_data(CH451_LOAD4,0x10);

}

else

{

send_disp_data(CH451_LOAD4,(m/1000)%10);

}

send_disp_data(CH451_LOAD5,(m/100)%10);

send_disp_data(CH451_LOAD6,(m/10)%10);

send_disp_data(CH451_LOAD7,m%10);

}

 

9.心得体会

通过以前所学的计算机组成原理、微机原理与接口技术,以及单片机的知识,并在老师的指导和同学的合作下,终于顺利地完成了本次课程设计。

我觉得本次试验重点在于动手操作,经过几次上机调试,终于得到理想的显示结果,同时也对ZG211硬件综合实验平台有了更深的了解。

设计初期,由于自己的专业知识不够全面,虽然有不少硬件方面的课程,但总的来说,自己懂的还是很少,对于单片机,芯片,还只是停留的肤浅的认知上面,通过查阅一些资料以及与同学的交流,最终弄懂了其原理,实验圆满成功。

通过这次课程设计,也更让我感觉到c语言的重要性,作为一个可以操作底层硬件的语言,自己掌握的还是很少,这不像java语言那种平台无关性,这既是它的优点也是它的缺点,只注重表面的东西,在今后的一段时间,我会更加注意自己的c语言的学习,争取在毕业前有更大的提高。

最后我想说,此次课程设计,让我收获了许多,例如ZG211方面知识,同时它也让我认识到了自己的不足,例如对所学的知识不能灵活的运用到实验中,对单片机的知识不够了解,以后还有待加强。

这些获益和认识到的不足对我以后的学习很有帮助。

虽然本次硬件综合设计已经结束,但仍觉得有很多东西要学,我会在以后的学习生活中不断努力,争取更大的进步

 

本科生课程设计成绩评定表

班级:

计科0806 姓名:

 张军    学号:

0120810340631

序号

评分项目

满分

实得分

1

学习态度认真、遵守纪律

10

2

设计分析合理性

10

3

设计方案正确性、可行性、创造性

20

4

设计结果正确性

40

5

设计报告的规范性

10

6

设计验收

10

总得分/等级

评语:

注:

最终成绩以五级分制记。

优(90-100分)、良(80-89分)、中(70-79分)、

及格(60-69分)、60分以下为不及格

 

                     指导教师签名:

                  2011年 月 日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1