#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
// 函数功能: 从机发送非应答位子程序,迫使数据传输过程结束
//--------------------------------------------------------------------------------------------------