нашёл вот такой пример
Код: Выделить всё
#include <avr/io.h>
#define DATA 0
#define SCL 1
#define REC 2
void pause (unsigned int a)
{ unsigned int i;
for (i=a;i>0;i--)
;
}
void send_data (unsigned int data)
{ unsigned char i;
for (i=0;i<16;i++)
{
if ((data&0x8000)==0x00) PORTD&=~_BV(DATA); //Выставляем данные на PD0
else PORTD|=_BV(DATA);
asm("nop");
PORTD|=_BV(SCL); //Импульс на SCL
asm("nop");
PORTD&=~_BV(SCL);
asm("nop");
data=(data<<1);
}
PORTD|=_BV(REC); //Импульс на Latch clock
asm("nop");
PORTD&=~_BV(REC);
}
int main(void)
{ unsigned int data=0;
PORTD=0x00; //Первоначально выключаем выхода
DDRD=0x07; //PD0-PD2 как выхода
while (1)
{
send_data(data); //Отправить данные
data=data+1;
pause(500);
}
return 1;
}что такое _BV() ??
нет ли какой нибудь функции которая бы принимала бинарный массив или число и сама бы говорила регистрам что им делать?
Причина: Сюда перенёс


