版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PCF8563时钟芯片驱动详解1概述PCF8563是PHILIPS公司推出的一款工业级内含I2C总线接口功能的具有极低功耗的多功能时钟/日历芯片。PCF8563的多种报警功能、定时器功能、时钟输出功能以及中断输出功能能完成各种复杂的定时服务,甚至可为单片机提供看门狗功能。内部时钟电路、内部振荡电路、内部低电压检测电路(1.0V)以及两线制I2C总线通讯方式,不但使外围电路及其简洁,而且也增加了芯片的可靠性。同时每次读写数据后,内嵌的字地址寄存器会自动产生增量。当然作为时钟芯片,PCF8563亦解决了2000年问题。因而,PCF8563是一款性价比极高的时钟芯片,它已被广泛用于电表、水表、气表、
2、电话、传真机、便携式仪器以及电池供电的仪器仪表等产品领域。2原理图3 8563源代码/*/define/*#definePCF8563_ADDR0xa2/ PCF8563设备地址#definePCF8563_ENABLE0x00/ 设置#definePCF8563_SUBADDR0x02/ 时间地址#definePCF8563_NUMB0x07/ 时间个数 #definePCF8563_LOOPTIME0x02/ 循环次数#definePCF8563_SECMASK 0x7f/ second#definePCF8563_MINMASK 0x7f/ minute#definePCF8563_HR
3、MASK 0x3f/ hour#definePCF8563_DAYMASK 0x3f/ day#definePCF8563_WKMASK 0x07/ week#definePCF8563_MOMASK 0x1f/ month#definePCF8563_YRMASK 0xff/ year/*void DELAY_US(Uint16 i)Uint16 m,n;for(m=0;mi;m+)for(n=0;n5;n+)_nop_();*/* 函数名称: void DELAY_MS(Uint16 i)* 功能描述: 延时函数 * 输 入:延时毫秒数* 输 出:无*/ /延时函数单位msvoid DEL
4、AY_MS(Uint16 i)Uint16 m,n;for(m=0;mi;m+)for(n=0;ntime.ucSecond = buf0;/秒Time-time.ucMinute = buf1;/分Time-time.ucHour = buf2;/时 屏蔽最高位Time-date.ucDay = buf3;/日Time-Week = buf4;/星期Time-date.ucMonth = buf5;/月Time-date.ucYear = buf6;/年/* 函数名称: CrtSetDateTime(struct SYSTEM_TIME *Time)* 功能描述: 设置时间* 说 明:将Ti
5、me指向的结构中日期时间参数设置到sd24.5中 * 输 入:无* 输 出:无*/void CrtSetDateTime(struct SYSTEM_TIME *Time)Uint8 buf8;/设备地址I2cDeviceAdd = PCF8563_ADDR;/写入设置(时钟工作、关闭复位、关闭测试模式)buf0 = PCF8563_ENABLE;SM_Send (0, buf, 0);/写入日期时间buf0 = Time-time.ucSecond;/秒buf1 = Time-time.ucMinute;/分buf2 = Time-time.ucHour|0x80;/时 置为24小时格式bu
6、f3 = Time-date.ucDay;/日buf4 = Time-Week;/星期buf5 = Time-date.ucMonth;/月buf6 = Time-date.ucYear;/年SM_Send (PCF8563_SUBADDR, buf, PCF8563_NUMB);4 新华龙C8051F022的IIC驱动程序/-/ Includes/-#include / SFR declarations#include #include #include #include #define SMB_FREQUENCY 10000L / Target SCL clock rate/* 函数名称:
7、void SPI0_Init()* 功能描述:I2C初始化程序* 说 明:1. 置下降沿有效2. 置工作时钟2MHz3. * 输 入:无* 输 出:无*/void I2C_Init()SMB0CN = 0x44;/ Enable SMBus with ACKs on acknowledge cycleSMB0CR = -80; /257 - (SYSCLK / (2 * SMB_FREQUENCY);EIE1 |= 2;/ SMBus interrupt enable/EA = 1;/ Global interrupt enableI2cSM_BUSY = 0;/ Free SMBus for
8、 first transfer./* 函数名称:void SM_Send (Uint8 byte_address,Uint8 *SendBuf,Uint8 count)* 功能描述:I2C写入程序* 说 明:1. 等待空闲2. 写入数据3. 等待结束 * 输 入:地址byte_address、写入数据缓冲区*SendBuf、数量count* 输 出:无*/void SM_Send (Uint8 byte_address,Uint8 *SendBuf,Uint8 count)ET0 = 0;/禁止中断ET2 = 0;/禁止中断while (I2cSM_BUSY);/ 等待空闲I2cSM_BUSY
9、 = 1;/ 置忙SMB0CN = 0x44;/ SMBus enabled, ACK on acknowledge cycleI2cSendCount = count;/ 置写入数量I2cRecCount = 0;/ 读出数量清零I2cSendDPTR = SendBuf;/ SMBus enabled, ACK on acknowledge cycleI2CWRITE;/ Chip select + WRITEI2cMemAdd = byte_address;STO = 0;STA = 1;/ 启动传输FeedWatchdog();while (I2cSM_BUSY);/ 等待空闲ET0
10、= 1;/允许中断ET2 = 1;/允许中断/* 函数名称:void SM_Receive (Uint8 byte_address,Uint8 *ReadBuf,Uint8 count)* 功能描述:I2C读取程序* 说 明:1. 等待空闲2. 置地址3. 读取数据3. 等待结束 * 输 入:地址byte_address、读取数据缓冲区*SendBuf、数量count* 输 出:无*/void SM_Receive (Uint8 byte_address,Uint8 *ReadBuf,Uint8 count)ET0 = 0;/禁止中断ET2 = 0;/禁止中断while (I2cSM_BUSY
11、);/ 等待空闲I2cSM_BUSY = 1;/ 置忙SMB0CN = 0x44;/ SMBus enabled, ACK on acknowledge cycleI2cSendCount = 0;/ 置写入数量I2CWRITE;/ Chip select + WRITEI2cMemAdd = byte_address;/值地址偏移I2cRecCount = count;/要接收的数据个数I2cRecDPTR = ReadBuf;/指向要接收的数据区STO = 0;STA = 1;/ Start transferFeedWatchdog();while (I2cSM_BUSY);/ 等待空闲E
12、T0 = 1;/允许中断ET2 = 1;/允许中断/* 函数名称:void SMBUS_ISR (void) interrupt 7* 功能描述:I2C中断服务程序* 说 明:1. 选择器件地址2. 置读写地址3. 读取或写入数据3. 置结束标志 * 输 入:无* 输 出:无*/void SMBUS_ISR (void) interrupt 7switch (SMB0STA) / Status code for the SMBus (SMB0STA register) / 主发送器/接收器:起始条件已发送/ 在该状态发送的COMMAND 字的R/W 位总是为0(W),/ 因为对于读和写操作来说
13、都必须先写存储器地址。case SMB_START:SMB0DAT = I2cCOMMAND;/ 写入含读写指令的设备地址STA = 0;/ 清除启动标志break;/主发送器/接收器:重复起始条件已发送。/ 该状态只应在读操作期间出现,在存储器地址已发送并得到确认之后case SMB_RP_START:I2CREAD;/ 置设备读SMB0DAT = I2cCOMMAND;/ 写入含读写指令的设备地址STA = 0;break; / 主发送器 设备地址+(W/R)已发出。收到ACK。case SMB_MTADDACK:SMB0DAT = I2cMemAdd;/ 发送要写入的字节地址break;
14、 / 主发送器 从地址+W已发出。收到NACK。case SMB_MTADDNACK:/*if (I2cSendCount)/ 传输结束SMB0DAT = *I2cSendDPTR;/传送数据I2cSendDPTR+;I2cSendCount-;elseif(I2cRecCount)STO = 0;STA = 1;elseSTO = 1;I2cSM_BUSY = 0;/发送停止,释放总线*/STO = 1;STA = 1;break; / 数据字节已经发出,收到ACKcase SMB_MTDBACK:if (I2cSendCount)/ 传输结束SMB0DAT = *I2cSendDPTR;/
15、传送数据I2cSendDPTR+;I2cSendCount-;elseif(I2cRecCount)STO = 0;STA = 1;elseSTO = 1;I2cSM_BUSY = 0;/发送停止,释放总线break;/ 数据字节已经发出,收到NACKcase SMB_MTDBNACK:STO = 1;STA = 1;break;/ 主发送器 竞争失败case SMB_MTARBLOST:STO = 1;STA = 1;break; / 从地址+R已经发出,收到ACKcase SMB_MRADDACK:SysBuff500=8;/if (counter = 1)/只接收一个字节时要设置接收后就NACK/ AA = 0;/ NACK sent on acknowledge cycle./break;/ 从地址+R已经发出,收到NACKcase SMB_MRADDNACK:STO = 0;STA = 1;break;/ 数据字节收到,ACK已经发出case SMB_MRDBACK:if (I2cRecCount = 1)AA = 0;/ 收到最后一个字节前准备设置最后一个字节不应答I
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医药科技疫苗研发题目及解析
- 外科神经外科脑外伤处理题目及答案
- 花艺师花束设计题目及详解
- 厨师(火锅调味)题目及详解
- 2026年人工智能训练师职业发展全景规划:从入门到资深的进阶之路
- 2025年AI预测药物毒性外包的多模型融合
- 工地喝酒免责协议书
- 工程开发保密协议书
- 工资抵押贷款协议书
- 幼儿免责协议书
- 2025年东莞市招聘事业编制教职员真题
- 2026年北京市顺义区中考一模物理试卷(含答案)
- 2025届新高考英语复习《完形填空》题型分析及策略
- 2025年福建鑫叶投资管理集团有限公司招聘考试试卷真题
- 上海市静安区2026年下学期九年级中考二模 历史试卷(含答案)
- 如何提高老年人健康体检率
- 涉氨制冷试题及答案
- 2026年医师定期考核人文试题库100道带答案(满分必刷)
- 专题03 函数导数及应用(高频考点专练)(原卷版及解析)
- 北京市西城区2025-2026学年高三(上)期末英语试卷(含答案)
- 2026年大学辅导员招聘面试全解析与参考答案手册
评论
0/150
提交评论