Гудвин, волшебник (20.03.2010 12:21 - 13:02, просмотров: 128) ответил ctpexhih на Хочу подключить датчик температуры Dallas 18B20 с интерфейсом 1-Wire к MSP 430. Вопрос, возможно ли будет выдержать те микросекундные интервалы времени, которые указаны в описании на данный стандарт, если я буду писать на Си? Вопрос родился потому, что в
Работает на С. Без проблем. При тактовой ~900 кГц. (Вроде сколько там по-умолчанию - в 11xx ;) ) void delay_us(unsigned short cnt)
{
while(cnt--);
}
unsigned char res_ds(void) // возвращает 0 если есть presence pulse
{ // возвращает 1 если нет presence pulse
char i; // возвращает 2 если линия замкнута
i=1;
if (P2IN & BIT2) {
P2DIR |= BIT2;
delay_us(480/K);//zad(480 us);
P2DIR &= ~BIT2;
delay_us(90/K);//zad(90 us);
i=P2IN & BIT2;
delay_us(390/K);//zad(390 us);
}
else i=2;
return i;
}
void out_ds(unsigned char b)
{
unsigned char i;
for(i=0;i<8;i++)
{
P2DIR |= BIT2;
_NOP();
if (b & 1) P2DIR &= ~BIT2;
else P2DIR |= BIT2;
delay_us(70/K);
b=b>>1;
P2DIR &= ~BIT2;
_NOP();
_NOP();
}
}
unsigned char in_ds(void)
{
unsigned char i;
unsigned char a;
unsigned char b;
b=0;
for(i=0;i<8;i++)
{
P2DIR |= BIT2;
_NOP();
P2DIR &= ~BIT2;
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
a=((P2IN & BIT2)<<5);
delay_us(40/K);
b=(b>>1)| a;
}
return b;
}