Blink - Exemplo para o nRF24LE1
Esse exemplo pisca um LED.
Pre-requisitos
- Ter instalado os softwares para desenvolvimento.
- Saber criar um projeto e adicionar as biblitoecas HAL.
Código
#include<Nordic\reg24le1.h> // Registradores do nrf24le1
#include<hal_delay.h> // HAL para as funções de delay
/**
* Função de inicialização das funções que serão utilizadas
*/
void setup(){
// Inicializa os pinos do Port 0 e Port 1 todos como entradas.
P0DIR = 0xFF; P1DIR = 0xFF;
// Configura o pino 3 do Port 0 como saída
P0DIR &= ~(1 << 3);
}
/**
* Está função é chamada repetidivamente.
*/
void loop(){
// Inverte o Pino 0 do Port 0
P03 = !P03;
// Aguarda 1s
delay_ms(1000);
}
/**
* Função Main, indicando como funcionará o sitema.
* Ele está simplificado para funcionar semelhante ao arduino.
*/
void main(){
setup();
while(1){
loop();
}
}
Conexões
PINO | Conexão |
---|---|
VCC | Alimentação |
GND | Ground |
P03 | LED com resistor |
Explicação
P0DIR
O registrador P0DIR é responsável por determinar se um pino será
uma entrada (1) ou uma saída (0), sendo que cada bit dele equivale
a um pino do Port 0.
Por exemplo, se P0DIR = 0xF7
(em binário 1111 0111), então:
Bit | Pino | Valor | Estado |
---|---|---|---|
0 | P00 | 1 | INPUT |
1 | P01 | 1 | INPUT |
2 | P02 | 1 | INPUT |
3 | P03 | 0 | OUTPUT |
4 | P04 | 1 | INPUT |
5 | P05 | 1 | INPUT |
6 | P06 | 1 | INPUT |
7 | P07 | 1 | INPUT |
Hexadecimais
É comum o uso de hexadecimais para representar os valores, pois é rápida a conversão de hexadecimal para binário, cada digito hex equivale a um conjunto de 4 bits.
Tabela para conversão rápida
Hex | Binary |
---|---|
0 | 0000 |
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
8 | 1000 |
9 | 1001 |
A | 1010 |
B | 1011 |
C | 1100 |
D | 1101 |
E | 1110 |
F | 1111 |
10 | 0001 0000 |
20 | 0010 0000 |
40 | 0100 0000 |
80 | 1000 0000 |
Operadores BitWise
Para manipulação de bits são utilizados os operados bitwise. São eles:
&
: And
0b10011110 & 0b11110111 = 0b10010110
|
: Or
0b10011110 | 0b00100000 = 0b10111110
~
: Not
~0b00001000 = 0b11110111
<<
: Shift Left
1<3 = 0b100 = 0b00001000
>>
: Shift Right
0b100>3 = 0b1 = 0b00000001
Mascáras
- Para setar um único bit de um byte para 1 sem alterar os outros você deve:
original = 0x9E; // 1º modo: Primeiro modo original = original | 0x20; // 2º modo: Utilizando um operador shift para facilitar original = original | 1<<5; // 3º modo: Simplificando original |= 1<<5;
- Para setar um único bit de um byte para 0 sem alterar os outros você deve:
original = 0x9E; // 1º modo: Primeiro modo original = original & 0xF7; // 2º modo: Utilizando um operador not original = original & ~(0x08); // 2º modo: Utilizando um operador shift para facilitar original = original & ~(1<<3); // 3º modo: Simplificando original &= ~(1<<3);