Escolar Documentos
Profissional Documentos
Cultura Documentos
PROGRAMAO ASSEMBLER
s vezes, as coisas que nos so mais importantes permanecem desconhecidas, escondidas por trs da sua familiaridade. Ldwig Wittgenstein, filsofo A arte de criar um programa ou algoritmo para controlar alguma coisa envolve muito mais que o conhecimento de uma linguagem de programao com suas instrues e recursos. Envolve o conhecimento do que deseja controlar. Como opera, funciona, responde, envia e recebe informaes. A maioria dos problemas no envolve exclusivamente informaes digitais, mas informaes analgicas que devem ser manipuladas para atingir valores que podem ser lidos pelo sistema de controle. Envolve, ainda, a compreenso 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 no deve e no pode ser um simples organizador de instrues, mas um profundo conhecedor do processo para que o programa ou algoritmo desenvolvido seja o menor e o mais eficiente possvel. Assim como diz a frase do filsofo, o programador deve pensar o impensvel, ver o invisvel, imaginar o inimaginvel para produzir uma obra de arte.
INTRODUO
Assembler uma linguagem de programao usada para desenvolver o cdigo-fonte para uma determinada aplicao que utilize microcontroladores. uma linguagem com cdigos e mnemnicos (baixo nvel) que permitem o controle do processamento no nvel de um bit de um registro portanto, aproxima o usurio da manipulao da informao dentro do ncleo de processamento e das memrias de programa e dados individualmente. Ainda assim, o Assembler uma linguagem para compreenso humana e no da mquina. A mquina s compreende informaes na forma binria, que de compreenso impossvel pelo humano. Logo, deve existir um elemento tradutor da linguagem Assembler (humana) para a linguagem de mquina (binria). O tradutor um programa residente elaborado pelo fabricante do dispositivo microcontrolador (compilador) que reconhece os comandos e mnemnicos da linguagem Assembler (que normalmente exclusiva para cada fabricante) um arquivo code.asm - e converte em linguagem de mquina um arquivo code.hex que ser gravado na memria de programa do microcontrolador atravs de um dispositivo gravador adequado. A fig.1 mostra, esquemticamente, o processo:
CDIGO-FONTE (.asm)
Os programas usados para criar um cdigo-fonte so, essencialmente, editores de texto. Enquanto o cdigo est sendo escrito, todas as facilidades encontradas nos editores de texto esto presentes. O cdigo s ser transformado em um arquivo executvel aps a compilao bem sucedida do cdigo-fonte. Mesmo aps a compilao, o que apresentado para o programador na tela continua sendo um texto. Lembre-se que o arquivo executvel (aquele que gravado na memria de programa do controlador)
Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07 2/28
ilegvel para ns humanos. Portanto, escrever o cdigo-fonte de uma aplicao um exerccio de apresentao de texto. Para facilitar o trabalho do programador, os programas para edio de cdigo-fonte trazem uma srie de facilidades automticas tais como colorir o texto de acordo com a funo de cada palavra, mas no organiza esse texto na tela. Isto funo do programador (trabalho braal). Um cdigo-fonte bem elaborado (no aspecto visual, porque no aspecto lgico outro assunto) tem apresentao tal que facilite a leitura, compreenso do funcionamento, correo (quando necessrio) e evoluo por qualquer outro programador, ou pelo seu criador (um ano depois).
APRESENTAO
A apresentao utilizada do cdigo-fonte ser aquela mostrada no arquivo BSICO.asm, desenvolvido a partir de aplicaes prticas e facilita as explicaes e informaes de como utilizar as diretivas e instrues do microcontrolador bem como a maneira de escrever de tal forma que o compilador seja capaz de interpretar e produzir o arquivo executvel sem erros. A formatao do texto do cdigo-fonte foi organizada para permitir o fcil sequenciamento do procedimento de programao utilizando, bsicamente, tres grandes captulos: 1- rea de Identificao Nesta rea so colocadas as informaes que identificam o cdigo-fonte.A fig.2 mostra parte da rea de Identificao do arquivo BSICO.asm:
claro que a fig.2 mostra apenas uma sugesto, visto que o tipo de informao constante na rea de Identificao depende exclusivamente dos objetivos do programador.
2- rea de Diretivas Nesta rea o programador coloca as instrues que orientam o compilador na formao do arquivo executvel. A fig.3 mostra parte da rea de Diretivas do arquivo BSICO.asm:
A quantidade de diretivas depende do nmero de variveis envolvidas no processo, quantidade de constantes, nmero de entradas e sadas empregadas pelo controlador etc..
3- rea de Cdigo Nesta rea escrito o programa efetivo que ser gravado na memria do controlador. O compilador monta o arquivo executvel com as instrues desta re a partir das diretivas dadas na rea de Diretivas. A fig.4 mostra parte da rea de Cdigo do arquivo BSICO.asm:
A extenso da rea de Cdigo dependente apenas da complexidade do sistema externo a ser controlado, podendo possuir tabelas de valores e caracteres, sub-rotinas, interrupes, clculos matemticos etc..
REGRAS BSICAS
Para escrever o cdigo-fonte algumas regras bsicas devem ser observadas. Como o cdigo-fonte um editor de texto, a formatao do texto pode seguir algumas regras simples comuns a todo o cdigo-fonte: no se usa acentuao do Portugues (acentos, til, cedilha etc.) lembre-se que a lngua de origem do Assembler o Ingles que no tem nenhum tipo de acentuao. para evitar possveis problemas de identificao do tamanhodo caixa da letra, utilizar sempre letras maisculas (caixa alta) para qualquer texto no cdigo-fonte o processador tem cdigos diferentes para identificar a mesma letra quando maiscula (caixa alta) ou minscula (caixa baixa), o que pode causar erro de compilao e este erro no identificado como tamanho do caixa da letra, mas como Nome (label) inexistente.
Nas figuras 2, 3 e 4 podemos ver como a apresentao do texto do cdigo-fonte atendendo a estas regras bsicas - trabalho braal feito pelo programador. No entanto, essa preocupao facilita a leitura e interpretao do cdigo-fonte pelo programador a qualquer tempo. Para escrever na linguagem de cdigo-fonte utilizamos os seguintes elementos: Nomes (labels) So criados e utilizados para identificar: Endereos Variveis Constantes Registros Bits Os elementos especiais de um controlador (Registros de Funo Especial e seus respectivos Bits) so identificados por Nomes fornecidos pelo fabricante. Normalmente so mnemnicos ou abreviaturas da funo deste elemento na operao do controlador. Os elementos de uso geral (Registros e Bits) so identificados por Nomes criados pelo programador e que, preferencialmente, devem ser relacionados funo proposta de cada um deles. Os Nomes empregados no cdigo-fonte no so interpretados pelo compilador so apenas para interpretao humana durante a compilao sero substitudos pelos endereos fsicos das memrias (registros, bits e endereos). Regras - um Nome no pode ser repetido para elementos diferentes uma vez criado um Nome, ele nico e individual para aquele cdigo-fonte. - deve ser iniciado por um carcter alfabtico ou under-line (no deve ser um carcter numrico ou dois . under-line). - pode ser formado por letras e nmeros desde que o primeiro carcter no seja numrico. - nomes compostos devem ser separados sempre por under-line (no usar hfen ( - )ou espao). - no deve conter smbolos grficos ou gramaticais. EXEMPLO:
ROTINA W_TEMP _TEMPORARIO FLAGS CONTADOR_2
Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07 7/28
Diretivas So comandos Assembler que so colocados no cdigo-fonte mas, normalmente, no so transformados em cdigos operacionais (opcodes) pelo compilador. Atravs das diretivas o programador informa como o compilador deve proceder para interpretar as informaes escritas na rea de Cdigo e relacionar com as informaes do controlador usado atravs do arquivo de incluso ([ arquivo ].inc). Regras Diretivas
#INCLUDE #DEFINE
- devem ser posicionados sempre a partir da coluna 1 (junto lateral esquerda da tela). EXEMPLO:
#INCLUDE #DEFINE P16F628A.INC L1_ALTA PORTB,1 ; ARQUIVO PADRO DO CONTROLADOR ; DEFINE NOME PARA BIT RB1 NO PORTB
Diretivas
CBLOCK ENDC ORG
- devem ser posicionados com um espao (mnimo) da coluna 1, preferencialmente com um espao do tipo tab. - separar o Endereo da Diretiva utilizando espaos ou tab. EXEMPLO:
CBLOCK 0x20 W_TEMP _TEMPORARIO FLAGS ENDC ; ENDEREO DE INCIO DAS VARVEIS ; REG. TEMPORRIO PARA VALOR DE W ; REG. TEMPORRIO ; REG. PARA FLAG DE CONTROLE ; FIM DO BLOCO DE VARIVEIS
ORG
0x00
Endereos (label) So nomes criados pelo programador para indicar o destino de desvios condicionais do programa ou incio de sub-rotinas. Regras - o nome do Endereo no pode ser repetido para destinos diferentes uma vez criado um Endereo para um destino de desvio, ele nico e individual para aquele destino. - deve ser iniciado por um carcter alfabtico (no deve ser um carcter numrico). - Endereos compostos devem ser separados sempre por under-line (no usar hfen ( - )ou espao). - deve ser sempre posicionado na coluna 1 (junto lateral esquerda da tela) uma nica vez a partir do Endereo inicia-se a sequencia de instrues do desvio. - um Endereo pode ser repetido inmeras vezes dentro do cdigo-fonte desde que precedido pela instruo GOTO ou CALL.
Instrues (mnemnicos) As instrues informam ao processador as operaes que devem ser realizadas com os registros e bits dentro do cdigo-fonte. O termo mnemnico indica que cada instruo a abreviatura de um texto indicativo da funo da instruo. Regras - as instrues devem ser posicionadas a partir da coluna 2 ou mais adiante (interessante que se utilize um espao TAB). - separar os operadores das instrues com um ou mais espaos ou vrios TAB. EXEMPLO:
MOVLW CT_TEMPO ; COLOCA CONSTANTE CT_TEMPO NO REG. W
> Comentrio > Espaos (3 x TAB) > Operador (constante) > Espaos (1 x TAB) > Instruo > Espaos (1 x TAB)
MOVWF
TEMPO
> Comentrio > Espaos (3 x TAB) > Operador (constante) > Espaos (1 x TAB) > Instruo > Espaos (1 x TAB) Operadores Os Operadores informam a instruo sobre os dados que sero usados e a localizao dos registros onde os dados se encontram. Os Operadores podem ser registros, variveis ou constantes, normalmente identificados por um Nome (existente, no caso dos Registros Especiais ,ou criado, no caso dos Registros de Usurio). Regras - operadores devem seguir instrues separados por espaos (utilizar um ou mais espaos
TAB).
> Comentrio > Espaos (3 x TAB) > Operador (constante numrica) > Espaos (1 x TAB) > Instruo > Espaos (1 x TAB)
MOVWF TEMPO ; COLOCA O VALOR DE W NO REG. TEMPO
> Comentrio > Espaos (3 x TAB) > Operador (varivel) > Espaos (1 x TAB) > Instruo > Espaos (1 x TAB)
GOTO SET_UP ; DESVIA PARA ENDEREO SET_UP
> Comentrio > Espaos (3 x TAB) > Operador (endereo) > Espaos (1 x TAB) > Instruo > Espaos (1 x TAB)
SWAPF
W_TEMP , F
> Comentrio > Espaos (3 x TAB) > Operador (registro de destino) > Vrgula separando Operadores Mltiplos (os espaos entre operadores no existe) > Operador (registro de origem) > Espaos (1 x TAB) > Instruo > Espaos (1 x TAB) Comentrios Comentrios so textos explicativos da operao de um cdigo-fonte, uma linha de comando ou linhas de comando. Podem ser escritos utilizando quaisquer caracteres inclusive com acentuao (Portugues). Regras - comentrios devem comear sempre por ponto-e-vrgula (;) o compilador ignora todo e qualquer carcter aps o ponto-e-vrgula (;) at o fim da linha. - comentrios que continuam na linha seguinte devem ser precedidos, tambm, por ponto-evrgula (;), mesmo se precedidos por espaos. - podem ser colocados em qualquer posio do texto do cdigo-fonte (separados ou no por um ou mais espaos ou TABs, antes ou depois de linhas de instruo). EXEMPLO:
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; DEFINIO DE VARIVEIS CBLOCK 0x20 W_TEMP _TEMPORARIO FLAGS ENDC ; ENDEREO DE INCIO DAS VARVEIS ; REG. TEMPORRIO PARA VALOR DE W ; REG. TEMPORRIO ; REG. PARA FLAG DE CONTROLE ; FIM DO BLOCO DE VARIVEIS
ARQUIVO BASICO.asm
Para escrever um cdigo-fonte vamos utilizar o arquivo BSICO.asm como referencia. Este arquivo foi desenvolvido para facilitar o incio de qualquer desenvolvimento novo, apresentando ao programador uma tela que no esteja em branco. A extenso do nome do arquivo j .asm, logo, o texto ser como um cdigofonte vlido. O texto apresenta uma sequencia de atividades atravs de captulos indicando o qu o programador deve fazer durante a criao do cdigo-fonte. Os captulos podem ser excludos (quando no usados), ou novos podem ser acrescentados (de acordo com a necessidade). Algumas sequencias de instrues e Nomes de variveis de uso geral j se encontram listadas no texto. So baseados na experiencia de uso e recomendaes do fabricante logo, facilitam ao programador lembrar dos detalhes necessrios antes de encontrar dificuldades durante simulao. As instrues e Nomes no utilizados podem ser descartados. Recomenda-se que, antes de escrever o cdigo-fonte, o programador desenvolva detalhamente a sequencia lgica de funcionamento do projeto em um fluxograma. Inicialmente o texto BSICO.asm ser apresentado sem comentrios no mesmo formato encontrado no arquivo quando aberto pelo MPLAB Microchip.
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; REA DE IDENTIFICAO ; ----------------------------------------------------------------------------------------------------------------------------------------------------------; ; PIMIL PICARETAGENS MIL LTDA. - SISTEMAS DE AUTOMAO ; ; ----------------------------------------------------------------------------------------------------------------------------------------------------------; IDENTIFICAO DE PROJETO ; ; PROJETO .....................: ; CLIENTE ......................: ; NOME ARQUIVO .......: ; ; ----------------------------------------------------------------------------------------------------------------------------------------------------------; DATAS E VERSES
;
; INCIO.... 00/00/0000 VERSO..... 00.00 RESPONSVEL..... ; INCIO.... 00/00/0000 VERSO..... 00.00 RESPONSVEL..... ; INCIO.... 00/00/0000 VERSO..... 00.00 RESPONSVEL..... ; INCIO.... 00/00/0000 VERSO..... 00.00 RESPONSVEL..... ; ; ----------------------------------------------------------------------------------------------------------------------------------------------------------; DESCRIO OPERACIONAL ; ; ; ; ; ; ; ; ; ; ; ; ;
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; REA DE DIRETIVAS ; ----------------------------------------------------------------------------------------------------------------------------------------------------------; ARQUIVO DE DEFINIES #INCLUDE <P16F628A.INC> ; ARQUIVO PADRO DO CONTROLADOR
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; CONFIGURAO DO CONTROLADOR __CONFIG B10000101001000 ; ; ; ; ; ; ; ; ; ; ; ; BIT 13 12 11 10 8 7 6 5 3 2 4,1,0 CDIGO CP ; 3F50h REGISTRO DE CONFIGURAO FUNO Code Protection No implementado No implementado No implementado No implementado Low Voltage Programming Brown-out Reset Enable RA5/Master Clear Enable Power-up Time Enable Watchdog Timer Enable Oscillator Selection VALOR 1 Desligado 0 0 0 0 1 Desligado 0 Ligado 0 RA5 entrada digital 0 Ligado 0 Desligado 100 Oscilador Interno
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; PGINA DE MEMRIA #DEFINE #DEFINE BANK0 BANK1 BCF BSF STATUS,RP0 STATUS,RP0 ; ATIVA BANCO DE MEMRIA 0 (ZERO) ; ATIVA BANCO DE MEMRIA 1 (UM)
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; VARIVEIS CBLOCK 0X20 ; ENDEREO INICIAL MEMRIA USO GERAL ; REGISTRO TEMPORRIO PARA W ; REGISTRO TEMPORRIO PARA STATUS ; REGISTRO PARA DESVIOS CONDICIONAIS ; REGISTRO CONTAGEM CONT_1 ; FIM BLOCO MEMRIA USO GERAL
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; FLAG INTERNO #DEFINE F_CONT_1 FLAG,1 ; DESVIO CONT_1 NO REG. FLAG, BIT 1
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; REA DE CDIGO ; ----------------------------------------------------------------------------------------------------------------------------------------------------------; VETOR DE RESET ORG GOTO 0X00 SET_UP ; ENDEREO INICIAL DO CDIGO ; VAI PARA INCIO DO SET_UP CONTROLADOR
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; VETOR DE INTERRUPO ORG MOVWF SWAPF MOVWF GOTO 0X04 W_TEMP STATUS,W STATUS_TEMP SAI_INT ; ENDEREO INICIAL DA INTERRUPO ; SALVA W EM W_TEMP ; TROCA NIB_HI POR NIB_LO EM STATUS E GRAVA ; EM W ; SALVA STATUS EM STATUS_TEMP ; VAI PARA FIM DA INTERRUPO
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; TRATAMENTO DAS INTERRUPES ; ----------------------------------------------------------------------------------------------------------------------------------------------------------; FIM DA INTERRUPO SAI_INT SWAPF MOVWF SWAPF SWAPF RETFIE STATUS_TEMP,W STATUS W_TEMP,F W_TEMP,W ; TROCA NIB_HI POR NIB_LO EM STATUS_TEMP E ; GRAVA EM W ; RECUPERA STATUS ; TROCA NIB_HI POR NIB_LO EM W_TEMP E ; GRAVA EM W_TEMP ; TROCA NIB_HI POR NIB_LO EM W_TEMP E ; RECUPERA EM W ; RETORNA DA INTERRUPO
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; INCIO DO SET_UP DO CONTROLADOR SET_UP BANK1 MOVLW MOVWF B'10000011' OPTION_REG ; PGINA DE MEMRIA 1 ; RESISTORES PULL-UP DESABILITADOS ; TRANSIO RB0/INT NO UTILIZADA ; INCREMENTO TMR0 INTERNO (CM) ; TRANSIO T0CK1 NO UTILIZADA ; PRE SCALER SELECIONADO PARA TMR0 ; DIVISO 1:16 NO PRE SCALER ; INTERRUPES NO HABILITADAS ; RA2:3 ENTRADA, DEMAIS SADAS ; TODOS OS BITS SADAS ; CHAMA VALOR EXISTENTE NO ENDEREO ; CALIBRADOR DO OSCILADOR LOCAL ; PGINA DE MEMRIA 0 B'00000111' CMCON ; DESLIGA OS COMPARADORES ANALGICOS E ; HABILITA OS PINOS DO PORTA PARA I/O DIGITAL
Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07 14/28
MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF CALL MOVWF BANK0 MOVLW MOVWF
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; INCIO DAS VARIVEIS CLRF CLRF PORTA PORTB ; COLOCA ZERO NO REGISTRO PORTA ; COLOCA ZERO NO REGISTRO PORTB
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; ROTINA PRINCIPAL ROT_PRINC ; ----------------------------------------------------------------------------------------------------------------------------------------------------------; ROTINAS SECUNDRIAS ; ----------------------------------------------------------------------------------------------------------------------------------------------------------; SUB-ROTINAS ; ----------------------------------------------------------------------------------------------------------------------------------------------------------; FIM DO CDIGO END ; FIM DO CDIGO
; INCIO.... 00/00/0000 VERSO..... 00.00 RESPONSVEL..... [nome ou sigla do programdor] ; INCIO.... 00/00/0000 VERSO..... 00.00 RESPONSVEL..... ; INCIO.... 00/00/0000 VERSO..... 00.00 RESPONSVEL..... ; INCIO.... 00/00/0000 VERSO..... 00.00 RESPONSVEL..... ; ; ----------------------------------------------------------------------------------------------------------------------------------------------------------; DESCRIO OPERACIONAL ;
[Descrever a operao do cdigo-fonte com informaes suficientes para a correta compreenso do funcionamento. Deve existir documentao com diagramas eltricos detalhados, lista de materiais e manual de instrues/operao/manuteno em outros tipos de documentos que podem e devem ser referenciados neste captulo. Procurre no se apoiar em documentao exclusivamente eletronica.]
; ; ; ; ; ; ; -----------------------------------------------------------------------------------------------------------------------------------------------------------
2- rea de Diretivas Nesta rea o programador define todos os parametros de uso do controlador, identificando o modelo de controlador, a configurao, os Nomes dos Registros e Bits de Uso Geral, a correlao existente entre os Nomes dos dispositivos de Entrada/Sada e os Registros Especiais.
Essas informaes sero utilizadas pelo compilador para transformar o arquivo do cdigo-fonte (code.asm) em um arquivo na linguagem de mquina (code.hex). O compilador no interpreta a forma de captulos agrupando as diretivas por funo ou destinao. Durante a execuo da compilao do cdigo-fonte, apenas as diretivas so buscadas e interpretadas. A sequencia em que esto escritas e a distribuio organizada ignorada sua utilidade reside apenas na facilidade de leitura e interpretao pelo programador. O Anexo 2 mostra uma comparao da rea de Diretivas comentada e simples onde se pode ver a diferena de tamanho de texto com a compreenso deste mesmo texto. Outros captulos, alm dos apresentados, podem ser acrescentados para melhorar o detalhamento das diretivas bem como podem ser excludos quando no utilizados no projeto.
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; REA DE DIRETIVAS ; ----------------------------------------------------------------------------------------------------------------------------------------------------------; ARQUIVO DE DEFINIES
[Neste captulo o programador deve definir os arquivos de incluso com o modelo do microcontrolador usado e as macros com sequencias de instrues j estabelecidas sub rotinas.]
#INCLUDE
<P16F628A.INC>
__CONFIG B10000101001000
> Comentrio > Valor numrico do Registro de Configurao que representa as opes escolhidas (ver Nota) > Instruo MPASM
[Nota: o valor numrico colocado aps a instruo CONFIG pode assumir qualquer representao, isto , decimal ou binria ou hexadecimal. Para melhor compreenso das opes determinadas pelo programador, recomenda-se a utilizao do formato binrio, compatvel com a pgina da folha de dados do componente O Anexo 1 mostra a cpia da folha do datasheet que contm as informaes de aplicao das opes de uso do controlador 16F628A..] [Descrever as opes do registro CONFIG torna mais fcil interpretar as escolhas de funcionamento do componente. Para cada modelo de controlador existe um registro especfico, que o programador deve buscar na folha de dados.]]
; ; ; ; ; ; ; ; ; ; ; ;
BIT 13 12 11 10 8 7 6 5 3 2 4,1,0
CDIGO CP
FUNO Code Protection No implementado No implementado No implementado No implementado Low Voltage Programming Brown-out Reset Enable RA5/Master Clear Enable Power-up Time Enable Watchdog Timer Enable Oscillator Selection
VALOR 1 Desligado 0 0 0 0 1 Desligado 0 Ligado 0 RA5 como entrada digital 0 Ligado 0 Desligado 100 Oscilador Interno sem sada de clock
#DEFINE #DEFINE
BANK0 BANK1
BCF BSF
STATUS,RP0 STATUS,RP0
> Comentrio > Nome do bit controlado pela Instruo > Nome do registro onde est o bit controlado pela Instruo > Instruo substituda pelo Nome > Nome que substitui a linha de instruo > Diretiva de Definio
[No exemplo, utilizamos o nome BANK1 em substituio instruo BCF STATUS,RP0 (colocar o valor zero no bit POR do registro STATUS para ativar o Banco 1 da memria RAM). No cdigo-fonte, o programador escreve este nome sempre que for necessrio ativar o Banco 1 de memria.]
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; VARIVEIS
[Neste captuloo programador declara todas as variveis (registros) que vai empregar no cdigo-fonte, com exceo dos Registros Especiais j existentes. A diretiva CBLOCK pode ser empregada diversas vezes no cdigo-fonte para alocar variveis em diversas posies de memria. O programador deve verificar no datasheet do componente as reas disponveis para uso geral nos diversos bancos de memria, bem como os endereos disponveis, e distribuir as variveis adequadamente. O controlador no muda de banco de memria automticamente funo a ser determinada pelo programador (ver Paginao de Memria).] [A diretiva CBLOCK orienta o compilador no relacionamento entre o Nome da varivel e o endereo de memria de uso geral onde ser colocado.]
CBLOCK
0X20
> Comentrio > Endereo de memria de uso geral a partir do qual sero includas as variveis > Diretiva indicando incio das varveis a partir do endereo de memria indicado
W_TEMP STATUS_TEMP FLAG CONT_1 ; REGISTRO TEMPORRIO PARA W ; REGISTRO TEMPORRIO PARA STATUS ; REGISTRO PARA DESVIOS CONDICIONAIS ; REGISTRO CONTAGEM CONT_1
> Comentrio identificando funo da varivel > Lista de Nomes das variveis (ateno ao nmero de registros disponveis a partir do endereo indicado)
[Os Nomes das variveis W_TEMP e STATUS_TEMP, bem como o seu uso, so recomendao do fabricante para cdigos-fonte que utilizam o recurso da Interrupo. O programador pode alterar ou no esses nomes mas deve atender s recomendaes do fabricante no uso.]
ENDC
> Comentrio identificando funo da varivel > Diretiva indicando que terminou a alocao de variveis na memria
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; FLAG INTERNO
[Este captulo destinado descrio dos desvios condicionais flags que o sistema controlado necessita para operar A necessidade de desvios condicionais determinada pelo programador. O Nome de cada flag deve ser tal que indique a sua funo no cdigo-fonte para facilitar a compreenso do funcionamento.]
#DEFINE
F_CONT_1
FLAG,1
> Comentrio > Posio do bit associado ao Nome > Nome do registro que contm o bit associado ao Nome > Nome associado ao bit 1 do registro FLAG > Diretiva de Definio
[Cada flag alocado em um bit de um registro Nome recomendado FLAG devidamente declarado no captulo das Variveis 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_1 no cdigo-fonte.]
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; CONSTANTES
[Constantes so valores numricos que o cdigo-fonte emprega para iniciar contadores, temporizadores, realizar comparaes lgicas, acionar sadas etc..Neste captulo o programador relaciona um Nome a um valor numrico que pode ser representado na forma decimal, binria ou hexadecimal, ou ainda na forma de uma expresso aritmtica.]
CT_CONT_1
EQU
.250
> Comentrio > Valor numrico da constante associado ao Nome CT_CONT_1 > Diretiva de Igualdade (Equal) > Nome da Constante Numrica
[A utilizao de um Nome relacionado a uma constante numrica traz vantagens para o programador (no para o cdigo-fonte). A lista de constantes est localizada em uma rea especfica do texto do cdigo-fonte captulo Constantes onde so especificadas as aplicaes destas constantes. No cdigo-fonte, o programador vai utilizar sempre o Nome relacionado constante e no o valor numrico. Se houver necessidade de se modificar o valor numrico para adequar a operao do cdigo-fonte, o programador faz a alterao no captulo Constantes. O compilador se encarrega de fazer as alteraes no restante do cdigo-fonte.]
;-----------------------------------------------------------------------------------------------------------------------------------------------------------; ENTRADAS
[Neste captulo so 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
> Comentrio > Posio do bit associado ao Nome > Nome do registro que contm o bit associado ao Nome > Nome associado ao bit 1 do registro PORTA > Diretiva de Definio
[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 cdigo-fonte.]
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; SADAS
[Neste captulo so relacionados os Nomes associados aos dispositivos externos que so comandados pelo controlador sidas (output) onde cada sada corresponde a um bit de um registro PORT.]
#DEFINE
L1
PORTA,6
> Comentrio > Posio do bit associado ao Nome > Nome do registro que contm o bit associado ao Nome > Nome associado ao bit 6 do registro PORTA > Diretiva de Definio
[Cada dispositivo de sada 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 cdigo-fonte.]
Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07 19/28
3- rea de Cdigo Nesta rea o programador escrever as instrues que devem controlar os dispositivos externos de acordo com o projeto eletro-eletronico de automao.
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; REA DE CDIGO ; ----------------------------------------------------------------------------------------------------------------------------------------------------------; VETOR DE RESET
[O endereo 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 endereo. O programador deve verificar no datasheet do controlador a disponibilidade de endereos livres para colocao de instrues antes da ocorrencia de outro Vetor automtico.] [A diretiva ORG avisa o compilador que o texto seguinte refere-se s instrues que devero ser gravadas na Memria de Programa a partir do endereo indicado.}
ORG
0X00
> Comentrio > Endereo de memria do Vetor de Reset > Diretiva indicando incio das instrues a partir do endereo da Memria de Programa indicado
GOTO SET_UP ; VAI PARA INCIO DO SET_UP CONTROLADOR
> Comentrio > Endereo de desvio para a rotina de SET_UP do controlador > Instruo de Desvio Incondicional
[Normalmente existem 4 posies na Memria de Programa antes do Vetor de Interrupo (endereos 0x00 a 0x03) que podem ser ocupados com instrues. No geral, costuma-se fazer um desvio para um endereo de memria onde est escrito o cdigo-fonte relativo ao SET_UP do controlador, que ocupa mais que 4 posies de memria. Este espao inicial tambm pode ser utilizado para as instrues de teste das funes de Brown-Out Detect e Power-On Reset.)
ORG
0X04
> Comentrio > Endereo de memria do Vetor de Interrupo > Diretiva indicando incio das Interrupes a partir do endereo da Memria de Programa indicado
[A sequencia de instrues segue a recomendao da Microchip para manter inalterados os valores contidos nos registros STATUS e W quando houver um desvio para Tratamento de Interrupes no caso, Salvar Contexto uma vez que estes dois registros so permanentemente empregandos pela CPU. O objetivo destas instrues salvar os valores contidos nos registros STATUS (em STATUS_TEMP) e W (em W_TEMP) enquanto o programa realiza o atendimento da Interrupo requisitada. Quando o tratamento da interrupo for conpletado, o retorno rotina normal implica que os valores contidos nos dois registros no correspondem aos valores que existiam antes da requisio da interrupo logo, a probabilidade de que o programa apresente solues erradas quase de 100%. O programador deve seguir esta recomendao e, se houver outro registro que seja necessria a preservao do valor contido durante o tratamento da interrupo, deve ser incluso na sequencia de Salvar Contexto. A sequencia Salvar Contexto pode ser considerada como padro em todos os cdigos-fonte realizados.]
; SALVA W EM W_TEMP ; TROCA NIB_HI POR NIB_LO EM STATUS E GRAVA ; EM W ; SALVA STATUS EM STATUS_TEMP
Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07 20/28
[Aps escrever a sequencia Salvar Contexto, o programador deve verificar qual foi a interrupo requisitada testando os bits referentes aos flags de sinalizao existentes nos registros adequados. Na existencia de um flag habilitado, o programa deve fazer o desvio para a rotina de tratamento da interrupo requisitada. Lembre-se sempre que a CPU no tem um mecanismo de desvio automtico para a interrupo requisitada, apenas para o Vetor de Interrupo.] [Depois de realizar todos os testes nos respectivos flags de sinalizao das interrupes para verificar qual foi requisitada e na possibilidade de nenhum flag habilitado (o desvio para o Vetor de Interrupo pode ter ocorrido devido a um rudo no controlador), o programa deve conter a instruo de desvio para a rotina de Recuperar Contexto SAI_INT]
GOTO
SAI_INT
; TROCA NIB_HI POR NIB_LO EM STATUS_TEMP E ; GRAVA EM W ; RECUPERA STATUS ; TROCA NIB_HI POR NIB_LO EM W_TEMP E ; GRAVA EM W_TEMP ; TROCA NIB_HI POR NIB_LO EM W_TEMP E ; RECUPERA EM W
[A sada do Tratamento das Interrupes s completada com a instruo abaixo. O cdigo-fonte retorna rotina principal aps a execuo da instruo RETFIE.]
RETFIE
; RETORNA DA INTERRUPO
SET_UP
[Verificar a pgina de memria onde esto os registros que sero operados ver folha de dados do controlador. No caso de alterao da pgina de memria, utilizar o Nome definido no captulo Paginao de Memria para a ativao da rea correspodente. No exemplo, os registros especiais que sero operados esto localizados no BANK1.]
BANK1
; PGINA DE MEMRIA 1
[O direcionemento para a pgina de memria BANK1 permite o acesso aos registros especiais OPTION_REG, INTCON, TRISA e TRISB. O programador dever colocar em cada registro os valores necessrios para que o controlador opere dentro das caractersticas exigidas pelo cdigo-fonte e pela utilizao externa (circuito controlado)]. [A representao das constantes literais neste captulo devem ser no formato binrio para visualizao do estado lgico de cada bit do registro. Nos registros especiais, cada bit tem uma funo operacional no controlador.]
MOVLW MOVWF
B'10000011' OPTION_REG
; RESISTORES PULL-UP DESABILITADOS ; TRANSIO RB0/INT NO UTILIZADA ; INCREMENTO TMR0 INTERNO (CM) ; TRANSIO T0CK1 NO UTILIZADA ; PRE SCALER SELECIONADO PARA TMR0 ; DIVISO 1:16 NO PRE SCALER ; INTERRUPES NO HABILITADAS ; RA2:3 ENTRADA, DEMAIS SADAS ; TODOS OS BITS SADAS
[Se no CONFIG foi escolhida a opo de uso do oscilador interno, verificar se o modelo possui um valor de calibrao gravado pelo fabricante no ltimo endereo da memria de programa. Se houver, utilizar a sequencia de instrues para colocar o valor da memria no registro OSCCAL.]
CALL MOVWF
3FFh OSCCAL
[Encerradas as operaes nos registros especiais na pgina de memria 1, retornar pgina de memria 0 (zero).]
BANK0
; PGINA DE MEMRIA 0
[O registro CMCON controla a configurao dos comparadoras analgicas do controlador. O fabricante inicia o controlador com os comparadores habilitados por questo de menor consumo do componente. Se o programa elaborado para o controlador no usa os comparadores, para deslig-los e utilizar as entradas analgicas como I/O digitais, carregar a constante B00000111no registro CMCON, que desliga as entradas analgicas dos comparadores.]
MOVLW MOVWF
B'00000111' CMCON
CLRF CLRF
PORTA PORTB
[Outras variveis que podem ser iniciadas de um determinado valor conhecido pelo programador podem ser includas neste captulo.]
ROT_PRINC
; ----------------------------------------------------------------------------------------------------------------------------------------------------------; SUB-ROTINAS
[Escrever sub-rotinas em separado das demais rotinas facilita a interpretao do cdigo-fonte. Este captulo deve conter apenas as sub-rotinas empregadas tanto pela Rotina Principal quanto pelas Rotinas Secundrias.] [Toda a sub-rotina deve comear com um Nome de endereo (que dever ser chamado a partir da instruo CALL), e deve terminar com a instruo RETURN. ]
END
; FIM DO CDIGO