PCF8563与AT24C02一样,是典型的IIC通信器件,这里就以它为例,编写基于LPC1768硬件IIC的通信代码:

上图是PCF8563各个寄存器地址,PCF8563的IIC地址是0xA2

#include "lpc17xx_i2c.h"
#include "lpc17xx_libcfg.h"
#include "lpc17xx_pinsel.h"
#include "pcf8563.h"#define   PCF8563_SLVADDR         (0xa2>>1)#define  Status1_Address         0x00
#define Status2_Address         0x01
#define SECOND_ADDRESS          0x02
//从地址2开始一次是:秒 分 时 日 星期 月 年
#define Minute_Alarm_Address    0x09
#define Hour_Alarm_Address      0x0a
#define Day_Alarm_Address       0x0b
#define Weekday_Alarm_Address   0x0c
#define CLKOUT_Address          0x0dTIME_RTC RTC_time;uint8_t Bcd2Hex(uint8_t bcd_data)
{uint8_t hex_data;hex_data=((bcd_data&0xf0)>>4)*10+(bcd_data&0x0f);return hex_data;
}uint8_t Hex2Bcd(uint8_t hex_data)
{uint8_t temp;temp=((hex_data/10)<<4)+(hex_data%10);return temp;
}void Time_Cover(uint8_t *p, int type)
{int i;if(type==0) //读出时间 BCD->Hex{for(i=0;i<sizeof(TIME_RTC);i++)p[i]=Bcd2Hex(p[i]);}else  //写入时间{for(i=0;i<sizeof(TIME_RTC);i++)p[i]=Hex2Bcd(p[i]);}
}int PCF8563_Read(void)
{I2C_M_SETUP_Type rxsetup;uint8_t tx_addr=SECOND_ADDRESS;rxsetup.sl_addr7bit = PCF8563_SLVADDR;rxsetup.tx_data = (volatile uint8_t *)&tx_addr;   // Get address to read at writing addressrxsetup.tx_length = 1;rxsetup.rx_data = (volatile uint8_t *)&RTC_time;rxsetup.rx_length = sizeof(RTC_time);rxsetup.retransmissions_max = 3;if (I2C_MasterTransferData(RTC_IIC, &rxsetup, I2C_TRANSFER_POLLING) == SUCCESS){return (0);} else {return (-1);}
}int PCF8563_Write(uint8_t *p,uint8_t len)
{I2C_M_SETUP_Type txsetup;txsetup.sl_addr7bit = PCF8563_SLVADDR;txsetup.tx_data = p;txsetup.tx_length = len;txsetup.rx_data = NULL;txsetup.rx_length = 0;txsetup.retransmissions_max = 3;if (I2C_MasterTransferData(RTC_IIC, &txsetup, I2C_TRANSFER_POLLING) == SUCCESS){return (0);} else {return (-1);}
}int SettingTime(TIME_RTC *r)
{Time_Cover((uint8_t *)r,1);return PCF8563_Write((uint8_t *)r,sizeof(TIME_RTC));
}int Init_RTC(void)
{   if(PCF8563_Read()==0){Time_Cover((uint8_t *)&RTC_time,0);if(RTC_time.Year<19 || RTC_time.Year>99){RTC_time.Year = 19;RTC_time.Month    = 3;RTC_time.Day   = 12;RTC_time.Hour = 7;RTC_time.Minute= 59;RTC_time.Second= 56;SettingTime(&RTC_time);return 1;}return 0;}return -1;
}void ReFresh_Time(void)
{if(PCF8563_Read()==0){Time_Cover((uint8_t *)&RTC_time,0);}
}
#ifndef __PCF8563_H__
#define __PCF8563_H__#define RTC_IIC     LPC_I2C2typedef struct{        unsigned char Second;unsigned char Minute;unsigned char Hour;unsigned char Day; unsigned char Week;unsigned char Month;unsigned char Year;
} TIME_RTC;extern TIME_RTC RTC_time;int PCF8563_Read(void);
int Init_RTC(void);
void ReFresh_Time(void);#endif

实际测试发现硬件版IIC也挺简单,最大支持400kHz速率。

LPC1768 IIC通信示——PCF8563相关推荐

  1. STM32 IIC通信简介+PCF8563时钟芯片示例

    IIC总线是嵌入式设备最常用的接口之一,包括51单片机在内的MCU一般都可以进行IIC通信. IIC通信有3种类型的信号:开始信号,结束信号,和应答信号. 开始信号:SCL为高电平,SDA由高电平向低 ...

  2. 中微SC8F5771模拟IIC通信——指令运行速度的探索(附编译软件与烧录软件)

    文章目录 一.中微单片机烧录与使用 编译软件 烧录软件 下载地址 烧录软件 二.模拟IIC 三.逻辑分析仪下的时序 一.中微单片机烧录与使用 编译软件 中微所使用编译软件为SCMCU_IDE,不过个人 ...

  3. CP2112使用USB转IIC通信教学示例

    CP2112使用USB转IIC通信教学示例 简介 CP2112模块 & IIC器件LM75 LM75简介 CP2112参数配置 CP2112数据传输配置 写IIC数据 读IIC数据 GPIO输 ...

  4. 从IIC通信原理到使用 —— MPU6050

    IIC通信详解 -- 基于MPU6050模块 从IIC通信原理到使用 -- MPU6050 IIC通信可以简单地理解成就是数据的通信,就是单片机(主机)与设备(从机)之间的一种通信协议,两者必须遵从这 ...

  5. 15 玩转STM32之IIC通信(芯片硬件篇)

    15.1 IIC控制器说明(硬件部分) 在14 玩转STM32之IIC通信(软件模拟篇)我们讲了软件模拟的方式,本章讲解芯片自带的硬件部分(并非所有的芯片都含有IIC,像51系列的是没有的,但是绝大多 ...

  6. PCF8591 ---AD\DA转换器的使用(IIC通信的软件模拟与应用) (by 51单片机)

    依旧是借着蓝桥杯的机会,来学习一些模块,和软件模拟一些通信方式. 今天学习的模块是PCF8591,一款AD\DA转换器,使用IIC通信方式. 芯片的内部框图如下所示: 各引脚作用如下表所示: 仍旧和之 ...

  7. Proteus仿真之IIC通信(AT24C02)

    1.IIC通信简介:IIC是一种利用时钟线SCL和数据线SDA进行数据传输的通信协议.IIC的时序图如下所示: 我们需要看懂时序图中开始信号.数据传输.应答信号和停止信号. 开始信号:SCL为高电平时 ...

  8. STM32物联网项目-SHT30温湿度采集(IIC通信)

    SHT30温湿度采集(IIC通信) SHT30数字温湿度传感器 SHT3x湿度传感器系列包括低成本版本SHT30.标准版本SHT31,以及高端版本SHT35. SHT3x湿度传感器系列结合了多种功能和 ...

  9. PIC单片机 IIC通信及实现

    IIC通信   IIC是一种只需要2根数据线就可以实现数据通信的总线式结构.IIC采用主从式通信方式,通信过程完全由主设备决定.完整的通信流程是主设备发送起始信号给从设备,再发送地址来选中从设备,然后 ...

最新文章

  1. 【bzoj3524】【Poi2014】【Couriers】可持久化线段树(主席树)水题
  2. 打工人的一把辛酸泪,网站提现为啥多于800要扣20%的税?我想这些东西你需要明白
  3. mysql什么情况会扫描所有_造成MySQL全表扫描的原因
  4. C++ : KMP 字符串匹配算法
  5. Java Priority Queue(PriorityQueue)示例
  6. 使用canvas实现擦玻璃效果
  7. vs2012里用easyUI,显示不正常
  8. su - 提示失败问题[su方式]
  9. sql 连接数不释放 ,Druid异常:wait millis 40000, active 600, maxActive 600
  10. TDirectory.IsRelativePath是否相对路径
  11. 全国大学生数学建模比赛介绍及其入门(国赛+美赛)
  12. 【连载】第五章机械振动第一节——简谐振动
  13. 中国农业银行K宝证书怎么在中国农业银行APP上下载更新K宝证书?
  14. soc 设计soc设计 uml实务手册_芯片设计进阶之路——SOC电源管理系统
  15. 什么是DNS的正向解析与反向解析?代码实现?
  16. Elasticsearch生命周期ILM若干时间后自动删除索引index
  17. ACM赛后总结2018.09.23
  18. ios点击推送闪退_关于苹果手机QQ闪退的问题
  19. 用计算机改密码,怎么用电脑改wifi密码 笔记本电脑怎么改wifi密码?-192路由网...
  20. 在一个字符串中找出元音字母a,e,i,o,u出现的次数

热门文章

  1. 华硕主板反复进入BIOS以及无法识别固态硬盘?
  2. 使用 BEV 投影的高效城市规模点云分割
  3. 联想拯救者 独显模式下亮度无法调节 解决方法记录
  4. 学习中的一些笔记,不懂的时候再来翻翻(持续更新)
  5. 高中计算机操作题frontpage步骤,一级计算机操作题步骤——Frontpage操作.docx
  6. 大疆 —— 后端开发工程师(北京)
  7. 不要掉进PHP数组合并的坑。(初学者须知道)
  8. Python之数据爬取数据可视化
  9. 5.16--java数据类型转换及杂记
  10. MathType怎样在字母上方加一横表示均值