欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    单片机课程设计-IIC总线式EEPROM存储器应用设计.doc

    • 资源ID:88906997       资源大小:596.50KB        全文页数:28页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机课程设计-IIC总线式EEPROM存储器应用设计.doc

    目录1 设计要求22 设计目的23 器件EEPROM的介绍33.1 EEPROM简介33.2 EEPROM24XX系列功能概述34 IIC协议的介绍34.1 IIC协议总线特征34.2 IIC协议工作原理34.3 IIC协议总线基本状态44.4 寻址约定55 EEPROM读写功能实现55.1写操作55.1.1 字节写操作65.1.2 页写入操作65.2 确认查询75.3 读操作75.3.1 当前地址的读操作85.3.2 随机读操作85.3.3 连续读操作96 具体设计过程106.1 程序流程设计106.2执行结果136.3 系统组成模块结构及功能156.3.1 函数定义156.3.2 主函数设计176.3.3 源程序197 设计心得体会278 参考文献28IIC总线式EEPROM存储器应用设计1 设计要求利用51单片机和IIC总线式EEPROM芯片24C02进行存储器设计。按下KEYWRITE1键,向24C02存储器写入数据1和2;按下KEYWRITE2键,向24C02存储器写入数据3和4;按下KEYREAD键,从24C02存储器读出刚写入的数据数据;写入数据显示在左两位,读出数据显示在右两位。如图1.1所示。 图1.1 系统仿真运行图2 设计目的 通过设计,了解IIC协议的基本原理,并对EEPROM读写功能的实现有个系统的概念,对其实现过程比较清楚。同时,在设计中,巩固我们所学的理论知识。3 器件EEPROM的介绍3.1 EEPROM简介EEPROM (Electrically Erasable Programmable Read-Only Memory),电可擦可编程只读存储器-一种掉电后数据不丢失的存储芯片。 EEPROM 可以在电脑上或专用设备上擦除已有信息,重新编程。 EEPROM即电可擦写可编程只读存储器,其可通过高于普通电压的作用来擦除和重编程(重写)。不像EPROM芯片,EEPROM不需从计算机中取出即可修改。在一个EEPROM中,当计算机在使用的时候是可频繁地重编程的,EEPROM的寿命是一个很重要的设计考虑参数。EEPROM的一种特殊形式是闪存,其应用通常是个人电脑中的电压来擦写和重编程。DRAM断电后存在其中的数据会丢失,而EEPROM断电后存在其中的数据不会丢失。 另外,EEPROM可以清除存储数据和再编程。 3.2 EEPROM24XX系列功能概述1)每一个24XX 器件都支持双向。2)线数据传输协议:如果器件被定义为发送器,则该器件发送数据到总线;如果器件被定义为接收器,则该器件接收来自总线的数据。总线由主器件控制, 24XX 作为从器件。主器件提供串行时钟(SCL),控制总线访问和产生起始和停止条件。主器件和从器件皆可作为发送器或接收器,但必须由主器件决定采取何种工作模式。4 IIC协议的介绍4.1 IIC协议总线特征总线协议定义如下: 只有在总线空闲时才可启动数据传输。 数据传输期间,在时钟线为高电平时,无论何时,数据线都必须保持稳定。在时钟线为高电平时改变数据线将视为起始或停止条件。IIC总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。I2C总线的另一个优点是,它支持多主控,其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。4.2 IIC协议工作原理   以启动信号START来掌管总线,以停止信号STOP来释放总线;每次通讯以START开始,以STOP结束;启动信号START后紧接着发送一个地址字节,其中7位为被控器件的地址码,一位为读/写控制位R/W,R. /W位为0表示由主控向被控器件写数据,R/W为1表示由主控向被控器件读数据;当被控器件检测到收到的地址与自己的地址相同时,在第9个时钟期间反馈应答信号;每个数据字节在传送时都是高位(MSB)在前。4.3 IIC协议总线基本状态1)总线空闲(A)数据线和时钟线同时为高电平。2)启动数据传输(B)时钟(SCL)为高电平时,SDA 从高电平变为低电平表示起始条件产生。起始条件必须先于所有的命令产生。3)停止数据传输(C)时钟(SCL)为高电平时, SDA 从低电平变为高电平表示停止条件产生。所有操作都必须以停止条件结束。4)数据传送/数据有效 (D)数据线的状态表明数据何时有效。在起始条件之后,数据线在时钟处于高电平期间保持稳定。必须在时钟信号为低电平期间改变数据线。一个数据位对应一个时钟脉冲。数据的每次传输以起始条件开始,以停止条件结束。在起始条件和停止条件之间传输的数据字节数目由主器件决定图4.1 I2C总线在传输数据位时的SDA和SCL的基本状态5)确认信号(ACK)每一个被寻址的接收器在接收到每一字节数据后,应发送一个确认位。主器件必须提供一个额外的时钟以传输确认位。在确认时钟脉冲内,器件确认须拉低 SDA 线。在确认时钟的高电平期间,SDA线以这种方式保持稳定的低电平。当然,还必须考虑建立时间和保持时间。读操作期间,主器件必须发送一个结束信号给从器件,而不是在从器件输出最后一个数据字节之后产生一个确认位。这种情况下,从器件(24XX)将释放数据线为高电平,从而使主器件能够产生停止条件。图4.2 确认时序6)无应答信号(NACK)在时钟的第9个脉冲期间发送器释放数据总线,接收器不拉低数据总线表示一个 NACK,NACK有两种用途:a、一般表示接收器未成功接收数据字节;b、当接收器是主控器时,它收到最后一个字节后,应发送一个NACK信号,以通知被控发送器结束数据发送,并释放总线,以便主控接收器发送一个停止信号STOP。4.4 寻址约定1)不带功能性地址输入引脚的器件寻址在起始条件之后,从主器件接收的第一个字节是控制字节。控制字节以4 位控制码开始。对于24XX器件,这4 位设置为 1010以便进行读写操作。随后的3 位为存储块选择位 (B2、 B1、 B0)。主器件用它们来选择将要访问的大小为 256 字的存储块。实际上,这些位是字地址中3 个最高有效位。控制字节的最后一位定义将要进行的操作。 设置为1,选择读操作;设置为0,选择写操作。在起始条件发生后,24XX 器件始终监视SDA 总线。一旦接收到 1010码、存储块选择位和 R/W 位,从器件输出确认信号到 SDA 总线。在确认信号之后传输地址字节。2)带功能性地址输入引脚的器件寻址在起始条件之后,从主器件接收的第一个字节是控制字节。控制字节以4 位控制码开始。在24XX器件,这4 位设置为 1010以便进行读写操作。随后的3 位 为片选位(A2、 A1、 A0)。片选位的不同组合允许在同一条总线上使用的24XX 器件达八个,并用于选择访问哪一个器件。控制寄存器中的片选位必须与相应器件引脚A2、 A1 和 A0上的逻辑电平保持一致。实际上这些位是字地址中3 个最高有效位。起始条件发生之后,24XX 器件始终监视SDA 总线。一旦接收到 1010码、器件片选位和 R/W 位,从器件输出确认信号到 SDA 总线。在确认信号之后传输地址字节。5 EEPROM读写功能实现5.1写操作写数据过程:1)主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线;2)发送一个控制字节(包括7位器件地址码和一位R/W);(某些器件的地址字节可能带有其他功能)3)当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK);4)主控收到ACK后开始发送第一个数据字节;5)被控器收到数据字节后发送一个ACK表示继续传送数据,发送NACK表示传送数据结束;6)主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线;写数据时序。5.1.1 字节写操作字节写操作以来自于主器件的起始位开始, 4 位控制码紧随其后(图3)。接下来的3 位是存储块寻址位(不带地址输入引脚的器件)或片选位(带地址输入引脚的器件)。然后主发送器将R/W 位(该位为逻辑低电平)发送到总线。从器件在第九个时钟周期产生一个确认位,主器件发送的第二个字节是地址字节或高位地址字节。24XX 器件会对每一个地址字节作出确认,并把地址位锁存进器件内部的地址计数器。对于24XX00 器件,只使用地址字节的低4 位。高4 位可为任意值。送出最后一个地址字节后, 24XX 器件发出确认信号ACK。主器件在接收到该确认信号后即发送数据字,该数据字将被写入已寻址的存储器位置。24XX 器件再次发出确认信号,之后主器件产生停止条件,启动内部写周期。如果在 WP 引脚保持高电平时进行存储器写操作,器件会确认命令,但不会启动写周期,也不会写入数据,而会立即接受新的命令。写命令为一个字节,在发送写命令后,内部地址计数器增加,指向下一个要寻址的位置。写周期期间, 24XX 不会对命令进行确认。图5.1 字节写操作(注:图中控制字节指器件地址码和读写控制位;地址字节指器件内部的储存器地址。下同。)5.1.2 页写入操作页写入操作时,被控器件完成一个写字节操作后内部地址计数器自动加一。写控制字节、字地址字节和首个数据字节以和写操作字节基本相同的方式发送给 24XX 器件(见图5.1 )。不同的是,主器件发送的是多至一整页的数据字节(1),而不是停止条件,这些数据字节临时存储在片内页缓冲器中。在主器件发送停止条件之后,这些数据将被写入存储器。每接收一个字,内部地址计数器加一。如果在停止条件产生前,主器件有超出一页的数据要发送,地址计数器将会翻转,先前写入的数据将被覆盖。对于字节写操作,一旦接收到停止条件,内部写周期开始。在写周期期间, 24XX 器件不会对命令作出确认。页写入操作在一页内可以写入任意个数的数据(最多为一页),并且可以在此页中的任意地址开始写入。被寻址的数据只能在该页内变动。如果在 WP 引脚保持高电平时进行存储器写操作,器件会确认命令,但不会启动写周期,也不会写入数据,而是立即接受新的命令。图5.2 页写入操作5.2 确认查询在写周期期间器件不会对命令作出确认,这可用来确定写周期何时完成(这个特点可以优化总线的吞吐量,使其最大化) 。如果主器件已经发出写命令的停止条件,器件将启动内部定时写周期。可以随时进行确认查询。这包括在主器件发出起始条件后,再发送用于写命令(R/W = 0)的控制字节。如果器件仍处在写周期内,则不返回确认信号。一旦没有返回确认信号,起始位和控制字节必须重新发送。如果写周期结束,器件返回确认信号,主器件就可以执行下一个读或写命令。参见流程图( 图 6.3)。5.3 读操作读数据过程:1)主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线;2)发送一个控制字节(包括7位器件地址码和一位R/W);(某些器件的地址字节可能带有其他功能)3)当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK);4)主控收到ACK后释放数据总线,开始接收第一个数据字节;5)主控收到数据后发送ACK表示继续传送数据,发送NACK表示传送数据结束;6)主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线;除了控制寄存器的R/W 位设置为1外,读操作与写操作基本相同。有三种基本的读操作:当前地址的读操作、随机读操作和连续读操作 。5.3.1 当前地址的读操作当前地址的读操作,被控器件内部储存器地址计数器保留最后一次访问的地址。24XX 内置一个自动加1地址计数器,该计数器保留最后一次访问的地址。因此,如果先前对地址n(n 为任意合法地址)进行读或写操作,则下一条读操作命令将可能从地址n+1 访问数据。接收到R/W 位设置为1的控制字节后,24XX 发出确认信号,并发送 8 位数据字节。主器件不会对数据传输作出确认,但会产生停止条件,24XX 即停止数据发送(图5.3)图5.3 当前地址读操作 5.3.2 随机读操作随机读操作允许主器件以随机方式访问任意存储器,主控器件先发写命令,然后发要读的地址,然后发读命令。执行该指令前必须先设置地址字节。作为写操作的一部分,通过发送字节地址给24XX 来完成地址字节的设置(R/W 设置为0)。字节地址发送完后,主器件一接收到确认信号即产生起始条件。内部地址计数器设置完之后写操作即被终止。主器件再次发送控制字节,而该字节中 R/W 位设置为1。之后24XX 会发出确认信号, 并发送8 位数据字节。主器件不会对数据传输作出确认,但会产生停止条件, 24XX 即停止数据发送(图5.4)。在随机读取命令之后,内部地址计数器加1 指向下一条地址。图5.4 随机读操作5.3.3 连续读操作连续读操作的起动过程和随机读操作相同,只是在24XX发送完第一个数据字节后,主器件发出确认信号,而在随机读操作中发送的是停止条件,在连续读操作时被控器件完成一个读字节操作后内部地址计数器自动加一。确认信号指示24XX 器件发送下一个连续地址的数据字节(图5.5)。在24器件向主器件发送完最后一个字节后,主器件不会产生确认信号,而是产生停止条件。为了可以进行连续读操作, 24XX 器件内置了一个地址指针,在每次操作完成后该指针加1。地址指针允许一次操作连续读取整个存储器的内容。在达到最后一个地址字节后,地址指针将翻转到地址 0x00。图5.5 连续读操作6 具体设计过程6.1 程序流程设计启动IIC总线发送控制字节检测应答信号ACK发送第一个数据字节检测应答信号ACK继续传送数据发送停止位,释放I2C总线完成数据的写操作传送数据结束NYNY显示数据图 6.1 写数据的流程图发送写命令发送停止条件以启动写周期发送起始位发送控制字节(其中 R/W = 0)器件确认否?(ACK = 0)?NY下一步操作图6.2 确认查询流程图启动IIC总线发送控制字节检测应答信号ACK释放总线,接收第一个数据字节检测应答信号ACK继续接收数据发送停止位,释放I2C总线完成数据的读操作传送数据结束NYNY显示数据图6.3 读数据流程图6.2执行结果(1)按下KEYWRITE1键,向24C02存储器写入数据1和2.写入成功读出11;写入失败读出00。写入数据显示在左两位,读出数据显示在右两位。写入成功如图6.4所示:图6.4写入数据1,2成功,读出11(2)按下KEYWRITE2键,向24C02存储器写入数据3和4;写入成功读出11;写入失败读出00。写入数据显示在左两位,读出数据显示在右两位。写入成功如图6.5:图6.5 写入数据3,4成功,读出11(3)按下KEYREAD键,从24C02存储器读出刚写入的数据。成功读取数据如图6.6:图6.6 读出写入的数据6.3 系统组成模块结构及功能6.3.1 函数定义函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用#include<reg51.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit KeyWrite1=P10;/按键定义sbit KeyWrite2=P11;sbit KeyRead=P12;#define WriteDeviceAddress 0xa0 /写驱动地址指令#define ReadDeviceAddress 0xa1 /读驱动地址指令 Start_Cond(); /写开始信号 Write8Bit(WriteDeviceAddress); /写驱动地址 Write8Bit(Addr); /写从EEPROM中读的开始地址 Start_Cond(); /写开始信号 Write8Bit(ReadDeviceAddress); /写读数据指令 *nContent=Read8Bit(); /读出内容 nContent+; /指针加1 Ack(); /发确认信号 *nContent=Read8Bit(); /读一字节 NoAck(); /没有确认信号 Stop_Cond(); /发停止信号 return(0); /返回 Start_Cond(); /写开始信号 Write8Bit(WriteDeviceAddress); /写驱动地址 Write8Bit(Addr); /写从EEPROM中写的开始地址 if(Addr%8=0) /每页8字节 /换页 Stop_Cond(); /发停止信号uchar IICReadData4;/AT24C02读数据数组uchar IICWriteData4;/AT24C02写数据数组_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();/1个机器周期=12个时钟周期,fosc=12MHz时,1个机器周期=1usInit_Flash(0); /将AT24C02的第0页初始化为FFP2=0x1;/ p2.0有效,选通数码管左数第1位。P0=tableshowdata0;/显示数据P2=0x2;/ p2.0有效,选通数码管左数第2位。P0=tableshowdata1;/显示数据P2=0x4;/ p2.0有效,选通数码管左数第3位。P0=tableshowdata2;/显示数据P2=0x8;/ p2.3有效,选通数码管左数第4位。P0=tableshowdata3;/显示数据if(KeyWrite1=0)/如果KeyWrite1键按下,则将'1'写入2402的'0x80'地址中Write_Flash(IICWriteData,0,2); /将dat数组中的数据写入AT24C02中地址从0开始if(KeyWrite2=0)/如果KeyWrite2键按下,则将'2'写入2402的'0x80'地址中Write_Flash(IICWriteData,2,2); /将dat数组中的数据写入AT24C02中地址从2开始if(KeyRead=0)/如果KeyRead键按下,读出2402的'0x80'地址中的数据Read_Flash(IICReadData,0,4); /读出AT24C02中从地址1开始依次往后16个字节放入dat数组中6.3.2 主函数设计主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统,调用函数 Write_One_Byte(char addr,char thedata) 完成字节写入,调用Write_A_Page(char *buffer,char addr) 完成页写入,调用 Read_One_Byte(char addr) 完成随机读,调用Read_N_Bytes(char *buffer,char n,char addr) /*完成顺序读*/。void main()Init_Flash(0); /将AT24C02的第0页初始化为FFwhile(1)P2=0x1;/ p2.0有效,选通数码管左数第1位。P0=tableshowdata0;/显示数据delay_ms(10);P2=0x2;/ p2.0有效,选通数码管左数第2位。P0=tableshowdata1;/显示数据delay_ms(10);P2=0x4;/ p2.0有效,选通数码管左数第3位。P0=tableshowdata2;/显示数据delay_ms(10);P2=0x8;/ p2.3有效,选通数码管左数第4位。P0=tableshowdata3;/显示数据delay_ms(10);if(KeyWrite1=0)/如果KeyWrite1键按下,则将'1'写入2402的'0x80'地址中EA=0;IICWriteData0=1;IICWriteData1=2;showdata0=IICWriteData0;showdata1=IICWriteData1;Write_Flash(IICWriteData,0,2); /将dat数组中的数据写入AT24C02中地址从0开始Read_Flash(IICReadData,0,2);for(i=0;i<2;i+)if(IICWriteDatai=IICReadDatai)showdatai+2=1;else showdatai+2=0;EA=1;if(KeyWrite2=0)/如果KeyWrite2键按下,则将'2'写入2402的'0x80'地址中EA=0;IICWriteData0=3;IICWriteData1=4;showdata0=IICWriteData0;showdata1=IICWriteData1;Write_Flash(IICWriteData,2,2); /将dat数组中的数据写入AT24C02中地址从2开始Read_Flash(IICReadData,2,2);for(i=0;i<2;i+)if(IICWriteDatai=IICReadDatai)showdatai+2=0;else showdatai+2=1;EA=1;if(KeyRead=0)/如果KeyRead键按下,读出2402的'0x80'地址中的数据EA=0;Read_Flash(IICReadData,0,4); /读出AT24C02中从地址1开始依次往后16个字节放入dat数组中for(i=0;i<4;i+)showdatai=IICReadDatai;EA=1;6.3.3 源程序 #include<reg51.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit KeyWrite1=P10;/按键定义sbit KeyWrite2=P11;sbit KeyRead=P12;#define WriteDeviceAddress 0xa0 /写驱动地址指令#define ReadDeviceAddress 0xa1 /读驱动地址指令sbit AT24C02_SCL =P32;sbit AT24C02_SDA =P34;/*-功能:发起始信号-*/void Start_Cond() AT24C02_SCL = 0; _nop_(); AT24C02_SDA = 1; _nop_(); AT24C02_SCL = 1; _nop_(); AT24C02_SDA = 0; _nop_();/*-功能:发停止信号-*/void Stop_Cond() AT24C02_SCL = 0; _nop_(); AT24C02_SDA = 0; _nop_(); AT24C02_SCL = 1; _nop_(); AT24C02_SDA = 1; _nop_();/*-功能:发确认信号-*/void Ack() AT24C02_SCL = 0; _nop_(); AT24C02_SDA = 0; AT24C02_SCL = 1; _nop_(); AT24C02_SCL = 0; _nop_(); AT24C02_SDA = 1;/*-功能:发无确认信号-*/void NoAck() AT24C02_SCL = 0; _nop_(); AT24C02_SDA = 1; _nop_(); AT24C02_SCL = 1; _nop_(); AT24C02_SCL = 0; _nop_();/*-功能:写一个字节数据-*/bit Write8Bit(unsigned char input) unsigned char i; for (i=0;i<8;i+) AT24C02_SCL = 0; input <<= 1; AT24C02_SDA = CY; AT24C02_SCL = 1; AT24C02_SCL = 0; _nop_(); AT24C02_SDA = 1; AT24C02_SCL = 1; _nop_(); CY = AT24C02_SDA; return(CY) ;/*-功能:读一个字节数据-*/unsigned char Read8Bit() unsigned char temp,rbyte=0; for (temp = 8;temp != 0;temp-) AT24C02_SCL = 0; _nop_(); rbyte = (rbyte << 1) | AT24C02_SDA; AT24C02_SCL = 1; _nop_(); return rbyte;/*-功能:从EEPROM中给定一个地址连续读NLEN个字节数据存放在以指针nContent开头的往下内容。-*/bit Read_Flash ( unsigned char *nContent, unsigned char nAddr, unsigned char nLen ) unsigned char Addr; Addr = nAddr; Start_Cond(); /写开始信号 Write8Bit(WriteDeviceAddress); /写驱动地址 Write8Bit(Addr); /写从EEPROM中读的开始地址 Start_Cond(); /写开始信号 Write8Bit(ReadDeviceAddress); /写读数据指令 while(-nLen) *nContent=Read8Bit(); /读出内容 nContent+; /指针加1 Ack(); /发确认信号 *nContent=Read8Bit(); /读一字节 NoAck(); /没有确认信号 Stop_Cond(); /发停止信号 return(0); /返回/*-功能:初始化EEPROM子程序内容为FF-*/bit Init_Flash ( unsigned int nPage ) / 8 Byte/1Page init 0xFF unsigned char nLen; unsigned char Addr; nLen=8; Addr=8 *nPage; Start_Cond(); Write8Bit(WriteDeviceAddress); Write8Bit(Addr); for(;nLen!=0;nLen-) if(Write8Bit(0xff) break; /if Write8Bit() Return 1 Write Flase Stop_Cond(); return(CY);/*-功能:从EEPROM中给定一个地址连续写NLEN个字节数据存放在以指针nContent开头的往下内容。-*/bit Write_Flash ( unsigned char *nContent, unsigned char nAddr,unsigned char nLen) unsigned char i,temp; unsigned char Addr; Addr = nAddr; Start_Cond(); /写开始信号 Write8Bit(WriteDeviceAddress); /写驱动地址 Write8Bit(Addr); /写从EEPROM中写的开始地址 for(i = 0;i < nLen;i+) if(Addr%8=0) /每页8字节 /换页 Stop_Cond(); _nop_(); Start_Cond(); Write8Bit(WriteDeviceAddress); Write8Bit(Addr); temp = *nContent; if(Write8Bit(temp) break; /CY nContent+; Addr+; Stop_Cond(); /发停止信号 return(CY);/共阴极数码管真值表"0" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c" "d" "e" "f"uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff;uchar IICReadData4;/AT24C02读数据数组uchar IICWriteData4;/AT24C02写数据数组uchar showdata4;uchar i=0,j=0;void delay_ms(uchar n)uchar i,j;for(j=n;j>0;j-)for(i=100;i>0;i-)_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();/1个机器周期=12个时钟周期,fosc=12MHz时,1个机器周期=1usvoid main(void)Init_Flash(0); /将AT24C02的第0页初始化为FFwhile(1)P2=0x1;/ p2.0

    注意事项

    本文(单片机课程设计-IIC总线式EEPROM存储器应用设计.doc)为本站会员(教****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开