Расширение портов Atmega8 с помощью 74HC165
Добавлено: Вт мар 14, 2017 21:39:24
Здравствуйте, уважаемые коты.
Помогите пожалуйста начинающему.
Задача:
подключить к Atmega8 74HC165 для расширения портов. На выход дополнительного порта повесить светодиоды(7 шт) и заставить из загораться слева направо и гаснуть справа налево.
Прочитал что для этих целей существует интерфейс SPI(расположен на порту В), но , поскольку пины порта с 1 по 5 заняты, то решил попробовать реализовать программный SPI и управление сдвиговым регистром повесить на оставшихся 3 пина(5,6,7).
Нашел на просторах интернета подходящий код, немного подправил и вроде как заработало. Но! Не совсем как хотелось. Диоды загораются слева направо, но по очереди, а мне нужно, чтобы загорались все.
Пожалуйста, подскажите как подправить код чтобы добиться результата.
Помогите пожалуйста начинающему.
Задача:
подключить к Atmega8 74HC165 для расширения портов. На выход дополнительного порта повесить светодиоды(7 шт) и заставить из загораться слева направо и гаснуть справа налево.
Прочитал что для этих целей существует интерфейс SPI(расположен на порту В), но , поскольку пины порта с 1 по 5 заняты, то решил попробовать реализовать программный SPI и управление сдвиговым регистром повесить на оставшихся 3 пина(5,6,7).
Нашел на просторах интернета подходящий код, немного подправил и вроде как заработало. Но! Не совсем как хотелось. Диоды загораются слева направо, но по очереди, а мне нужно, чтобы загорались все.
Пожалуйста, подскажите как подправить код чтобы добиться результата.
Код: Выделить всё
oid ioinit (void)
{
DDRB = 0b11100000; //1 = output, 0 = input
PORTB = 0b00000000;
}
void output_led_state(unsigned char __led_state)
{ int _p;
PORTB&=~(1<<PB6);
PORTB&=~(1<<PD5);
for (_p=0;_p<8;_p++)
{
if(__led_state == 0x80)
PORTB|=(1<<PB7);
else
{
PORTB&=~(1<<PB7);
}
PORTB|=(1<<PB5);
PORTB&=~(1<<PB5);
__led_state <<= 1;
}
PORTB|=(1<<PB6);
}