




















Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Instruções para realização de programação assembler (geração de código-fonte) na linguagem do PIC - Microchip - o que voce deve fazer frente à pagina em branco do MPLAB
Tipologia: Notas de estudo
1 / 28
Esta página não é visível na pré-visualização
Não perca as partes importantes!





















Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/
“Às vezes, as coisas que nos são mais importantes permanecem desconhecidas, escondidas por trás da sua familiaridade.” Lüdwig Wittgenstein, filósofo A arte de criar um programa ou algoritmo para controlar alguma coisa envolve muito mais que o conhecimento de uma linguagem de programação com suas instruções e recursos. Envolve o conhecimento do que deseja controlar. Como opera, funciona, responde, envia e recebe informações. A maioria dos problemas não envolve exclusivamente informações digitais, mas informações analógicas que devem ser manipuladas para atingir valores que podem ser lidos pelo sistema de controle. Envolve, ainda, a compreensão destes valores e o que representam para o sistema controlado. Pior, o programador deve ter conhecimento dos valores representados para transformá-los em valores digitais e interpretá-los adequadamente para que os sinais de controle enviados de retorno para o sistema tenham o correto desempenho. Em suma, o programador não deve e não pode ser um simples “organizador de instruções”, mas um profundo conhecedor do processo para que o programa ou algoritmo desenvolvido seja o menor e o mais eficiente possível. Assim como diz a frase do filósofo, o programador deve pensar o impensável, ver o invisível, imaginar o inimaginável para produzir uma obra de arte.
Fig. 1 – Processo de formação de código-fonte e gravação no MCU
Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/
APRESENTAÇÃO
Fig. 2 – Trecho da Área de Identificação no Código-Fonte
Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/
Fig. 3 – Trecho da Área de Diretivas no Código-Fonte
Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/
REGRAS BÁSICAS
Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/
CBLOCK 0x20 ; ENDEREÇO DE INÍCIO DAS VARÁVEIS W_TEMP ; REG. TEMPORÁRIO PARA VALOR DE W _TEMPORARIO ; REG. TEMPORÁRIO FLAGS ; REG. PARA FLAG DE CONTROLE ENDC ; FIM DO BLOCO DE VARIÁVEIS ORG 0x00 ; ENDEREÇO VETOR DE RESET
Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/
Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/
CBLOCK 0x20 ; ENDEREÇO DE INÍCIO DAS VARÁVEIS W_TEMP ; REG. TEMPORÁRIO PARA VALOR DE W _TEMPORARIO ; REG. TEMPORÁRIO FLAGS ; REG. PARA FLAG DE CONTROLE ENDC ; FIM DO BLOCO DE VARIÁVEIS Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/
CONFIG B’10000101001000’ ; 3F50h – REGISTRO DE CONFIGURAÇÃO ; BIT CÓDIGO FUNÇÃO VALOR ; 13 CP Code Protection 1 Desligado ; 12 Não implementado 0 ; 11 Não implementado 0 ; 10 Não implementado 0 ; 8 Não implementado 0 ; 7 LVP Low Voltage Programming 1 Desligado ; 6 BOREN Brown-out Reset Enable 0 Ligado ; 5 MCLRE RA5/Master Clear Enable 0 RA5 entrada digital ; 3 PWTERN Power-up Time Enable 0 Ligado ; 2 WDTEN Watchdog Timer Enable 0 Desligado ; 4,1,0 FOSC2:FOSC0 Oscillator Selection 100 Oscilador Interno ; ----------------------------------------------------------------------------------------------------------------------------------------------------------- ; PÁGINA DE MEMÓRIA #DEFINE BANK0 BCF STATUS,RP0 ; ATIVA BANCO DE MEMÓRIA 0 (ZERO) #DEFINE BANK1 BSF STATUS,RP0 ; ATIVA BANCO DE MEMÓRIA 1 (UM) ; ----------------------------------------------------------------------------------------------------------------------------------------------------------- ; VARIÁVEIS CBLOCK 0X20 ; ENDEREÇO INICIAL MEMÓRIA USO GERAL W_TEMP ; REGISTRO TEMPORÁRIO PARA W STATUS_TEMP ; REGISTRO TEMPORÁRIO PARA STATUS FLAG ; REGISTRO PARA DESVIOS CONDICIONAIS CONT_1 ; REGISTRO CONTAGEM CONT ENDC ; FIM BLOCO MEMÓRIA USO GERAL ; ----------------------------------------------------------------------------------------------------------------------------------------------------------- ; FLAG INTERNO #DEFINE F_CONT_1 FLAG,1 ; DESVIO CONT_1 NO REG. FLAG, BIT 1 ; ----------------------------------------------------------------------------------------------------------------------------------------------------------- ; CONSTANTES CT_CONT_1 EQU .250 ; CONSTANTE DE INÍCO DO CONT ; ----------------------------------------------------------------------------------------------------------------------------------------------------------- ; ENTRADAS #DEFINE B1 PORTA,1 ; BOTAO B1 LIGADO AO PINO RA ; ----------------------------------------------------------------------------------------------------------------------------------------------------------- ; SAÍDAS #DEFINE L1 PORTA,6 ; LED L1 LIGADO AO PINO RA Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/
CALL 3FFh ; CHAMA VALOR EXISTENTE NO ENDEREÇO MOVWF OSCCAL ; CALIBRADOR DO OSCILADOR LOCAL BANK0 ; PÁGINA DE MEMÓRIA 0 MOVLW B'00000111' MOVWF CMCON ; DESLIGA OS COMPARADORES ANALÓGICOS E ; HABILITA OS PINOS DO PORTA PARA I/O DIGITAL Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/
ARQUIVO BASICO.asm - COMENTADO
; PROJETO .....................: [nome de identificação ou referencia do projeto] ; CLIENTE ......................: [nome do cliente ou mercado ou produto de aplicação] ; NOME ARQUIVO .......: [nome de localização do arquivo no servidor principal ou outro meio de arquivo[ ; ; ----------------------------------------------------------------------------------------------------------------------------------------------------------- ; DATAS E VERSÕES ; ; [cada linha pode conter informações desde o princípio do projeto, modificações e descrição sucinta de cada modificação realizada] ; ; INÍCIO.... 00/00/0000 VERSÃO..... 00.00 RESPONSÁVEL..... [nome ou sigla do programdor] ; INÍCIO.... 00/00/0000 VERSÃO..... 00.00 RESPONSÁVEL..... ; INÍCIO.... 00/00/0000 VERSÃO..... 00.00 RESPONSÁVEL..... ; INÍCIO.... 00/00/0000 VERSÃO..... 00.00 RESPONSÁVEL..... ; ; ----------------------------------------------------------------------------------------------------------------------------------------------------------- ; DESCRIÇÃO OPERACIONAL ; [Descrever a operação do código-fonte com informações suficientes para a correta compreensão do funcionamento. Deve existir documentação com diagramas elétricos detalhados, lista de materiais e manual de instruções/operação/manutenção em outros tipos de documentos que podem e devem ser referenciados neste capítulo. Procurre não se apoiar em documentação exclusivamente eletronica.] ; ; ; ; ; ; ; -----------------------------------------------------------------------------------------------------------------------------------------------------------
Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/
[Neste capítulo o programador deve definir os arquivos de inclusão com o modelo do microcontrolador usado e as macros com sequencias de instruções já estabelecidas – sub rotinas.] #INCLUDE <P16F628A.INC> ; ARQUIVO PADRÃO DO CONTROLADOR
[Neste capítulo coloca-se a configuração que o controlador vai operar. O acesso ao registro de configuração só é possível durante a gravação ds memória de programa. As opções de configuração dependem do modelo de controlador e devem ser estabelecidas com as informações da folha de dados do modelo escolhido no arquivo de inclusão.] __CONFIG B’10000101001000’ ; 3F50h – REGISTRO DE CONFIGURAÇÃO
[Nota: o valor numérico colocado após a instrução CONFIG pode assumir qualquer representação, isto é, decimal ou binária ou hexadecimal. Para melhor compreensão das opções determinadas pelo programador, recomenda-se a utilização do formato binário, compatível com a página da folha de dados do componente – O Anexo 1 mostra a cópia da folha do datasheet que contém as informações de aplicação das opções de uso do controlador 16F628A..] [Descrever as opções do registro CONFIG torna mais fácil interpretar as escolhas de funcionamento do componente. Para cada modelo de controlador existe um registro específico, que o programador deve buscar na folha de dados.]] ; BIT CÓDIGO FUNÇÃO VALOR ; 13 CP Code Protection 1 Desligado ; 12 Não implementado 0 ; 11 Não implementado 0 ; 10 Não implementado 0 ; 8 Não implementado 0 ; 7 LVP Low Voltage Programming 1 Desligado ; 6 BOREN Brown-out Reset Enable 0 Ligado ; 5 MCLRE RA5/Master Clear Enable 0 RA5 como entrada digital ; 3 PWTERN Power-up Time Enable 0 Ligado ; 2 WDTEN Watchdog Timer Enable 0 Desligado ; 4,1,0 FOSC2:FOSC0 Oscillator Selection 100 Oscilador Interno sem saída de clock Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/
[Cada flag é alocado em um bit de um registro – Nome recomendado FLAG – devidamente declarado no capítulo das Variáveis dentro da diretiva CBLOCK.. No exemplo, o Nome F_CONT_1 está sendo associado ao bit 1 do registro FLAG. O programador usa o Nome F_CONT no código-fonte.]_ ; ----------------------------------------------------------------------------------------------------------------------------------------------------------- ; CONSTANTES [Constantes são valores numéricos que o código-fonte emprega para iniciar contadores, temporizadores, realizar comparações lógicas, acionar saídas etc..Neste capítulo o programador relaciona um Nome a um valor numérico que pode ser representado na forma decimal, binária ou hexadecimal, ou ainda na forma de uma expressão aritmética.] CT_CONT_1 EQU .250 ; CONSTANTE DE INÍCO DO CONT_
[A utilização de um Nome relacionado a uma constante numérica traz vantagens para o programador (não para o código-fonte). A lista de constantes está localizada em uma área específica do texto do código-fonte – capítulo Constantes – onde são especificadas as aplicações destas constantes. No código-fonte, o programador vai utilizar sempre o Nome relacionado à constante e não o valor numérico. Se houver necessidade de se modificar o valor numérico para adequar a operação do código-fonte, o programador faz a alteração no capítulo Constantes. O compilador se encarrega de fazer as alterações no restante do código-fonte.] ;------------------------------------------------------------------------------------------------------------------------------------------------------------ ; ENTRADAS [Neste capítulo são relacionados os Nomes associados aos dispositivos externos de controle que enviam sinais ao controlador – entradas (input)
- onde cada entrada corresponde a um bit de um registro PORT.] #DEFINE B1 PORTA,1 ; BOTAO B1 LIGADO AO PINO RA
[Cada dispositivo de entrada é alocado em um bit de um registro PORT. Ao se associar um Nome a um dispositivo externo, é importante que seja o mesmo Nome empregado tanto no diagrama de circuito quanto no fluxograma. No exemplo, o Nome B1 está sendo associado ao bit 1 do registro PORTA. O programador usa o Nome B1 no código-fonte.] ; ----------------------------------------------------------------------------------------------------------------------------------------------------------- ; SAÍDAS [Neste capítulo são relacionados os Nomes associados aos dispositivos externos que são comandados pelo controlador – sáidas (output) – onde cada saída corresponde a um bit de um registro PORT.] #DEFINE L1 PORTA,6 ; LED L1 LIGADO AO PINO RA
[Cada dispositivo de saída é alocado em um bit de um registro PORT. Ao se associar um Nome a um dispositivo externo, é importante que seja o mesmo Nome empregado tanto no diagrama de circuito quanto no fluxograma. No exemplo, o Nome L1 está sendo associado ao bit 6 do registro PORTA. O programador usa o Nome L1 no código-fonte.] Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/
[O endereço 0X00 é relativo ao Vetor de Reset. Quando o controlador é ligado à fonte ou quando ocorre um reset interno (por qualquer motivo) o programa inicia sempre neste endereço. O programador deve verificar no datasheet do controlador a disponibilidade de endereços livres para colocação de instruções antes da ocorrencia de outro Vetor automático.] [A diretiva ORG avisa o compilador que o texto seguinte refere-se às instruções que deverão ser gravadas na Memória de Programa a partir do endereço indicado.} ORG 0X00 ; ENDEREÇO INICIAL DO CÓDIGO
[Normalmente existem 4 posições na Memória de Programa antes do Vetor de Interrupção (endereços 0x00 a 0x03) que podem ser ocupados com instruções. No geral, costuma-se fazer um desvio para um endereço de memória onde está escrito o código-fonte relativo ao SET_UP do controlador, que ocupa mais que 4 posições de memória. Este espaço inicial também pode ser utilizado para as instruções de teste das funções de Brown-Out Detect e Power-On Reset.) ; ----------------------------------------------------------------------------------------------------------------------------------------------------------- ; VETOR DE INTERRUPÇÃO [O endereço 0X04 é relativo ao Vetor de Interrupção. Quando interrupções são habilitadas, o programa é desviado para este endereço sempre que ocorre uma interrupção. O programador pode iniciar a sequencia de instruções para tratamento das interrupções a partir deste endereço ou fazer um desvio para um endereço da Memória de Programa a partir do qual estará escrito o código-fonte relativo ao tratamento das interrupções.] [O programador deve estar ciente de que o desvio para o Vetor de Interrupção ocorre para qualquer tipo de interrupção, bastando que esteja habilitada (bit relativo à habilitação – enable – com valor 1 (um))] ORG 0X04 ; ENDEREÇO INICIAL DA INTERRUPÇÃO
[A sequencia de instruções segue a recomendação da Microchip para manter inalterados os valores contidos nos registros STATUS e W quando houver um desvio para Tratamento de Interrupções – no caso, Salvar Contexto – uma vez que estes dois registros são permanentemente empregandos pela CPU. O objetivo destas instruções é salvar os valores contidos nos registros STATUS (em STATUS_TEMP) e W (em W_TEMP) enquanto o programa realiza o atendimento da Interrupção requisitada. Quando o tratamento da interrupção for conpletado, o retorno à rotina normal implica que os valores contidos nos dois registros não correspondem aos valores que existiam antes da requisição da interrupção logo, a probabilidade de que o programa apresente soluções erradas é quase de 100%. O programador deve seguir esta recomendação e, se houver outro registro que seja necessária a preservação do valor contido durante o tratamento da interrupção, deve ser incluso na sequencia de Salvar Contexto. A sequencia Salvar Contexto pode ser considerada como padrão em todos os códigos-fonte realizados.] MOVWF W_TEMP ; SALVA W EM W_TEMP SWAPF STATUS,W ; TROCA NIB_HI POR NIB_LO EM STATUS E GRAVA ; EM W MOVWF STATUS_TEMP ; SALVA STATUS EM STATUS_TEMP Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/