|
Написано втупую по DS
Тока надо заменить ^^ на < <
void InitDS (void)
{
TWCR=(1^^TWINT)|(1^^TWSTA)|(1^^TWEN); //Send Start
WaitTWINT;
if ((TWSR&0xF8)!=START) TWErr();
TWDR=DS1307W; //Slave adress for writing
TWCR=(1^^TWINT)|(1^^TWEN);
WaitTWINT;
if ((TWSR&0xF8)!=MT_SLA_ACK) TWErr();
TWDR=0x07;//Control Reg
TWCR=(1^^TWINT)|(1^^TWEN);
WaitTWINT;
if ((TWSR&0xF8)!=MT_DATA_ACK) TWErr();
//------------------------Send data--------------------------TWDR=0x40;// for DS1307 =0x90 ! Out=1;SQWE=1; 1Hz
TWCR=(1^^TWINT)|(1^^TWEN);
WaitTWINT;
if ((TWSR&0xF8)!=MT_DATA_ACK) TWErr();
//-----------------------
TWCR=(1^^TWINT)|(1^^TWSTO)|(1^^TWEN);
wait50;
wait50;
wait_beep;
//WaitTWINT;
//now send 0 to Reg0 to start clock
TWCR=(1^^TWINT)|(1^^TWSTA)|(1^^TWEN); //Send Start
WaitTWINT;
if ((TWSR&0xF8)!=START) TWErr();
TWDR=DS1307W; //Slave adress for writing
TWCR=(1^^TWINT)|(1^^TWEN);
WaitTWINT;
if ((TWSR&0xF8)!=MT_SLA_ACK) TWErr();
TWDR=0x00;//Sec Reg
TWCR=(1^^TWINT)|(1^^TWEN);
WaitTWINT;
if ((TWSR&0xF8)!=MT_DATA_ACK) TWErr();
//------------------------Send data
TWDR=0x00;//
TWCR=(1^^TWINT)|(1^^TWEN);
WaitTWINT;
if ((TWSR&0xF8)!=MT_DATA_ACK) TWErr();
//-----------------------
TWCR=(1^^TWINT)|(1^^TWSTO)|(1^^TWEN);
//WaitTWINT;
//TWCR=(1^^TWINT);
}
void GetTime(void)
{
char i;TWCR=(1^^TWINT)|(1^^TWSTA)|(1^^TWEN); //Send Start
WaitTWINT;
if ((TWSR&0xF8)!=START) TWErr();
TWDR=DS1307W; //Slave adress for writing
TWCR=(1^^TWINT)|(1^^TWEN);
WaitTWINT;
if ((TWSR&0xF8)!=MT_SLA_ACK) TWErr();
TWDR=0x00;// Reg
TWCR=(1^^TWINT)|(1^^TWEN);
WaitTWINT;
if ((TWSR&0xF8)!=MT_DATA_ACK) TWErr();TWCR=(1^^TWINT)|(1^^TWSTO)|(1^^TWEN);
wait5;TWCR=(1^^TWINT)|(1^^TWSTA)|(1^^TWEN); //Send Start
WaitTWINT;
if ((TWSR&0xF8)!=START) TWErr();TWDR=DS1307R; //Slave adress for read
TWCR=(1^^TWINT)|(1^^TWEN)|(1^^TWEA);// TWEA разрешает слейву передать дату
WaitTWINT;
if ((TWSR&0xF8)!=MT_SLA_R_ACK) TWErr();
for (i=0;i<7;i++)
{ TWCR=(1^^TWINT)|(1^^TWEN)|(1^^TWEA);
WaitTWINT;
if ((TWSR&0xF8)!=MT_DATA_R_ACK) TWErr();
time[i]=TWDR;
};TWCR&=~(1^^TWEA);//NACK
TWCR=(1^^TWINT)|(1^^TWEN);
WaitTWINT;TWCR=(1^^TWINT)|(1^^TWSTO)|(1^^TWEN);
//if ((TWSR&0xF8)!=MT_DATA_R_ACK) TWErr();
}
E-mail: info@telesys.ru