版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/*-24C02.h-*/#ifndef _24C02_H#define_24C02_H/* Includes -*/#include STC15F2K60S2.h#include stdbool.h/* Define -*/#define WC24C02 0xa0/ 器件地址写#define RC24C02 0xa1/ 器件地址读#define MAXSIZE24C02256/AT24C02最多256 个字节2K bits 32页#define I2C_PAGESIZE8/AT24C02每页有8 个字节#define delayNOP() _nop_();_nop_();_nop_();_n
2、op_()/ 延时sbit SDA = P25;/定义数据线sbit SCL = P26;/定义时钟线/* Private -*/* Public -*/uint idata ucSendBuffer8=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;uint idata ucReceData;uint idata ucReceiveBuffer8;/从器件中读出的多字节数据暂存区/* Function Declaration -*/bool I2CStart(void);/ 启动I2Cvoid I2CStop(void);/停止 I2Cvoid I2CAck(
3、void);/ 应答信号void I2CNoAck(void);/ 发送非应答信号bool I2CWaitAck(void);/检测应答位void I2CSendByte(u8 demand);/发送一字节数据u8 I2CReceiveByte(void);/接收一字节数据/extern bool I2C_ByteWrite(u8* pBuffer, u8 WriteAddr);/向 24c02 中写入1 个字节extern bool I2C_PageWrite(u8* pBuffer, u8 WriteAddr, u8 n);/24c02 页写 (不超过一页 )extern bool I2C
4、_BufferWrite(u8* pBuffer, u8 WriteAddr, u16 n);/24c02 数据块写 (不超过256 个字节 )extern bool I2C_BufferRead(u8* pBuffer, u8 ReadAddr, u16 n);/从 24C02 中读出 N 字节数据( 不超过 256 个字节 )#endif/*-end file-*/*-24C02.c-*/*(C)COPYRIGHT2014xxxx*文件名: 24c02.c*描述:本函数是xxxxx 的 24C02 的读写函数 注 :器件地址 0xa0 数据地址 :00H-FFH2K bits 256Byt
5、e*平台: Keil 4 A51*库版本:使用了宏晶科技的相关资料及程序 STM 库 3.50 I2C 程序*作者: xxxxxx* 时间: 2014.9.3*/* Includes -*/#include 24c02.h/*开启 24c02 的 I2C 总线 */bool I2CStart(void)SDA=1;SCL=1;delayNOP();delayNOP();if(!SDA)return false;/SDASDA=0;delayNOP();delayNOP();while(SDA)return false; /SDASCL=0;delayNOP();线为低电平则总线忙线为高电平则总
6、线出错,退出,退出return true;/*关闭 24c02 的 I2C 总线 */void I2CStop(void)SDA=0;SCL=0;delayNOP();delayNOP();SCL=1;delayNOP();delayNOP();SDA=1;/*发送ACK*/void I2CAck(void)SDA=0;SCL=0;delayNOP();/ delayNOP();SCL=1;delayNOP();/ delayNOP();SCL=0;/*发送 NO ACK*/void I2CNoAck(void)SDA=1;SCL=0;delayNOP();/ delayNOP();SCL=1
7、;delayNOP();/ delayNOP();SCL=0;/*读取 ACK 信号 */bool I2CWaitAck(void)/返回为:1=有ACK,0=无ACKSCL=0;SDA=1;delayNOP();/设置SDA为输入/ delayNOP();SCL=1;delayNOP();/ delayNOP();if(SDA)SCL=0; return false;SCL=0;return true;/*MCU向 24c02 发送一个字节数据*/void I2CSendByte(u8 demand) / 数据从高位到低位/u8 i=8;while(i-)SCL=0;_nop_();SDA=
8、(bool)(demand&0x80);demand=1;delayNOP();/delayNOP();SCL=1;delayNOP();/delayNOP();SCL=0;/*MCU从 24c02u8 I2CReceiveByte(void)读入一字节数据*/ 数据从高位到低位/u8 i=8;u8 ddata=0;SDA=1;/设置 SDA 为输入while(i-)ddata=1;/数据从高位开始读取SCL=0;delayNOP();/ delayNOP();SCL=1;delayNOP();/从高位开始ddata|=SDA;ddata I2C_PAGESIZE | !n)return fa
9、lse;I2CStart();/ 启动 I2CI2CSendByte(WC24C02);/if(I2CWaitAck() = 0)return false;I2CSendByte(WriteAddr);if(I2CWaitAck() = 0)return false;for(i = 0; i MAXSIZE24C02)return 0;Addr = WriteAddr % I2C_PAGESIZE;count = I2C_PAGESIZE - Addr;NumOfPage =n / I2C_PAGESIZE;NumOfSingle = n % I2C_PAGESIZE;/* If WriteA
10、ddr is I2C_PAGESIZE alignedif(Addr = 0)*/* If n I2C_PAGESIZE */elsewhile(NumOfPage-)if(I2C_PageWrite(pBuffer, WriteAddr, I2C_PAGESIZE) = false)return false;WriteAddr +=I2C_PAGESIZE;pBuffer += I2C_PAGESIZE;if(NumOfSingle!=0)if(I2C_PageWrite(pBuffer, WriteAddr, NumOfSingle) = false)return false;/* If
11、WriteAddr is not I2C_PAGESIZE aligned*/else/* If n I2C_PAGESIZE */elsen -= count;NumOfPage =n / I2C_PAGESIZE;NumOfSingle = n % I2C_PAGESIZE;if(count != 0)if(I2C_PageWrite(pBuffer, WriteAddr, count) = false)return false;WriteAddr += count;pBuffer += count;while(NumOfPage-)if(I2C_PageWrite(pBuffer, Wr
12、iteAddr, I2C_PAGESIZE) = false)return false;WriteAddr +=I2C_PAGESIZE;pBuffer += I2C_PAGESIZE;if(NumOfSingle != 0)if(I2C_PageWrite(pBuffer, WriteAddr, NumOfSingle) = false)return false;return true;/* 名称: bool I2C_BufferRead* 功能:从24C02 中读出读取一块数据(不超过 256 个字节 )* 输入 : -pBuffer 缓冲区指针*-ReadAddr EEPROM 的数据地
13、址*-n 要从 EEPROM 读出的字节数* 返回: 0:失败 1:成功* 调用 :外部调用*/bool I2C_BufferRead(u8* pBuffer, u8 ReadAddr, u16 n)uint i;if(n MAXSIZE24C02)return 0;I2CStart();/ 启动 I2CI2CSendByte(WC24C02);/ 发送器件地址写if(I2CWaitAck() = 0)return false;I2CSendByte(ReadAddr);/ 发送器件内部地址if(I2CWaitAck() = 0)return false;I2CStart();I2CSendByte(RC24C02);/ 发送器件地址读if(I2CWaitAck() = 0)return false;for(i =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 类风湿关节炎急性期规范化护理方案
- 2026届广东省广州市白云区广雅实验校中考一模生物试题含解析
- 浙江省南三县联考2026届中考数学全真模拟试题含解析
- 2026届四川省宜宾市六校联考中考三模数学试题含解析
- 框架结构建筑物爆破后坐:动力学解析与数值模拟探究
- 格式塔心理学视角下散文英译意象再造的多维探究
- 江苏省兴化市顾庄区重点中学2026届中考生物最后一模试卷含解析
- 2026届四川省仁寿一中学中考考前最后一卷数学试卷含解析
- 核电项目建设中公众风险应对行为与信息沟通的多维度探究
- 2026届江苏省南京市栖霞区、雨花区、江宁区中考适应性考试生物试题含解析
- 四川省广元市高2026届第二次高考适应性检测数学+答案
- TSG08-2026《特种设备使用管理规则》全面解读课件
- 《2026年化学制药企业安全风险防控专项工作方案》解读
- 2026年江西赣州市高三一模高考数学试卷试题(含答案详解)
- 企业管理 华为会议接待全流程手册SOP
- 内啮合齿轮泵的设计
- 广东省五年一贯制语文试卷
- 第4篇:中青班党性分析报告
- DOE实验设计培训教材完整
- GB/T 896-2020开口挡圈
- GA/T 850-2021城市道路路内停车位设置规范
评论
0/150
提交评论