PCF8563时钟芯片程序教学文案.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PCF8563 时钟 芯片 程序 教学 文案
- 资源描述:
-
PCF8563时钟芯片程序---------------(对你有帮助就给个好评) #i nclude <reg51.h> #i nclude <intrins.h> sbit SDA=P1^0; // 将p1.0口模拟数据口 sbit SCL=P1^1; // 将p1.1口模拟时钟口 #define MIN 0x02 //秒寄存器 #define SEC 0x03 //分寄存器 #define HOUR 0x04 //时寄存器 #define DAY 0x05 //日寄存器 #define WEEK 0x06 //周寄存器 #define MONTH 0x07 //月寄存器 #define YEAR 0x08 //年寄存器 #define read_ADD 0xA3 //写器件地址 #define write_ADD 0xA2 //读器件地址 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; unsigned char g8563_Store[4]; /*时间交换区,全局变量声明*/ unsigned char code c8563_Store[4]={0x00,0x59,0x07,0x01}; /*写入时间初值:星期一 07:59:00*/ bit bdata SystemError; // 从机错误标志位 //-------------------------------------------------------------------------------------------------- // 函数名称: iic_start() // 函数功能: 启动I2C总线子程序 //-------------------------------------------------------------------------------------------------- void iic_start(void) { EA=0; //时钟保持高,数据线从高到低一次跳变,I2C通信开始 SDA = 1; SCL = 1; delayNOP(); // 延时5us SDA = 0; delayNOP(); SCL = 0; } //-------------------------------------------------------------------------------------------------- // 函数名称: iic_stop() // 函数功能: 停止I2C总线数据传送子程序 //-------------------------------------------------------------------------------------------------- void iic_stop(void) { SDA = 0; //时钟保持高,数据线从低到高一次跳变,I2C通信停止 SCL = 1; delayNOP(); SDA = 1; delayNOP(); SCL = 0; } //-------------------------------------------------------------------------------------------------- // 函数名称: slave_ACK // 函数功能: 从机发送应答位子程序 //-------------------------------------------------------------------------------------------------- void slave_ACK(void) { SDA = 0; SCL = 1; delayNOP(); SDA = 1; SCL = 0; } //-------------------------------------------------------------------------------------------------- // 函数名称: slave_NOACK // 函数功能: 从机发送非应答位子程序,迫使数据传输过程结束 //-------------------------------------------------------------------------------------------------- void slave_NOACK(void) { SDA = 1; SCL = 1; delayNOP(); SDA = 0; SCL = 0; } //-------------------------------------------------------------------------------------------------- // 函数名称: check_ACK // 函数功能: 主机应答位检查子程序,迫使数据传输过程结束 //-------------------------------------------------------------------------------------------------- void check_ACK(void) { SDA = 1; // 将p1.0设置成输入,必须先向端口写1 SCL = 1; F0 = 0; if(SDA == 1) // 若SDA=1表明非应答,置位非应答标志F0 F0 = 1; SCL = 0; } //-------------------------------------------------------------------------------------------------- // 函数名称: IICSendByte // 入口参数: ch // 函数功能: 发送一个字节 //-------------------------------------------------------------------------------------------------- void IICSendByte(unsigned char ch) { unsigned char idata n=8; // 向SDA上发送一位数据字节,共八位 while(n--) { if((ch&0x80) == 0x80) // 若要发送的数据最高位为1则发送位1 { SDA = 1; // 传送位1 SCL = 1; delayNOP(); SDA = 0; SCL = 0; } else { SDA = 0; // 否则传送位0 SCL = 1; delayNOP(); SCL = 0; } ch = ch<<1; // 数据左移一位 } } //-------------------------------------------------------------------------------------------------- // 函数名称: IICreceiveByte // 返回接收的数据 // 函数功能: 接收一字节子程序 //-------------------------------------------------------------------------------------------------- unsigned char IICreceiveByte(void) { unsigned char idata n=8; // 从SDA线上读取一上数据字节,共八位 unsigned char tdata; while(n--) { SDA = 1; SCL = 1; tdata = tdata<<1; // 左移一位,或_crol_(temp,1) if(SDA == 1) tdata = tdata|0x01; // 若接收到的位为1,则数据的最后一位置1 else tdata = tdata&0xfe; // 否则数据的最后一位置0 SCL=0; } return(tdata); } //-------------------------------------------------------------------------------------------------- // 用户调用子程序 // 函数名称: write_CFGbyte // 入口参数: CFG_add寄存器地址,CFG_data要写入寄存器的数值 // 函数功能: 发送n位数据子程序 //-------------------------------------------------------------------------------------------------- void write_CFGbyte(unsigned char CFG_add,unsigned char CFG_data) { //unsigned char idata send_da,i=0; iic_start(); // 启动I2C IICSendByte(write_ADD); // 发送器件写地址 check_ACK(); // 检查应答位 if(F0 == 1) { SystemError = 1; return; // 若非应答表明器件错误或已坏,置错误标志位SystemError } IICSendByte(CFG_add); // 发送寄存器地址 check_ACK(); // 检查应答位 if(F0 == 1) { SystemError = 1; return; // 若非应答表明器件错误或已坏,置错误标志位SystemError } IICSendByte(CFG_data); // 发送寄存器数据 check_ACK(); // 检查应答位 if(F0 == 1) { SystemError = 1; return; // 若非应答表明器件错误或已坏,置错误标志位SystemError } iic_stop(); // 全部发完则停止 } //-------------------------------------------------------------------------------------------------- // 用户调用子程序 // 函数名称: receiveNbyte // 入口参数: CFG_add寄存器地址地址 // 出口参数: receive_da // 函数功能: 接收某个寄存器数据子程序 //-------------------------------------------------------------------------------------------------- unsigned char receive_CFGbyte(unsigned char idata CFG_add) { unsigned char idata receive_da; iic_start(); IICSendByte(write_ADD); //器件写地址 check_ACK(); if(F0 == 1) { SystemError = 1; return(0); } IICSendByte(CFG_add); //寄存器地址 check_ACK(); if(F0 == 1) { SystemError = 1; return(0); } iic_start(); IICSendByte(read_ADD); //器件读地址 if(F0 == 1) { SystemError = 1; return(0); } receive_da=IICreceiveByte(); slave_NOACK(); // 收到最后一个字节后发送一个非应答位 iic_stop(); return(receive_da); } //-------------------------------------------------------------------------------------------------- // 用户调用函数 // 函数名称: receive_CFGNbyte // 入口参数: CFG_add寄存器地址地址,n连续读数位,* buff存储区地址 // 函数功能: 接收n个寄存器数据子程序 //-------------------------------------------------------------------------------------------------- void receive_CFGNbyte(unsigned char CFG_add, unsigned char n,unsigned char * buff) { unsigned char receive_da,i=0; iic_start(); IICSendByte(write_ADD); //器件写地址 check_ACK(); if(F0 == 1) { SystemError = 1; return; } IICSendByte(CFG_add); //寄存器地址 check_ACK(); if(F0 == 1) { SystemError = 1; return; } iic_start(); IICSendByte(read_ADD); //器件读地址 if(F0 == 1) { SystemError = 1; return; } while(n--) { receive_da=IICreceiveByte(); buff[i++]=receive_da; slave_ACK(); // 收到一个字节后发送一个应答位 } slave_NOACK(); // 收到最后一个字节后发送一个非应答位 iic_stop(); } //-------------------------------------------------------------------------------------------------- // 用户调用函数 // 函数名称: P8563_Readtime // 函数功能: 读出时间信息 //-------------------------------------------------------------------------------------------------- void P8563_Readtime() { unsigned char time[7]; receive_CFGNbyte(MIN,0x07,time); g8563_Store[0]=time[0]&0x7f; /*秒*/ g8563_Store[1]=time[1]&0x7f; /*分*/ g8563_Store[2]=time[2]&0x3f; /*小时*/ g8563_Store[3]=time[4]&0x07; /*星期*/ } //-------------------------------------------------------------------------------------------------- // 用户调用函数 // 函数名称: P8563_settime // 函数功能: 写时间修改值 //-------------------------------------------------------------------------------------------------- void P8563_settime() { unsigned char i; for(i=2;i<=4;i++) { write_CFGbyte(i,g8563_Store[i-2]); } write_CFGbyte(6,g8563_Store[3]); } //-------------------------------------------------------------------------------------------------- // 用户调用函数 // 函数名称: P8563_init // 函数功能: 初始设置 //-------------------------------------------------------------------------------------------------- void P8563_init() { unsigned char i; if((receive_CFGbyte(0x0a))!=0x8) /*检查是否第一次启动,是则初始化时间*/ { for(i=0;i<=3;i++) g8563_Store[i]=c8563_Store[i]; /*初始化时间*/ P8563_settime(); write_CFGbyte(0x0,0x00); write_CFGbyte(0xa,0x8); /*8:00报警*/ write_CFGbyte(0x01,0x12); /*报警有效*/ write_CFGbyte(0xd,0xf0); } }展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




PCF8563时钟芯片程序教学文案.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/4013208.html