Skip to content

Instantly share code, notes, and snippets.

@tiagohm
Created May 14, 2020 11:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tiagohm/f22943844315d2b28c6b0acc44340ec8 to your computer and use it in GitHub Desktop.
Save tiagohm/f22943844315d2b28c6b0acc44340ec8 to your computer and use it in GitHub Desktop.
Registrador de deslocamento de 8 bits
/*
74HC595 - Registrador de Deslocamento
Autor: Tiago Melo
Blog: Microcontrolandos
Compilador: MikroC PRO PIC
Bibliotecas:
*/
// Pinos do 74HC595 ligados ao PIC.
sbit SR74HC595_Data at RB1_bit;
sbit SR74HC595_Clock at RB0_bit;
sbit SR74HC595_Latch at RB2_bit;
sbit SR74HC595_Data_Direction at TRISB1_bit;
sbit SR74HC595_Clock_Direction at TRISB0_bit;
sbit SR74HC595_Latch_Direction at TRISB2_bit;
// Envia o pulso de latch, para atualizar as saídas do chip.
void SR74HC595_Send_Latch() {
// Pulso de latch para atualizar as saídas.
SR74HC595_Latch = 0;
Delay_us(1);
SR74HC595_Latch = 1;
SR74HC595_Latch = 0;
}
// Envia um bit.
void SR74HC595_Send_Bit(char value) {
SR74HC595_Data = value != 0;
//Pulso de clock (LOW para HIGH) carrega e desloca o bit no 74HC595.
SR74HC595_Clock = 0;
Delay_us(1);
SR74HC595_Clock = 1;
SR74HC595_Clock = 0;
}
// Envia 8 bits de dados.
void SR74HC595_Send(char byte) {
char i;
SR74HC595_Clock = 0;
// Envia os 8 bits.
for(i = 0; i < 8; i++) {
SR74HC595_Send_Bit(byte.B7);
byte <<= 1;
}
SR74HC595_Data = 0;
}
//Inicializa os pinos conectados com o 74HC595.
void SR74HC595_Init() {
SR74HC595_Data_Direction = 0;
SR74HC595_Clock_Direction = 0;
SR74HC595_Latch_Direction = 0;
SR74HC595_Data = 0;
SR74HC595_Clock = 0;
SR74HC595_Latch = 0;
}
//Envia 8 bits.
void SR74HC595_Send_Char(char c) {
SR74HC595_Send(c);
//Atualiza as saídas do 74HC595.
SR74HC595_Send_Latch();
}
// Envia 16 bits.
void SR74HC595_Send_Int(unsigned i) {
SR74HC595_Send(((char*)&i)[1]); // Envia os 8 bits mais significativos.
SR74HC595_Send(((char*)&i)[0]); // Envia os 8 bits menos significativos.
//Atualiza as saídas do 74HC595.
SR74HC595_Send_Latch();
}
// Envia 32 bits.
void SR74HC595_Send_Long(unsigned long l) {
SR74HC595_Send(((char*)&l)[3]); // Envia os 8 bits mais significativos.
SR74HC595_Send(((char*)&l)[2]);
SR74HC595_Send(((char*)&l)[1]);
SR74HC595_Send(((char*)&l)[0]); // Envia os 8 bits menos significativos.
//Atualiza as saídas do 74HC595.
SR74HC595_Send_Latch();
}
// Envia n bytes.
void SR74HC595_Send_N_Bytes(void * bytes, int n) {
char * p = (char*)bytes;
while(n) {
SR74HC595_Send(p[--n]);
}
//Atualiza as saídas do 74HC595.
SR74HC595_Send_Latch();
}
//Envia n bits.
void SR74HC595_Send_N_Bits(void * bytes, int n) {
unsigned byte = n / 8;
char b = 1 << ((nbits - 1) % 8);
char * p = (char*)bytes;
// Para cada byte.
while(byte >= 0) {
//Para cada bit.
while(b != 0) {
SR74HC595_Send_Bit(p[byte] & b);
b >>= 1;
}
b = 0x80;
byte--;
}
// Atualiza as saídas do 74HC595.
SR74HC595_Send_Latch();
}
void main() {
long numeroCom32bits = 0x711755AA;
// Inicia os pinos conectados ao 74HC595.
SR74HC595_Init();
while(1) {
SR74HC595_Send_N_Bits(&numeroCom32bits, 11); // Envia 11 bits do número.
Delay_ms(5000);
SR74HC595_Send_N_Bytes(&numeroCom32bits, 3); // Envia 3 bytes do número.
Delay_ms(5000);
SR74HC595_Send_Long(numeroCom32bits); // Envia os 4 bytes do número.
Delay_ms(5000);
SR74HC595_Send_Int(12345); // Envia os 2 bytes do número.
Delay_ms(5000);
SR74HC595_Send_Char('a'); // Envia 1 byte.
Delay_ms(5000);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment