unsigned char res_ds(void) // возвращает 0 если есть presence pulse
{ // возвращает 1 если нет presence pulse
char i; // возвращает 2 если линия замкнута
i=1;
#asm("cli")
if (channel==0)
{
if (PIND.2) {
PORTB.0=1;
delay_us(480);//zad(65);
PORTB.0=0;
delay_us(90);//zad(10);
i=PIND.2;
delay_us(390);//zad(50);
}
else i=2;
}
else
{ if (PIND.3) {
PORTB.1=1;
delay_us(480);//zad(65);
PORTB.1=0;
delay_us(90);//zad(10);
i=PIND.3;
delay_us(390);//zad(50);
}
else i=2;
}
#asm("sei")
return i;
}
void out_ds(unsigned char b)
{
unsigned char i;
#asm("cli");
if (channel==0)
{
for(i=0;i<8;i++)
{
PORTB.0=1;
PORTB.0=1;
PORTB.0=1;
PORTB.0=1;
PORTB.0=!(b & 1);
delay_us(70);
b=b>>1;
PORTB.0=0;
delay_us(10);
}
}
else
{
for(i=0;i<8;i++)
{
PORTB.1=1;
PORTB.1=1;
PORTB.1=1;
PORTB.1=1;
PORTB.1=!(b & 1);
delay_us(70);
b=b>>1;
PORTB.1=0;
delay_us(10);
}
}
#asm("sei");
}
unsigned char in_ds(void)
{
unsigned char i;
unsigned char a;
unsigned char b;
#asm("cli");
b=0;
if (channel==0)
{
for(i=0;i<8;i++)
{
PORTB.0=1;
delay_us(1);
PORTB.0=0;
delay_us(20); //
a=PIND.2;
delay_us(50); //
b=(b>>1)|(0x80 & (a+0x7f));
}
}
else
{
for(i=0;i<8;i++)
{
PORTB.1=1;
delay_us(1);
PORTB.1=0;
delay_us(20);
a=PIND.3;
delay_us(50);
b=(b>>1)|(0x80 & (a+0x7f));
}
}
#asm("sei");
return b;
}