Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
unsigned char EEPROM_init
(
unsigned int adr
)
{
TWBR = 20;
TWSR = 0x00;//transmit START
TWCR = (1 << TWINT)|(1 << TWSTA)|(1 << TWEN);
while (!(TWCR & (1 << TWINT)));
// îòëàâëèâàåì ïðàâèëüíîñòü ïîñûëêè START
if ((TWSR & 0xf8) != 0x08)
{
TWCR = 0;
return( 1 );
}// set slave address for write
TWDR = 0xa0;
TWCR = (1 << TWINT)|(1 << TWEN);
while (!(TWCR & (1 << TWINT)));
if ((TWSR & 0xf8) != 0x18)
{
TWCR = 0;
return( 1 );
}// set low byte address
TWDR = (unsigned char)(adr & 0x00ff);
TWCR = (1 << TWINT)|(1 << TWEN);
while (!(TWCR & (1 << TWINT)));
if ((TWSR & 0xf8) != 0x28)
{
TWCR = 0;
return( 1 );
}// set hi byte address
TWDR = (unsigned char)(adr>>8);
TWCR = (1 << TWINT)|(1 << TWEN);
while (!(TWCR & (1<if ((TWSR & 0xf8) != 0x28)
{
TWCR = 0;
return( 1 );
}return( 0 );
}__monitor unsigned char EEPROM_write_byte
(
unsigned int adr,
unsigned char data
)
{
// PORTE &= ~0x08;if (EEPROM_init( adr )) return( 1 );
// write byte
TWDR = data;
TWCR = (1 << TWINT)|(1 << TWEN);
while (!(TWCR & (1 << TWINT)));
if ((TWSR & 0xf8) != 0x28)
{
TWCR = 0;
return( 1 );
}
TWCR = (1 << TWINT)|(1 << TWSTO)|(1 << TWEN);__delay_cycles( 100000 ); // çàäåðæêà íà 5.4 ìñ
// PORTE |= 0x08;
return( 0 );
}
__monitor unsigned char EEPROM_read_byte
(
unsigned int adr,
unsigned char * refdata
)
{
// PORTE &= ~0x08;
if (EEPROM_init( adr )) return( 1 );//transmit repeate START
TWCR = (1 << TWINT)|(1 << TWSTA)|(1 << TWEN);
while (!(TWCR & (1 << TWINT)));if ((TWSR & 0xf0) != 0x10)
{
TWCR = 0;
return( 1 );
}// set slave address for read
TWDR = 0xa1;
TWCR = (1 << TWINT)|(1 << TWEN);
while (!(TWCR & (1 << TWINT)));
if ((TWSR & 0xf8) != 0x40)
{
TWCR = 0;
return( 1 );
}
//get data
TWCR = (1 << TWINT)|(1 << TWEN); // NO_ASK
while (!(TWCR & (1 << TWINT)));
if ((TWSR & 0xf8) != 0x58)
{
TWCR = 0;
return( 1 );
}
else *refdata = TWDR;//transmit STOP
TWCR = (1 << TWINT)|(1 << TWSTO)|(1 << TWEN);
__delay_cycles( 184 ); // çàäåðæêà íà 10 ìêñ// PORTE |= 0x08;
return( 0 );
}__monitor unsigned char EEPROM_read_str
(
unsigned int adr,
unsigned char * refdata
)
{
// PORTE &= ~0x08;
if (EEPROM_init( adr )) return( 1 );
//transmit repeate START
TWCR = (1 << TWINT)|(1 << TWSTA)|(1 << TWEN);
while (!(TWCR & (1 << TWINT)));if ((TWSR & 0xf0) != 0x10)
{
return( 1 );
}// set slave address for read
TWDR = 0xa1;
TWCR = (1 << TWINT)|(1 << TWEN);
while (!(TWCR & (1 << TWINT)));
if ((TWSR & 0xf8) != 0x40)
{
return( 1 );
}
//get data
for( unsigned char i=0; i<8; i++ )
{
if (i != 7) TWCR = (1 << TWINT)|(1 << TWEN)|(1 << TWEA);
else TWCR = (1 << TWINT)|(1 << TWEN); // NO_ASKwhile (!(TWCR & (1 << TWINT)));
if (i != 7)
{
if ((TWSR & 0xf8) != 0x50) return( 1 );
else refdata[ i ] = TWDR;
}
else
{
if ((TWSR & 0xf8) != 0x58) return( 1 );
else refdata[ i ] = TWDR;
}
}//transmit STOP
TWCR = (1 << TWINT)|(1 << TWSTO)|(1 << TWEN);
__delay_cycles( 184 ); // çàäåðæêà íà 10 ìêñ// PORTE |= 0x08;
return( 0 );
}