2012-10-20 4 views
1

I2C 버스의 주소를 수신하고 그에 따라 실행하도록 MCU를 코딩하는 방법을 이해하지 못했습니다. C의 많은 예제 코드는 마스터 디바이스 용이다. 슬레이브 디바이스에 대한 코드를 작성하는 방법을 더 잘 이해하고 싶습니다. SMB0STA 상태 레지스터를 사용합니까? 나는 큐를 데이터를 시작하고 출력하는 것을 "들으"것이라고 생각하는 함수를 게시했다. 0xA8은 "자체 주소 + R 수신 됨, ACK 전송 됨"에 대한 상태 코드입니다. 내 C8051F020 MCU 데이터 시트에 따르면.I2C 슬레이브 모드 프로그래밍 방법

unsigned char i2c_Slave_Read (void) 
{ 
    unsigned char data_out[8]; 

    data_out[8] = "LED 1 ON"; 

    while (SI) 
    if (SMB0STA == 0xA8) 
    { 
     P5 = 0x10; 
     SMB0DAT = data_out; 
    } 
} 

답변

2

슬레이브 동작은 당신은 당신의 노예 주소로 SMB0ADR 레지스터를 프로그램 datasheet

의 섹션 18.3.3부터 설명되어 있습니다. 주소 감지는 하드웨어에 의해 이루어지며, 그러면 데이터가 도착할 때 인터럽트가 발생합니다. 그런 다음 SMB0STA의 상태를 읽고 무슨 일이 일어나고 있는지 확인하고 SMB0DAT을 사용하여 데이터를 읽거나 쓸 수 있습니다. 표 18.1은 SMB0STA 상태 머신과 코드가 취해야 할 동작을 설명합니다.

관련 문제