课程设计EEPROM器件读写例程设计.doc

上传人:laozhun 文档编号:2388615 上传时间:2023-02-17 格式:DOC 页数:21 大小:1.53MB
返回 下载 相关 举报
课程设计EEPROM器件读写例程设计.doc_第1页
第1页 / 共21页
课程设计EEPROM器件读写例程设计.doc_第2页
第2页 / 共21页
课程设计EEPROM器件读写例程设计.doc_第3页
第3页 / 共21页
课程设计EEPROM器件读写例程设计.doc_第4页
第4页 / 共21页
课程设计EEPROM器件读写例程设计.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《课程设计EEPROM器件读写例程设计.doc》由会员分享,可在线阅读,更多相关《课程设计EEPROM器件读写例程设计.doc(21页珍藏版)》请在三一办公上搜索。

1、学 号: 课 程 设 计题 目EEPROM器件读写例程设计学 院专 业班 级姓 名指导教师年月日课程设计任务书学生姓名: 专业班级: 指导教师: 工作单位:计算机科学与技术学院题 目: EEPROM器件读写例程设计初始条件:1. 课程设计使用ZG211硬件综合实验平台(8051单片机),使用AT24C01接口芯片和辅助芯片以及器件;2. ZG211有程序设计集成开发环境,程序设计语言为C语言;3. ZG211硬件综合实验平台使用说明书;要求完成的主要任务: (包括课程设计工作量及其技术要求,撰写说明书具体要求)1. 学习使用ZG211硬件综合实验平台,程序设计集成开发环境;2. 根据课程设计题

2、目,进行需求分析,搞清楚课程设计需要设计需求和需要解决的设计内容。3. 查阅和学习课程设计题目需要的接口芯片资料,掌握I2C接口芯片的使用方法和编程要领。查阅和学习课程设计题目需要的辅助芯片以及器件资料。4. 设计接口芯片和辅助芯片以及器件与8051单片机连接硬件电路原理图。5. 设计与硬件电路原理图对应的C语言程序(或8051汇编语言)。给出程序流程图。在集成开发环境中调试程序。给出程序的详细注释。能够解释使用程序模拟电路时序信号和数据。6. 撰写课程设计报告,1)详细陈述以上的设计过程;2)详细陈述电路的调试过程。时间安排:第17周:1. 熟悉ZG211硬件综合实验平台,KEILC UVI

3、SION2 集成开发环境;查阅接口芯片资料,熟悉接口芯片和它的使用方法。2. 设计硬件电路原理图,。第18周:1. 使用C语言或汇编语言设计和调试接口程序。2. 撰写计算机硬件综合设计报告。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日EEPROM器件读写例程设计1 实验目的 掌握IO 口操作,掌握显示及键盘芯片的运用,掌握I2C 总线操作2 实验设备 PC 机一台;ZG-211 单片机系统实验板一块 实验连接线若干 并口编程线一根 串口通讯线一根 配套电源1 个 芯片:CH451, 89S52,CD40523 实验要求 能正常操作LED 数码显示,能通过中断方式接收按键信息

4、,能正确读写EEPROM 芯片。4 实验平台及开发环境介绍4.1 ZG211 实验板介绍 该实验板采用了功能模块化的设计思路,实验者可单独设计和调试各个功能模块,也可将各个模块综合起来,组成一个复杂的单片机应用系统。整个实验板具备了多种总线方式,如并行总线,串行总线,I2C 总线,单总线等,各总线都有独立插孔,可与单片机,8255,GAL 等多个芯片相连,采用何种总线技术,可由实验者自己选择。实验板通过并口下载线与PC 机相联,实现在线编程。程序在电脑模拟仿真后,下载到实验板上,通过观察数码管显示器及相应的变化,便可确认程序运行是否正常。4.2 实验板模块示意图4.3 实验板模块布局图 4.4

5、 KEILC UVISION2 集成开发环境4.5 中格电子在线编程软件5 实验原理 单片机系统常用 EEPROM 芯片在掉电情况下保存一些重要数据。本实验板采用的芯片是 AT24C02,可存储 256 个字节,重复擦写 1,000,000 次,数据保存 100 年以上。该芯片通过 I2C 总线接口进行操作。I2C 协议原理:I2C 总线用两条线(SDA 和SCL)在芯片和模块间传递信息。SDA 为串行数据线,SCL为串行时钟线。 1只有在总线空闲时才允许启动数据传送。 2在数据传送过程中,当时钟线为高电平时,数据线必须保持稳定状态不允许。有跳变时钟线为高电平时,数据线的任何电平变化将被看作总

6、线的起始或停止信号。 起始信号: 时钟线保持高电平期间,数据线电平从高到低的跳变作为I2C 总线的起始信号。 停止信号: 时钟线保持高电平期间,数据线电平从低到高的跳变作为 I2C 总线的停止信号。总线时序写周期时序起始/停止时序器件寻址: 主器件通过发送一个起始信号启动发送过程,然后发送它所要寻址的从器件的地址。8位从器件地址的高4位固定为1010。 接下来的3 位A2 A1 A0 为器件的地址位,用来定义哪个器件以及器件的哪个部分被主器件访问。 从器件8 位地址的最低位,作为读写控制位。“1” 表示对从器件进行读操作, “0” 表示对从器件进行写操作。在主器件发送起始信号和从器件地址字节后

7、, PCF8563 监视总线并当其地址与发送的从地址相符时响应一个应答信号(通过SDA线) 。PCF8563 再根据读写控制位(R/W)的状态进行读或写操作。 应答信号: I2C 总线数据传送时每成功地传送一个字节数据后,接收器都必须产生一个应答信号,应答的器件在第9 个时钟周期时将SDA 线拉低,表示其已收到一个8 位数据。 PCF8563在接收到起始信号和从器件地址之后响应一个应答信号,如果器件已选择了写操作,则在每接收一个8 位字节之后响应一个应答信号。 当PCF8563工作于读模式时, 在发送一个8 位数据后释放SDA 线并监视一个应答信号,一旦接收到应答信号,PCF8563继续发送数

8、据,如主器件没有发送应答信号,器件停止传送数据并等待一个停止信号主器件。应答时序图从器件地址位其中A0、A1 和A2 对应24C02的管脚1、2 和3,PCF8563的从地址读操作时为0A3H,写操作时为0A2H。 写操作: 1.字节写 在字节写模式下,主器件发送起始命令和从器件地址信息(R/W位置零)给从器件,在从器件产生应答信号后,主器件发送PCF8563的字节地址,主器件在收到从器件的另一个应答信号后,再发送数据到被寻址的存储单元。PCF8563再次应答,并在主器件产生停止信号后开始内部数据的擦写,在内部擦写过程中PCF8563不再应答主器件的任何请求。字节写时序图2页写 用页写,PCF

9、8563可以一次写入16 个字节的数据,页写操作的启动和字节写一样,不同在于传送了一字节数据后并不产生停止信号。主器件被允许发送P(PCF8563:P=15;)个额外的字节。每发送一个字节数据后PCF8563产生一个应答位并将字节地址低位加1, 高位保持不变。 如果在发送停止信号之前主器件发送超过P+1个字节,地址计数器将自动翻转,先前写入的数据被覆盖。 接收到P+1字节数据和主器件发送的停止信号后, 芯片启动内部写周期将数据写到数据区,所有接收的数据在一个写周期内写入PCF8563。页写时序图应答查询: 可以利用内部写周期时禁止数据输入这一特性, 一旦主器件发送停止位指示主器件操作结束时,P

10、CF8563启动内部写周期,应答查询立即启动,包括发送一个起始信号和进行写操作的从器件地址。如果PCF8563正在进行内部写操作,不会发送应答信号。如果PCF8563已经完成了内部自写周期,将发送一个应答信号,主器件可以继续进行下一次读写操作。 写保护: 写保护操作特性可使用户避免由于不当操作而造成对存储区域内部数据的改写,当WP 管脚接高时整个寄存器区全部被保护起来而变为只可读取。 读操作: PCF8563读操作的初始化方式和写操作时一样,仅把(R/W) 位置为1,有三种不同的读操作方式:立即地址读、选择读和连续读。 1. 立即地址读: PCF8563的地址计数器内容为最后操作字节的地址加1

11、。也就是说,如果上次读/写的操作地址为N,则立即读的地址从地址N+1开始。如果N=E(这里对24C02,E=255;对PCF8563,E=16) , 则计数器将翻转到0且继续输出数。 PCF8563接收到从器件地址信号后 (R/W位置1) , 它首先发送一个应答信号,然后发送一个8 位字节数据。主器件不需发送一个应答信号,但要产生一个停止信号。立即地址时序图2. 选择性读: 操作允许主器件对寄存器的任意字节进行读操作,主器件首先通过发送起始信号、从器件地址和它想读取的字节数据的地址执行一个伪写操作。在PCF8563应答之后,主器件重新发送起始信号和从器件地址,此时R/W 位置1, PCF856

12、3响应并发送应答信号,然后输出所要求的一个8 位字节数据,主器件不发送应答信号但产生一个停止信号。选择读时序图3. 连续读: 连续读操作可通过立即读或选择性读操作启动。在PCF8563发送完一个8 位字节数据后,主器件产生一个应答信号来响应,告知PCF8563主器件要求更多的数据,对应每个主机产生的应答信号PCF8563将发送一个8 位数据字节。当主器件不发送应答信号而发送停止位时结束此操作。从PCF8563输出的数据按顺序由N到N+1输出。读操作时地址计数器在PCF8563整个地址内增加,这样整个寄存器区域在可在一个读操作内全部读出。当读取的字节超过E(对于PCF8563,E=16;对24C

13、02, E=255)计数器将翻转到零并继续输出数据字节。连续读时序图AT24C02原理图如下: AT24C02原理图管脚名称功能A0,A1,A2器件地址选择SDA串行数据/地址SCL串行时钟WP写保护VCC +1.86.0V工作电压VSS地AT24C02引脚说明5实验步骤5.1 硬件连接将并口线插在实验板与PC 机的并口插座上;按图2-28 连接实验线路(CH451 与CPU 连接实验线路见图2-2);仔细检查无误后,接通电源。(图中箭头表示需要接线的地方);5.2 软件设计进入KEILC 开发环境。首先根据 234 I2C 协议 内容,编写I2C 函数,由于AT24C02的I2C 接口最大频

14、率是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。显示、键盘实验

15、看2.1 节。5.3 编译下载程序编译成功后,打开联机下载软件,将HEX文件下载到89S52中,观看程序运行结果。如有问题则修改程序,再次下载。(请注意:AT24C02的擦写次数有限,频繁擦写会影响其使用寿命。)调试成功后,请将I2C 读写程序、AT24C02 读写程序,写成函数,以供其他模块调用。6 实验成功标志按下1 号按键,显示“001”,同时向AT24C02 中指定位置写入数据;按下2 号按键,从AT24C02 中指定位置读出数据并显示,应与写入数据一致。7 程序源码设计7.1 main函数程序说明main函数的主要功能是:1、初始化MCU;2、开关蜂鸣器,表示开始工作;3、设定不同键

16、值对应的操作。若按下1号按键,显示测试值,同时向 AT24C02 中指定位置写入数据; 若按下2号按键,从 AT24C02 中指定位置读出数据并显示,应与写入数据一致。详细代码及说明如下: main()unsigned char eep_temp2;unsigned char temp = 0;/MCU初始化InitMCU();set_8255();/开关蜂鸣器,表示开始工作speak_on();delay_1ms(50);speak_off();Display_TEST();eep_temp0 = 0x01;/测试值while(1)if(key_data!=0)/若有键按下temp = ke

17、y_data;key_data = 0;switch(temp)case 0x40:/若按下1号按键/将测试值写入EEPROMAT24C02Write(eep_temp, 0, 1);/显示测试值display_int(int)(eep_temp0);break;case 0x49:/若按下2号按键/从EEPROM中读数据AT24C02Read(eep_temp, 0, 1);/显示测试值是否与输入一致display_int(int)(eep_temp0);break;default:break;7.2 I2C读写程序说明7.2.1向I2C总线发送一个开始信号void AT24C02Start

18、()AT24C02SDA = 1;/初始设置P11接口为1delay_1ms(1);/延时AT24C02SCL = 1; /初始设置P10接口为1delay_1ms(1); /延时AT24C02SDA = 0; /初始设置P11接口为0delay_1ms(1); /延时AT24C02SCL = 0; /初始设置P11接口为0delay_1ms(1); /延时7.2.2向I2C总线发送一个停止信号void AT24C02Stop()AT24C02SDA = 0; /设置P11接口为0delay_1ms(1); /延时AT24C02SCL = 1; /设置P10接口为1delay_1ms(1);

19、/延时AT24C02SDA = 1; /设置P11接口为1delay_1ms(1); /延时AT24C02SCL = 0; /设置P10接口为0delay_1ms(1); /延时7.2.3向I2C总线接受1BIT数据unsigned char AT24C02Clock()unsigned char SDA_value;delay_1ms(1); /延时AT24C02SCL = 1; /设置P10接口为1delay_1ms(1); /延时SDA_value = AT24C02SDA;/向I2C总线接受数据delay_1ms(1); /延时AT24C02SCL = 0; /设置P10接口为0del

20、ay_1ms(1); /延时return(SDA_value);7.2.4向I2C总线发送一个数据接受完成信号void AT24C02Ack()AT24C02SDA = 0; /设置P11接口为0AT24C02Clock();/向I2C总线接受1bit数据7.2.5检查从器件是否接受1BYTE的数据bit AT24C02Nack() AT24C02SDA=1;if (AT24C02Clock()=0) /判断是否接受1byte数据,若接收到return OK;else /判断是否接受1byte数据,若未接收到return NOK;7.2.6向I2C总线发送一个字节的数据void AT24C02

21、OutByte(unsigned char byte)char count;for (count=0; count8; count+) / 向EEPROM 发送数据if (byte & 0x80) = 0)AT24C02SDA = 0;else AT24C02SDA = 1;byte = 1; / 数据左移一位AT24C02Clock();/向I2C总线接受1bit数据7.2.7从I2C总线接受一个字节的数据unsigned char AT24C02GetByte()unsigned char byte=0,temp,count;/ 接收一个字节的数据for (count=0; count8;

22、 count+) byte = 1;AT24C02SDA = 1;temp = AT24C02Clock();/从I2C总线接受1bit数据if (temp = 1)/判断数据的数据是否与读出的一致,若一致,则置1byte = byte | 0x01; return(byte);7.2.8向I2C总线发送开始信号和从地址bit AT24C02DummyWrite(unsigned char addr)AT24C02Start(); /向I2C总线发送一个开始信号AT24C02OutByte(AT24C02Slave); /向I2C总线发送0XA0的数据if (AT24C02Nack()=NOK

23、) /若从器件无应答return NOK;AT24C02OutByte(addr);if (AT24C02Nack()=NOK) /若从器件无应答return NOK;return OK; 7.3 AT24C02 读写程序说明7.3.1从AT24C02读取数据char AT24C02Read(unsigned char * _data,unsigned char addr,unsigned char leng)unsigned char n;chang_4052(2);if (AT24C02DummyWrite(addr)=NOK) /向I2C总线发送从地址,所属器件无应答return NOK

24、;AT24C02Start();/向I2C总线发送一个开始信号AT24C02OutByte(AT24C02Slave|0x01); /向I2C总线发送一个读取数据if (AT24C02Nack()=NOK) /若从器件未接收到数据return NOK;/读取数据失败for (n=0;nleng-1; n+) _datan = AT24C02GetByte();/将从I2C总线接收到的数据赋给_datanAT24C02Ack();/向I2C总线发送一个数据接受完成信号_dataleng - 1 = AT24C02GetByte();AT24C02Stop();/向I2C总线发送一个停止信号del

25、ay_1ms(30);/延时return OK; /读取数据成功7.3.2向AT24C02写数据char AT24C02Write(unsigned char * _data,unsigned char addr,unsigned char leng)unsigned char n;chang_4052(2);AT24C02WP=0;/打开写保护if (AT24C02DummyWrite(addr)=NOK) /向I2C总线发送从地址,所属器件无应答return NOK;/写数据失败for (n=0; nleng; n+)AT24C02OutByte(_datan); /向I2C总线发送待写数

26、据内容if (AT24C02Nack()=NOK) /若从器件未接收到数据return NOK; /写数据失败AT24C02Stop();/向I2C总线发送一个停止信号AT24C02WP = 1; /关闭写保护delay_1ms(30);/延时return OK; /写数据成功8操作过程说明调试程序的过程中出现的比较多的就是指令操作错误。以及函数的调用错误,对于子函数的命名一定要有一定规律性,避免在调用时经常调用错误。进行程序调试时按照如下的步骤: 电源指示灯是否正常工作; 小灯是否能正常工作; 蜂鸣器是否正常工作; 键盘(开关)是否正常工作; 调试LCD显示模块是否正常工作; 各子模块的功能

27、实现后,调试整个系统。最后整个系统的调试结果基本完成了其所需的基本功能8.1 安装KEILC UVISION2 集成开发环境和中格电子在线编程软件8.2 打开KEILC UVISION2 集成开发环境,open project 读写EEPROM。打开程序目录如(图一)图一8.3 把ZG211 (8051)实验板连接到主机上 打开实验板电源,可以看到数码显示管瞬间显示12345678然后变为- - - - - - - -8.4打开main.c,运行函数,运行结果如(图二) 图二8.5 由步骤8.4可知已经生成文件“ExpBoard.hex”,打开中格电子在线编程软件,点击(自动)打开文件,如(图

28、三、图四、图五)图三图四图五8.6 点击(自动)擦除文件,实验板发出一声鸣叫8.7 点击(自动)写器件(图六)9 心得体会 本次课程设计是进入大学以来第一个耗时两周的课设,第二个团队课设。相对上一次团队课设,本次课设的难度有了明显的增加,主要体现在知识应用面的广泛上,自大学以来所有的硬件知识,如数字逻辑、模拟电路、汇编语言、计算机组成原理,微机原理与接口技术等,还有编程技术都使用在其中。在课程设计的初始阶段,小组成员先对实验平台,即ZG211硬件综合实验平台(8051单片机)的相关接口芯片和辅助芯片以及器件进行熟悉,这对我们的学习能力有很大的提高。接着又根据说明书和任务书,在平台上进行接线和调试,锻炼了我们的实践能力。在实验的操作阶段,分配给每个小组成员的任务一定要保证质量完成,否则实验就会失败,所以每个成员都要有责任心。在实践阶段,毕竟每个同学的能力各不相同,同学有困难时应主动提出建议,予以帮助。这锻炼了我们的团队协作能力,培养了我们的团队精神。这次课程设计收获真的很多,无论是专业知识,实践能力,还是团队工作上,都有了很大的提高,感谢本次课程设计提供帮助的老师和同学。

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号