LPC1768 IIC通信示——PCF8563

2023-05-16

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			0x0d

TIME_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 address
	rxsetup.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_I2C2


typedef 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速率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LPC1768 IIC通信示——PCF8563 的相关文章

  • GPIO引脚 模拟 IIC(软件IIC)

    GPIO引脚 模拟 IIC 软件IIC IIC总线在传输数据的过程中一共有三种类型信号 xff0c 分别为 xff1a 开始信号 结束信号和应答信号 IIC总线的时序图 xff1a 空闲状态 当IIC总线的数据线SDA和时钟线SCL两条信号
  • STM32 HAL库 STM32CubeMX -- I2C(IIC)

    文章目录 一 I2C 协议简介I2C 物理层I2C协议层I2C架构通讯过程 二 STM32Cube MX配置三 I2C HAL库函数 一 I2C 协议简介 I2C 通讯协议 Inter xff0d Integrated Circuit 也就
  • 试想面试官让你讲讲UART IIC SPI你能讲多少。

    试想面试官让你讲讲UART IIC SPI你能讲多少
  • PX4-5-SPI-IIC设备驱动

    在之前的分享中 xff0c 我们聊了PX4的通信框架和任务调度框架 xff0c 现在我们讲一下PX4的设备驱动 PX4支持很多种设备 xff0c 根据通信方式的不同大致分为 xff1a SPI IIC设备 串口设备 IO设备 CAN设备 这
  • IIC通讯详解笔记

    IIC概述 IIC总线是一种串行半双工两线总线 一根是双向的数据线SDA xff0c 另一根是时钟线SCL 所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上 xff0c 各设备的时钟线SCL接到总线的SCL上 硬件拓扑如下图所示
  • IIC通信协议

    IIC通信协议 一 什么是IIC通信协议 xff1f 二 IIC协议时序分析1 空闲状态2 起始信号和停止信号3 数据传输 xff08 1 xff09 写操作 字节写 xff08 2 xff09 写操作 页写 xff08 3 xff09 读
  • IIC通讯总结

    1 IIC简介 IIC全称Inter Integrated Circuit 是由PHILIPS公司在80年代开发的两线式串行总线 xff0c 用于连接微控制器及其外围设备 IIC属于半双工同步通信方式 2 IIC特点 xff08 1 xff
  • IIC通信协议总结(详细说明完整过程)

    IIC协议简介 IIC xff08 inter integrated Circuit集成电路总线 总线支持设备之间的短距离通信 xff0c 用于处理器和一些外围设备之间的接口 xff0c 它需要两根信号线来完成信息交换 IIC的一个特殊工艺
  • IIC的地址

    7位寻址 在7位寻址过程中 xff0c 从机地址在启动信号后的第一个字节开始传输 xff0c 该字节的前7位为从机地址 xff0c 第8位为读写位 xff0c 其中0表示写 xff0c 1表示读 图1 xff1a 7位寻址 I2C总线规范规
  • STM32——硬件IIC从机通信

    前言 xff1a 根据网上的资料 xff0c 大部分网友表示STM32自带的硬件IIC存在bug xff0c 读写时很容易卡死 自己在调试的时候也出现卡死的情况 xff0c 最后一点一点调试 xff0c 也还是调通了 本文将记录自己调试ST
  • spi,iic,uart,pcie区别

    一 spi SPI 是英语Serial Peripheral interface的缩写 xff0c 顾名思义就是串行外围设备接口 xff0c 是同步传输协议 xff0c 特征是 xff1a 设备有主机 xff08 master xff09
  • SYD8821 IIC模块使用说明

    SYD8821是具有全球领先低功耗 RX 2 4mA 64 94 5dBm灵敏度 xff0c TX 4 3mA 64 0dBm输出功率 的蓝牙低功耗SOC芯片 xff0c 在极低电流下实现了优异的射频性能 xff0c 搭配176kB SRA
  • STM32软件模拟iic驱动oled(显示汉字,图片)(一)

    一 iic驱动模式 1 硬件驱动 xff1a 所谓硬件驱动就是使用STM32板子上固定的iic接口 xff0c 但是由于板载iic数量有限 xff0c 且大多和别的外设有引脚复用 xff0c 在别的外设使用的情况下还得通过重映射引到别的引脚
  • 通信协议详解(二):IIC总线协议(传输时序+数据格式+设计实现)

    文章目录 一 IIC xff08 Inter Integrated Circuit xff09 介绍二 传输协议1 时序传输时序写操作时序数据有效性开始 amp 结束信号从机应答信号 2 数据格式 三 设计实现1 时钟2 传输过程3 三态门
  • STM32 IIC详解

    目录 1 IIC定义 2 IIC协议规范 2 1 SDA和SCL信号 2 2 数据有效性 2 3 开始和结束信号 2 4 字节格式 2 5 从机地址和读写位 3 计算IIC的频率 4 PCF8536 4 1 Acknowledge 4 2
  • STM32标准库通用软件模拟IIC

    STM32标准库通用软件模拟IIC 继上次通用可移植的矩阵键盘之后 xff0c 便继续寻找着下一个能够拿来只需改改引脚就可以使用的通用方案 恰好最近在研究PCA9685 xff0c 这是一片能够产生最多十六路PWM信号的芯片 xff0c 通
  • UART,SPI,IIC,RS232通信时序和规则

    一 UART 1 串口通信方式 2 串口通信步骤 注意 xff1a 串口协议规定 xff0c 闲置时必须是高电平 校验位 xff1a 是使用奇偶校验 停止位必须高电平 一个0和多个0区分是靠掐时间 异步通信 xff1a 时钟各不一样 二 I
  • 12.RTT-IIC设备-AHT10温湿度传感器

    本系列博客更新结束啦 xff01 完结啦 xff01 xff01 xff01 撒花 xff01 xff01 xff01 关于RTT的设备和驱动专题更新完毕啦 xff0c 本期是最后一期 一段学习旅途的结束意味着下一段学习冒险的开始 虽然本系
  • I2C总线时序以及ACK和NACK(NAK),SCL被从机拉低?

    1 I2C协议详解及裸机程序分析 简书 通俗易懂 根据上图 我们首先设置IICCON 来设置时钟 时钟源是PCLK 是50MHZ 太快了我们需要设置这个分频系数 把时钟降低 降低到我们想要的SCL 然后我们要发出start信号 我们需要设置
  • 【N32L40X】学习笔记14-在RT-thread系统中读取eeprom数据

    eeprom 说明 eeprom介绍 AT24C01A 1K串行EEPROM 内部组织16页8字节 1K需要一个7位数据字地址进行随机字寻址 AT24C02 2K串行EEPROM 内部组织32页8字节 2K需要一个8位数据字地址进行随机字寻

随机推荐

  • pyspark报错 org.apache.spark.SparkException: Python worker failed to connect back.

    项目场景 xff1a 使用pycharm工具将spark分析完的数据存储到MySQL数据库中 问题描述 在程序执行过程中发生以下报错 xff1a org span class token punctuation span apache sp
  • python的tkinter(图形用户界面)

    目录标题 什么是图形用户界面 xff08 GUI xff09 Tinter函数和参数说明 xff08 常用 xff09 Lable 标签 xff1a 效果Button 按钮 效果 Entry 文本框 效果 Text xff08 多行文本框
  • K8s配置文档

    xff01 xff01 xff01 xff01 xff01 xff01 如果看不懂文档点击进入视频k8s配置视频 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff
  • 安装spark

    安装spark 上传安装包文件 spark 2 1 1 bin hadoop2 7 解压安装包 span class token function tar span xvf spark 2 1 1 bin hadoop2 7 C opt m
  • 人大金仓数据库的简单巡查

    人大金仓的简单巡查 查询人大金仓的版本 sys ctl V sys ctl version span class token comment 在ksql命令行工具中查询数据库版本 span span class token keyword
  • 人大金仓数据库的单表查询

    人大金仓数据库的单表查询 查看表的内容 span class token comment 查询数据库的创建语句 span d exam span class token punctuation span course span class
  • JWT和Security 登录权限判断和token访问和让token失效

    文章目录 Spring SecurityJWT无状态的单点登录流程用到的方法configure HttpSecurity http 登录 authenticationSuccessHandler loadUserByUsername 通过t
  • Flutter Container设置 width 无效

    文章目录 布局组件和容器组件BoxContraints机制布局组件 Row Column解决办法参考 布局组件和容器组件 容器类Widget和布局类Widget都作用于其子Widget xff0c 不同的是 xff1a 布局类Widget一
  • Flutter 滚动距离来设置TabBar的位置,点击TabBar滚动的到指定的位置

    文章目录 效果gif定义属性每个组件设置Key获取控件的距离顶部的位置设置监听设置TabBar 点击getY源码 感觉有用的话 xff0c star一下如果想一起学习进步 QQ群766903559 效果gif 定义属性 ScrollCont
  • solidity create2 学习

    文章目录 saltcreatecreate2address this clone factoryshr shl使用 两个值生成唯一的值 xff0c 通过唯一值获取对应的两个值 salt nonce 也可以自己生成 create addres
  • Flutter和Native 通信 pigeon

    文章目录 1 pigeon2 定义接口3 定义sh文件 pigeon sh xff08 lib同级目录创建 xff09 4 运行sh文件 pigeon sh 会生成一下文件5 配置6 使用7 IOS xxx plugin h8 XxxPlu
  • flutter调用go

    文章目录 命令引入greeting aar和使用android中使用Flutter2gopluginPlugin kt参考文档 命令 mkdir demo cd demo go mod init demo 编写greeting go go
  • solidity 学习2.批量转账,存入eth。读取数据。

    pragma solidity 0 4 17 import 39 zeppelin solidity contracts token ERC20 StandardToken sol 39 contract BLEOS is Standard
  • 根据图片获取图片中最多的颜色

    根据网络图片获取背景色 xff0c 用Palette 获取出来的颜色总是不对 Palette p 61 Palette from resource generate int defaultColor 61 ContextCompat get
  • flutter-border

    文章目录 Border继承构造方法BorderStyle和BorderSideBorderStyleBorderSide构造方法 BoxShadow构造方法 BoxShape是Code BorderRadius继承CodeRadius xf
  • ubuntu20.04中安装Flatpak,切换数据源

    安装 Flatpak xff1a sudo apt install flatpak 接着 xff0c 使用以下命令添加 Flatpak 数据源 xff1a sudo flatpak remote span class token opera
  • centeros8 图形化界面设置

    基于性能及通用性等因素的考虑 xff0c 阿里云官方提供的公共Linux系统镜像 xff0c 默认不安装图形化桌面组件 通过管理终端连接Linux实例 执行以下命令 xff0c 安装图形桌面的软件包 yum groupinstall 34
  • 定时器周期计算

    对定时器周期公式的总结 xff1a 1 T 61 xff08 arr 43 1 xff09 PSC 43 1 Tck 其中TCK为时钟频率 xff0c PSC为时钟预分频系数 xff0c arr为自动重装载值 f 61 Tck psc 43
  • [已解决 2020年]你的支付授权失败。请核对你的信息并重试,或尝试其他支付方式。请联系你的银行了解更多信息

    博主更多实战教程 xff1a NET WebApi实战教程 微信小程序实战教程 因为苹果政策的调整 xff0c 目前进行开发者计划加入时 xff0c 有两个模式 如果账号本身是在apple developer app中申请的 xff0c 那
  • LPC1768 IIC通信示——PCF8563

    PCF8563与AT24C02一样 xff0c 是典型的IIC通信器件 xff0c 这里就以它为例 xff0c 编写基于LPC1768硬件IIC的通信代码 xff1a 上图是PCF8563各个寄存器地址 xff0c PCF8563的IIC地