欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    PCF8563时钟芯片驱动程序分享.doc

    • 资源ID:3270378       资源大小:48.50KB        全文页数:12页
    • 资源格式: DOC        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    PCF8563时钟芯片驱动程序分享.doc

    PCF8563时钟芯片驱动程序分享PCF8563时钟芯片简介PCF8563是PHILIPS公司推出的一款工业级内含I2C总线接口功能的具有极低功耗的多功能时钟/日历芯片。PCF8563的多种报警功能、定时器功能、时钟输出功能以及中断输出功能能完成各种复杂的定时服务,甚至可为单片机提供看门狗功能。内部时钟电路、内部振荡电路、内部低电压检测电路(1.0V)以及两线制I2C总线通讯方式,不但使外围电路及其简洁,而且也增加了芯片的可靠性。同时每次读写数据后,内嵌的字地址寄存器会自动产生增量。当然作为时钟芯片,PCF8563亦解决了2000年问题。因而,PCF8563是一款性价比极高的时钟芯片,它已被广泛用于电表、水表、气表、电话、传真机、便携式仪器以及电池供电的仪器仪表等产品领域。PCF8563芯片主要电气特性1)大工作电压范围:1.05.5V2)400KHz 的 I2C 总线接口(VDD=1.85.5V 时)。时钟频率最大400KH3)i2C 总线从地址:读,0A3H;写,0A2H 。PCF8563时钟芯片驱动程序/*/define/*#define PCF8563_ADDR 0xa2 / PCF8563设备地址#define PCF8563_ENABLE 0x00 / 设置#define PCF8563_SUBADDR 0x02 / 时间地址#define PCF8563_NUMB 0x07 / 时间个数#define PCF8563_LOOPTIME 0x02 / 循环次数#define PCF8563_SECMASK 0x7f / second#define PCF8563_MINMASK 0x7f / minute#define PCF8563_HRMASK 0x3f / hour#define PCF8563_DAYMASK 0x3f / day#define PCF8563_WKMASK 0x07 / week#define PCF8563_MOMASK 0x1f / month#define PCF8563_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 DELAY_MS(Uint16 i) Uint16 m,n; for(m=0;mi;m+)for(n=0;n1000;n+)_nop_();* 函数名称: InitCrt()* 功能描述: SD2405的初始化* 输 入:无 * 输 出:无*/void InitCrt() /设备地址I2cDeviceAdd = PCF8563_ADDR; /* 函数名称: CrtGetDateTime(struct SYSTEM_TIME *Time)* 功能描述: 读取时间* 说 明:将从PCF8563中读取的时间放入Time指向的结构中* 输 入:无* 输 出:无*/void CrtGetDateTime(struct SYSTEM_TIME *Time) Uint8 buf8; /设备地址I2cDeviceAdd = PCF8563_ADDR;SM_Receive (PCF8563_SUBADDR , buf, PCF8563_NUMB);Time-time.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) * 功能描述: 设置时间* 说 明:将Time指向的结构中日期时间参数设置到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小时格式buf3 = 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 c8051f020.h / SFR declarations #include stdio.h#include king.h#include DYSJ.h#include I2C.H#define SMB_FREQUENCY 10000L / Target SCL clock rate/* 函数名称: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 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 = 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 = 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); / 等待空闲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); / 等待空闲ET0 = 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),/ 因为对于读和写操作来说都必须先写存储器地址。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;/ 主发送器 从地址+W已发出。收到NACK。case SMB_MTADDNACK:/* if (I2cSendCount) / 传输结束SMB0DAT = *I2cSendDPTR; /传送数据I2cSendDPTR+;I2cSendCount-;else if(I2cRecCount)STO = 0;STA = 1;elseSTO = 1I2cSM_BUSY = 0; /发送停止,释放总线*/STO = 1;STA = 1;break;/ 数据字节已经发出,收到ACKcase SMB_MTDBACK:if (I2cSendCount) / 传输结束SMB0DAT = *I2cSendDPTR; /传送数据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;/ 收到最后一个字节前准备设置最后一个字节不应答I2cRecCount-;*I2cRecDPTR = SMB0DAT;I2cRecDPTR+;break;/ 数据字节收到,NACK已经发出case SMB_MRDBNACK:*I2cRecDPTR = SMB0DAT;STO = 1;I2cSM_BUSY = 0; / Free SMBusbreak;/ 未知状态或总线错误default:STO = 1; / Reset communication.I2cSM_BUSY = 0;break;SI=0; / clear interrupt flag

    注意事项

    本文(PCF8563时钟芯片驱动程序分享.doc)为本站会员(白大夫)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开