




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*-24C02.h-*/#ifndef _24C02_H#define_24C02_H/* Includes -*/#include STC15F2K60S2.h#include stdbool.h/* Define -*/#define WC24C02 0xa0/器件地址 写#define RC24C02 0xa1/器件地址 读#define MAXSIZE24C02 256/AT24C02最多256个字节 2K bits 32页#define I2C_PAGESIZE 8/AT24C02每页有8个字节#define delayNOP() _nop_();_nop_();_nop_();_nop_() /延时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(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_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) COPYRIGHT 2014 xxxx * * 文件名 :24c02.c * 描述 :本函数是xxxxx的24C02的读写函数 注:器件地址0xa0 数据地址:00H-FFH 2K bits 256Byte * 平台 :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;/SDA线为低电平则总线忙,退出SDA=0;delayNOP();delayNOP();while(SDA)return false;/SDA线为高电平则总线出错,退出SCL=0;delayNOP();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;delayNOP();/delayNOP();SCL=0;/*读取ACK信号*/bool I2CWaitAck(void) /返回为:1=有ACK,0=无ACKSCL=0;SDA=1;/设置SDA为输入delayNOP();/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=(bool)(demand&0x80);demand=1;delayNOP();/delayNOP();SCL=1;delayNOP();/delayNOP();SCL=0;/*MCU从24c02读入一字节数据*/u8 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 false;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 WriteAddr is I2C_PAGESIZE aligned */ if(Addr = 0) /* If n I2C_PAGESIZE */ else while(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 WriteAddr is not I2C_PAGESIZE aligned */ else /* If n I2C_PAGESIZE */ else n -= 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, WriteAddr, 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的数据地址 * -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;fo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年浙江温州市卫生健康委员会直属卫生健康单位面向社会公开招聘116人考前自测高频考点模拟试题附答案详解
- 2025单位餐厅承包合同5篇
- 2025年六安市金安区引进事业单位紧缺急需人才20人模拟试卷及答案详解参考
- 2025年福建省莆田市大济镇向社会招聘1人考前自测高频考点模拟试题及1套参考答案详解
- 2025江苏南京白下人力资源开发服务有限公司招聘劳务派遣人员2人(二十五)考前自测高频考点模拟试题及1套参考答案详解
- 2025年度七台河市人民医院第二批公开招聘编外医疗卫生技术人员28人考前自测高频考点模拟试题完整参考答案详解
- 2025内蒙古土地资源收储投资(集团)有限公司常态化招聘50名急需紧缺专业人员的(第十二批)考前自测高频考点模拟试题及答案详解(易错题)
- 2025河南航空港投资集团有限公司25人招聘考前自测高频考点模拟试题有完整答案详解
- 2025河北科技工程职业技术大学选聘52人模拟试卷及一套参考答案详解
- 2025福建莆田市秀屿区上塘珠宝城实业有限公司招聘编外工作人员1人模拟试卷及答案详解(网校专用)
- 合肥市社会化工会工作者招聘考试真题2024
- 恐龙妈妈藏蛋课件
- 演讲与朗诵教学课件
- 《CSCO乳腺癌诊疗指南2025》更新要点解读
- 2025年教师师德师风考试题(附答案)
- 贵妃生态农业有限公司企业策划书
- 学堂在线 战场侦察监视技术与装备 章节测试答案
- 智慧产业园区AI大模型数字化平台建设方案
- 全球变暖与地缘冲突-洞察及研究
- 土壤隐患排查培训
- 垃圾分类可回收管理制度
评论
0/150
提交评论