собственно вопрос, я хочу подключить каскадно много сдвиговых регистров, пока тестирую только с двумя.
Вот код:
Код: Выделить всё
#include <avr/io.h>
#include <avr/delay.h>
#define SHIFT_REGISTER DDRB
#define SHIFT_PORT PORTB
#define DATA (1<<PB3) //MOSI (SI)
#define LATCH (1<<PB2) //SS (RCK)
#define CLOCK (1<<PB5) //SCK (SCK)
void pins(unsigned char bits, unsigned char chislo){
for(int i=0; i <= chislo; i++){
SPDR = bits;
while(!(SPSR & (1<<SPIF)));
}
}
int main(void)
{
//int ledar[10] = { 0b1011001111001111, 0b1011000110101101, 0b1011010100111010, 0b0101110010101101, 0b1010110011010111, 0b0101110010101110, 0b0101011010011010, 0b0101101101010100, 0b0101101100101010, 0b0101011001010011 };
//int iArray[4] = { 0b00001111, 0b00111111, 0b11110000, 0b11111100 };
//Setup IO
SHIFT_REGISTER |= (DATA | LATCH | CLOCK); //Set control pins as outputs
SHIFT_PORT &= ~(DATA | LATCH | CLOCK); //Set control pins low
//Setup SPI
SPCR = (1<<SPE) | (1<<MSTR); //Start SPI as Master
while(1)
{
//Pull LATCH low (Important: this is necessary to start the SPI transfer!)
SHIFT_PORT &= ~LATCH;
pins(225,2);
//Toggle latch to copy data to the storage register
SHIFT_PORT |= LATCH;
SHIFT_PORT &= ~LATCH;
_delay_ms(800);
//################################################################## loop1
//Pull LATCH low (Important: this is necessary to start the SPI transfer!)
SHIFT_PORT &= ~LATCH;
pins(0,1);
//Toggle latch to copy data to the storage register
SHIFT_PORT |= LATCH;
SHIFT_PORT &= ~LATCH;
_delay_ms(100);
//################################################################## loop1
}
}
Пока приходиться писать первые 8 бит, потом слать данные
Код: Выделить всё
//Toggle latch to copy data to the storage register
SHIFT_PORT |= LATCH;
SHIFT_PORT &= ~LATCH;
_delay_ms(800);
Вопрос в том, как сделать так, чтобы можно было слать не по 8 бит, а сразу всё и можно ли вообще так делать?


