




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉理工大学计算机硬件课程设计说明书EEPROM器件读写例程设计1问题描述本次课设是EEPROM器件读写例程的设计,即在电可擦除存储器件上实现数据的读和写。硬件方面,使用AT24C02芯片作为EEPROM器件,并为了达到实验结果的可见性,以便测试软件代码的正确性,实验中使用了LED数码显示芯片CH451来控制显示AT24C02芯片中写/读数据。软件代码方面,需要实现的功能是通过实验平台上的按键来引发中断,并通过I2C总线向AT24C02写入或读出某个数据,同时将该数据显示在数码管上。设计主要的要求有以下几点:(1) 能正常操作LED 数码显示(2) 能通过中断方式接收按键信息(3) 能正确读写
2、EEPROM 芯片2需求分析2.1硬件条件程序设计中涉及到的所有硬件设备的明细表如表所示。表2.1 硬件设备明细表序号名称1PC 机一台;ZG-211 单片机系统实验板一块2实验连接线若干3并口编程线一根4配套电源1 个5CH451,89S52,CD4052,AT24C02各一个2.2软件要求本次设计涉及到的软件主要有以下几个:(1) 操作系统:windows XP(HardWare)(2) 软件代码开发环境:KEILC UVISION2 集成开发环境(3) 联机下载软件:中格电子在线编程V102.3程序设计内容概述程序设计中主要分4个模块来实现,包括初始化模块、EEPROM数据读写操作模块、
3、数据显示模块以及总体模块。初始化模块主要是用来对硬件部分进行初始化。如对MCU进行初始化,选择4052的通道号,为了提示硬件开始运行,在初始化模块设计中特意加入了蜂鸣器的工作,蜂鸣声响起则表示硬件开始工作。其中使用并行可编程芯片8255控制蜂鸣器的开关,所以这里还要实现对芯片8255的初始化。EEPROM数据读写操作模块则是用来实现对AT24C02进行数据读写操作的,由于设计中的数据读写操作都是通过I2C总线来实现的,所以操作过程要遵循I2C总线协议。首先要发送启动信号,然后再发送从器件地址,收到响应信号之后再开始从I2C总线上读/写数据,最后还要发送一个结束信号,表示数据操作的结束。数据显示
4、模块则是将每次操作的数据在LED上显示,以便测试代码的正确性,该模块的设计中不仅要包含对数据的显示功能的实现,还要实现对按键中断的功能,即时刻检测实验平台上5个按键的状态,以便对不同状态做出不同的操作。最后是总体模块的设计,即将上述的所有模块联系起来,达到相应的设计要求,如对按键进行检测,如果有相应按键按下,则产生中断,将某个数据写入到AT24C02芯片中(或者从AT24C02中读出一个数据),并将该数据显示出来。3接口芯片介绍3.1 AT24C02芯片介绍AT24C02是一个2K位串行CMOS EEPROM,内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功
5、耗。AT24C02有一个16字节页写缓冲器。该器件通过I2C总线接口进行操作,有一个专门的写保护功能。AT24C02支持I2C总线数据传送协议,总线协议规定任何将数据传送到总线的器件作为发送器。任何从总线接收数据的器件为接收器。数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式,通过器件地址输入端A0、A1和A2可以实现将最多8个AT24C02器件连接到总线上。其芯片引脚图如下图所示。图3.1 AT24C02引脚图3.2 AT89S52芯片介绍AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8
6、K在系统可编程Flash 存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM, 32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下
7、,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。其芯片引脚图如下图所示。图3.2 AT89S52引脚图 DIP封装3.3 CH451芯片介绍CH451 是一个整合了数码管显示驱动和键盘扫描控制以及P监控的多功能外围芯片。CH451内置RC振荡电路,可以动态驱动8位数码管或者64位LED,具有BCD译码、闪烁、移位等功能;同时还可以进行64键的键盘扫描;CH451通过可以级联的串行接口与单片机等交换数据;并且提供上电复位和看门狗等监控功能。CH451是一个多功能外围芯片,通过可以级
8、联的4线串行接口与单片机、DSP、微处理器等控制器交换数据。CH451 包含三个功能:数码管显示驱动、键盘扫描控制、P监控,三个功能之间相互独立,控制器可以通过操作命令分别启用、关闭、设定CH451的任何一个功能。CH451的串行接口是由硬件实现的,控制器可以频繁地通过串行接口进行高速操作,而绝对不会降低CH451 的工作效率。其芯片引脚图如下图所示。 图3.3 CH451引脚图3.4 CD4052芯片介绍CD4052 是一个差分4通道数字控制模拟开关,有A0、A1 两个二进制控制输入端和INH 输入,具有低导通阻抗和很低的截止漏电流。幅值为4.520V的数字信号可控制峰峰值至20V 的模拟信
9、号。例如,若VDD5V,VSS0,VEE13.5V,则05V的数字信号可控制13.54.5V的模拟信号。这些开关电路在整个VDDVSS和VDDVEE电源范围内具有极低的静态功耗,与控制信号的逻辑状态无关。当INH 输入端“1”时,所有的通道截止。二位二进制信号选通4通道中的一通道,可连接该输入端至输出。其芯片引脚图如下图所示。 图3.4 CD4052引脚图3.5 AT24C02芯片数据读写原理3.5.1 AT24C02芯片工作原理AT24C02芯片可存储256 个字节,重复擦写1000000次,数据保存100 年以上。该芯片通过I2C 总线接口进行操作,并且符合I2C总线的协议。其原理图如下图
10、所示: 图3.5 AT24C02 原理图AT24C02各引脚的功能如下表所示:表3.1 AT24C02引脚说明管脚名称功能A0,A1,A2器件地址选择SDA串行数据地址/数据SCL串行时钟WP写保护VCC+1.86.0工作电压VSS地 3.5.2 I2C总线I2C总线协议: 1、只有在总线空闲时才允许启动数据传送。 2、在数据传送过程中当时钟线为高电平时数据线必须保持稳定状态不允许有跳变时钟线为高电平时数据线的任何电平变化将被看作总线的起始或停止信号。起始信号:时钟线保持高电平期间数据线电平从高到低的跳变为I2C总线的起始信号。停止信号:时钟线保持高电平期间数据线电平从低到高的跳变为I2C总线
11、的停止信号。时序图根据总线的协议规则,设计如下图所示的总线时序图。 图3.6 总线时序图根据总线的时序要求设计总线的读写周期时序如下图所示。图3.7 总线写时序图3.8 立即读时序在总线的读写时序中反映了起始信号和停止信号。在写周期时序中,STOP CONDITION表示在SCL是高电平的时候SDA由低电平到高电平的转变表示停止信号;START CONDITION表示在SCL是高电平的时候SDA由高电平到低电平的转变表示其实信号。图3.9 起始/停止信号时序在进行I2C 总线操作时,请将所有中断关闭,以防中断程序,打乱其时序,操作完成再将中断恢复。4硬件设计根据各芯片的接口特性和功能,设计了如
12、下所示的硬件连线原理图。在实验板上主要涉及到如下几个要接线模块:J1_4052、J4_24C64、J5_89S52、J23_CH451。图4.1是AT89S52与AT24C02和CD4052的连线图。图4.2是AT89S52与CH451的连线图。硬件的设计共需连接7根导线,图中双箭头表示为需要接线的地方。图4.1 AT89S52与AT24C02和CD4052的连线图图4.2是AT89S52与CH451的连线图图4.3 实物电路连接5软件模块设计5.1 初始化模块设计初始化模块设计中主要包括芯片初始化和蜂鸣器的启动,其实现代码如下所示:初始化MCUvoid InitMCU()TMOD = 0x2
13、1;TCON = 0x00;PCON = 0x80;SCON = 0x50;IE = 0x90;毫秒级延时程序,主要用在执行一条对硬件进行操作的语句之后,给硬件工作以缓冲时间。确保相应操作有足够时间完成。void delay_1ms(unsigned int _1ms)unsigned char i,j;for(; _1ms0; _1ms-)for(i=0; i10; i+)for(j=0; j30; j+);CD4052选择通道,设计中选择的是2号通道void chang_4052(unsigned char i)switch(i) case 0:EXA=0;EXB=0;break; cas
14、e 1:EXA=1;EXB=0;break; case 2:EXA=0;EXB=1;break;case 3:EXA=1;EXB=1;break;default:EXA=0;EXB=0;break; 初始化芯片8255void set_8255()delay_1ms(1000);COMM8255 = 0x82;PA8255 = 0x80;PC8255 = 0xfc;打开蜂鸣器void speak_on()PC8255 &= 0xF7;/将8255PC口的第3位置0关闭蜂鸣器void speak_off()PC8255 |= 0x08;/将8255PC口的第3位置1蜂鸣器的开关是由芯片8255的
15、C口第三位来控制的。当将该位置0时,蜂鸣器开始工作;当置1时,蜂鸣器停止工作。这样就可以提示硬件马上开始工作。5.2 EEPROM数据读写操作模块该模块的设计主要是实现对AT24C02芯片的读写操作,代码如下所示。从AT24C02读数据的函数代码如下所示:char AT24C02Read(unsigned char * _data,unsigned char addr,unsigned char leng)/参数_data表示数据存放的缓冲区地址,addr表示偏移地址,leng表示数据长度unsigned char n;chang_4052(2); /选择4052芯片的通道2/判断向I2C总线
16、发送开始信号和从地址之后,有无响应信号if (AT24C02DummyWrite(addr)=NOK) return NOK;AT24C02Start();/向I2C总线发送一个开始信号if (AT24C02Nack()=NOK) /检查从器件是否接受一BYTE的数据return NOK;/开始从I2C总线上接受数据for (n=0;nleng; n+) _datan = AT24C02GetByte();AT24C02Ack();/向I2C总线发送一个数据接受完成信号AT24C02Stop();/向I2C总线发送一个停止信号delay_1ms(30);/操作完成后调用延时程序,延时30msr
17、eturn OK;向AT24C02写入数据的函数实现代码如下所示:char AT24C02Write(unsigned char * _data,unsigned char addr,unsigned char leng)/参数_data表示数据存放的缓冲区地址,addr表示偏移地址,leng表示数据长度unsigned char n;chang_4052(2);/选择4052芯片的2号通道AT24C02WP=0;/打开写保护if (AT24C02DummyWrite(addr)=NOK) return NOK;/开始向I2C总线上发送数据for (n=0; nleng; n+)AT24C02
18、OutByte(_datan);if (AT24C02Nack()=NOK)/ 检查从器件是否接受一BYTE的数据return NOK; AT24C02Stop();/向I2C总线发送一个停止信号AT24C02WP = 1;/关闭写保护delay_1ms(30);return OK;5.3数据显示模块数据显示模块的设计就是将操作的数据显示出来,以便观察,来确定数据操作过程是否正确。其实现代码如下所示。4052芯片运行之前先要对其进行初始化,实现函数如下所示:void disp_initialize()chang_4052(1);/选择40522号通道 DIN=0; DIN=1; DCLK=1;
19、 LOAD=1; DOUT=1;send_disp_data( CH451_SETSYS, 0x03);/设定系统参数send_disp_data( CH451_SETDIS, 0x80);/设定显示参数数码显示过程就是向4052发送命令的过程,其中命令包括两部分,一部分是命令体,确定在那个LED上显示;另一部分是命令参数部分,确定要显示的数据值,其实现函数如下所示:void send_disp_data(unsigned char comm, unsigned char _data)/参数comm指定命令体,参数_data指定命令参数unsigned char i; /送8BIT数据for(
20、i=0;ii)&0x01;DCLK = 1;DCLK = 0;DCLK = 1;/送4BIT命令for(i=0;ii)&0x01;DCLK = 1;DCLK = 0;DCLK = 1;LOAD=1;LOAD=0;LOAD=1;在实际操作中,传送的都是一个整数,所以必须实现LED显示整数的功能,在这里用三个LED来显示一个8位二进制数。其实现函数如下所示:void display_int(unsigned int m)/显示整数m/用LOAD1、LOAD2和LOAD3来显示数send_disp_data( CH451_LOAD0, 0x10);send_disp_data( CH451_LOAD
21、1, 0x10);send_disp_data( CH451_LOAD2, 0x10);if (m/10000)send_disp_data( CH451_LOAD3, m/10000);elsesend_disp_data( CH451_LOAD3, 0x10);if (!(m/1000)%10)&(!(m/10000)send_disp_data( CH451_LOAD4, 0x10);elsesend_disp_data( CH451_LOAD4, (m/1000)%10);send_disp_data( CH451_LOAD5, (m/100)%10);send_disp_data(
22、CH451_LOAD6, (m/10)%10);send_disp_data( CH451_LOAD7, m%10);除了上述对数据的操作实现之外还要实现对按键中断的操作,key_data变量用来记录有按下操作的按键对应的值,这样就可以通过不同的按钮按下实现不同的数据操作,KEY1-KEY5 的键值分别为:0X40,0X49,0X52,0X5B,0X64。按键中断实现代码如下所示。void key() interrupt 0 unsigned char i,temp;EX0 = 0;/关中断key_data = 0;temp = 0;send_comm(CH451_KEY);for(i=0;
23、i7; i+) temp = DOUT;key_data = key_data|(temp(6-i);DCLK=1;DCLK=0;DCLK=1;EX0 = 1;/中断5.4 总体模块总体模块的设计就是讲之前的所有模块整合起来,共同完成设计所要求的功能。其代码实现如下所示。unsigned char key_data = 0;/记录有按下操作的按键对应的值main()unsigned char eep_temp2;unsigned char temp = 0;/MCU初始化InitMCU();set_8255();/初始化8255/开关蜂鸣器,表示开始工作speak_on();delay_1ms
24、(1000);/蜂鸣器发音延时speak_off();Display_TEST();/显示测试数据“12345678”eep_temp1 = 0x02;while(1)if(key_data!=0)/若有键按下eep_temp0 = 0x01;/测试值temp = key_data;key_data = 0;switch(temp)case 0x40:/如果是KEY1按下/将测试值写入EEPROMAT24C02Write(eep_temp, 0, 1);/并将测试值显示在LED上display_int(int)(eep_temp0);break;case 0x49:/如果是KEY2按下AT24
25、C02Read(eep_temp, 0, 1);/从EEPROM中读出数据display_int(int)(eep_temp0);/并将读出的数据显示在LED上break;case 0x52:/如果是KEY3按下AT24C02Write(eep_temp, 1, 1);display_int(int)(eep_temp1);break;case 0x5B:/如果是KEY4按下AT24C02Read(eep_temp, 1, 1);display_int(int)(eep_temp1);break;default:break;5.5程序流程图开始初始化MCU蜂鸣器开和关显示初始化数据键按下? 否
26、 是KEY4KEY3KEY2KEY1是 是 是 是向AT24C02写入eep_temp1中的内容从AT24C02读出数据,放入eep_temp1中的内容从AT24C02读出数据,放入eep_temp0中的内容向AT24C02写入eep_temp0中的内容图5.1程序流程图6 调试过程与测试结果6.1调试过程6.1.1 程序编辑过程进入KEILC开发环境。首先根据I2C协议内容,编写I2C 函数,由于AT24C02的I2C 接口最大频率是400KHZ,所以在程序中对一个IO口操作完后,请延时2.5us(实验板上CPU 晶振为11.0592MHZ,一个指令周期为1.08us)。写好I2C读写函数后
27、,可以对AT24C02进行操作。AT24C02 的写从地址为0XA0,写时WP 要置0(打开写保护),写完后置为1;读从地址为0XA1。先将CD4052 的通道选为2,连接CPU 与AT24C02。将上述软件设计中的各模块设计编写成C文件,并添加到KEILC工程文件中,进行调试,如果有错误,则会在构造显示框中提示,找到错误并修改完成之后,编译成功后就会提示正在从“ExpBoard”产生HEX文件,并提示没有出错信息,则说明代码编写成功。图6.1 KEILC开发环境6.1.2程序下载程序成功编译成功生产HEX文件之后,打开联机下载软件,将HEX文件下载到89S52中,观看程序运行结果。图6.2 联机下载6.2 测试结果如果程序编写正确,当将程序下载到89S52中后,则应该出现如下结果:首先会听到蜂鸣器发音,之后8个LED就会显示预先加入的测试数据“12345678”,短暂显示之后就全部复位到0;如果按下KEY1,则LOAD1LOAD3会显示数001(这时相应的操作就是将eep_temp0中的数写入到AT24C02中)。如果按下KEY2,LOAD1LOAD3同样应该显示数001(这里相应的操作是从AT24C02中读出一个数,放入eep_te
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物业维修赔偿补充协议
- 抖音平台主播直播内容独家授权竞业禁止合同范本
- 《原创漫画改编为小说创作合同》
- 抖音平台用户数据安全审计协议
- 全职太太生活品质提升与职业回归支持协议
- 数字货币交易平台服务协议
- 大型水利枢纽工程监理补充协议书
- 夫妻忠诚协议书与股权代持权益调整及责任划分协议
- 高性能影视场刊印刷油墨租赁与专业售后服务合同
- 动作捕捉服租赁与网络游戏角色动画优化合作协议
- 2025至2030中国玻尿酸市场前景预判及未来消费规模调研报告
- 耐药菌耐药性监测策略-全面剖析
- 2025年中国陈皮市场调查研究报告
- 2024年农艺师考试考试形式试题及答案
- 老年综合评估技术应用中国专家共识解读
- 初中语文第23课《“蛟龙”探海》课件-2024-2025学年统编版语文七年级下册
- 电工技术基础 教案全套 欧小东 第1-10章 直流电路的基础知识-过渡过程
- 汽车销售礼仪与沟通技巧考核试卷
- 遗体转运协议书范本
- 挖矿委托协议书范本
- 2025年标准租房合同范本
评论
0/150
提交评论