Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: с8051а310 & SMBus Slave
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
Kolia
c8051f310. Почему-то ведомый перестает работать при адресации другого устройства. Т.е. когда ему приходит не его адрес, он переходит в режим передачи и виснет, хотя должен просто ожидать следующего START.

Кто плавал подскажите?

Вот код
barabek
Цитата(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." Проверьте, должно помочь.
Kolia
Заработало smile.gif.
Решение нашел здесь: hxxp://www.cygnal.org/ubb/Forum5/HTML/000477.html
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.