Цитата(Kolia @ Oct 10 2008, 21:31)

c8051f310. Почему-то ведомый перестает работать при адресации другого устройства. Т.е. когда ему приходит не его адрес, он переходит в режим передачи и виснет, хотя должен просто ожидать следующего START.
Кто плавал подскажите?
Вот код
Я бы Вам предложил сделать так:
Код
case SMB_SRADD:
STA = 0; // Поставить ИМЕННО сюда!!!
if((SMB0DAT&0xFE) == SLAVE_ADR) // Decode address
{ // If the received address matches,
//А стояло ЗДЕСЬ!!! STA = 0; // Clear STA bit
ACK = 1; // ACK the received slave address
p_in_buf=0;
if(SMB0DAT&0x01==READ) // If the transfer is a master READ,
{
SMB0DAT=key; // Prepare outgoing byte
}
}
else // If received slave address does not
{ // match,
ACK = 0; // NACK received address
}
break;
По крайней мере я делал примерно так, и в таблице 14.3 даташита про STA написано "Must be cleared by software." Проверьте, должно помочь.