Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/io.h>
- #include <util/delay.h>
- #define F_CPU 16000000UL
- //Declaracao das funcoes
- void inicia_PORTS(void);
- void inicia_SPI(void);
- void envia_SPI(unsigned char dado);
- //Macro dos pinos
- #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)
- int main(void)
- {
- inicia_PORTS();
- inicia_SPI();
- //Colocando o Latch como LOW para garantir que ele não esteja enviando nenhum dado
- SHIFT_PORT &= ~latch;
- //Envia os dados
- envia_SPI(0b10001010); //Será enviado 0b01010001
- // Alternando o latch para copiar para o Serial Storage Register
- SHIFT_PORT |= latch;
- SHIFT_PORT &= ~latch;
- }
- //Inicia os pinos de saída e entrada
- void inicia_PORTS(void){
- SHIFT_REGISTER |= (data | latch | clock); //Habilitando como saídas os pinos de controle
- SHIFT_PORT &= ~(data | latch | clock); //Habilitando os pinos de controle como low
- }
- //Configura o SPI
- void inicia_SPI(void){
- SPCR |= (1 << SPE) | (1 << MSTR) | (1 << DORD); //Iniciando o SPI como Master e invertendo
- //a palavra
- }
- void envia_SPI(unsigned char dado){
- SPDR = dado; //Enviando dados
- while(!(SPSR & (1<<SPIF))); //Enquanto enquanto o SPIF for 0 lógico o While será 1
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement