已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/-/ SD24XX读写演示程序,此程序仅供参考/ e-mail: FAE/ TEL 2014/07/01/-#include #include #define uchar unsigned char#define uint unsigned int#define ulong unsigned long/数据sda的位设置#define sda_in DDRC &= (1 PC1) /数据设置输入#define sda_out DDRC |= (1 PC1) /数据设置输出#define sda_setb PORTC |= (1 PC1) /数据拉高 #define sda_clr PORTC &= (1 PC1) /数据拉低 #define sda_r PINC & (1 PC1) /数据读取 /时钟scl的位设置#define scl_in DDRC &= (1 PC0) /时钟设置输入#define scl_out DDRC |= (1 PC0) /时钟设置输出#define scl_setb PORTC |= (1 PC0) /时钟拉高 #define scl_clr PORTC &= (1 PC0) /时钟拉低 #define scl_r PINC & (1 0;time-) for(i=0;i1571;i+); asm(nop); asm(nop); asm(nop);void delay_1us(void) /11.0592M, 1us延时函数 asm(nop); void delay_us(uint time) /11.0592M, Nus延时函数 uint i; for (i=0;itime;i+) asm(nop); /= /*开启SD24XX的I2C总线*/uchar I2CStart(void) sda_out;scl_out;delay_1us(); sda_setb;scl_setb;delay_us(5);sda_in;delay_us(5);if(!sda_r)return false;/SDA线为低电平则总线忙,退出sda_out;delay_1us();sda_clr;delay_us(10);sda_in; delay_us(10);while(sda_r)return false;/SDA线为高电平则总线出错,退出scl_clr;delay_us(5);return true;/*关闭SD24XX的I2C总线*/void I2CStop(void) scl_out;sda_out;delay_1us();sda_clr;delay_1us();scl_clr;delay_us(5);scl_setb;delay_us(2);sda_setb;/*发送 ACK*/void I2CAck(void) scl_out;sda_out;delay_1us();sda_clr;delay_1us();scl_clr;delay_us(5);scl_setb;delay_us(5);scl_clr;/*发送NO ACK*/void I2CNoAck(void) scl_out;sda_out;delay_1us();sda_setb;delay_1us();scl_clr;delay_us(5);scl_setb;delay_us(5);scl_clr;/*读取ACK信号*uchar I2CWaitAck(void) /返回为:1=有ACK,0=无ACKuchar errtime=255;scl_out;sda_in;delay_1us();scl_clr;delay_us(5);scl_setb;delay_1us();sda_in;delay_1us();while(sda_r)errtime-;delay_1us();if(!errtime)delay_us(10);scl_clr;return false; scl_clr;return true;/*MCU向SD24XX发送一个字节*/ void I2CSendByte(uchar demand) /数据从高位到低位uchar bd=8; sda_out;scl_out;while(bd-)scl_clr; delay_1us;if(demand&0x80) sda_setb; else sda_clr; demand=1;delay_us(3);scl_setb;delay_us(3);scl_clr; /*MCU从SD24XX读入一字节*/uchar I2CReceiveByte(void) /数据从高位到低位/uchar bl=8;uchar ddata=0;scl_out;delay_1us();delay_1us();sda_in; /端口切换为输入状态!sda_setb; /有的单片机需要加这句,如果不需要可以删掉delay_1us();while(bl-)ddata=1; /数据从高位开始读取delay_1us();scl_clr;delay_us(5); /从高位开始 ddata|=SDA;ddatasecond=I2CReceiveByte();I2CAck();psRTC-minute=I2CReceiveByte();I2CAck();psRTC-hour=I2CReceiveByte();I2CAck();psRTC-week=I2CReceiveByte();I2CAck();psRTC-day=I2CReceiveByte();I2CAck();psRTC-month=I2CReceiveByte();I2CAck();psRTC-year=I2CReceiveByte();I2CNoAck();/读时间完成,发送NoAckI2CStop();returntrue;/*写SD24XX实时数据寄存器*/uchar I2CWriteDate(S_TimeSetRTC)/写时间操作要求一次对实时时间寄存器(00H06H)依次写入, /不可以单独对7个时间数据中的某一位进行写操作,否则可能会引起时间数据的错误进位. /要修改其中某一个数据 , 应一次性写入全部 7 个实时时钟数据.S_Time *psRTC; psRTC=&SetRTC;WriteTimeOn();/使能,开锁if(!I2CStart()return false;I2CSendByte(RTC_Address); if(!I2CWaitAck()I2CStop(); return false;I2CSendByte(0x00);/设置写起始地址 I2CWaitAck();I2CSendByte(psRTC-second);/second I2CWaitAck();I2CSendByte(psRTC-minute);/minute I2CWaitAck();I2CSendByte(psRTC-hour|0x80);/hour ,同时设置小时寄存器最高位(0:为12小时制,1:为24小时制)I2CWaitAck();I2CSendByte(psRTC-week);/week I2CWaitAck();I2CSendByte(psRTC-day);/day I2CWaitAck();I2CSendByte(psRTC-month);/month I2CWaitAck();I2CSendByte(psRTC-year);/year I2CWaitAck();I2CStop();WriteTimeOff();/使能,关锁returntrue;/*设置SD24XX报警中断演示程序演示*/void WriteALARM(void)/设置报警时间:2015年2月14日 8:00/只有设置未来的时间才有效WriteTimeOn();I2CWriteOneByte(RTC_Address,0x09,0x08);/8时I2CWriteOneByte(RTC_Address,0x0b,0x14);/14日I2CWriteOneByte(RTC_Address,0x0c,0x02);/02月I2CWriteOneByte(RTC_Address,0x0d,0x15);/15年I2CWriteOneByte(RTC_Address,0x0e,0x74);/设置报警允许(使能年、月、日、小时报警)I2CWriteOneByte(RTC_Address,0x10,0x92);/设置INT中断选通(INTS1,INTS0),及报警中断总允许位(INTAE)WriteTimeOff();/*关闭SD24XX报警中断程序*/void ClrALARM(void)/关闭报警中断WriteTimeOn();I2CWriteOneByte(RTC_Address,0x10,0x90);WriteTimeOff();/*设置SD24XX倒计时中断演示*/void SetDjs(void)/设置倒计时中断WriteTimeOn();I2CWriteOneByte(RTC_Address,0x10,0x0f);/先清倒计时中断总允许位(INTDE)I2CWriteOneByte(RTC_Address,0x10,0xf4);/设置周期性中断(IM=1)INT中断选通(INTS1,INTS0),配置倒计时中断总允许位(INTDE)I2CWriteOneByte(RTC_Address,0x11,0x30);/选择定时器频率源(TDS1、TDS0)为1/60HZI2CWriteOneByte(RTC_Address,0x13,0x05);/倒计时初值寄存器,设置8位倒计时计数初值(5min)WriteTimeOff();/*关闭SD24XX倒计时中断程序*/void ClrDjs(void) WriteTimeOn();I2CWriteOneByte(RTC_Address,0x10,0xf0);WriteTimeOff();/*设置SD24XX频率中断演示*/void SetFrq(void)WriteTimeOn();I2CWriteOneByte(RTC_Address,0x10,0xa1);/选通频率中断(INTS1,INTS0),设置频率中断总允许位(INTFE)I2CWriteOneByte(RTC_Address,0x11,0x09);/设置2Hz频率中断WriteTimeOff();/*关闭SD24XX频率中断*/void ClrFrq(void) WriteTimeOn();I2CWriteOneByte(RTC_Address,0x10,0xa0);WriteTimeOff();/|*I2C连续读多个字节*|/|*尾缀B、C、F型读EEPROM程序(连续读)*|uchar I2CReadSerial(uchar DeviceAddress, uchar Address, uchar length,uchar *ps)uchari;if(!I2CStart()return false;I2CSendByte(DeviceAddress); if(!I2CWaitAck()I2CStop(); return false; I2CSendByte(Address);/设置要读的地址I2CWaitAck();I2CStart(); I2CSendByte(DeviceAddress+1);I2CWaitAck();for(i=0;ilength-1;i+,ps+)*ps=I2CReceiveByte();/读数据I2CAck();*ps=I2CReceiveByte();I2CNoAck();I2CStop(); returntrue;/|*I2C连续写多个字节*|/|*尾缀B、C型和F型写EEPROM程序(连续写)演示*|uchar I2CWriteSerial(uchar DeviceAddress, uchar Address, uchar length,uchar *ps)uchari;if(!I2CStart()return false;I2CSendByte(DeviceAddress); /器件地址(或EEPROM页地址)if(!I2CWaitAck()I2CStop(); return false; I2CSendByte(Address);/设置起始地址I2CWaitAck();for(i=0;ilength;i+) I2CSendByte(*(ps+);/B、C型最多连续发送16个字节数据,F型最多连续发送8个字节数据,若使I2CAck();/用的是NVSRAM则无此限制,可连续写任意多个数据直到存储器的末地址。I2CStop(); returntrue;/*尾缀D、E型写EEPROM程序(连续写)*/void WriteEE_DE(uchar sramadd_hi,uchar sramadd_lo,uchar sramdata)uchar n;I2CStart();I2CSendByte(EE_FirstPage_Address);/发送页地址I2CWaitAck();I2CSendByte(sramadd_hi);/先发送高8位地址I2CWaitAck();I2CSendByte(sramadd_lo);/再发送低8位地址I2CWaitAck(); for(n=0;n8;n+)I2CSendByte(sramdata+);/D型最多连续发送32个字节数据,E型最多连续发送64个字节数据,若使用I2CWaitAck();/的是NVSRAM则无此限制,可连续写任意多个数据直到存储器的末地址。I2CStop(); /*D、E型读EEPROM程序*/void ReadEE_DE(uchar sramadd_hi,uchar sramadd_lo,uchar m)uchar n;I2CStart();I2CSendByte(EE_FirstPage_Address);/发送页地址 I2CWaitAck();I2CSendByte(sramadd_hi);/先发送高8位地址I2CWaitAck();I2CSendByte(sramadd_lo);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年清洁能源行业绿色能源在建筑领域的应用展望报告
- 2025年道路运输企业安全生产应急物资清单考核试卷
- 2025年金融衍生品风险管控(中小企业商品衍生品应用门槛风险)考核试卷
- 2025年智能传感器网络攻击防护考核试卷
- 2025年哈尔滨松北区审计局、松北区机关服务中心招聘编外聘用人员4人考试笔试备考试题及答案解析
- 2025安徽六安市金寨县消防救援局政府专职消防员招聘10人考试笔试备考题库及答案解析
- 2025年湖北农商行新员工社会招录笔试考试备考题库及答案解析
- 合江县卫生健康局2025年下半年公开招聘卫生医疗机构编外工作人员考试笔试模拟试题及答案解析
- 2025广西自然资源职业技术学院下半年招聘工作人员150人考试笔试备考题库及答案解析
- 2025年湖南吉利汽车职业技术学院招聘考试笔试备考题库及答案解析
- 二年级数学《乘加乘减》集体备课活动记录
- 2024年广东省政工师理论知识考试参考题库(含答案)
- 蜜雪冰城是如何实现成本领先的
- 电子商务公司薪资体系
- 幼儿教资(综合素质)及答案
- 列车电子防滑器-电子防滑器原理
- 钣金加工过程作业指导书
- 电子元器件标示及实物对照
- 耕地合法永久转让协议书
- 芜湖仅一机械有限公司年产500万套汽车零部件及通讯设备压轴件生产线项目(承诺制项目)环境影响报告表
- 压力管道强度计算书
评论
0/150
提交评论