Boilerplate - acmlira/pic16f628a GitHub Wiki
The most important things about boilerplate.asm
Boilerplate (padrão)
As coisas mais importantes sobre o boilerplate.asm
A primeira parte: cabeçalho
Usando o MPLAB para construir nossos projetos
list p=16f628a
#include <p16f628a.inc>
__config _XT_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF
A diretiva __config influência todo o resto do código, no p16f628a.inc pode ser visto em detalhes que no nosso boilerplate desabilitam RA7, RA6, and RA5:
- RA7 e RA6: entrada do oscilador
- RA5: entrada do MCLR (Master CLeaR ou só Reset)
Trabalhando com a memória
Cria mnemônicos para mudar entre bancos de registradores (change to bank X):
#define ctb0 bcf STATUS, RP0
#define ctb1 bsf STATUS, RP0
Apenas 2 bancos são utilizados no PIC16F628A, os outros 2 possuem apenas registradores espelhados, veja mais. Alocando variáveis na memória através das diretivas:
cblock H'0070'
W_TEMP
STATUS_TEMP
endc
Observação: H'0070' é o primeiro endereço para se trabalhar como variável
Vetores
Basicamente são os endereços absolutos para onde as interrupções apontam e para onde o programa é iniciado após o reset. O código a seguir está no datasheet:
org H'0000'
goto Start
org H'0004'
movwf W_TEMP
swapf STATUS,W
ctb0
movwf STATUS_TEMP
... Interrupt routines ...
swapf STATUS_TEMP, W
movwf STATUS
swapf W_TEMP, F
swapf W_TEMP, W
retfie
Observação: o swapf preserva o processador da flag Z no STATUS