⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 13.3.2用两个普通io模拟i2c总.txt

📁 51单片机基础汇编程序
💻 TXT
字号:
#ifndef 	SDA
#define 	SDA P0-0
#define 	SCL P0-1
#endif
extern 	uchar SystemError;
#define 	uchar unsigned char
#define	 uint unsigned int
#define 	Byte unsigned char
#define 	Word unsigned int
#define 	bool bit
#define 	true 1
#define 	false 0
#define 	SomeNOP(); -nop-();-nop-();-nop-();-nop-();

void I2CStart(void)
{
EA=0;
SDA=1; SCL=1; SomeNOP();
SDA=0; SomeNOP(); 
SCL=0;
}
 
void I2CStop(void)
{
SCL=0; SDA=0; SomeNOP(); 
SCL=1; SomeNOP(); SDA=1; 
EA=1;
}
 
bool WaitAck(void)
{
uchar errtime=255;						
SDA=1;SomeNOP();
SCL=1;SomeNOP();
while(SDA) {errtime--; if (!errtime) {I2CStop();SystemError=0x11;return false;}}
SCL=0;
return true;
}

void SendAck(void)
{
SDA=0; SomeNOP();
SCL=1; SomeNOP();
SCL=0;
}

void SendNotAck(void)
{
SDA=1; SomeNOP();
SCL=1; SomeNOP();
SCL=0;
}
 
void I2CSendByte(Byte ch)
{
uchar i=8;
while (i--)
{
SCL=0;-nop-();
SDA=(bit)(ch&0x80); ch<<=1; SomeNOP();
SCL=1; SomeNOP();
}
SCL=0;
}
 
Byte I2CReceiveByte(void)
{
uchar i=8;
Byte ddata=0;
SDA=1;
while (i--)
{
ddata<<=1;
SCL=0;SomeNOP();
SCL=1;SomeNOP();
ddata|=SDA;
}
SCL=0;
return ddata;
}

void GetPCF8563(uchar firsttype,uchar count,uchar *buff)
{
uchar i;
I2CStart();
I2CSendByte(0xA2);
WaitAck();
I2CSendByte(firsttype);
WaitAck();
I2CStart();
I2CSendByte(0xA3);
WaitAck();
for (i=0;i<count;i++)
{
buff[i]=I2CReceiveByte();
if (i!=count-1) SendAck();				
}
SendNotAck();
I2CStop();
}

void SetPCF8563(uchar timetype,uchar value)
{
I2CStart();
I2CSendByte(0xA2);
WaitAck();
I2CSendByte(timetype);
WaitAck();
I2CSendByte(value);
WaitAck();
I2CStop();
}

void SetAlarm(uchar alarmtype,uchar count)
{
SetPCF8563(0x01,0x02);
SetPCF8563(alarmtype,count);
}

void CleanAlarm(void)
{
SetPCF8563(0x01,0x00);
SetPCF8563(0x09,0x80);
SetPCF8563(0x0A,0x80);
SetPCF8563(0x0B,0x80);
SetPCF8563(0x0C,0x80);

}

uchar read1380 (uchar command)
{
uchar time;
GetPCF8563(command,1,&time);
return time;
}

void write1380(uchar command ,uchar time)
{
SetPCF8563(command,time);
}

void time-display(uchar x0,uchar y0,bit type)		
{
uchar time[]="00:00:00";
uchar con[3];
uchar time-type;
GetPCF8563(0x02,3,con);
time[0]=(con[2]>>4)+'0';
time[1]=(con[2]&0x0f)+'0';
time[3]=(con[1]>>4)+'0';
time[4]=(con[1]&0x0f)+'0';
time[6]=(con[0]>>4)+'0';
time[7]=(con[0]&0x0f)+'0';
time[8]=0;
if(type==1)
{
time-type=0xff;
}
else
{
time-type=0;
}
dipchar0(x0,y0,F57,1,time-type,time);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -