Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Смотри внутрь (+)

Отправлено omen 20 декабря 2006 г. 12:39
В ответ на: Программирование ATMega отправлено Meskalito 20 декабря 2006 г. 11:52


unsigned char EEPROM_init
(
unsigned int adr
)
{
TWBR = 20;
TWSR = 0x00;

//transmit START
TWCR = (1< while (!(TWCR & (1<
// îòëàâëèâàåì ïðàâèëüíîñòü ïîñûëêè START
if ((TWSR & 0xf8) != 0x08)
{
TWCR = 0;
return( 1 );
}

// set slave address for write
TWDR = 0xa0;
TWCR = (1< while (!(TWCR & (1< if ((TWSR & 0xf8) != 0x18)
{
TWCR = 0;
return( 1 );
}

// set low byte address
TWDR = (unsigned char)(adr & 0x00ff);
TWCR = (1< while (!(TWCR & (1< if ((TWSR & 0xf8) != 0x28)
{
TWCR = 0;
return( 1 );
}

// set hi byte address
TWDR = (unsigned char)(adr>>8);
TWCR = (1< while (!(TWCR & (1<< TWINT)));
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< while (!(TWCR & (1< if ((TWSR & 0xf8) != 0x28)
{
TWCR = 0;
return( 1 );
}

TWCR = (1< __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< while (!(TWCR & (1< if ((TWSR & 0xf0) != 0x10)
{
TWCR = 0;
return( 1 );
}

// set slave address for read
TWDR = 0xa1;
TWCR = (1< while (!(TWCR & (1< if ((TWSR & 0xf8) != 0x40)
{
TWCR = 0;
return( 1 );
}

//get data
TWCR = (1< while (!(TWCR & (1<
if ((TWSR & 0xf8) != 0x58)
{
TWCR = 0;
return( 1 );
}
else *refdata = TWDR;

//transmit STOP
TWCR = (1< __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< while (!(TWCR & (1< if ((TWSR & 0xf0) != 0x10)
{
return( 1 );
}

// set slave address for read
TWDR = 0xa1;
TWCR = (1< while (!(TWCR & (1< if ((TWSR & 0xf8) != 0x40)
{
return( 1 );
}

//get data
for( unsigned char i=0; i<8; i++ )
{
if (i != 7) TWCR = (1< else TWCR = (1< while (!(TWCR & (1<
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< __delay_cycles( 184 ); // çàäåðæêà íà 10 ìêñ

// PORTE |= 0x08;

return( 0 );
}




Составить ответ | Вернуться на конференцию

Ответы



Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru