AT8568定时时钟芯片
- 格式:pdf
- 大小:912.94 KB
- 文档页数:31
STM8学习笔记——时钟和GPIO说起STM8 的时钟,那还真是个杯具,用HSI 没问题,切换到HSE 也没问题,就是切LSI 怎么都不行,然后百思不得其解人,然后上论坛求教,才知道还有个选项字节(OPTION BYTE),数据手册上有这么一段描述:选项字节包括芯片硬件特性的配置和存储器的保护信息,这些字节保存在存储器中一个专用的块内。
除了ROP(读出保护)字节,每个选项字节必须被保存两次,一个是通常的格式(OPTx)和一个用来备份的互补格式(NOPTx)要使用内部低速RC 必须将LSI_EN 置1,就是这个地方让我纠结了半天,然后用IAR 将其置1,方法是:进入调试模式,在上面有个ST-LINK,点击,看到OPTION BYTE,左键点进去,右键单击上面的选项,就可更改了,然后全速运行,就写进去了。
STM8 的时钟分为HSI,HSE,LSI,最常用的是HSI,STMS105S4 内置的是16M 的RC,叫fhsi。
它可以分频输出为fhsidiv=fhsi/hsidiv,如果选择其为主时钟源,那么主时钟fmaster=fhsidiv。
CPU 时钟fcpu=fmaster/cpudiv。
可以通过外设时钟门控寄存器CLK_PCKENR1 和CLK_PCKENR2 选择是否与某个外设连接。
好了上个切换内部时钟的源代码,测试通过void CLK_Init(void){ //切换到内部LSI(!!!需要修改选项字节的LSI_EN 为1)CLK_ICKR|=0x08;//开启内部低速RC 震荡while(CLK_ICKR&0x10==0); //LSI 准备就绪CLK_SWR=0xd2; while(CLK_SWCR&0x08==0); //等待目标时钟源就绪CLK_SWCR|=0x02; //CPU 分频设置CLK_CKDIVR=0;//内部RC 输出。
常用定时芯片-回复什么是常用定时芯片?在现代电子领域中,定时芯片被广泛应用于各种设备和系统中,以确保精确的时间控制。
常用定时芯片是一类专门用于产生频率和时序信号的集成电路。
它们包含了内部的振荡器电路、频率分频器以及其他相关的控制电路,可以生成各种时钟信号、脉冲信号、以及特定周期的信号。
常用定时芯片在电子设备中具有重要的作用,例如在计算机、通信设备、工业自动化和消费电子等领域起到至关重要的作用。
常用的定时芯片有哪些?1. 555定时器芯片:555定时器芯片具有广泛的应用领域,包括脉冲发生器、方波发生器、多谐振荡器、控制器等。
它有三个主要的功能:比较器、参考电压和放电开关。
2. 556双555定时芯片:556双555定时芯片是由两个555定时器芯片组成的集成电路。
它在一块芯片上提供了两个独立的555定时器,可以产生更多的定时和脉冲信号。
3. DS1302实时时钟芯片:DS1302实时时钟芯片是一种低功耗时钟芯片,主要用于电池供电的设备中。
它具备了年、月、日、时、分、秒的计时功能,能够提供精确的时间和日期信息。
4. CD4541定时器芯片:CD4541定时器芯片是一种带有独立外界低功耗时钟和控制选项的CMOS定时器/计数器。
它具有多种工作模式,如定时延迟,脉冲宽度变化和定时周期循环等。
5. MM5369时钟芯片:MM5369时钟芯片是一种灭绝级电压指示器集成芯片,主要用于制作数字时钟、温度计、计数器等。
它能够提供稳定的周期性脉冲信号,用于驱动数码管显示。
6. NE555定时芯片:NE555定时芯片是一种通用的定时器IC,广泛用于各种定时、频率、脉冲和脉宽调制等应用。
它是具有稳定性、可靠性和低功耗的集成电路。
这些常用定时芯片的工作原理是怎样的?对于555定时器芯片来说,它具有3个主要引脚:引脚1 (GND)为地,引脚8 (VCC)为电源,引脚5 (Control)用于控制定时器的工作模式和功能。
引脚2 (TRIG)和引脚6 (THRS)用于设置定时周期,通过改变电容和电阻的阻值来控制不同的输出频率或脉冲宽度。
万年历是一种能够显示日期、星期和时间的工具,它不仅能够告诉我们当天是几号,还能显示星期几和当前时间。
在这个项目中,我们将使用PCF8563时钟芯片来制作一个基于PCF8563的万年历。
PCF8563是一种CMOS实时时钟和日历芯片,它可以提供年、月、日、星期和小时、分钟、秒的数据。
它具有电源管理功能,可以通过一个电源低于2V脉冲输入来切换系统电源供电方式。
为了制作这个基于PCF8563的万年历,我们需要以下材料和工具:1. Arduino主控板2.PCF8563时钟芯片3.16x2液晶显示屏4.面包板5.杜邦线6.10k电阻接下来,我们将按照以下步骤来制作基于PCF8563的万年历:第一步:连接电路首先,将Arduino主控板插入面包板。
接着,连接PCF8563时钟芯片到Arduino主控板上的I2C总线。
将SDA引脚连接到A4引脚,将SCL引脚连接到A5引脚。
此外,还需要使用10k电阻将VCC引脚连接到VCC引脚上。
接下来,将16x2液晶显示屏连接到面包板。
连接液晶屏的RS引脚到Arduino主控板的D12引脚,RW引脚到GND引脚,和E引脚到D11引脚。
将液晶屏的D4到D7引脚连接到Arduino主控板的D5到D2引脚。
第二步:编写代码打开Arduino IDE并创建一个新的项目。
然后,编写以下代码:#include <Wire.h>#include <LiquidCrystal_I2C.h>//定义PCF8563的地址#define PCF8563_ADDR 0x51//定义显示屏的尺寸#define LCD_COLUMNS 16#define LCD_ROWS 2LiquidCrystal_I2C lcd(0x27, LCD_COLUMNS, LCD_ROWS);void setup//初始化I2C总线Wire.begin(;//设置时钟芯片为24小时模式Wire.beginTransmission(PCF8563_ADDR);Wire.write(0x02);Wire.write(0x00);Wire.endTransmission(;//初始化液晶显示屏lcd.begin(LCD_COLUMNS, LCD_ROWS);lcd.setCursor(0, 0);lcd.print("Date: ");lcd.setCursor(0, 1);lcd.print("Time: ");void loop//读取PCF8563的日期和时间Wire.beginTransmission(PCF8563_ADDR); Wire.write(0x02);Wire.endTransmission(;Wire.requestFrom(PCF8563_ADDR, 7);int second = bcdToDec(Wire.read( & 0x7F); int minute = bcdToDec(Wire.read();int hour = bcdToDec(Wire.read( & 0x3F); int dayOfWeek = bcdToDec(Wire.read();int dayOfMonth = bcdToDec(Wire.read();int month = bcdToDec(Wire.read( & 0x1F); int year = bcdToDec(Wire.read();//显示日期和时间lcd.setCursor(6, 0); printWithLeadingZero(dayOfMonth);lcd.print("/");printWithLeadingZero(month);lcd.print("/");lcd.print(2000 + year);lcd.setCursor(6, 1); printWithLeadingZero(hour);lcd.print(":");printWithLeadingZero(minute);lcd.print(":");printWithLeadingZero(second);delay(1000);//将BCD码转换为十进制int bcdToDec(int bcd)return (bcd / 16 * 10) + (bcd % 16);//打印带有前导零的数字void printWithLeadingZero(int number)if (number < 10)lcd.print('0');}lcd.print(number);第三步:上传代码将Arduino主控板连接到电脑,并根据需要选择正确的端口和板类型。
PCF8583中文资料 芯片简介:1、PCF8583是P H IL IPS公司制造的带有256×8bit RAM的8引脚日历/时钟芯片,采用I2C2、两线串行总线接口,内含完整的振荡,分频,上电复位电路,并具备计时,日历,定时,闹钟和中断输出功能.3、日历/时钟芯片I2C总线RAM定时器4、带256字节RAM的实时时钟芯片PCF85831.芯片特点●数据保持和时钟工作电压1~6V ,总线工作电压2. 5~6V ;●采用8脚D IP或SO封装形式;●I2C两线串行总线接口;●内含256×8bit静态RAM ;●有定时,定闹功能和中断输出;●内有振荡器,分频器和上电复位电路,可使用32 768Hz石英晶振或外部50Hz时钟;●片内字节地址读写后自动加一;●可用作定时器或计数器.2.引脚功能PCF8583引脚功能如图1所列.芯片结构图1:3.片内寄存器功能描述在256字节RAM中,前16字节(地址00~0F H)是带有特殊功能的寄存器,现分述如下:内部结构如图2:3. 1状态寄存器(地址00H)状态寄存器控制着芯片所有的功能和操作,其内容如图3所列.图3 PCF8583状态寄存器详细说明如下:00寄存器(状态寄存器)8个位名称功能:0、计时器计时器到标志1闹钟定闹时间到标志查询IC价格,上IC酷搜网http://www.icqoso.com/data-PCF8583T.html 查询IC价格,上IC酷搜网http://www.icqoso.com/data-PCF8583T.html 查询IC价格,上IC酷搜网http://www.icqoso.com/data-PCF8583T.html 2闹钟使能(是否闹钟允许)0:禁止;1 :允许3屏蔽05和06字节屏蔽0 :不屏蔽;1 :屏蔽4~5功能模式芯片工作方式00:32768 Hz时钟;01 :50 Hz时钟;10 :计数器模式;11 :测试模式6计数锁存0:计数;1 :锁存7计数停止停止计数标志0:计数;1 :停止计数,分频器复位3. 2时钟计数器(地址01H~06H)查询IC价格,上IC酷搜网http://www.icqoso.com/data-PCF8583T.html 通过设置状态寄存器,可以选择32 768Hz和50Hz时钟模式或计数器模式.各时钟计数器功能如图4-7所列.1/ 100秒,秒,分,小时依次在地址01~04H.年以0~3表示,0为闰年.小时计数器的高2位分别作为12小时或24小时模式选择(0为24h , 1为12h)和上下午指示(0为AM ,1为PM).年份和日期,星期和月份分别在地址05H和06H.如果状态寄存器的屏蔽位有效,当读这些寄存器时,年份和星期的有关位会被屏蔽,这样允许用户直接读取日期和月份.在芯片以计数器方式工作时,计数器对振荡器输入端的脉冲计数,最多可达到6位数.以BCD码格式依次放在地址01~03H中,此时分频器无效.08寄存器(控制寄存器)8位使用说明:(2种模式,由00寄存器4-5位来控制)图8 时钟和日历计数器(时钟方式)地址bit7bit6bit5bit4~0011/ 100秒(0~99)02秒(0~59)03分(0~59)0424/ 12hAM/ PM 小时(0/ 1~24/ 12)05年(0~3)日期(1~28/ 29/ 30/ 31)06星期(0~6)月(1~12)07计时器(0~99)08闹钟控制寄存器09闹钟1/ 100秒0A 闹钟秒0B 闹钟分0C 闹钟小时0D 闹钟日期0E 闹钟月份查询IC价格,上IC酷搜网http://www.icqoso.com/data-PCF8583T.html 查询IC价格,上IC酷搜网http://www.icqoso.com/data-PCF8583T.html 0F闹钟计时器在设置时间时,应设置状态寄存器的停止位停止时钟,否则可能导致时钟混乱.3. 3计时器(地址07H)设置状态寄存器为XX0XX1XX可以打开计时器.在时钟模式中,计时器可以编程为以1/ 100秒,秒,分,小时或天计数.缺省状态下,计时器按天数累计.计时器为百进计数,溢出时,timer标志被置位,这个标志必须由软件来复位,通过设置闹钟寄存器的计时器中断允许位,可以传递到IN T脚引起中断.计时器的分辨率可通过设置定闹寄存器的低3位来编程(如表4所列).3. 4闹钟控制寄存器(地址08H)闹钟控制寄存器是用来控制定闹,定时和中断输出功能的.在时钟和计数器方式下有不同的功能(如表4所列).3. 5闹钟寄存器(地址09H~0F H)设置状态寄存器可以激活闹钟寄存器.设置闹钟控制寄存器可以选择定闹方式,闹钟时间到会使状态寄存器中的alarm标志置高,当alarm中断允许标志为1时,输出IN T引脚被拉低,并一直保持到复位或被软件清除.闹钟寄存器以时钟计数器相同的顺序放在地址09H以后的位置上(如表3所列),当闹钟寄存器每位都符合对应的时钟计数器时产生一个闹钟信号.通过设置闹钟计数器,闹钟可以被编程为控制日期,每天,每周或一段时间后启动;指定日期的闹钟忽略年和周位;日闹钟忽略月和日期位;周闹钟时,周/月寄存器将选择一周相应的一天启动闹钟,此时闹钟月份寄存器(0EH)改为星期寄存器,低七位对应周日到周六,最高位不用.另外,通过设置计时报警位,可以编程为定时闹钟.当计时器(0F H)值和时钟计数器(07H)位相同时,报警启动(alarm标志置1).在12小时模式时,第6和第7位的时寄存器一样.3. 6计数器的模式状态寄存器为XX10XXXX 时,可以选择计数器模式,计数器模式仅使用RAM 的01H~03H 字节,用于对O SC I 端脉冲的计数(O SCO 开路).计数器最大可计到百万(6位BCD 码).如允许计数报警,当计数器的值与09H,0A H,0B H 位的值相同时将发生一次计数报警, alarm 标志被置1 ,设置中断允许可引发中断.在此模式下,计时器(07H)受报警控制寄存器低3位控制,计时器的功能和时钟模式相同.4.芯片其它功能4. 1中断输出IN T 端图10 闹钟控制寄存器bit 名称时钟功能计数器功能0~2timer计时器设置000:无计时器001 :1/ 100秒查询IC价格,上IC酷搜网http://www.icqoso.com/data-PCF8583T.html 010 :秒011 :分100 :小时101 :日110 :不用111 :测试模式计时器设置000:无计时器001 :1010 :100011 :10000100 :1000000101 :禁止110 :禁止111 :测试模式3timer IN Tenable计时器中断允许0:禁止 1 :允许计时器中断允许0:禁止 1 :允许4~5alarm时钟定闹设置00:无闹钟01 :日期闹钟10 :周闹钟11 :每日闹钟定闹设置00:无定闹01 :定闹方式10 ,11 :禁止6timer alarm enable计时器报警允许 0:禁止 1 :允许计时器报警允许0:禁止 1 :允许7alarmIN Tenable报警中断允许0:禁止 1 :允许报警中断允许0:禁止 1 :允许与89c5252连接图,定时int输出控制cpu外部中断0 唤醒休眠中的cpu也可一唤醒掉电的cpu。
pcf8563芯片
PCF8563芯片是由NXP Semiconductors(飞利浦)公司设计和制造的一款低功耗实时时钟(RTC)芯片。
RTC芯片是一种
用于精确计时和日期追踪的集成电路,广泛应用于各种电子设备中,如计算机、手机、数码相机、电视等。
PCF8563芯片采用高集成度设计,具有很小的封装尺寸,外接简单,使用方便。
它采用了I2C总线接口,能够直接与微控制器通信,实现对芯片的配置和读取。
PCF8563芯片具有以下主要特点:
1. 低功耗:该芯片的工作电流非常低,使用电池供电可以实现长时间的运行。
在不使用时,它可以通过进入低功耗模式来进一步降低功耗。
2. 高精度:PCF8563芯片具有高精确度的实时时钟功能。
其时钟频率可以通过外部晶体或电阻电容网络进行调整。
它可以提供精确的年、月、日、小时、分钟和秒钟信息,并且具有闰年修正功能。
3. 自动日历调节:芯片可以自动调整日期,包括每个月的天数、星期和闰年。
它还可以通过闹钟功能提供特定时间的警报。
4. 定时器和计时器功能:该芯片还具有定时器和计时器功能,可以实现定时触发或计时操作。
通过配置寄存器,可以设置定时器的周期和计时器的起始时间。
5. 温度补偿:PCF8563芯片内置了温度传感器,可以对温度进行补偿,提高时钟的稳定性和精度。
总结起来,PCF8563芯片是一款低功耗、高精度的实时时钟芯片,具有自动日历调节、定时器和计时器功能以及温度补偿等特点。
它广泛应用于各种电子设备中,为设备提供准确的时间和日期追踪功能。
PCF8563日历时钟芯片原理及应用设计PCF8563是一款实时时钟芯片,用于保存日期、时间和闹钟功能,并在需要时提供准确的时间。
它集成有时钟芯片、电历寄存器和电压降器,可以通过I2C总线进行控制和通信。
下面将详细介绍PCF8563的原理以及应用设计。
一、PCF8563的工作原理二、PCF8563的应用设计1.实时时钟系统:PCF8563广泛应用于各种实时时钟系统,例如电子钟、温度计、保险柜等。
它可以提供准确的时间,并可以进行一定的时钟校准,以确保时间的准确性。
2.日历显示:PCF8563可以与液晶显示器或LED显示器等进行连接,实现日期和时间的显示。
通过读取芯片中的日期和时间寄存器,可以将日期和时间信息显示在屏幕上。
3.闹钟功能:PCF8563内置有闹钟功能,可以设置闹钟时间和日期,并在闹钟触发时发出中断信号。
通过与外部蜂鸣器或报警器等连接,可以实现闹铃功能。
4.计时器功能:PCF8563可以用作计时器,例如测量一些过程的时间。
通过读取和记录时钟寄存器中的时间值,可以实现计时功能,并根据需要进行时钟校准。
5.电池电量监测:PCF8563可以监测电池电量,并在电池电量低于一定阈值时发出警告信号。
这对于需要长时间运行的系统非常有用,可以在电池电量低时及时更换电池。
三、总结PCF8563是一款功能强大的实时时钟芯片,可以提供准确的日期和时间,并具有闹钟和计时功能等。
它可以与各种外部设备进行通信,实现多种应用设计。
无论是日历显示系统还是闹钟功能系统,PCF8563都能够提供稳定和准确的时间支持。
可设置8个闹钟时间的智能时钟广东珠海曾向文普通的家用时钟一般只能设置一个闹钟时间,但很多人均需为工作日、周末、早晨、午休等不同时段设置不同的闹钟时间。
如果是使用普通的闹钟,只好每次休息前重新设置,很不方便,有时甚至会出现忘记更改闹钟设置而睡过头的情况。
针对这种情况,本人利用89C51单片机设计了一款有8种闹钟设置的时钟,通过一段时间的使用,情况良好。
1、元件清单共阴极数码管8个4511七段译码芯片1片A TMEL89C51单片机1片24C08EEPROM 1片24M晶振1个9V变压器(3V A)1个LM317输出可调稳压IC 1个整流桥堆1个470uF电容1个100uF电容1个10uF电容1个0.1uF电容1个33pF电容2个蜂鸣器1个9014(或其它NPN管)8个ksp92(或其它PNP管)1个二极管2个1K欧电阻16个470欧电阻1个10K欧可调电阻1个10K欧电阻4个按钮开关4个可装四节电池的电池盒1个万能板(约12CM*17CM)1块所有元件按以下的电路图焊接在一块万能板上。
注意LM317的输出应由低调高,以免烧IC。
2、电路图3、功能简介该时钟以24小时制显示时间,并可显示2000年至2049年之间的任何日期及星期,日期与时间经按键可相互切换,可输入8个闹钟时间设置,每个闹钟设置包括响铃的时间(小时与分钟)、对工作日有效还是对周末有效的标志,以及本项设置是否启用的标志等三部分。
这8个闹钟设置均保存在EEPROM中,即使掉电也不用重新输入。
当然使用者可通过按钮对任何一个设置作修改。
数码管可经按钮关闭显示,避免夜间刺眼、影响睡眠。
调节LM317输出电压,可改变数码管亮度,但电压不能低于后备电池的电压,否则后备电池供电。
用四节1.25V电池串联作后备电源,保证市电停电时时钟继续走时。
时钟的精度取决于晶振频率的精度。
4、程序清单本程序用C语言编写,经Keil C51编译成二进制码后写入89C51内的EPROM内即可。
PCF8563时钟芯片驱动详解1概述PCF8563是PHILIPS公司推出的一款工业级含I2C总线接口功能的具有极低功耗的多功能时钟/日历芯片。
PCF8563的多种报警功能、定时器功能、时钟输出功能以及中断输出功能能完成各种复杂的定时服务,甚至可为单片机提供看门狗功能。
部时钟电路、部振荡电路、部低电压检测电路(1.0V)以及两线制I2C 总线通讯方式,不但使外围电路及其简洁,而且也增加了芯片的可靠性。
同时每次读写数据后,嵌的字地址寄存器会自动产生增量。
当然作为时钟芯片,PCF8563亦解决了2000年问题。
因而,PCF8563是一款性价比极高的时钟芯片,它已被广泛用于电表、水表、气表、、传真机、便携式仪器以及电池供电的仪器仪表等产品领域。
2原理图3 8563源代码//******************************************************//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;m<i;m++){for(n=0;n<5;n++){_nop_();}}}*//********************************************************** 函数名称: void DELAY_MS(Uint16 i)** 功能描述: 延时函数** 输入:延时毫秒数** 输出:无********************************************************///延时函数单位msvoid DELAY_MS(Uint16 i){ Uint16 m,n;for(m=0;m<i;m++){for(n=0;n<1000;n++){_nop_();}}}/********************************************************** 函数名称: InitCrt()** 功能描述: SD2405的初始化** 输入:无** 输出:无********************************************************/void InitCrt(){//设备地址I2cDeviceAdd = PCF8563_ADDR;}/******************************************************** ** 函数名称: CrtGetDateTime(struct SYSTEM_TIME *Time)** 功能描述: 读取时间** 说明:将从PCF8563中读取的时间放入Time指向的结构中** 输入:无** 输出:无********************************************************/ void CrtGetDateTime(struct SYSTEM_TIME *Time){Uint8 buf[8];//设备地址I2cDeviceAdd = PCF8563_ADDR;SM_Receive (PCF8563_SUBADDR , buf, PCF8563_NUMB);Time->time.ucSecond = buf[0]; //秒Time->time.ucMinute = buf[1]; //分Time->time.ucHour = buf[2]; //时屏蔽最高位Time->date.ucDay = buf[3]; //日Time->Week = buf[4]; //星期Time->date.ucMonth = buf[5]; //月Time->date.ucYear = buf[6]; //年}/******************************************************** ** 函数名称: CrtSetDateTime(struct SYSTEM_TIME *Time)** 功能描述: 设置时间** 说明:将Time指向的结构中日期时间参数设置到sd24.5中** 输入:无** 输出:无********************************************************/ void CrtSetDateTime(struct SYSTEM_TIME *Time){Uint8 buf[8];//设备地址I2cDeviceAdd = PCF8563_ADDR;//写入设置(时钟工作、关闭复位、关闭测试模式)buf[0] = PCF8563_ENABLE;SM_Send (0, buf, 0);//写入日期时间buf[0] = Time->time.ucSecond; //秒buf[1] = Time->time.ucMinute; //分buf[2] = Time->time.ucHour|0x80; //时置为24小时格式buf[3] = Time->date.ucDay; //日buf[4] = Time->Week; //星期buf[5] = Time->date.ucMonth; //月buf[6] = 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 cycle SMB0CR = -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 cycle I2cSendCount = count; // 置写入数量I2cRecCount = 0; // 读出数量清零I2cSendDPTR = SendBuf; // SMBus enabled, ACK on acknowledge cycle I2CWRITE; // 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 cycle I2cSendCount = 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 7{switch (SMB0STA) // Status code for the SMBus (SMB0STA register){// 主发送器/接收器:起始条件已发送// 在该状态发送的COMMAND 字的R/W 位总是为0(W),// 因为对于读和写操作来说都必须先写存储器地址。
老牌数字钟(二):TMS3450电路(LM8560可以互相直接替换)
TMS3450电路与其同类型的LM8360也是曾经是我国专业国营工厂制作数字钟和定时收音机等等的应用电路,具有性能稳定,走时功能、定时功能和睡眠功能。
能够使用50或60HZ频率作为数字钟的基准频率。
真正是风靡一时!
这里提供的是可以交流供电、也可以使用直流供电的应用电路。
作为直流供电的关键是需要一个高精度的基准频率,这里用32768HZ廉价晶体,与CD4060数字电路组成了可以提供60HZ基准频率的电路。
需要注意的是:该集成电路的专用显示屏幕属于双阴极供电的类型,比较特殊而且无法与其他电路的屏幕通用,因此,需要保证它们的驱动波形是非常对称的。
这里使用了CD4013电路进行倒相,由2只C9013轮流向屏幕的两个阴极供电。
交流供电时,如果遇上交流停电,就需要进行“掉电保护”,由干电池保持时钟继续走时,同时,为了节约电池的电能,由一只三极管C9013自动把显示屏幕的供电切断,实现了交流掉电时自动消隐。
尽管单片机以及功能更加强大和各种专门的时钟电路在现时代已经到处可见,却仍然有不少老牌的数字时钟电路正在许多原来的产品中继续使用和运行,也免不了需要进行维修和检测的时候,因此,这里提供了
一份参考给您。
LM8560与TMS3450电路基本应用电路相同,可以直接替换了。