Escolar Documentos
Profissional Documentos
Cultura Documentos
1
10
0110
011111
11011101
0101011101
010100011100
11100101011001
1001000101011101
Elaborao:
Prof. Mrcio do Carmo B. P. Rodrigues
Prof. Gilberto Sousa Lopes
Agosto / 2008
Anlise de Sistemas Digitais
Bibliografia
[1] W. S. Zanco, Microcontroladores PIC 16F628A/648A Uma abordagem prtica e objetiva, Ed. rica.
[2] D. J. Souza, Desbravando o PIC, 6 Edio, Ed. rica.
[3] N. Matic (traduzido para o Portugus por A. Jernimo), The PIC microcontroller, livro on-line.
Disponvel em http://www.i-magazine.com.br/imagazine/picbook/livropic.htm
[4] Folha de dados do PIC 16F628A.
Disponvel em ww1.microchip.com/downloads/en/DeviceDoc/40044C.pdf
[5] R. J. Tocci, N. S. Widmer, Sistemas Digitais Princpios e Aplicaes, 8 Edio, Ed. Pearson.
[6] Notas de aula
5. INTRODUO
Os sistemas digitais (combinaes de dispositivos eletrnicos projetados para manipular
informao ou grandezas fsicas) esto presentes em nosso dia-a-dia. So utilizados desde
eletrodomsticos a sistemas industriais, passando pelos computadores pessoais (PCs) e
telefones celulares. Baixo custo, flexibilidade e confiabilidade, dentre outras caractersticas,
fizeram com que processos industriais tradicionalmente controlados por circuitos analgicos
passassem a ser controlados por sistemas digitais programveis. O ncleo destes sistemas ,
geralmente, um microprocessador (MPU, do ingls microprocessor unit), ou um
microcontrolador (MCU, do ingls microcontroller unit) ou um processador digital de sinais
(DSP, do ingls digital signal processor). Estes dispositivos so conhecidos, genericamente,
como processadores. Pode-se citar como exemplo de aplicao* destas classes de
processadores:
*Estas aplicaes foram citadas a ttulo de ilustrao, como reas de utilizao mais comum de cada classe de processador.
Pode haver, entretanto, o uso de qualquer classe de processador em praticamente qualquer tipo de aplicao.
2
Anlise de Sistemas Digitais
Assim, nosso estudo ter incio com a anlise da arquitetura bsica de um computador digital.
Dentre os dispositivos citados, nosso estudo ser concentrado nos microcontroladores, pois
so amplamente utilizados em sistemas industriais. Especificamente, devido sua
versatilidade e simplicidade, alm do baixo custo, o dispositivo estudado ser o PIC 16F628A,
fabricado pela Microchip.
4
Anlise de Sistemas Digitais
Regis-
tradores
Legenda
Controle
Dados/Endereos
A ALU de um
microprocessador 386
(Intel, ~1990) caberia na
borracha de um lpis
(com folgaJ)
REGISTRADORES
A CPU possui um conjunto de registradores, divididos em dois grupos:
a) Registradores de uso geral (GPR, do ingls general purpose register): armazenam
dentro da CPU, temporariamente, dados que sero manipulados pelo programa em
execuo, evitando a necessidade de acessar a unidade de memria externa CPU;
b) Registradores de finalidade especfica (SFR, do ingls special function register):
so utilizados em tarefas pr-determinadas e realizam funes especiais como, por
exemplo, definir se um determinado terminal (pino) do microcontrolador se
comportar como um dispositivo de entrada ou de sada de dados.
7
Localidades 8
de memria
Anlise de Sistemas Digitais
Memria
No-voltil Voltil
PRINCIPAIS CARACTERSTICAS
ROM (read-only memory)
q Somente leitura;
q Sai de fbrica com os dados j programados;
q No pode ser reprogramada
10
Flash-BIOS *
*Imagens fora de escala
Anlise de Sistemas Digitais
C
(recarregar os
Velocidade maior menor (recarregar os
capacitores). Valor tpico
capacitores). Valor tpico
Refresh no
C sim para o ciclo de refresh:
para o ciclo de refresh:
15 ms.
15 ms.
Tamanho Fsico maior menor
C
Custo maior menor
C
Pentes de memria
EDO (DRAM, 32 MB)*
DDR (1 GB)*
12
Anlise de Sistemas Digitais
5.1.4. Barramentos
Para gerenciar o sistema, a CPU precisa se comunicar com a memria e com os dispositivos de
I/O. Esta comunicao feita por meio dos barramentos, que so conjuntos de fios que
ligam a CPU memria e aos dispositivos de I/O. Os termos via e bus tambm so utilizados
para designar o termo barramento.
Existem dois modos de comunicao da CPU com a memria ou dispositivos de I/O:
a) Escrita: quando a CPU envia uma informao para ser armazenada numa localidade
de memria ou para um dispositivo de I/O.
b) Leitura: quando a CPU busca uma informao na memria ou num dispositivo de I/O.
Os barramentos so divididos em trs grupos:
BARRAMENTO DE DADOS
Caminho por onde trafegam os dados trocados (enviados e recebidos) entre a CPU e o
resto do sistema.
BARRAMENTO DE ENDEREOS
utilizado quando a CPU precisa se comunicar com a memria ou com um dispositivo de
I/O. Cada localidade de memria, assim como cada dispositivo de I/O, possui um
endereo, que um valor numrico (geralmente representado em hexadecimal). Por
exemplo, quando a CPU faz uma leitura no teclado, ela coloca o valor correspondente ao
endereo do teclado no barramento de endereos. O endereo chegar a todos os que
estiverem ligados ao barramento de endereos, mas s ser identificado pelo teclado,
que atender ao chamado da CPU. O mesmo ocorre quando a CPU tem que armazenar
um determinado dado na memria: o endereo da localidade de memria desejado
colocado no barramento de endereos.
BARRAMETO DE CONTROLE
Caminho por onde trafegam os sinais de controle, que informam para o sistema o tipo de
comunicao e como esta ser executada. Ex.: operao de escrita ou leitura na
memria. 13
Von-Neumann Harvard
Torna
Tornaooprocessamento
processamentomais
maisrpido,
rpido,pois,
pois,
no
no mesmo instante em que umainstruo
mesmo instante em que uma instruo
est
estsendo
sendoexecutada
executadapela
pelaCPU,
CPU,aaprxima
prxima
instruo
instruo pode ser buscada na memriade
pode ser buscada na memria de
programa.
programa. 14
Anlise de Sistemas Digitais
Isso
Issotorna
tornaooaprendizado
aprendizadomais
maisfcil
fcileedinmico.
dinmico.
Entretanto,
Entretanto, implica no fato que muitasfunes
implica no fato que muitas funesdevero
deveroser
ser
construdas
construdas (pois no existe uma instruo querealize,
(pois no existe uma instruo que realize,
diretamente,
diretamente,algumas
algumasoperaes
operaesquequepodem
podemser sernecessrias),
necessrias),
exigindo
exigindomaior
maiorhabilidade
habilidadedodoprojetista.
projetista.
15
MICROCONTROLADOR
Microcontrolador (MCU) 16
Anlise de Sistemas Digitais
16 pinos de I/O;
Freqncia de operao de at 20 MHz;
Oscilador interno de 4 MHz / 37 kHz;
Memria de programa (FLASH): 2k x 14 bits;
Memria de dados (RAM): 224 x 8 bits;
Memria EEPROM interna: 128 x 8 bits;
Mdulos de temporizao: TIMER 0 (8 bits), TIMER 1 (16 bits) e TIMER 2 (8 bits);
Mdulo CCP (modos capture, compare e PWM);
2 comparadores analgicos (referncia de tenso interna programvel);
1 canal de comunicao serial USART;
Watchdog timer;
Capacidade de corrente de 25 mA por pino de I/O;
35 instrues (RISC);
10 fontes de interrupo independentes;
Modo de funcionamento sleep;
Opera com tenso de alimentao entre 3 V e 5 V.
18
Anlise de Sistemas Digitais
20
Anlise de Sistemas Digitais
21
Quase todas as instrues do PIC 16F628A so executadas em um ciclo de instruo. O processo de busca e
execuo de instrues deste microcontrolador ilustrado abaixo:
OOcontador
contadorde
deprograma
programa(PC,
(PC,do
doingls
inglsprogram
programcounter)
counter)indica
indicaaaposio
posio
da
da memria de programa que contm a instruo que est sendobuscada.
memria de programa que contm a instruo que est sendo buscada.
PC=01
Memria de Programa
Enquanto a CPU executa a instruo NO FAZER NADA (que
est na posio de memria PC-1), feita a busca da prxima
instruo a ser executada (que est armazenada na memria de NO FAZER NADA 00h
programa na posio PC, ou seja, na posio de mem. 01h).
SETAR PINO1 01h
PC=02
MOVER 10010110,TRISA 02h
A CPU executa a instruo SETAR PINO1 (que est na posio
de memria PC-1) e feita a busca da prxima instruo a ser NO FAZER NADA 03h
executada (que est armazenada na memria de programa na
posio 02h, ou seja, na posio de memria PC). RESETAR PC 04h
..
. Esta caracterstica de buscar a
..
Esta caracterstica de buscar a .
instruo em um ciclo de
instruo em um ciclo de
mquina
mquina eeexecut-la
execut-lano
no
prximo
prximo torna osistema
torna o sistemamais
mais
rpido e conhecida como
rpido e conhecida como
pipeline
pipeline. .
22
Anlise de Sistemas Digitais
Operando
Representa quais elementos sero envolvidos na instruo definida. Por exemplo, numa operao
de armazenamento de dados na memria, o operando composto pelo dado que ser armazenado e o
endereo da localidade de memria onde ele deve ser armazenado. No caso do PIC 16F628A, os
operandos de uma instruo podem ser do tipo REGISTRADOR, BIT DE UM REGISTRADOR ou DADO.
Existem algumas instrues que no possuem operandos, como veremos adiante.
23
L : (Literal) A instruo opera um valor numrico (constante), que pode ser representado em decimal, binrio,
octal, hexadecimal ou ASCII.
B : (Bit) Representa um bit dentro de um byte.
T : (Teste) Indica que a instruo far um teste em um determinado bit, dentro de um byte, para verificar se
ele 0 ou 1.
S : (Skip) Indica que a prxima linha do programa ser pulada se uma certa condio for satisfeita.
S : Aparecendo como ltima letra do mnemnico, S significa que um determinado bit, dentro de um byte,
ser SETADO, ou seja, levado a nvel lgico 1.
C : (Clear) Indica que um determinado bit, dentro de um byte, ser LIMPO, ou seja, levado a nvel lgico 0.
Nas instrues de desvio, o S e C tambm so usados para indicar se um bit est em 1 ou 0, respectivamente.
q Termos utilizados para indicar a tarefa que ser realizada por uma instruo:
ADD (soma de 2 nmeros); AND (operao lgica E entre 2 nmeros); IOR (operao lgica OU entre 2
nmeros); CLR (limpar); COM (complemento inverso bit a bit); DEC (decremento de um nmero);
INC (incremento de um nmero); MOV (mover uma informao para algum lugar); RL (rotacionar um bit para
a esquerda); RR (rotacionar um bit para a direita); SUB (subtrao entre 2 nmeros); SWAP (inverte os
nibbles alto e baixo de um byte 1 nibble = 4 bits); XOR (operao lgica OU EXCLUSIVO entre 2 nmeros).
24
Anlise de Sistemas Digitais
Legenda
7.2. Instrues do PIC 16F628A f : registrador b: bit
d : destino k: constante
(0W; 1 registrador f)
Instrues (continuao)
OP. CODE Status
Instruo Descrio Exemplo
(14 bits) afetado
Operaes com bits
BCF f,b Reseta (clear) o bit b do registrador f 01 00bb bfff ffff BCF REG1,7
BSF f,b Seta o bit b do registrador f 01 01bb bfff ffff BSF REG1,5
BTFSC f,b Testa o bit b do registrador f e salta a prxima linha se ele for "0" 01 10bb bfff ffff BTFSC REG1,4
BTFSS f,b Testa o bit b do registrador f e salta a prxima linha se ele for "1" 01 11bb bfff ffff BTFSS REG1,3
Operaes com literais (valores numricos)
ADDLW k W (W+k) 11 111x kkkk kkkk C, CD, Z ADDLW 0x15
ANDLW k W (W AND k) 11 1001 kkkk kkkk Z ANDLW 0x5F
IORLW k W (W OR k) 11 1000 kkkk kkkk Z IORLW 0X3D
MOVLW k Wk 11 00xx kkkk kkkk MOVLW 0X5A
SUBLW k W (k-W) 11 110x kkkk kkkk C, CD, Z SUBLW 0X02
XORLW k W (W XOR k) 11 1010 kkkk kkkk Z XORLW 0XAF
Operaes de Controle
NOP "No operation" (no faz nada) 00 0000 0xx0 0000 NOP
CALL k Chamada sub-rotina 10 0kkk kkkk kkkk CALL ROTINA1
CLRWDT Limpa WDT (watch-dog) 00 0000 0110 0100 TO, PD CLRWDT
GOTO k Desvio para endereo 10 1kkk kkkk kkkk GOTO INICIO
RETFIE Retorno de interrupo 00 0000 0000 1001 RETFIE
RETLW k Retorno de sub-rotina com k armazenado em W 11 01kk kkkk kkkk RETLW 0X25
RETURN Retorno de sub-rotina 00 0000 0000 1000 RETURN
SLEEP Coloca o PIC em modo de economia de energia (sleep) 00 0000 0110 0011 TO, PD SLEEP 26
Anlise de Sistemas Digitais
8. MAPEAMENTO DE MEMRIA
O microcontrolador PIC 16F628A possui trs memrias distintas:
Acesso realizado por meio dos registradores EECON1, EECON2, EEDATA e EEADR.
27
Reservado 0002h
Reservado 0003h
Utilizado
Utilizadopara
paraooincio
inciodo
dotratamento
tratamento
Vetor de interrupo 0004h de todas as interrupes.
de todas as interrupes.
0005h
Memria de Programa
07FFh 28
Eletrnica Digital/Microcontroladores
44bancos
bancosdedememria;
memria;
Contm
Contm osSFRs
os SFRseeososGPRs;
GPRs;
224
224 posies de 8 bitspara
posies de 8 bits parauso
usogeral
geral
(GPR);
(GPR);
Espelho
Espelhodas
das16
16ltimas
ltimasposies
posiesde
de
mem.
mem. do banco 0 (70h7Fh)nos
do banco 0 (70h7Fh) nosoutros
outros
bancos.
bancos.
29
So utilizados para
configurar as
caractersticas da operao
do MCU como, por
exemplo, se um
determinado pino ser uma
entrada ou sada de dados.
SFRs
SFRs
(BANCO
(BANCO0) 0)
Legenda:
R: bit de leitura
W: bit de escrita
n: valor assumido no POR (0 ou 1)
x: valor desconhecido no POR
q: depende da condio
-: no implementado.
OBS.:POR=Power-on reset
30
SFRs
SFRs
(BANCO
(BANCO1) 1)
31
SFRs
SFRs
(BANCO
(BANCO2) 2)
32
SFRs
SFRs
(BANCO
(BANCO3) 3)
33
Legenda:
8.4.1. Registrador STATUS
R: bit de leitura -n: valor assumido no POR (0 ou 1)
O registrador STATUS contm informaes W: bit de escrita -x: valor desconhecido no POR
sobre o estado da ALU, a forma do ltimo Reset
e os bits que selecionam os bancos da memria
de dados.
34
Anlise de Sistemas Digitais
Legenda:
8.4.2. Registradores PCL e PCLATH R: bit de leitura -n: valor assumido no POR (0 ou 1)
W: bit de escrita -x: valor desconhecido no POR
O CONTADOR DE PROGRAMA (PC) do PIC 16F268A
possui 13 bits. O byte menos significativo do PC
(PC<7:0>) fica no registrador PCL. A parte alta do PC
(PC<12:8>) no diretamente endereada, mas
fornecida pelos 5 bits menos significativos do
registrador PCLATH (PCLATH<4:0>).
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
PC bit12 bit11 bit10 bit9 bit8 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
9. PORTAS DE I/O
O PIC 16F628A possui duas portas de I/O, com 8 bits cada, chamadas
PORTA (pinos RA7:RA0) e PORTB (pinos RB7:RB0). Cada bit de cada
porta est associado ao respectivo pino do MCU, podendo ser configurado
como entrada ou sada, independentemente dos demais.
ENTRADA
VIL
0 0,8 V
(tenso de entrada baixa, 0)
VIH
2 V VDD
(tenso de entrada alta, 1)
SADA
VOL 0,6 V
(tenso de sada baixa, 0)
q PORTA
TRISA: configura os pinos da PORTA como entrada ou sada 0 = Output (sada)
1 = Input (entrada)
PORTA: acesso aos bits da PORTA (leitura ou escrita).
Obs.: Alguns bits dos registradores CMCON (bits 3:0) e VRCON (bits 7 e 6) tm influncia sobre a
PORTA.
Master Clear Enable (bit 5 do registrador CONFIG, que s pode ser acessado durante a programao do MCU).
37
Anlise de Sistemas Digitais
q PORTB
TRISB: configura os pinos da PORTB como entrada ou sada 0 = Output (sada)
1 = Input (entrada)
PORTB: acesso aos bits da PORTB (leitura ou escrita).
Low-Voltage Programming (bit 7 do registrador CONFIG, que s pode ser acessado durante a programao do MCU).
38
q Inicializando a PORTA
;**********************************************************************************************************************************
BCF STATUS,RP1 ;RP1=0
BSF STATUS,RP0 ;RP0=1 => SELECIONA BANCO1
MOVLW B00000110 ;W00000110 (VALOR EM BINARIO)
MOVWF TRISA ;RA2 E RA1 CONFIGURADOS COMO ENTRADAS E OS DEMAIS COMO SAIDAS
BCF STATUS,RP1 ;RP1=0
BCF STATUS,RP0 ;RP0=0 => SELECIONA BANCO0
MOVLW B00000111 ; W00000110 (VALOR EM BINARIO)
MOVWF CMCON ;CONFIGURA OS BITS RA3:RA0 COMO I/O
;**********************************************************************************************************************************
q Inicializando a PORTB
;**********************************************************************************************************************************
BCF STATUS,RP1 ;RP1=0
BSF STATUS,RP0 ;RP0=1 => SELECIONA BANCO1
MOVLW B00000000 ; W00000000 (VALOR EM BINARIO)
MOVWF TRISB ;TODOS OS BITS DA PORTB CONFIGURADOS COMO SAIDA
MOVLW B10000000 ; W10000000 (VALOR EM BINARIO)
MOVWF OPTION_REG ;SETA BIT 7 (DESABILITA RESISTORES DE PULL-UP INTERNOS)
;**********************************************************************************************************************************
39
Anlise de Sistemas Digitais
41
Anlise de Sistemas Digitais
10.1. Introduo
Um microcontrolador um circuito capaz de executar vrias instrues, que se executadas seguindo uma
determinada lgica, o MCU pode ser utilizado na soluo de problemas do dia-a-dia. Para que o
microcontrolador seja utilizado na soluo de problemas, ele precisa ser programado.
Para que um programa seja executado, ele deve ser armazenado na memria de programa do
microcontrolador. Cada instruo que compe o programa representada no sistema binrio, ou seja, um
conjunto de bits que representa uma determinada tarefa que pode ser executada pelo MCU.
Os programas eram escritos em linguagem de mquina, ou seja, as instrues eram representadas pelos
seus respectivos cdigos binrios. Isso fazia do ato de programar uma tarefa muito penosa.
Imagine s um programa escrito em linguagem de mquina com 2.000 instrues, cada instruo
representada por um conjunto de 14 bits. Com o tempo foi desenvolvido uma linguagem de programao que
substitua o cdigo binrio de cada instruo por um mnemnico. Surgia a Linguagem Assembly.
Na Linguagem Assembly, um programa Editor de Texto utilizado para editar o programa em Assembly
(programa-fonte) e um programa chamado Montador the Assembler o responsvel pela converso dos
mnemnicos em linguagem de mquina ( programa objeto ). Um equipamento chamado programador
utilizado para colocar o programa em linguagem de mquina, na memria de programa do microcontrolador.
42
Programa.ASM PIC
Montador Programa.HEX Programador 16F628A
Editor
Processo de comunicao entre
o homem e o microcontrolador.
Problema
Homem
43
Anlise de Sistemas Digitais
A Linguagem Assembly a mais poderosa de todas as linguagens, pois ela propicia o acesso e o controle de
todo o hardware. Isso significa que o programador precisa conhecer o hardware para a qual o programa est sendo
escrito.
Sendo o Assembly uma linguagem de baixo nvel, importante que o programador conhea o hardware para
o qual o programa est sendo escrito.
44
Operando
Pode ou no fazer parte da sintaxe de uma instruo. O operando pose ser um registrador, uma constante, valor
numrico ou uma varivel. Quando h mais de um operando na instruo, eles so separados por vrgula.
Assim como os OP CODEs, os operandos devem ser escritos com letras maisculas.
Comentrio
um texto colocado aps cada instruo para informar a tarefa que est sendo executada, fazendo com que o
programa fique mais legvel e fcil de entender.
Todo comentrio deve ser precedido do ; (ponto-e-vrgula), fazendo com que tudo que esteja escrito a partir do
ponto-e-vrgula, at o final da linha seja desprezado pelo montador.
O comentrio deve ser escrito com letras maisculas, sem acento ou (cedilha).
Diretrizes
Conhecidas tambm como pseudo-instrues, so comandos que no fazem parte do set de instrues do
microcontrolador, mas so reconhecidos pelo programa montador.
As diretrizes no so convertidas diretamente em linguagem de mquina. Elas so usadas para controlar o
Assembly.
As diretrizes mais utilizadas em programas escritos em Assembly so: #DEFINE, #INCLUDE, ORG, EQU,
MACRO, ENDM, CBLOCK, ENDC e END.
Ex: END - informa ao montador que o programa chegou ao final.
Sintaxe: END ; fim do programa
#DEFINE - esta diretiva substitui <nome> pela <string> sempre que ele aparecer no programa.
String pode ser um texto, uma instruo, uma constante, etc.
Sintaxe: #DEFINE LED PORTB,0
45
Anlise de Sistemas Digitais
SOMA_DOIS_BYTES
RESULT_9BITS
RETURN ;RETORNA
;*******************************************************************
46
47
Anlise de Sistemas Digitais
48
49
Anlise de Sistemas Digitais
Depois que o programa-fonte estiver salvo, o texto ser mostrado em cores que identificam os OP CODEs, os
operandos e os comentrios, facilitando a visualizao do cdigo-fonte.
50
51
Anlise de Sistemas Digitais
Na janela exibida, escolha o modelo de microcontrolador que voc usar no seu projeto. Abrindo a lista, voc ver
todos os modelos de microcontroladores suportados pela verso do MPLAB IDE. Em nosso caso, o MCU o
PIC 16F628A. Clique no boto Avanar para prosseguir.
52
Nesta tela, na caixa Active Toolsuite, selecione a ferramenta Microchip MPLAB Toolsuite.
Na caixa Toolsuite Contents, selecione a opo MPLAB Assembler (mpaswin.exe).
Na opo Location, deve aparecer o caminho completo no qual se encontra o arquivo mpaswin.exe.
Clique no boto avanar para prosseguir.
53
Anlise de Sistemas Digitais
Nesta tela, na caixa Project Name, digite o nome do projeto ( Teste do PIC ) e escolha o diretrio ( pasta ) em que
ele ser salvo. No se esquea de que o projeto deve ser gravado no mesmo diretrio em que foi salvo o arquivo
.ASM, criado anteriormente.
O projeto salvo com a extenso .MCP.
Clique no boto avanar para prosseguir.
54
Nesta tela, voc pode adicionar ao projeto um arquivo .ASM, bastando para isto, selecionar o arquivo na janela da
esquerda e clicar no boto Add. O arquivo aparece na janela da direita.
Clique no boto avanar para prosseguir.
55
Anlise de Sistemas Digitais
A janela apresentada a ltima exibida no processo de criao de um projeto utilizando o Project Winzard.
Nela so mostrados os parmetros do projeto. Verifique se o projeto est configurado corretamente e clique
no boto Concluir ( Finish ) para concluir a operao.
A janela da rea de trabalho do projeto aparece conforme a tela direita.
56
57
Anlise de Sistemas Digitais
58
Primeiramente devemos identificar o programa com dados sobre o ttulo, nome do projetista, verso do programa e
data de concluso.
Essas informaes so fundamentais para o programador, para futuras alteraes no programa.
Todas essas informaes so comentrios e devem ser precedidas de ponto-e-vrgula, sem acentos ou cedilhas.
Exemplo:
;******************************************************************************************
; NOME DO PROGRAMA
; DESENVOLVIDO POR FULANO DE TAL
; VERSAO 1.0
; DATA 03/09/2007
;******************************************************************************************
Cada microcontrolador da famlia PIC tem um arquivo de texto chamado arquivo de definies, no qual so
definidos os nomes e os endereos de todos os SFRs, alm de uma srie de outras definies necessrias para a sua
utilizao, facilitando, deste modo, a montagem do programa-fonte. Este arquivo tem a extenso .INC e deve estar
na mesma pasta do arquivo-fonte e tambm, localizado, de preferncia, no mesmo diretrio de instalao do
MPLAB IDE. Quando o MPLAB IDE instalado, os arquivos de definio de todos os modelos de MCU da
famlia PIC so copiados para o diretrio de instalao.
Exemplo:
;******************************************************************************************
#INCLUDE<P16F628A.INC> ;ARQUIVO PADRAO MICROCHIP PARA O PIC16F628A
;******************************************************************************************
60
Vamos usar aqui a diretiva #DEFINE para criar um atalho de acesso aos bancos 0 e 1 de memria
RAM do PIC16F628A, para acesso direto memria.
Exemplo:
;*******************************************************************************************
;
#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANCO O DE MEMORIA
#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANCO 1 DE MEMORIA
;
;*******************************************************************************************
Toda vez que aparecer no programa o nome BANK0, a instruo BCF STATUS,RP0 ser executada,
fazendo o chaveamento para o banco 0 de memria. O mesmo serve para a string BANK1, que faz o
chaveamento para o banco 1. O que a diretiva #DEFINE est fazendo, neste caso, associar uma
instruo a uma string.
61
Anlise de Sistemas Digitais
O cdigo anterior s pode ser empregado nos bancos de memria 0 e 1. Para ter acesso aos quatro
bancos de memria do PIC16F628A, aconselhvel o uso das diretrizes MACRO e ENDM, usadas
para que um bloco de instrues seja executado quando a string associada a essas diretivas for
encontrada no programa-fonte.
O cdigo seguinte mostra como ativar um dos bancos de memria por meio de MACROS, quando o
acesso memria for feito pelo endereamento direto. Quando o label que precede o termo MACRO
for encontrado ao longo do programa, o bloco de instrues entre as diretivas MACRO e ENDM
ser executado.
;*******************************************************************************************
; PAGINACAO DA MEMORIA
;*******************************************************************************************
;
;COMANDOS PARA ALTERACAO DE PAGINA DE MEMORIA PARA ENDERECAMENTO DIRETO
BANK0 MACRO ;MACRO PARA SELECIONAR BANCO 0
BCF STATUS,RP0
BCF STATUS,RP1
ENDM ;FIM DA MACRO BANK0
BANK1 MACRO ;MACRO PARA SELECIONAR BANCO 1
BSF STATUS,RP0
BCF STATUS,RP1
ENDM ;FIM DA MACRO BANK1
BANK2 MACRO ;MACRO PARA SELECIONAR BANCO 2
BCF STATUS,RP0
BSF STATUS,RP1
ENDM ;FIM DA MACRO BANK2
BANK3 MACRO ;MACRO PARA SELECIONAR BANCO 3
BSF STATUS,RP0
BSF STATUS,RP1
ENDM ;FIM DA MACRO BANK3
;
;*******************************************************************************************
62
63
Anlise de Sistemas Digitais
O Flag um bit usado para a sinalizao de um evento. A utilizao de flags para sinalizar eventos durante a
execuo do programa pode ser uma ferramenta poderosa, principalmente em aplicaes em que grande a
quantidade de eventos ocorrendo a cada instante.
A seguir vemos os bits 1 e 0 do registrador FLAGS representado, respectivamente, os status do boto e do LED.
Os demais bits ficam reservados para futuras sinalizaes.
Exemplo:
;******************************************************************************************
;
REGISTRADOR FLAGS
; BIT # |7 |6 |5 |4 |3 |2 |1 |0 |
; |X|X|X |X |X |X|X|Y | STATUS DO BOTO 1=SOLTO; 0=PRESSIONADO
; |X|X|X |X|X|X|Y|X | STATUS DO LED 1=ACESO; 0=APAGADO
; |X|X |X |X |X |Y|X|X | RESERVADO
; |X|X |X |X |Y|X|X|X | RESERVADO
; |X|X |X |Y|X |X|X|X | RESERVADO
; |X|X |Y |X |X |X|X|X | RESERVADO
; |X|Y|X |X |X |X|X|X | RESERVADO
; |Y|X |X |X |X |X|X|X | RESERVADO
;
;
;X=DEFINIDO EM OUTRO LUGAR DA TABELA
;Y=DEFINIDO COMO MOSTRADO (0/1)
;
;
;******************************************************************************************
64
Uma constante um valor numrico que pode ser associado a uma string por meio da diretiva EQU, assim como foi
feito com as variveis.
Um valor numrico pode ser representado de vrias formas dentro do MPLAB:
Associar um valor numrico a uma string pode ser interessante quando o valor aparece vrias vezes no programa.
Neste caso, se for preciso fazer alguma alterao no valor, basta alter-lo uma nica vez na linha em que a constante
foi criada.
Exemplo:
;*****************************************************************************************
;
MIN EQU .0 ;VALOR MINIMO
MAX EQU .10 ;VALOR MAXIMO
T_FILTRO EQU .250 ;FILTRO PARA O BOTO
;
;******************************************************************************************
65
Anlise de Sistemas Digitais
11.7. 7 Passo: Identificar os pinos que so usados como entrada e como sada
muito importante registrar no programa-fonte a funo dos pinos que sero usados como entrada e como sada.
No exemplo a seguir, a diretiva #DEFINE associa o pino do PORTA onde est ligado o boto 1 string BOTAO1.
O mesmo raciocnio vale para o boto 2 e para o LED. Isso mostra a relao entre o software e o hardware.
O exemplo seguinte mostra dois pinos do PORTA utilizados como entrada (RA1 e RA2) e um pino do PORTB
utilizado como entrada (RA1 e RA2) e um pino do PORTB utilizado como sada (RB0).
Exemplo:
;******************************************************************************************
; ENTRADAS
;******************************************************************************************
;
;PINOS QUE SERAO UTILIZADOS COMO ENTRADA
;
#DEFINE BOTAO1 PORTA,1 ;0 PRESSIONADO
;1 LIBERADO
#DEFINE BOTAO2 PORTA,2 ;0 PRESSIONADO
;1 LIBERADO
;
;******************************************************************************************
; SAIDAS
*******************************************************************************************
;PINOS QUE SERAO UTILIZADOS COMO SAIDA
;
#DEFINE LED1 PORTB,0 ;0 APAGADO
;1 ACESO
;
;******************************************************************************************
66
Exemplo:
;******************************************************************************************
;
ORG 0x00 ;ENDERECO INICIAL DE PROCESSAMENTO
GOTO INICIO ;DESVIA PARA INICIO
;
;******************************************************************************************
O PIC16F628A capaz de tratar vrios tipos de interrupo. Interrupo um evento de hardware que, quando
ocorre, provoca um desvio no programa para o endereo 0x04, no qual a interrupo ser tratada se ela estiver
habilitada. Ao encontrar a instruo RETIFIE, o programa volta ao ponto em que ocorreu o desvio.
Exemplo:
;******************************************************************************************
ORG 0x04 ;ENDERECO INICIAL DA INTERRUPCAO
RETIFIE ;RETORNA DA INTERRUPCAO
;******************************************************************************************
67
Anlise de Sistemas Digitais
O programa comea realmente nesse ponto. Aqui feita a configurao dos SFRs utilizados pelo programa.
Vemos a seguir um exemplo de configurao de alguns SFRs:
Exemplo:
;******************************************************************************************
INICIO
BANK1 ;ALTERA PARA BANK 1
MOVLW B00000110
MOVWF TRISA ;DEFINE RA1 e RA2 COMO ENTRADA E DEMAIS COMO SAIDA
MOVLW B00000000
MOVWF TRISB ;DEFINE O PORTB COMO SAIDA
MOVLW B10000000
MOVWF OPTION_REG ;PULL_UPS DESABILITADOS <7>
;DEMAIS BITS IRRELEVANTES
MOVLW B00000000 ;DESLIGADA CHAVE GERAL DE IN TERRUPCAO <7>
MOVWF INTCON ;DEMAIS BITS IRRELEVANTES
BANK0
MOVLW B00000111 ;CONFIGURA RA3:RA0 COMO I/O <2:0>
MOVWF CMCON
;******************************************************************************************
68
Inicializar as variveis com os valores corretos evita que o programa se comporte de maneira diferente da desejada.
No se esquea jamais de inicializar as variveis em seus programas.
Exemplo:
;******************************************************************************************
CLRF PORTA ;LIMPA PORTA
CLRF PORTB ;LIMPA PORTB
MOVLW .250
MOVWF TEMP5 ;INICIALIZA TEMP5 COM 250
MOVLW .256-125 ;W RECEBE 131 (256-125)
MOVWF TMR0 ;INICIALIZA TMR0 COM 131
;******************************************************************************************
Uma sub-rotina um conjunto de instrues que executa uma tarefa especfica dentro do programa.
Uma sub-rotina bem elaborada pode ser aproveitada por outros programas.
69
Anlise de Sistemas Digitais
11.14. Fluxograma
O fluxograma uma arma poderosa que pode auxiliar o programador na modelagem do programa.
Ele mostra como o programa est estruturado, facilitando a montagem das sub-rotinas.
As convenes utilizadas no fluxograma so:
O fluxograma abaixo informa: enquanto o boto estiver
Incio e Fim pressionado, o LED ficar aceso; enquanto o boto estiver solto, o
LED ficar apagado. Com o fluxograma pronto basta convert-lo
na Linguagem Assembly, substituindo cada bloco por uma ou
mais instrues, ou at mesmo por sub-rotina .
Sub-rotina
Incio
Boto
Apaga LED Press ?
Acesso a um No
dispositivo de I/O
Sim
Acende LED 70
Anlise de Sistemas Digitais
12.1. Introduo
O MPLAB IDE possui uma ferramenta chamada MPLAB SIM, que permite simular o
programa, detectando e consertando erros, alm de possibilitar aperfeioar o cdigo-fonte,
eliminar redundncias, aprimorar a lgica implementada, testar a melhor sub-rotina para
resolver um determinado problema por meio da programao, etc.
71
Antes de ativar o MPLAB SIM, deve-se abrir o projeto feito, caso este no esteja aberto. Basta clicar
no menu Project / Open / Nome do arquivo.mcp e clicar em Abrir. Na pasta Source Files deve estar
o Arquivo.asm criado no MPLAB. D 2 cliques neste arquivo para abri-lo.
O MPLAB SIM ativado quando clicamos no menu Debbugger / Select Tool / MPLAB SIM.
Feito isso, na barra de tarefas aparecem ativados os botes mostrados abaixo:
As opes da barra de tarefas do MPLAB SIM da esquerda
para a direita so:
73
Como nem todos os perifricos do PIC16F628A podem ser simulados, pode ser necessrio um
Como nem todos os perifricos do PIC16F628A podem ser simulados, pode ser necessrio
hardware para testar
um hardware todos
para os recursos
testar de uma determinada
todos os recursos aplicao.aplicao.
de uma determinada
A sua principal
principal vantagem justamente permitir executaro oprograma
vantagem justamente permitir executar programa dede
dentro dodo
dentro MPLAB IDEIDE e
MPLAB
e eliminar os defeitos sem precisar gravar aquele
eliminar os defeitos sem precisar gravar aquele no MCU. no MCU.
O simulador no descarta o uso de um hardware de teste, mas nos poupa tempo, visto que a
gravao do programa no chip pode ser efetuada depois de o programa ter sido montado, simulado e os
defeitos corrigidos.
Para inserir o breakpoint numa determinada linha do programa, clique com o boto direito do
mouse na linha, isso far com que aparea um menu suspenso, bastando selecionar o item
Set Breakpoint. Quando o breakpoint est ativado, aparece no canto esquerdo da linha um crculo
vermelho com a letra B no centro.
75
Esse comando acessado quando clicamos com o boto direito do mouse na linha em que ele
ser executado.
Nenhuma instruo ser executada; o comandoapenas far com que o PC ( Contador de programa
) seja alterado para o endereo da memria de programa em que se encontra a instruo contida na
linha, ou seja, o PC aponta para a linha na qual o comando foi executado.
76
Anlise de Sistemas Digitais
12.6. Stopwatch
O Stopwatch um relgio que mantm o controle do tempo de execuo do programa, em funo
da frequncia de clock configurada para a aplicao que est sendo simulada. Para acessar o
Stopwatch, clique no menu Debugger / Stopwatch que aparecer a janela mostrada abaixo.
O arquivo .LST ajuda o programador a debugar o programa, sendo aconselhvel sempre dar uma
olhada nele aps a montagem do cdigo-fonte. Para abrir o arquivo .LST de um programa .ASM, clique
no menu File / Open e, no item Arquivos do tipo: , selecione a opo List Files (.Lst). O arquivo de
listagem tem o mesmo nome do arquivo .ASM, s que tem extenso .LST.
78
Anlise de Sistemas Digitais
Clicando no menu View / File Registers, aparece a janela abaixo, na qual so exibidos todos os
endereos da memria RAM e seus respectivos contedos. Cada linha possui 16 endereos, no sendo
feita distino entre os registradores de uso geral (GRFs) e os registradores com finalidades especficas
(SFRs). Durante a execuo do programa pelo MPLAB SIM, se dermos um duplo-clique em qualquer
endereo, poderemos alterar o seu contedo. Este um recurso poderoso e deve ser usado sempre que
for necessrio. No se esquea, porm, de que alguns bits de alguns registradores esto disponveis
apenas para leitura, no tendo o programador acesso a eles para escrita.
79
Para visualizar a memria de programa, preciso clicar no menu View / Program Memory. A
figura abaixo mostra parte do cdigo-fonte de um programa. Observe que so mostrados a linha do
programa em que a instruo est localizada, o endereo da memria de programa, o cdigo em
hexadecimal correspondente instruo e, finalmente, a sintaxe da instruo. Clicando na barra de
rolagem para cima e para baixo, ns podemos visualizar todo o cdigo-fonte.
80
Anlise de Sistemas Digitais
81
12.10. Watch
Esse comando permite selecionar um SFR ou um GPR para visualizao, evitando que tenhamos
de abrir vrias janelas para visualizar os registradores desejados. Para ter acesso ao comando Watch,
clique no menu View / Watch. O boto Add SFR permite adicionar um SFR e o boto Add Symbol
permite adicionar um smbolo que foi declarado no programa, como constantes, variveis, bits de
sinalizao, etc. Observe na parte inferior da janela Watch abaixo que ela composta por quatro
pginas, s quais podem ser adicionados SFRs e GPRs diferentes, facilitando ainda mais a visualizao.
82
Anlise de Sistemas Digitais
83
84
Anlise de Sistemas Digitais
;*****************************************************************************************
MOVLW H2A ;W=2Ah
MOVWF VARIAVEL ;VARIAVEL=2Ah
;*****************************************************************************************
13.2.1. GOTO
Desvia o programa para o endereo (ou label) especificado no operando da instruo.
MEMRIA DE PROGRAMA
87
;************************************************************************
CALL LOOP ;DESVIA O PROGRAMA
;PARA A SUB-ROTINA LOOP
;************************************************************************
;************************************************************************
LOOP
INSTRUCAO N
INSTRUCAO N+1
INSTRUCAO N+2
RETURN ;RETORNA DA SUB-ROTINA
;************************************************************************
Instruo BTFSS
;*****************************************************************************
BTFSS REGISTRADOR,BIT ;BIT=1? SE SIM, PULA A
;PROXIMA LINHA
GOTO ACAO_NAO ;BIT=0 => VAI PARA A
;SUB-ROTINA ACAO_NAO
GOTO ACAO_SIM ;BIT=1 => VAI PARA A SUB-
;ROTINA ACAO_SIM
;********************************************************************************
Uma estrutura de desvio condicional baseada na instruo BTFSC pode ser facilmente criada por
analogia estrutura acima.
89
Instruo DECFSZ
;******************************************************************************************************
CONTADOR
MOVLW .10 ;W=10
MOVWF CONT ;CONT=W=10
LOOP
DECFSZ CONT,1 ;CONT=CONT-1 E VERIFICA: CONT=0?
GOTO LOOP ;NAO => VOLTA PARA LOOP
GOTO FIM_CONT ;SIM (CONT=0) => VAI PARA SUB-ROTINA
;ASSOCIADA AO FINAL DA CONTAGEM
;******************************************************************************************************
Uma estrutura de desvio condicional baseada na instruo INCFSZ pode ser criada
por analogia estrutura acima. 90
Anlise de Sistemas Digitais
91
Fluxograma
;****************************************************************************************************
; ROTINA PRINCIPAL
;******************************************************************************************************************
MAIN
APAGA_LED
BCF LED ;APAGA O LED
GOTO MAIN ;RETORNA AO LOOP PRINCIPAL
ACENDE_LED
BSF LED ;ACENDE O LED
GOTO MAIN ;RETORNA AO LOOP PRINCIPAL
;*****************************************************************************************************************
necessrio, antes da rotina principal, fazer a inicializao do sistema e definir as variveis utilizadas
(no caso, no existem variveis, mas sim atalhos para acessar os pinos do MCU, por meio dos 92
strings BOTAO e LED).
Anlise de Sistemas Digitais
;**********************************************************************************************************
; ENTRADAS Definio das Entradas e Sadas
;**********************************************************************************************************
; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO ENTRADA
; RECOMENDA-SE TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)
;**********************************************************************************************************
; SAIDAS
;**********************************************************************************************************
; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO SADA
; RECOMENDA-SE TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)
Inicializao do Sistema
#DEFINE LED PORTB,0 ; LED CONECTADO NA PORTB<0>
; 0 -> APAGADO
; 1 -> ACESO
*************************************************************************************************************************************************************
; INICIALIZACAO DO SISTEMA (INICIO DO PROGRAMA)
;************************************************************************************************************************************************************
INICIO
CLRF PORTA ;LIMPA O PORTA
CLRF PORTB ;LIMPA O PORTB
BANK1 ;ALTERA PARA O BANCO 1
MOVLW B'00000010'
MOVWF TRISA ;DEFINE RA1 COMO ENTRADA E DEMAIS COMO SADAS
MOVLW B'00000000'
MOVWF TRISB ;DEFINE TODA A PORTB COMO SADA
MOVLW B'10000000'
MOVWF OPTION_REG ;PULL-UPS DESABILITADOS
MOVLW B'00000000'
MOVWF INTCON ;DESABILITA TODAS AS INTERRUPCOES
BANK0 ;ALTERA PARA O BANCO 0
MOVLW B'00000111' 93
MOVWF CMCON ; CONFIGURA OS BITS RA3:RA0 COMO I/O
PROGRAMA COMPLETO
Exercicio_LED_botao.
Exercicio_LED_botao.asm
94
Anlise de Sistemas Digitais
Kit Didtico
Placa de desenvolvimento
Labtools MCLAB1
e gravador
Labtools MCFLASH
95
RC: RC externo
INTOSC: Oscilador interno
EC: Osc. ext. (RA6 = I/O)
HS: Cristal (at 20 MHz)
XT: Cristal (at 4 MHz)
LP: Cristal (at 200 kHz)
96
Anlise de Sistemas Digitais
1. Faa a gravao do programa do exerccio LED acionado por boto e verifique seu funcionamento.
2. Inverta a lgica do LED, fazendo com que ele acenda quando o boto estiver solto e apague quando o
boto estiver pressionado.
3. Altere o programa para acender um LED vermelho enquanto o boto estiver solto e um LED verde
enquanto o boto estiver pressionado.
4. Implemente mais um conjunto de boto e LEDs (verde e vermelho), totalmente independente do
conjunto do exerccio anterior.
97
Pisca-pisca
Faa um programa que acenda e apague o LED conectado ao pino 6 (RB0) do PIC 16F628A, em uma
freqncia determinada (aproximadamente 5 Hz).
(Fluxograma)
O cdigo fica mais enxuto
utilizando uma mscara de
inverso por meio da operao
lgica XOR:
Ex.:
Mscara de
inverso
00000001
XOR 10011001
10011000
Valor contido
na PORTB
Novo valor
da PORTB
A B Y
1) Lembrando: Operao XOR
(tabela verdade) 0 0 0
0 1 1
2) Para inverter todo o contedo
de um registrador melhor 1 0 1
usar a instruo COMF (ao
1 1 0
invs da mscara de inverso) 99
Fluxograma
Assembly (Rotina Principal MAIN)
;******************************************************************************************************************
; ROTINA PRINCIPAL
;******************************************************************************************************************
MAIN
MOVLW .100
MOVWF PISCA ;METADE DO PERIODO DO PISCA-PISCA
;(DADO EM ms)
;---------------------------------------------------PISCA-PISCA------------------------------------------------------------
PISCA_LED
1. Modifique o programa anterior, fazendo com que os LEDs RB7 e RB5 fiquem piscando em
aproximadamente 10 Hz.
2. Faa com que todos os LEDs da PORTB fiquem piscando em aproximadamente 2 Hz.
3. Faa com que todos os LEDs da PORTB fiquem piscando em 0,5 Hz.
4. Faa com que um caractere ( sua escolha) fique piscando em um dos displays de sete segmentos.
Dica: Crie uma constante DISPLAY que ser utilizada como mscara de inverso para os bits da
PORTB, que esto conectados aos displays de sete segmentos da seguinte forma:
5. Faa com que um caractere ( sua escolha) fique piscando em um dos displays de sete segmentos
simultaneamente. 101
(Fluxograma)
103
MOVLW MAX
SUBWF NUMERO,0 ;W=MAX-NUMERO
;LEMBRANDO: "Z" => STATUS<2>
;Z=0: INDICA QUE O RESULT. DA ULTIMA OPERACAO ;DIF. DE ZERO
;Z=1: INDICA QUE O RESULT. DA ULTIMA OPERACAO IGUAL A ZERO
BTFSC STATUS,Z ;VERIFICA SE O RESULTADO DE "MAX-NUMERO" DIFERENETE DE 0
;(OU SEJA, SE Z=0)
GOTO MAIN ;NAO=>VOLTA PARA MAIN SEM INCREMENTAR O CONTADOR
;(SATURA A CONTAGEM: JA CHEGOU AO MAX.)
DECF NUMERO ;SIM=>DECREMENTA A CONTAGEM E VAI VERIFICAR SE O BOTAO1 JA FOI
;SOLTO
GOTO FILTRO_BT2
;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Fluxograma
105
MOVLW MIN
SUBWF NUMERO,0 ;W=MIN-NUMERO
;LEMBRANDO: "Z" => STATUS<2>
;Z=0: INDICA QUE O RESULT. DA ULTIMA OPERACAO ;DIF. DE ZERO
;Z=1: INDICA QUE O RESULT. DA ULTIMA OPERACAO IGUAL A ZERO
BTFSC STATUS,Z ;VERIFICA SE O RESULTADO DE "MIN-NUMERO" DIFERENETE DE 0
;(OU SEJA, SE Z=0)
GOTO MAIN ;NAO=>VOLTA PARA MAIN SEM DECREMENTAR O CONTADOR
;(SATURA A CONTAGEM: JA CHEGOU AO MIN.)
DECF NUMERO ;SIM=>DECREMENTA A CONTAGEM E VAI VERIFICAR SE O BOTAO1 JA FOI
;SOLTO
GOTO FILTRO_BT1
;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Fluxograma
106
Anlise de Sistemas Digitais
;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Fluxograma
A rotina DISPLAY a mesma definida anteriormente (slide 18), responsvel pela converso binrio-
display de sete segmentos, de acordo com as conexes existentes na placa de desenvolvimento
McLab1.
107
108