源自 中科银河芯

一款可以看得见IIC的实时时钟芯片

简介

GX8563 是一款CMOS实时时钟芯片,用于低功耗领域。可编程时钟和中断输出。通过I2C通信,最大传输速率100 kbit/s。每个字节传输结束后,内部计数器自动加一。

特性

■ 基于外部32k晶振,芯片提供年,月,日,工作日,小时,分钟,秒。
■ 世纪标志
■ 工作电压2.5 V to 5.5 V
■ 低工作电流:在电压为3.0 V 、温度为25 °C时,仅需1.5 µA。
■ 100kHzI2C通信速率 (在电压为 2.5 V 到 5.5 V)
■ 可编程时钟输出 (32.768 kHz, 1024 Hz, 32 Hz 和1 Hz),开漏输出
■ 报警和定时功能
■ 集成了晶体振荡器
■ 内部电源复位
■ I2C地址为: 读 A3h, 写A2h
■ 开漏的中断输出

应用

■ 手机
■ 便携仪器
■ 电子计量
■ 电池产品

管脚

OSCI
OSCO
INT
GND
SDA
SCL
CLKOUT
VDD

图1 内部架构

博2019-01 一款IIC时钟芯片 GX8563 兼容PCF8563

图2 晶圆裸片图

博2019-01 一款IIC时钟芯片 GX8563 兼容PCF8563

图3 封装图

博2019-01 一款IIC时钟芯片 GX8563 兼容PCF8563

图4 测试图

博2019-01 一款IIC时钟芯片 GX8563 兼容PCF8563

代码

#include "C8051F320.H"
#include "lcd.h"
#include "INIT.h"



sbit scl		= P2^7;  
sbit chip_vcc	= P2^5; 
sbit chip_gnd	= P2^3; 
sbit sda		= P2^1; 

#define I2C_Addr	0xA2


void I2C_init(){
	P2MDIN  = 0xff;
	P2MDOUT = 0x28;

	chip_vcc = 1;
	chip_gnd = 0;    							
	scl = 1;                          
	sda = 1;							
}

void I2C_delay(void) {
//    unsigned short a;
//	for(a=2000; a>0; a--);				//  1k

    unsigned char a;
//	for(a=200; a>0; a--);				// 10k
//	for(a= 97; a>0; a--);				// 20k
	for(a= 35; a>0; a--);				// 50k
//	for(a= 15; a>0; a--);				//100k
//	for(a=  5; a>0; a--);				//200k
//	;									//400k

}

void I2C_start () {
	I2C_delay();
	sda = 1;
	I2C_delay();
	I2C_delay();
	scl = 1;
	I2C_delay();
	I2C_delay();
	sda = 0;
	I2C_delay();
	scl = 0;
	I2C_delay(); 
}

void I2C_stop() {
	sda = 0;
	I2C_delay();
	scl = 1;
	I2C_delay();
	sda = 1;
	I2C_delay();
	I2C_delay();
	I2C_delay();	
}

void I2C_write_bit( unsigned char wdata) {
	sda = wdata;
	I2C_delay();
	scl = 1;
	I2C_delay();
	I2C_delay();
	scl = 0;
	I2C_delay();
}

void I2C_write_byte( unsigned char wdata) {
	unsigned char i;
	for (i=0;i<8;i++) {
		I2C_write_bit((wdata<<i)&0x80);
	}	
}

unsigned char I2C_read_bit () {
	unsigned char i;
	sda = 1;
	I2C_delay();
	scl = 1;
	I2C_delay();

	i = sda?1:0;

	I2C_delay();
	scl = 0;
	I2C_delay();

	return i;
}

unsigned char I2C_read_byte() {
	unsigned rdata, i;
	rdata=0;
	for (i=0;i<8;i++) {
		rdata <<=1;
		if (I2C_read_bit())
			rdata |= 0x01;
	}
	return rdata;
}

unsigned char I2C_check_ack() {
	return (I2C_read_bit());
}

void I2C_send_ack() {
	I2C_write_bit(0);
	sda = 1;
}

void I2C_send_nack() {
	I2C_write_bit(1);
}


void I2C_ID(unsigned char RW){
	I2C_write_byte(I2C_Addr + RW);
 
}


void DiaplayIICReg(unsigned char y){
	unsigned char i;
	Set_LCDYXChar(y+0,1);		
	ToLCDS(" C1:");	ToLCDB(dat[0]);
	ToLCDS(" C2:");	ToLCDB(dat[1]);
	Set_LCDYXChar(y+1,1);			font_color = purple;	
	ToLCDS("  s:");	ToLCDB(dat[2]);
	ToLCDS("  m:");	ToLCDB(dat[3]);
	ToLCDS("  h:");	ToLCDB(dat[4]);
	ToLCDS("  D:");	ToLCDB(dat[5]);
	Set_LCDYXChar(y+2,1);
	ToLCDS("  W:");	ToLCDB(dat[6]);
	ToLCDS("  M:");	ToLCDB(dat[7]);
	ToLCDS("  Y:");	ToLCDB(dat[8]);	font_color = green;
	Set_LCDYXChar(y+3,1);	
	ToLCDS(" AW:");	ToLCDB(dat[12]);
	ToLCDS(" AM:");	ToLCDB(dat[9]);
	ToLCDS(" AH:");	ToLCDB(dat[10]);
	ToLCDS(" AD:");	ToLCDB(dat[11]);	
	Set_LCDYXChar(y+4,1);
	ToLCDS(" FE:");	ToLCDB(dat[13]);	
	ToLCDS(" TE:");	ToLCDB(dat[14]);	
	ToLCDS(" TIMER:");ToLCDB(dat[15]);	

}

void I2CWrite() {
	unsigned char i;

	for(i = 0; i < 16; i++){
		dat[i] = 0;
	}	
	dat[2] = 0x56;
	dat[3] = 0x59;
	dat[4] = 0x23;
	dat[5] = 0x31;
	dat[6] = 0x06;
	dat[7] = 0x12;
	dat[8] = 0x11;

	dat[13] = 0x83;

	Set_LCDYXChar(1,1);		ToLCDS("W8563:");	DiaplayIICReg(2);
	
	I2C_start();
	I2C_ID(0);				I2C_check_ack();
	I2C_write_byte(0);		I2C_check_ack();
	for(i = 0; i < 16; i++){I2C_write_byte(dat[i]);		I2C_check_ack();	}
	I2C_stop();
	
}

void I2CRead() {
	unsigned char i;

	I2C_start();
	I2C_ID(0);				I2C_check_ack();
	I2C_write_byte(0);		I2C_check_ack();
	I2C_stop();

	I2C_start();
	I2C_ID(1);				I2C_check_ack();
	for(i = 0; i < 16; i++){
		dat[i] = I2C_read_byte();	
		if(i < 15)	I2C_send_ack();
		else		I2C_send_nack();
	}
	I2C_stop();
	

}


相关文章: