您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 时钟芯片pcf8583中文资料及c51程序详解
主要用于单片机定时采集,本人将资料部分中文化,并附有51完整c程序,调试通过,供大家参考。芯片简介:1、PCF8583是PHILIPS公司制造的带有256×8bitRAM的8引脚日历/时钟芯片.2、两线串行I2C总线接口,内含完整的振荡,分频,上电复位电路,并具备计时,日历,定时,闹钟和中断输出功能.3、带256字节静态RAM4可以做到1/100秒采集,报警控制输出.5.具有定时和时钟两种模式进行控制操作.6结构简单,占用单片机端口少,功耗极低.PCF8583中文资料以下为芯片详细说明:-----------------------------------------------------------------------------------------1芯片特点●数据保持和时钟工作电压1~6V,总线工作电压2.5~6V;●采用8脚DIP或SO封装形式;●I2C两线串行总线接口;●内含256×8bit静态RAM;●有定时,定闹功能和中断输出;●内有振荡器,分频器和上电复位电路,可使用32768Hz石英晶振或外部50Hz时钟;●片内字节地址读写后自动加一;●可用作定时器或计数器.2.引脚功能PCF8583引脚功能如图1所列.12外接时钟3i2c挂接选择(一个接gnd)4Gnd5数据线6时钟线7中断输出(低电平有效)8正电源3.片内寄存器功能描述在256字节RAM中,前16字节(地址00~0FH)是带有特殊功能的寄存器,(10-FF为静态存储)现分述如下:内部结构如图2:3.1状态寄存器(地址00H)***状态寄存器控制着芯片所有的功能和操作,了解其工作方式十分重要************内容如图3所列.图3PCF8583状态寄存器详细说明如下:00寄存器(状态寄存器)8个位名称功能:LSB----------MSb低到高8位功能定义:0、计时器计时器到秒标志占空比50%(0为使能)1闹钟定闹时间到分标志占空比50%(0为使能)2闹钟使能(是否闹钟允许)0:禁止;1:允许3屏蔽位(控制0506寄存器如何使用)05和06寄存器屏蔽(05,06寄存器有特殊功能,一器复用)0:不屏蔽;1:屏蔽4~5功能模式芯片工作方式00:32768Hz时钟;01:50Hz时钟;10:计数器模式;11:测试模式6计数锁存0:计数;1:锁存(计数时要注意其的使用的)7计数停止停止计数标志0:计数;1:停止计数,分频器复位(计时时注意其使用,)重要说明:!!其中6,7位十分重要,要及时控制其开启还是停止,才能防止时钟混乱问题.3.2时钟计数器(地址01H~06H)01/100秒(0~99)02秒(0~59)03分(0~59)04,24/12hAM/PM小时(0/1~24/12)(图5)小时模式选择(0为24h,1为12h)和上下午指示(0为AM,1为PM).05年(0~3)日期(1~28/29/30/31)(图6)06星期(0~6)月(1~12)(07图)重要说明:05,06年份和日期,星期和月份分别在地址05H和06H.如果状态寄存器的屏蔽位有效,当读这些寄存器时,年份和星期的有关位会被屏蔽,这样允许用户直接读取日期和月份.(由00h寄存器第3位来控制)图756如下:3.3计时器(地址07H)(0~99)设置状态寄存器为XX0XX1XX可以打开计时器.在时钟模式中,计时器可以编程为以1/100秒,秒,分,小时或天计数.缺省状态下,计时器按天数累计.计时器为百进计数,溢出时,timer标志被置位,这个标志必须由软件来复位,通过设置闹钟寄存器的计时器中断允许位,可以传递到INT脚引起中断.(注意做时间定时采集时注意100中断一次,时间一般为60进位的,其计时为秒,分,小时那种来计时可通过设置定闹寄存器(08h寄存器)的低3位来编程3.408闹钟控制寄存器详解闹钟控制寄存器是用来控制定闹,定时和中断输出功能的.在时钟和计数器方式下有不同的功能8位使用说明:(2种模式,由00寄存器4-5位来控制)1.可以选择32768Hz和50Hz时钟模式2.计数器模式.1.时钟和日历计数器(时钟方式)图8计时器设置(0-3位)(与07h寄存器配合使用)000:无计时器001:1/100秒010:秒011:分100:小时101:日110:不用111:测试模式3计时器中断允许(与07h寄存器配合使用)0:禁止1:允许4~5时钟定闹设置(与09-0F寄存器配合使用)00:无闹钟01:日期闹钟10:周闹钟11:每日闹钟6计时器报警允许(与07h寄存器配合使用)0:禁止1:允许7报警中断允许(与09-0F寄存器配合使用)0:禁止1:允许2计数器的模式(图10)状态寄存器(00H)为XX10XXXX时,可以选择计数器模式,计数器模式仅使用RAM的01H~03H字节,用于对OSCI端脉冲的计数(OSCO开路).计数器最大可计到百万(6位BCD码).如允许计数报警,当计数器的值与09H,0AH,0BH位的值相同时将发生一次计数报警,alarm标志被置1,设置中断允许可引发中断.在此模式下,计时器(07H)受报警控制寄存器低3位控制,计时器的功能和时钟模式相同.计时器设置(前三位与时钟模式不同,其余相同)000:无计时器001:1010:100011:10000100:1000000101:禁止110:禁止111:测试模式3计时器中断允许0:禁止1:允许计时器中断允许0:禁止1:允许4~5时钟定闹设置00:无闹钟01:日期闹钟10:周闹钟11:每日闹钟定闹设置00:无定闹01:定闹方式10,11:禁止6计时器报警允许0:禁止1:允许计时器报警允许0:禁止1:允许7报警中断允许0:禁止1:允许报警中断允许0:禁止1:允许3.5闹钟寄存器(地址09H~0FH)设置状态寄存器可以激活闹钟寄存器.设置闹钟控制寄存器可以选择定闹方式,闹钟时间到会使状态寄存器中的alarm标志置高,当alarm中断允许标志为1时,输出INT引脚被拉低,并一直保持到复位或被软件清除.闹钟寄存器以时钟计数器相同的顺序放在地址09H以后的位置上,当闹钟寄存器每位都符合对应的时钟计数器时产生一个闹钟信号.通过设置闹钟计数器,闹钟可以被编程为控制日期,每天,每周或一段时间后启动;指定日期的闹钟忽略年和周位;日闹钟忽略月和日期位;周闹钟时,周/月寄存器将选择一周相应的一天启动闹钟,此时闹钟月份寄存器(0EH)改为星期寄存器,低七位对应周日到周六,最高位不用.另外,通过设置计时报警位,可以编程为定时闹钟.当计时器(0FH)值和时钟计数器(07H)位相同时,报警启动(alarm标志置1).在12小时模式时,第6和第7位的时寄存器一样.09H闹钟1/100秒0AH闹钟秒0BH闹钟分0CH闹钟小时0DH闹钟日期0EH闹钟月份0FH闹钟计时器图9为星期报警如何设置以下为时续和程序详解---------------------------------------------------------------------------------------------------------------------I2c开始和停止时续图程序如下voidstart(){SDA=1;_nop_();//12MHz主频一个周期空指令延迟1us(和主频有关系)_nop_();_nop_();_nop_();_nop_();SCL=1;//在时钟信号为高电平,数据信号发生有高到底的跳变时,为起始SDA=0;_nop_();_nop_();_nop_();_nop_();_nop_();SCL=0;}voidstop(){SDA=0;_nop_();_nop_();_nop_();_nop_();_nop_();SCL=1;SDA=1;_nop_();_nop_();_nop_();_nop_();_nop_();SCL=0;}应答和等待应答图续,和cpu进行对接判断voidask(biti){SDA=i;//应答信号0,非应答信号1SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();SCL=0;}bitwaitask(){unsignedcharwaitTime=0xff;//设置Ack信号超时数;SDA=1;//将数据线拉高;SCL=1;//启动Ack脉冲;_nop_();_nop_();_nop_();_nop_();_nop_();while(SDA){waitTime--;if(!waitTime){SCL=0;//SCL=0;stop();return0;}}SCL=0;//操作完成后确认SCL为0,此时SDA=0;return1;}读一个字节时续图,其中r/w为1进行读数据unsignedcharreadbyte(){unsignedchartmp=0,i;for(i=0;i8;i++){SCL=0;SDA=1;//向I/O口写1后准备读入;_nop_();_nop_();_nop_();_nop_();_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();tmp=1;if(SDA){tmp|=0x01;}}SCL=0;//SCL=0;returntmp;}写一个字节时续图,其中r/w为0进行写数据voidwritebyte(unsignedchardat){unsignedchari;for(i=0;i8;i++){if(dat&0x80)SDA=1;elseSDA=0;dat=dat1;SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();SCL=0;}}I2c挂接图A0接地,则写设备地址为0Xa0(r/w=0),读设备地址为0Xa1(r/w=1)与寄存器进行配合操作.从其中一个pcf8583中读和写数据时续图.从设备中(pcf8583)读取数据,(r/w=1)voidPCF8583_ReadDat(unsignedcharaddrInter,unsignedcharnum,unsignedchar*buff){unsignedchari;start();//启动IICBus;writebyte(0xa0);//PCF8583设备寻址;命令:写;if(!waitask())writebyte(0xa0);//等待Ack信号;writebyte(addrInter);//发送内部寄存器地址;if(!waitask())writebyte(addrInter);//等待Ack信号;start();//参考PCF读ReadMode时序;writebyte(0xa1);//PCF8583设备寻址,命令:读;if(!waitask())writebyte(0xa1);for(i=0;inum-1;i++){buff[i]=readbyte();//读一个字节;ask(0);//发送应答信号;}buff[num-1]=readbyte();ask(1);//最后一个字节发送非应答信号;stop();//终止本次传输,IICBus空闲;}2向挂接设备(pcf8583)中写数据,(r/w=0)voidPCF8583_WriteByte(unsignedcharaddrInter,unsignedcharval){start();writebyte(0xa0);if(!waitask())writebyte(0xa0);writebyte(addrInter);if(!waitask())writebyte(addrInter);writebyte(val);if(!waitask())writebyte(val);stop();}以下时间响应图注意延时操作,(和自己的主频有关,ns的不用延时,以免时续不对)多路挂接图,改变设备地址可以进行控制操作了Dip-8尺寸So-8尺寸实际使用例子与89c52连接图,定时int输出控制cpu外部中断0唤醒休眠中的cpu(如今的新型的可以唤醒掉电)也
本文标题:时钟芯片pcf8583中文资料及c51程序详解
链接地址:https://www.777doc.com/doc-6064825 .html