EEPROM器件读写例程设计Word下载.docx
《EEPROM器件读写例程设计Word下载.docx》由会员分享,可在线阅读,更多相关《EEPROM器件读写例程设计Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
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.实验目的
掌握IO口操作;
掌握显示及键盘芯片的运用;
掌握I2C总线操作
2.实验设备
PC机一台,ZG-211单片机系统实验板一块,实验连接线若干,芯片:
CH451,89S52,CD4052并口编程线一根,串口通讯线1根,配套电源1个
ZG-211图片:
3.实验要求
3.查阅和学习课程设计题目需要的接口芯片资料,掌握接口芯片的使用方法和编程要领。
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<
intrins.h>
#include"
reg52.h"
def.h"
sub.h"
beep.h"
func.h"
display.h"
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);
default:
}
}
}
}
具体函数
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;
//送4BIT命令
4;
DIN=(comm>
LOAD=1;
LOAD=0;
|函数名send_comm|
voidsend_comm(unsignedcharcomm)
//送4BIT命令
|函数名disp_initialize|
|函数功能向CH451芯片发送初始化命令|
|参数无|
voiddisp_initialize()
chang_4052
(1);
DIN=0;
DIN=1;
DCLK=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);
i<
7;
i++)
{
temp=DOUT;
key_data=key_data|(temp<
<
(6-i));
DCLK=1;
DCLK=0;
/*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);
//开中断,接受按键信息
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);
|函数名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);
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 姓名:
张军 学号:
序号
评分项目
满分
实得分
1
学习态度认真、遵守纪律
10
2
设计分析合理性
3
设计方案正确性、可行性、创造性
20
4
设计结果正确性
40
5
设计报告的规范性
设计验收
总得分/等级
评语:
注:
最终成绩以五级分制记。
优(90-100分)、良(80-89分)、中(70-79分)、
及格(60-69分)、60分以下为不及格
指导教师签名:
2011年 月 日