Antes de continuar saquem o datasheet do 16F84A que se encontra em baixo.
Continuando... Agora os registos mais importantes, mas antes vou tentar sintonizar o pessoal, na citação anterior descrevi um pouco de um possÃvel programa, na instrução "call CONFIG", o que se pretende é "salta" para uma subrotina onde iremos configurar o chip, para que ele faça o que queremos. Nessa subrotina iremos invocar uns quantos SFR para que possa-mos por o chip a fazer o que queremos. Imaginemos que pretendemos que um led acenda quando o pino RB0 for primido e fique apagado quando o RB1 for premido, ah o led esta no RB2. Assim, temos RB0 e RB1 como entradas e RB2 como saÃda.
Então teremos de usar os registos; STATUS, OPTION, PORT e TRIS.
E por quê???

Bem, primeiro temos que invocar o registo de STATUS, para podermos ir para o banco 1 e assim fazermos outras configurações.Mas antes, as caracterÃsticas deste registo:
- Bit7 e bit6 IRP e RP1 respectivamente, estes dois bits não são usados, o valor deles é "0".
- Bit 5 RP0, se colocarmos este bit a "1", então passamos a aceder ao banco1.
- Todos os restantes bit deste registo, são do tipo "flag bit", ou seja servem para nos indicar que algo aconteceu, ou não.
Por exemplo, se fizermos uma conta de subtrair e o resultado der zero então a flag-zero é colocada a nivel "1".
Nota: Convém colocar as flag Z,DC e C a zero, antes de se efectuarem acções do tipo calculo, ou logica, pois é graças a estas flag que iremos saber o que aconteceu.

Neste caso vamos só activar os BIT 7(por a "1"), que é para por pull-up (internas) nas entradas RB0 e RB1, e garantir que o bit 3 PSA está a "0", os restantes bits não tem interesse para este caso.
os restantes bits são:
- Bit 6 INTEDG, este bit serve para indicar se o inerrupt vindo por RB0/INT, é no flanco ascendente (bit a "1"), ou no descendente (bit a"0").
- Bit 5 T0CS, aqui definimos se o Timer funciona a partir do RA4/T0CKI (bit a "1"), ou a partir do clock interno (bit a "0").
- Bit 4 T0SE, com este bit a "1" definimos que o Timer incrementa no flanco descendente, e a "0" incrementa no flanco ascendente.
- Bit 3 PSA, aqui podemos definir se queremos o watchdog (bit a "1"), ou o Timer (bit a "0")
- Bit 2 a bit 0, estes 3 bits servem para definir o valor do "prescaler", em tuga divisor. Com estes 3 últimos bits podemos definir a velocidade a que o contador funciona (dependendo de certos valores).
NOTA: Sempre que não se pretende usar o WDT (watchdog timer), CONVÉM por o bit 3 PSA a "0".

No caso do INTCON, só temos que garantir que tudo esteja a zero pois não vamos usar nenhum interrupt.
Mas vamos ver os seus bits em maior profundidade:
- Bit 7 GIE, este é o bit que dá a autorização (quando está a "1")a todos os possiveis interrupts para ficarem activos, ou não (quando está a "0")
- Bit 6 EEIE, se activarmos este bit (coloca-lo a "1") , sempre que a EEPROM acabe de ser escrita eta faz intrrupt (isto porque esta memoria é muito lenta, e esta é uma maneira para ela garantir que informa o programador que já esta escrita). Se este bit ficar a zero não iremos ter interrupt, assim teremos que fazer uma subrotina de espera, para a EEPROM acabar o se trabalho.
- BIT 5 T0IE, Se estiver a "1" o timer provoca interrupt sempre que entrar em "overflow", a zero este nada fará.
- Bit 4 INTE, a "1" o pino RB0 Fica como pino de interrupt, a zero nada se passará.
- Bit 3 RBIE, este bit a "1" os pinos RB4, RB5, RB6 e RB7, iram passar a pinos de interrup, mas com caracterÃsticas diferentes do RB0. Se etiver a zero nada se passará.
Os restantes bits deste registo são flag-bits, que deveram ser limpas sempre que necessário, e são as seguintes:
- Bit 2 T0IF, se estivera "1", ocorreu um overflow do timer, a zero nada se passou.
- Bit 1 INTF, a "1" ocorreu interrup no pino RB0, a "0" nada se passou.
- Bit 0 RBIF, a "1" um dos pinos (de RB4 a RB7), provocou Interrupt, a "0" nada se passou.
Na próxima citação mostrarei como ficará então este bocado de programa.
[attachment deleted by admin]