Advertisement
mutchuloko

SN74HC595N com SPI

Jan 4th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.39 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3. #define F_CPU 16000000UL
  4.  
  5. //Declaracao das funcoes
  6. void inicia_PORTS(void);
  7. void inicia_SPI(void);
  8. void envia_SPI(unsigned char dado);
  9.  
  10. //Macro dos pinos
  11. #define SHIFT_REGISTER DDRB
  12. #define SHIFT_PORT PORTB
  13. #define data (1 << PB3)     //MOSI (SI)
  14. #define latch (1 << PB2)    //SS   (RCK)
  15. #define clock (1 << PB5)    //SCK  (SCK)
  16.  
  17. int main(void)
  18. {
  19.   inicia_PORTS();
  20.   inicia_SPI();
  21.  
  22.   //Colocando o Latch como LOW para garantir que ele não esteja enviando nenhum dado
  23.   SHIFT_PORT &= ~latch;
  24.  
  25.   //Envia os dados
  26.   envia_SPI(0b10001010); //Será enviado 0b01010001
  27.  
  28.   // Alternando o latch para copiar para o Serial Storage Register
  29.   SHIFT_PORT |= latch;
  30.   SHIFT_PORT &= ~latch;  
  31. }
  32.  
  33.  
  34. //Inicia os pinos de saída e entrada
  35. void inicia_PORTS(void){
  36.   SHIFT_REGISTER |= (data | latch | clock);  //Habilitando como saídas os pinos de controle                 
  37.   SHIFT_PORT     &= ~(data | latch | clock); //Habilitando os pinos de controle como low
  38. }
  39.  
  40.  
  41.  
  42.  
  43. //Configura o SPI
  44. void inicia_SPI(void){
  45.   SPCR |= (1 << SPE) | (1 << MSTR) | (1 << DORD); //Iniciando o SPI como Master e invertendo                                                                   
  46.                                                   //a palavra  
  47. }
  48.  
  49.  
  50. void envia_SPI(unsigned char dado){
  51.   SPDR = dado;                //Enviando dados
  52.   while(!(SPSR & (1<<SPIF))); //Enquanto enquanto o SPIF for 0 lógico o While será 1
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement