📄 clock.c
字号:
#include "iom64v.h"
#include "clock.h"
void Delay(int n)
{
unsigned int i;
i=0;
while(i++ < n);
}
/*void Init(void)
{
DIR_OUT;
SCL_OUT;
SCL_1;
Delay(5);
SDA_1;
Delay(5);
}
void Start(void)
{
SDA_1;
Delay(5);
SCL_1;
Delay(5);
SDA_0;
Delay(5);
SCL_0;
Delay(5);
}
void Stop(void)
{
SDA_0;
Delay(5);
SCL_1;
Delay(5);
SDA_1;
Delay(5);
}
unsigned char WriteByte(unsigned char WriteData)
{
unsigned char i;
for (i=0; i<8; i++)
{
if (((WriteData <<i) & 0x80))
{
SDA_1;
}
else
{
SDA_0;
}
Delay(5);
SCL_1;
Delay(5);
SCL_0;
}
Delay(5);
SDA_1;
Delay(5);
SCL_1;
Delay(5);
DIR_IN;
if(SDA_IN==1)
{
DIR_OUT;
SCL_0;
return 0;
}
else
{
DIR_OUT;
SCL_0;
return 1;
}
}
unsigned char ReadByte(void)
{
unsigned char i;
unsigned char Retc;
Retc=0;
SDA_1;
for (i=0; i<8; i++)
{
Delay(5);
SCL_0;
Delay(5);
SCL_1;
//DIR_IN;
Delay(5);
Retc=Retc<<1;
if (SDA_IN == 0x01 )
{
Retc=Retc+1;
}
//DIR_OUT;
}
SCL_0;
Delay(5);
return(Retc);
}
void Ack(unsigned char a)
{
if(a==0)
SDA_1;
else
SDA_0;
Delay(5);
SCL_1;
Delay(5);
SCL_0;
Delay(5);
}
unsigned char Read8Byte(unsigned char *TimeBuffer)
{
unsigned char i;
unsigned char ack;
Start();
ack=WriteByte(0xa0);
if(ack==0)
{
return(0);
}
ack=WriteByte(0x00);
if(ack==0)
return(0);
Start();
ack=WriteByte(0xa1);
if(ack==0)
return 0;
for (i=0; i<7; i++)
{
TimeBuffer[i] = ReadByte();
Ack(0);
}
TimeBuffer[i] = ReadByte();
Ack(1);
Stop();
return 1;
}
unsigned char Write8Byte( unsigned char *WriteData)
{
unsigned char i;
unsigned char ack;
Start();
ack=WriteByte(0xa0);
if(ack==0)
return 0;
ack=WriteByte(0x00);
if(ack==0)
return(0);
for(i=0;i<8;i++)
{
ack=WriteByte(WriteData[i]);
if(ack==0)
return(0);
}
Stop();
return(1);
}
void main12(void)
{
unsigned char TimeB[9];
unsigned char i;
SP=0x10ff;
WDTCR=0x00;
SREG=0x00;
TimeB[1]=9;
TimeB[0]=0xff;
TimeB[3]=0x05;
TimeB[4]=4;
TimeB[5]=6;
TimeB[2]=2;
TimeB[6]=6;
TimeB[7]=2;
Init();
Write8Byte(TimeB);
for(i=0;i<8;i++)
{
TimeB[i]=i;
}
Read8Byte(TimeB);
}*/
void Init_TWI(void)
{
TWBR=24;
}
unsigned char Init_Clock(void)
{
if(TWIWriteOneByte(0x0c,0x00)==0)
return 0;
Delay(5);
if(TWIWriteOneByte(0x05,0x07)==0)
return 0;
Delay(5);
if(TWIWriteOneByte(0x05,0x0f)==0)
return 0;
Delay(5);
if(TWIWriteOneByte(0xcb,0x08)==0)
return 0;
return 1;
}
unsigned char SetTime(void)
{
unsigned char TBuffer[8];
unsigned char F,m;
TBuffer[0]=0x80;
TBuffer[1]=0;//(unsigned char)syst_parm[19];
TBuffer[2]=0 ;
F=(unsigned char)syst_parm[24];
F=(((unsigned char)(F/10))*0x10)+(F-((unsigned char) F/10)*10);
TBuffer[3]=F;
F=(unsigned char)syst_parm[23];
F=(((unsigned char)(F/10))*0x10)+(F-((unsigned char) F/10)*10);
TBuffer[4]=F;
F=(unsigned char)syst_parm[22];
F=(((unsigned char)(F/10))*0x10)+(F-((unsigned char) F/10)*10);
m=((unsigned char)syst_parm[20]%4)<<6;
F=F|m;
TBuffer[5]=F;
F=(unsigned char)syst_parm[21];
F=((unsigned char)(F/10)*0x10)+(F-((unsigned char) F/10)*10);
TBuffer[6]=F;
TBuffer[7]=0;
if(TWIWriteOneByte(0x80,0x00)==0)
return 0;
Delay(5);
if(TWIWriteByte(TBuffer)==0)
return 0;
Delay(5);
//if(TWIWriteOneByte(0x05,0x07)==0)
// return 0;
// Delay(5);
// if(TWIWriteOneByte(0x05,0x0f)==0)
// return 0;
// Delay(5);
// if(TWIWriteOneByte(0xcb,0x08)==0)
// return 0;
// Delay(5);
if(TWIWriteOneByte(0x00,0x00)==0)
return 0;
Delay(5);
return 1;
}
unsigned char ReadTime(unsigned char *rTimBuff)
{
if(TWIReadBytes(rTimBuff)==0)
return 0;
return 1;
}
unsigned char TWIWriteOneByte(unsigned char wData,unsigned char wAddr)
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != START)
return 0;
TWDR = 0xa0;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != MT_SLA_ACK)
return 0;
TWDR = wAddr;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != MT_DATA_ACK)
return 0;
TWDR = wData;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != MT_DATA_ACK)
return 0;
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
return 1;
}
unsigned char TWIWriteByte(unsigned char *Bdata)
{
unsigned char i;
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != START)
return 0;
TWDR = 0xa0;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != MT_SLA_ACK)
return 0;
TWDR = 0x00;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != MT_DATA_ACK)
return 0;
for(i=0;i<7;i++)
{
TWDR = Bdata[i];
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != MT_DATA_ACK)
return i;
}
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
return 1;
}
unsigned char TWIReadBytes(unsigned char *rBytes)
{
unsigned char k;
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != START)
return 0;
TWDR = 0xa0;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != MT_SLA_ACK)
return 0;
TWDR = 0x00;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != MT_DATA_ACK)
return 0;
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
Delay(50);
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != START)
return 0;
TWDR = 0xa1;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != MR_SLA_ACK)
return 0;
for(k=0;k<7;k++)
{
TWCR=0xc4;
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != MR_DATA_ACK)
return k;
else
rBytes[k]=TWDR;
}
TWCR=0x84;
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != 0x58)
return k;
else
rBytes[k]=TWDR;
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -