В цикле считываются все регистры и выводятся на LCD:
sec = ds1307_read ( 0 ); // секунды min = ds1307_read ( 1 ); // минуты hour = ds1307_read ( 2 ); // часы day = ds1307_read ( 3 ); // день недели date = ds1307_read ( 4 ); // число month = ds1307_read ( 5 ); // месяц year = ds1307_read ( 6 ); // год
.............
// считывание регистра DS1307 byte ds1307_read ( byte addr ) { char value; // send STOP TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //Tell TWCR (control register) to send STOP CONDITION delay_ms (200); // send START TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //loop until TWINT is set while(!((TWCR&0x80)==0x80)) { } // while //;SLAVE //Send Slave address TWDR = TARGET_ADDR; TWCR = (1<<TWINT)|(1<<TWEN); //loop until TWINT is set while(!((TWCR&0x80)==0x80)) { //do nothing but loop } // while //;DATA1 //Send DS1307 RAM address TWDR = addr; TWCR = (1<<TWINT)|(1<<TWEN); //loop until TWINT is set while(!((TWCR&0x80)==0x80)) { //do nothing but loop } // while //SECOND START CONDITION to go into writing mode TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //loop until TWINT is set while(!((TWCR&0x80)==0x80)) { } // while //Send Address and write bit TWDR = TARGET_ADDR | WRITE_FLAG; TWCR = (1<<TWINT)|(1<<TWEN);
//loop until TWINT is set while(!((TWCR&0x80)==0x80)) { //do nothing but loop } // while delay_ms (300); //;DATA TWCR = (1<<TWINT)|(1<<TWEN);
//loop until TWINT is set while(!((TWCR&0x80)==0x80)) { } // while //Store read back value value = TWDR; //NACK TWCR = (1<<TWEA)|(1<<TWEN); //STOP TWCR = (1<<TWEA)|(1<<TWEN)|(TWSTO); return value; } // ds1307_read
проблема в том, что секунды на LCD обновляются раз в 8 (!) сек. в цикле никаких задержек нету.
В чем м.б. причина?
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|