[an error occurred while processing this directive]
например так (в режиме мастера)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено kV 06 июля 2006 г. 15:01
В ответ на: Уважаемые!!! Помогите разобраться........ (Си, I2С, tda7314) отправлено <font color=gray>McLud</font> 06 июля 2006 г. 14:44

data TByte _Dat;
bit _Ack;

#define SDA0 P0.0=0;
#define SDA1 P0.0=1;
#define sSDA(v) P0.0=(v);
#define SCL0 P0.1=0;
#define SCL1 P0.1=1;
#define gSDA ( P0.0 )
#define gSCL ( P0.1 )

void i2c_delay() { data TByte _cc;
for (_cc=3; _cc--;); }

#define i2cInit { SDA1; SCL1; }
#define SetC0 { SCL0; i2c_delay(); }
#define SetC1 { SCL1; while (!gSCL); i2c_delay(); }
#define SetD0 { SDA0; i2c_delay(); }
#define SetD1 { SDA1; i2c_delay(); }
#define SetD(v) { sSDA(v); i2c_delay(); }

#define Start { SetD1; SetC1; SetD0; SetC0; }
#define Stop { SetC0; SetD0; SetC1; SetD1; }
#define Out(v) { SetD(v); SetC1; SetC0; }
#define In(v) { SetC1; v=gSDA; SetC0; }
void dOut() { B=_Dat;
Out(B.7); Out(B.6); Out(B.5); Out(B.4);
Out(B.3); Out(B.2); Out(B.1); Out(B.0);
SetD1; In(_Ack);
}
void dIn() { SetD1;
In(B.7); In(B.6); In(B.5); In(B.4);
In(B.3); In(B.2); In(B.1); In(B.0);
_Dat=B; Out(_Ack);
}

void ic_Work (bit ToStart,
bit ToPut,
bit ToStop)
{
if (ToStart) { i2cInit; Start; }
if (ToPut) dOut(); else dIn();
if (ToStop) { Stop; i2cInit; }
}

bit ic_Put (data TByte aDat,
bit ToStart,
bit ToStop)
{
_Dat=aDat; ic_Work (ToStart, 1, ToStop); return (!_Ack);
}

TByte ic_Get (bit Last)
{
_Ack=Last; ic_Work (0, 0, _Ack); return (_Dat);
}



Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru