Agora que temos as ferramentas necessárias instaladas, vamos
programar. Programar microcontroladores não é complicado, é
trabalhoso. Gasta-se muito tempo lendo manuais para saber como
"setar os bits" para as coisa funcionarem. No compilador, temos
um header (arquivo .h) que define constantes que são mapas para
o endereço de memória das portas dos seu microcontrolador. Então
para ativar todos os 8 bits da porta D do seu PIC, basta colocar:
PORTD = 0b11111111;
PORTD = 0xff;
PORTD = 255;
No exemplo acima usei notação em binário, hexadecimal e decimal.
Todas tem o mesmo efeito. Use a que achar mais fácil. PORTD é uma
constante que aponta para o endereço de memória da porta D. Para
ativar apenas o terceiro bit da porta D, usa-se:
RD3 = 1;
O nome de todas as constantes estão dentro do diretório "include"
de onde instalamos o PICC Lite, no arquivo pic1687x.h, que é o usado
para PIC16F877. Segue um "alô mundo" que alterna os estados de
ligado e desligado de 2 bits da porta A:
01: #include <pic.h>
02:
03: int main (void)
04: {
05: int contador;
06:
07: RA0 = 0;
08: RA1 = 1;
09:
10: /* Desabilita Watchdog, para o mcontrolador nao
11: ficar resetando. Isso tem no pic1687x.h */
12: __CONFIG (WDTDIS);
13:
14: /* Configura a porta A como saida, manual do P16F877
15: pagina 29. Sem isso nao se consegue alterar os
16: valores dos bits da porta A */
17: TRISA = 0;
18:
19: while (1)
20: {
21: // Gera uma espera
22: for (contador = 1; contador < 30000; contador++);
23:
24: // Alterna estados entre os bits 0 e 1 da porta A
25: if (RA0 == 1)
26: {
27: RA0 = 0;
28: RA1 = 1;
29: }
30: else
31: {
32: RA0 = 1;
33: RA1 = 0;
34: }
35: }
36:
37: // Nunca chega aqui
38: return 0;
39: }
40:
Comentários:
Você deve estar achando estranho que não usei o header
pic1687x.h (linha 1) no include. O certo é usarmos apenas o
pic.h e passarmos qual microcontrolador usamos como parâmetro
do compilador. Isto deixa nosso código portável, desde que o
microcontrolador suporte os recursos usados no código.
Normalmente quanto menor o número do PIC, menos recursos ele
tem. Um código para PIC16F84 deve compilar para PIC16F877.
Watchdog é um recurso do PIC para ele resetar no caso
de travamento. É um contador que deve ser zerado regularmente.
Quando isto não ocorre (em caso de travamento), o contador
estoura e ocorre um reset. Como nosso programa é muito pequeno,
podemos desabilitar o Watchdog (linha 12).
Na linha 17 configuramos o registrador TRISA como 0 (decimal).
Isto equivale a colocarmos todos os 8 bits desta porta como 0.
Esta porta quando zerada, indica que a porta A é uma porta de
saída, então podemos alterar seus valores. Quando ela é de
entrada, só pode ser alterada por um mecanismo externo.
Observe que o programa roda dentro de um loop infinito (linha
19). É assim mesmo que funciona. O programa nunca deve chegar
ao fim, senão espere o inesperado. Nosso código fica alternando
os estados dos bits 0 e 1 da porta A eternamente. Nestas portas
poderiam estar ligados LEDs que ficariam piscando.