EEPROM器件读写例程设计.docx
《EEPROM器件读写例程设计.docx》由会员分享,可在线阅读,更多相关《EEPROM器件读写例程设计.docx(25页珍藏版)》请在冰点文库上搜索。
EEPROM器件读写例程设计
学号:
课程设计
题目
EEPROM器件读写例程设计
学院
计算机科学与技术
专业
计算机科学与技术
班级
姓名
指导教师
2012
年
6
月
日
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
题目:
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.撰写计算机硬件综合设计报告。
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
目录
1实验目的…………………………………………………………….3
2实验设备…………………………………………………………….3
3实验要求…………………………………………………………….3
4实验原理…………………………………………………………….3
5实验步骤…………………………………………………………….7
5.1硬件连接…………………………………………………………..7
5.2软件设计…………………………………………………………..8
5.3编译下载…………………………………………………………..9
6实验成功标志……………………………………………………….10
7源程序……………………………………………………………….10
8调试过程…………………………………………………………….15
8.1准备工作…………………………………………………………..15
8.2程序调试…………………………………………………………..16
8.3在线编程…………………………………………………………..16
8.4运行………………………………………………………………..18
9心得体会…………………………………………………………….18
10参考文献…………………………………………………………...19
EEPROM器件读写例程设计
1.实验目的
(1)掌握IO口操作
(2)掌握显示及键盘芯片的运用
(3)掌握I2C总线操作
2.实验设备
(1)PC机一台;ZG-211单片机系统实验板一块
(2)实验连接线若干
(3)并口编程线一根
(4)串口通讯线一根
(5)配套电源1个
(6)芯片:
CH451,89S52,CD4052
3.实验要求
1.学习使用ZG211硬件综合实验平台,程序设计集成开发环境;
2.根据课程设计题目,进行需求分析,搞清楚课程设计需要设计需求和需要解决的设计内容。
3.查阅和学习课程设计题目需要的接口芯片资料,掌握接口芯片的使用方法和编程要领。
查阅和学习课程设计题目需要的辅助芯片以及器件资料。
4.设计接口芯片和辅助芯片以及器件与8051单片机连接硬件电路原理图。
5.设计与硬件电路原理图对应的C语言程序(或8051汇编语言)。
给出程序流程图。
在集成开发环境中调试程序。
给出程序的详细注释。
能够解释使用程序模拟电路时序信号和数据。
6.能正常操作LED数码显示;能通过中断方式接收按键信息;能正确读写EEPROM芯片
4.实验原理
单片机系统常用EEPROM芯片在掉电情况下保存一些重要数据。
本实验板采用的芯片是AT24C02,可存储256个字节,重复擦写1,000,000次,数据保存100年以上。
该芯片通过I2C总线接口进行操作。
管脚名称
功能
A0,A1,A2
器件地址选择
SDA
串行数据/地址
SCL
串行时钟
WP
写保护
VCC
+1.8V~6.0V工作电压
VSS
地
I2C总线用两条线(SDA和SCL)在芯片和模块间传递信息。
SDA为串行数据线,SCL为串行时钟线。
1.只有在总线空闲时才允许启动数据传送。
2.在数据传送过程中,当时钟线为高电平时,数据线必须保持稳定状态不允许。
有跳变时钟线为高电平时,数据线的任何电平变化将被看作总线的起始或停止信号。
图4-1:
总线时序
图4-2:
写周期时序
图4-3:
起始/停止时序
(1)器件寻址:
主器件通过发送一个起始信号启动发送过程,然后发送它所要寻址的从器件的地址。
8位从器件地址的高4位固定为1010。
接下来的3位A2A1A0为器件的地址位,用来定义哪个器件以及器件的哪个部分被主器件访问。
从器件8位地址的最低位,作为读写控制位。
“1”表示对从器件进行读操作,“0”表示对从器件进行写操作。
在主器件发送起始信号和从器件地址字节后,PCF8563监视总线并当其地址与发送的从地址相符时响应一个应答信号(通过SDA线)。
PCF8563再根据读写控制位(R/W)的状态进行读或写操作。
(2)应答信号
I2C总线数据传送时每成功地传送一个字节数据后,接收器都必须产生一个应答信号,应答的器件在第9个时钟周期时将SDA线拉低,表示其已收到一个8位数据。
PCF8563在接收到起始信号和从器件地址之后响应一个应答信号,如果器件已选择了写操作,则在每接收一个8位字节之后响应一个应答信号。
当PCF8563工作于读模式时,在发送一个8位数据后释放SDA线并监视一个应答信号,一旦接收到应答信号,PCF8563继续发送数据,如主器件没有发送应答信号,器件停止传送数据并,等待一个停止信号主器件。
(3)写操作
在字节写模式下,主器件发送起始命令和从器件地址信息(R/W位置零)给从器件,在从器件产生应答信号后,主器件发送PCF8563的字节地址,主器件在收到从器件的另一个应答信号后,再发送数据到被寻址的存储单元。
PCF8563再次应答,并在主器件产生停止信号后开始内部数据的擦写,在内部擦写过程中PCF8563不再应答主器件的任何请求。
(4)应答查询
可以利用内部写周期时禁止数据输入这一特性,一旦主器件发送停止位指示主器件操作
结束时,PCF8563启动内部写周期,应答查询立即启动,包括发送一个起始信号和进行写操作的从器件地址。
如果PCF8563正在进行内部写操作,不会发送应答信号。
如果PCF8563
已经完成了内部自写周期,将发送一个应答信号,主器件可以继续进行下一次读写操作。
(5)写保护
写保护操作特性可使用户避免由于不当操作而造成对存储区域内部数据的改写,当WP管脚接高时整个寄存器区全部被保护起来而变为只可读取。
(6)读操作
PCF8563读操作的初始化方式和写操作时一样,仅把(R/W)位置为1,有三种不同的读操作方式:
立即地址读、选择读和连续读。
5.实验步骤
5.1硬件连接
1、将并口线插在实验板与PC机的并口插座上;
2、按图5-1连接实验线路
3、CH451与CPU连接实验线路见图5-2
4、仔细检查无误后,接通电源。
图5-1连接实验线路
图5-2CH451与CPU连接实验线路
图5-3实际接线图
5.2软件设计
安装KEILC开发环境,然后进入KEILC开发环境。
首先根据I2C协议内容,编写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的单元,写入数据0X00,0X01,0X02,0X03,0X04,0X05,0X06,0X07后,再从AT24C02中读出,进行比较。
如果一致则显示1,错误则显示0。
5.3编译下载
程序编译成功后,打开联机下载软件,将HEX文件下载到89S52中,观看程序运行结果。
如有问题则修改程序,再次下载。
在线编译软件的运行界面如下图:
调试成功后,将I2C读写程序、AT24C02读写程序,写成函数,以供其他模块调用。
6实验成功标志
(1)按下1号按键,显示“001”,同时向AT24C02中指定位置写入数据。
(2)按下2号按键,从AT24C02中指定位置读出数据并显示,应与写入数据一致。
7源程序
(1)
【Main.c】函数:
#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;
InitMCU();//MCU初始化
set_8255();
speak_on();//开蜂鸣器,表示开始工作
delay_1ms(50);
speak_off();
Display_TEST();
eep_temp[0]=0x01;//测试值这是自己可以输入的测试数值
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;
}
}
}
}
(2)
【Display.c】//显示函数
#include"reg52.h"
#include"def.h"
#include"display.h"
#include"sub.h"
#include"func.h"
externunsignedcharkey_print;
externunsignedcharkey_data;
//函数功能向CH451芯片发送命令
voidsend_disp_data(unsignedcharcomm,unsignedchar_data)
{
unsignedchari;
for(i=0;i<8;i++)//送BIT数据
{
DIN=(_data>>i)&0x01;
DCLK=1;
DCLK=0;
DCLK=1;
}
for(i=0;i<4;i++)//送BIT命令
{
DIN=(comm>>i)&0x01;
DCLK=1;
DCLK=0;
DCLK=1;
}
LOAD=1;
LOAD=0;
LOAD=1;
}
|//函数功能向CH451芯片发送命令
voidsend_comm(unsignedcharcomm)
{
unsignedchari;
for(i=0;i<4;i++)//送BIT命令
{
DIN=(comm>>i)&0x01;
DCLK=1;
DCLK=0;
DCLK=1;
}
LOAD=1;
LOAD=0;
LOAD=1;
}
//函数功能向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);//设定显示参数
}
//函数功能中断函数,获取当前按键状态
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;//中断
}
//函数功能测试显示LED数码管
voidDisplay_TEST()
{
disp_initialize();//初始化显示芯片
delay_1ms(100);//延时
//送显“”
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);
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);
}
//函数功能显示一个整数
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);
}
(3)
【EEPROM.C】
#include
#include"reg52.h"
#include"def.h"
//MCU初始化
voidInitMCU()
{
TMOD=0x21;
TCON=0x00;
PCON=0x80;
SCON=0x50;
IE=0x90;
}
//毫秒级延时
voiddelay_1ms(unsignedint_1ms)
{
unsignedchari,j;
for(;_1ms>0;_1ms--)
{
for(i=0;i<10;i++)
{
for(j=0;j<30;j++)
;
}
}
}
//选择4052的通道
voidchang_4052(unsignedchari)
{
switch(i)
{
case0:
EXA=0;
EXB=0;
break;
case1:
EXA=1;
EXB=0;
break;
case2:
EXA=0;
EXB=1;
break;
case3:
EXA=1;
EXB=1;
break;
default:
EXA=0;
EXB=0;
break;
}
}
voidset_8255()
{
delay_1ms(1000);
COMM8255=0x82;
PA8255=0x80;
PC8255=0xfc;
}
8.调试过程
8.1准备工作
进行程序调试时应事先检查:
电源指示灯是否正常工作;蜂鸣器是否正常工作;键盘是否正常工作;LCD显示模块是否正常工作。
8.2程序调试
在UVISION中,应用都位于项目文件中。
已经有的项目文件。
选择PROJECT菜单的OPENPROJECT,从文件夹。
。
。
\C51\EXAMPLES\ExpBoard打开ExpBoard_Uv2.Bak,来载入项目。
双击PROJECTWINDOWSFILES页中的文件,就可以编辑c语言文件。
UVISION2在编辑器窗口载入并显示文件的内容。
用PROJECT菜单或BUILD工具栏的BUILDTARGET命令编译和链接项目。
UVISION2开始翻译和链接源文件,并生成一个可以载入到UVISION2调试器进行调试的绝对目标模块。
BUILD过程的状态信息输出在OOUTPUTWINDOW的BUILD页。
点击编译、链接按钮即可对源文件进行编译和链接。
源程序被编译和链接后,可以用UVISION2调试器对它进行调试。
在UVISION2中,使用DEBUG菜单或工具栏的START/STOPDEBUGSESSION命令可以开始调试。
UVISION2初始化调试器并启动程序运行,且运行到MAIN函数。
在调试好应用程序后,要求生成一个INTELHEX文件。
这个文件可以下载到EPROM编程器或模拟器中。
当在OPTIONS-FORTAR-GET-OUTPUT中使能CREATHEXFILE后,UVISION2每次BUILD处理都会生成HEX文件。
当在选项RUNUSERPROGRAM#1中指定PROM编程工具后,可以在MAKE处理后启动PROM编程工具。
8.3在线编程
(1)用并口线将PC机的并口与实验板的并口连接,双击中格电子在线编程V10.EXE文件,出现下面窗口。
(2)单击(自动)打开文件出现在如下窗口:
(3)文件类型请选择HEX类型,选择编译好的HEX文件,点击打开按钮后,回到主菜单。
(4)点击自动完成按钮,开始在线编程。
同时窗口左下方会出现进度条,完成后会提示有成功完成。
如果编程不成功,请再次点击自动完成按钮进行编程,如果多次不成功,关闭实验板电源,重新启动电脑后再试。
8.4运行
将已经接线的实验板通电,并对其进行操作。
实验板接通后,LED初始显示“12345678”,再显示“--------”。
此时,若按下1号按键,则LED显示“001”;若按下2号按键,则LED显示“001”,因为我在程序中输入的数据为“0x01”,这样两次按键现实的结果都为001,要显示其他数值还可以进行修改。
如果要再次进行,需要擦除EEPROM中存储的数据,重新按上面的步骤进行即可。
9心得体会
本次课设我通过自己的动手实践使自己在学习和巩固所学的同时,提高了自己综合运用知识的能力和分析解决新问题的能力,同时也提高了自己工程实践能力。
10参考文献
[1]刘守义.《单片及应用技术》.西安电子科技大学出版社
[3]姜志海.《单片微型计算机原理及应用》.机械工业出版社
[2]陈大钦.《电子技术基础实验-电子电路实验.设计.仿真》.华中理工大学
本科生课程设计成绩评定表
班级:
姓名:
学号:
序号
评分项目
满分
实得分
1
学习