Galera, estou fazendo um programinha. Um voltímetro com 16F88 e peguei um código fonte emprestado do meu livro CONECTANDO O PIC, com 16F877.
Já fiz as modificações que acho necessárias, dentro do MPLAB, pra simular no PROTEUS. Porém quando vou compilar no MPLAB, aparece sempre um erro:
Building E04F88.ASM...
Command line: "C:\ARQUIV~1\MPLAB\MPASMWIN.EXE /aINHX8M /e+ /l+ /x- /w0 /c+ /p16F88 /q E04F88.ASM"
Error[126] C:\DOCUME~1\ADMINI~1\MEUSDO~1\VOLTF877\E04F88.ASM 25 : Argument out of range (not a valid config register address)
Message[302] C:\DOCUME~1\ADMINI~1\MEUSDO~1\VOLTF877\E04F88.ASM 334 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\DOCUME~1\ADMINI~1\MEUSDO~1\VOLTF877\E04F88.ASM 337 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\DOCUME~1\ADMINI~1\MEUSDO~1\VOLTF877\E04F88.ASM 342 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\DOCUME~1\ADMINI~1\MEUSDO~1\VOLTF877\E04F88.ASM 354 : Register in operand not in bank 0. Ensure that bank bits are correct.
MPLAB is unable to find output file "E04F88.hex". This may be due to a compile, assemble, or link process failure.
Build failed.
Já pesquisei nos meus livros mas não sei a razão do erro.
Se alguem estiver com tempo pra dar uma olhada e me esclarecer. agradeço.
Uma parte do código fonte vem a seguir:
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * VOLTÍMETRO COM 16f88 *
; * *
; * NICOLÁS CÉSAR LAVINIA e DAVID JOSÉ DE SOUZA *
; * *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * VERSÃO : 2.0 *
; * DATA : 24/02/2003 *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * DESCRIÇÃO GERAL *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTE EXEMPLO FOI ELABORADO PARA EXPLICAR O FUNCIONAMENTO DO MÓDULO DE
; CONVERSÃO ANALÓGICO DIGITAL INTERNO DO PIC 16f88. É CONVERTIDO O VALOR ANALÓGICO
; PRESENTE NO PINO RA1 DO MICROCONTROLADOR, E MOSTRADO NO LCD.
; FORAM UTILIZADAS ROTINAS DE MULTIPLICAÇÃO DE 8x8 E DIVISÃO DE 16x16. ESTAS
; ROTINAS FORAM RETIRADAS DE APLICATION NOTES DA PRÓPRIA MICROCHIP.
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * CONFIGURAÇÕES PARA GRAVAÇÃO *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
__CONFIG _CP_OFF & _CPD_OFF & _DEBUG_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * DEFINIÇÃO DAS VARIÁVEIS *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTE BLOCO DE VARIÁVEIS ESTÁ LOCALIZADO LOGO NO INÍCIO DO BANCO 0
CBLOCK 0X20 ; POSIÇÃO INICIAL DA RAM
ACCaHI ; ACUMULADOR a DE 16 BITS UTILIZADO
ACCaLO ; NA ROTINA DE DIVISÃO
ACCbHI ; ACUMULADOR b DE 16 BITS UTILIZADO
ACCbLO ; NA ROTINA DE DIVISÃO
ACCcHI ; ACUMULADOR c DE 16 BITS UTILIZADO
ACCcLO ; NA ROTINA DE DIVISÃO
ACCdHI ; ACUMULADOR d DE 16 BITS UTILIZADO
ACCdLO ; NA ROTINA DE DIVISÃO
temp ; CONTADOR TEMPORÁRIO UTILIZADO
; NA ROTINA DE DIVISÃO
H_byte ; ACUMULADOR DE 16 BITS UTILIZADO
L_byte ; P/ RETORNAR O VALOR DA ROTINA
; DE MULTIPLICAÇÃO
mulplr ; OPERADOR P/ ROTINA DE MUTIPLICAÇÃO
mulcnd ; OPERADOR P/ ROTINA DE MUTIPLICAÇÃO
TEMPO0
TEMPO1 ; TEMPORIZADORES P/ ROTINA DE DELAY
AUX ; REGISTRADOR AUXILIAR DE USO GERAL
UNIDADE ; ARMAZENA VALOR DA UNIDADE DA TENSÃO
DEZENA ; ARMAZENA VALOR DA DEZENA DA TENSÃO
ENDC
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * DEFINIÇÃO DAS VARIÁVEIS INTERNAS DO PIC *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; O ARQUIVO DE DEFINIÇÕES DO PIC UTILIZADO DEVE SER REFERENCIADO PARA QUE
; OS NOMES DEFINIDOS PELA MICROCHIP POSSAM SER UTILIZADOS, SEM A NECESSIDADE
; DE REDIGITAÇÃO.
list P=16F88, R=dec
#INCLUDE "P16F88.INC" ; MICROCONTROLADOR UTILIZADO
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * DEFINIÇÃO DOS BANCOS DE RAM *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; OS PSEUDOS-COMANDOS "BANK0" E "BANK1", AQUI DEFINIDOS, AJUDAM A COMUTAR
; ENTRE OS BANCOS DE MEMÓRIA.
#DEFINE BANK1 BSF STATUS,RP0 ; SELECIONA BANK1 DA MEMORIA RAM
#DEFINE BANK0 BCF STATUS,RP0 ; SELECIONA BANK0 DA MEMORIA RAM