[an error occurred while processing this directive]
Отбоя почтовика не было, ладно, тогда сюда....
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено Щ.С. 04 января 2003 г. 19:11
В ответ на: Чего то недошло.... (всмысле мыло) отправлено mpo 04 января 2003 г. 18:52

Вот пример базиса для 1-Wire (работающий).
Могу конкретно для DS18S20 пример выслать - на две ноги - не важно подставишь базис - заработает на одной :)
/* Для одноногой 1-Wire */

#define MLANIO 0x40 /* на самом деле, какой нужно? */

#define TRPULSELOW 245
#define TRPULSEHIGH1 70
#define TRPULSEHIGH2 254

void delay(char del) /* ~~1 mks/ 1 del */
{
TIFR=0x02; TCNT0=del; TCCR0=0x02;
do {} while (!(TIFR & 0x02));
TCCR0=0; _WDR();
}

char mLAN_TouchReset(void)
{
char ret=1;
PORTD&=~MLANIO;
delay(-TRPULSELOW); delay(-TRPULSELOW);
PORTD|=MLANIO;
DDRD&=~MLANIO;
delay(-TRPULSEHIGH1);
if (!(PIND & MLANIO))
ret=0; // Presence Pulse eсть !
delay(-TRPULSEHIGH2); delay(-TRPULSEHIGH2); DDRD|=MLANIO;
return (ret);
}

unsigned char mLAN_rd_byte(void)
{
unsigned char i,mLANbt;
mLANbt=0;
for (i=0; (i < 8); i++)
{mLANbt>>=1;
_CLI();
PORTD&=~MLANIO;
delay(-1);
PORTD|=MLANIO;
delay(-4);
DDRD&=~MLANIO;
delay(-4);
if (PIND & MLANIO) mLANbt|=0x80;
_SEI();
delay(-52);
DDRD|=MLANIO;
delay(-1);
}
return(mLANbt);
}

void mLAN_wr_byte(unsigned char mLANbt)
{
unsigned char i;
for (i=0; (i < 8); i++)
{_CLI();
PORTD&=~MLANIO;
delay(-1);
if (mLANbt & 1) PORTD|=MLANIO;
_SEI();
mLANbt>>=1;
delay(-57);
PORTD|=MLANIO;
delay(-1);
}
}

а в MAIN:
инициализация:
PORTD=0xff /* ежели угодно */; DDRD=MLANIO; // MLANIO - на выход по желаемому пину.


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

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru