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