151
Lições Glossario Diretivas Instruções Register Indice das lições 1 Introdução ao PIC O que é o PIC ? 1. Realizando um simples lampejador com led 2. Escrita e compilação de um programa em assembler 3. Analisando um codigo assembler 4. Compilando um codigo assembler 5. Programando o PIC 6. 2 Arquitetura interna do PIC A área de programa e o registrador de arquivo 1. A ALU e o registro W 2. O Programa Counter e o Stack 3. Realisando o "Luzes em sequência" 4. 3 Introdução aos periféricos A porta A e B 1. Estado de saida da linha de I/O 2. Entrada de teclado 3. 4 Ocontador TMR0 e o PRESCALER O registro contador TMR0 1. O Prescaler 2. 5 As interrupções Interrupções 1. Exemplo prático de controle de uma interrupção 2. Exemplo prático de controle de mais de uma interrupção 3. 6 O Power Down Mode (Sleep) Funcionamnto do Power Down Mode 1. Primeiro exemplo sobre o Power Down Mode 2. 7 Interfaceamento com o mundo externo Manuseio de um display LCD 1. A interface RS232 2. Um outro exemplo com interface RS232 3. Pic by example (Português) http://www.tanzilli.com/pbe/brasiliano/ [27/5/2003 12:57:15]

Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Embed Size (px)

Citation preview

Page 1: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

LiçõesGlossarioDiretivasInstruçõesRegister

 

Indice das lições

1 Introdução ao PIC

O que é o PIC ?1.

Realizando um simples lampejador com led2.

Escrita e compilação de um programa em assembler3.

Analisando um codigo assembler4.

Compilando um codigo assembler5.

Programando o PIC6.

2 Arquitetura interna do PIC

A área de programa e o registrador de arquivo1.

A ALU e o registro W2.

O Programa Counter e o Stack3.

Realisando o "Luzes em sequência"4.

3 Introdução aos periféricos

A porta A e B1.

Estado de saida da linha de I/O2.

Entrada de teclado3.

4 Ocontador TMR0 e o PRESCALER

O registro contador TMR01.

O Prescaler2.

5 As interrupções

Interrupções1.

Exemplo prático de controle de uma interrupção2.

Exemplo prático de controle de mais de uma interrupção3.

6 O Power Down Mode (Sleep)

Funcionamnto do Power Down Mode1.

Primeiro exemplo sobre o Power Down Mode2.

7 Interfaceamento com o mundo externo

Manuseio de um display LCD1.

A interface RS2322. Um outro exemplo com interface RS2323.

Pic by example (Português)

http://www.tanzilli.com/pbe/brasiliano/ [27/5/2003 12:57:15]

Page 2: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Indice das lições

1 Introdução ao PIC

O que é o PIC ?1.

Realizando um simples lampejador com led2.

Escrita e compilação de um programa em assembler3.

Analisando um codigo assembler4.

Compilando um codigo assembler5.

Programando o PIC6.

2 Arquitetura interna do PIC

A área de programa e o registrador de arquivo1.

A ALU e o registro W2.

O Programa Counter e o Stack3.

Realisando o "Luzes em sequência"4.

3 Introdução aos periféricos

A porta A e B1.

Estado de saida da linha de I/O2.

Entrada de teclado3.

4 Ocontador TMR0 e o PRESCALER

O registro contador TMR01.

O Prescaler2.

5 As interrupções

Interrupções1.

Exemplo prático de controle de uma interrupção2.

Exemplo prático de controle de mais de uma interrupção3.

6 O Power Down Mode (Sleep)

Funcionamnto do Power Down Mode1.

Primeiro exemplo sobre o Power Down Mode2.

7 Interfaceamento com o mundo externo

Manuseio de um display LCD1.

A interface RS2322. Um outro exemplo com interface RS2323.

Indice das lições

http://www.tanzilli.com/pbe/brasiliano/lezioni.htm (1 of 2) [27/5/2003 12:57:18]

Page 3: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Indice das lições

http://www.tanzilli.com/pbe/brasiliano/lezioni.htm (2 of 2) [27/5/2003 12:57:18]

Page 4: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 1 Introdução

Introdução ao PIC

Al termino desta lição saiba: O que é um PIC.●

Como realizar um simples circuito de prova.●

Como escrever e compilar um programa em assembler.●

Como programar um PIC.●

Conteudo da lição 1O Que é um PIC1.

Realisando um simples lampejador com led 2.

Escrita e compilação de um programa em assembler3.

Analisando um codigo em assembler4.

Compilando um codigo em assembler5.

Programando o PIC6.

 

Lição 1

http://www.tanzilli.com/pbe/brasiliano/less1/intro.htm [27/5/2003 12:57:20]

Page 5: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 1 Passo 1/6

O que é o PIC?

O PIC é um circuito integrado produzido pela Microchip Technology Inc., que pertence da categoria dosmicrocontroladores, ou seja um componente integrado que em um unico dispositivo contem todos os circuitosnecessarios para realizar um completo sistema digital programavel.

Como se pode ver na figura,

o PIC (neste caso um PIC16C84) pode ser visto externamente como um circuito integrado TTL ou CMOS normal, masinternamente dispõe de todos os dispositivos tipicos de um sistema microprocessado, ou seja:

Uma CPU (Central Processor Unit ou seja Unidade de Processamento Central) e sua finalidade é interpretar asinstruções de programa.

Uma memoria PROM (Programmable Read Only Memory ou Memória Programavel Somente para Leitura) naqual ira memorizar de maneira permanente as instruções do programa.

Uma memoria RAM (Random Access Memory ou Memoria de Accesso Aleatório) utilizada para memorizar asvariaveis utilizadas pelo programa.

Uma serie de LINHAS de I/O para controlar dispositivos externos ou receber pulsos de sensores, chaves, etc.●

Uma serie de dispositivos auxiliares ao funcionamento, ou seja gerador de clock, bus, contador, etc.●

A presença de todos estes dispositivos em um espaço extremamente pequeno, da ao projetista ampla gama de trabalho eenorme vantagem em usar um sistema microprocessado, onde em pouco tempo e com poucos componentes externospodemos fazer o que seria oneroso fazer com circuitos tradicionais.

O PIC esta disponivel em uma ampla gama de modelos para melhor adaptar-se as exigencias de projetos especificos,diferenciando-se pelo numero de linha de I/O e pelo conteudo do dispositivo. Inicia-se com modelo pequenoidentificado pela sigla PIC12Cxx dotado de 8 pinos, até chegar a modelos maiores com sigla PIC17Cxx dotados de 40pinos.

Uma descrição detalhada da tipologia do PIC é disponivel no site da Microchip acessavel via , onde conseguimosencontrar grandes e variadas quantidades de informações tecnicas, software de apoio, exemplos de aplicações eatualizações disponiveis.

Para o nosso curso usaremos um modelo intermediario de PIC o PIC16C84. Este é dotado de 18 pinos sendo 13disponiveis para o 'I/O ou seja para serem ligados ao nosso circuito e de algumas caracteristicas que o tornam umcircuito que melhor atendera as exigências do nosso curso.

Em particular o PIC16C84 dispõe de uma memoria para armazenar o programa, do tipo EEPROM ou seja ElectricalErasable Programmable Read Only Memory, que pode ser rescrita quantas vezes quisermos e que é ideal para o nossoexperimento tornando a conecção para a programação on-board, ou seja podemos colocar o programa dentro do chipsem ter que remove-lo do circuito de prova.

Lição 1 passo 1

http://www.tanzilli.com/pbe/brasiliano/less1/passo1.htm (1 of 2) [27/5/2003 12:57:22]

Page 6: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Tal caracteristica é plenamente aproveitada em nosso programador YAPP! descrito neste curso e fornecido a qualquerum que queira adiquirir o nosso kit completo PicTech. Em alternativa é possivel utilizar um programador produzidopela Microchip ou outro programador produzido por terceiros.

Se não tiver adiquirido o nosso kit mas tem conhecimento para construir o programador YAPP! poderá encontrar nestecurso toda a documentação necessaria para realiza-lo sozinho

E agora chegou o momento de dar uma olhada no PIC16C84. Vejamos na figura a reprodução da pinagem enomenclatura de seus respsctivos pinos:.

Como é possivel ver, o PIC16C84 é dotado de um total de 18 pinos dispóstos em duas fileiras paralela de 9 pinos cadauma(dual in line). Os pinos contrastados em AZUL representam as linhas de I/O disponiveis para a nossa aplicação, opino em VERMELHO e o PRETO são os pinos de alimentação, e os em VERDE são reservados ao funcionamento doPIC (MCLR para o reset e OSC1-2 para o clock).

Clicando sobre a inicial de cada pino é possivel visualizar uma breve descrição de seu respectivo funcionamento.

No proximo passo veremos como fazer a ligação desses pinos ao nosso primeiro circuito experimental para verificarimediatamente o seu funcionamento.

Lição 1 passo 1

http://www.tanzilli.com/pbe/brasiliano/less1/passo1.htm (2 of 2) [27/5/2003 12:57:22]

Page 7: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 1 Passo 2/6

Realizando um simples lampejador com LED

Apos termos visto brevemente o que é e como é feito um PIC, faremos agora uma simples aplicação pratica.

Iremos fazer um circuito muito simples e seu propósito é fazer lampejar um diodo led. Vejamos como se escreve umprograma em assembler, como se compila e como se transfere para o interior da EEPROM do PIC o programa e assimfaze-lo funcionar.

O circuito a ser realizado esta representado no seguinte arquivo no formato Acrobat Reader (9Kb): example1.pdf.

Como descrito anteriormente o pino Vdd (pino 14) e Vss (pino 5) servem para fornecer alimentação para o chip e sãoligados respectivamente ao positivo e a massa.

O pino MCLR (pino 4) serve para resetar o chip quando este estiver na condição logica zero. No nosso circuito éconectado diretamente ao positivo do programador YAPP!.

O pino OSC1/CLKIN (pino 16) e OSC2/CLKOUT (pino 15) são conectados internamente ao circuito para gerar afrequencia de clock utilizada para temporizar todo o ciclo de funcionamento interno do chip. Desta frequencia depende amaior parte das operações interna e em particular a velocidade com que o PIC processa as instruções do programa. Nocaso do PIC16C84-04/P tal frequencia pode chegar a um maximo de 4Mhz da qual se obtem uma velocidade deexecução das instruções par de 1 milhão de instruções por segundo. No nosso caso para o oscilador de clok usaremosum cristal de quartzo de 4 MHz e dois capacitores de 22pF.

O pino RB0 (pino 6) é uma das linhas de I/O disponivel no PIC. Neste caso esta linha esta conectada a um led porintermédio de uma resitor de limitação de corrente.

Uma vez terminada a apresentação do circuito passemos ao proximo passo para aprender como escrever o programa queo PIC devera executar.

Lição 1 passo 2

http://www.tanzilli.com/pbe/brasiliano/less1/passo2.htm [27/5/2003 12:57:22]

Page 8: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 1 Passo 3/6

Escrita e compilação de um programa em assembler

Como em qualquer sistema microprocessado, no PIC tambem é necessário preparar um programa que o façadesenvolver seu trabalho.

Um programa é constituido por um conjunto de instruções em sequência, onde cada uma identificara precisamente afunção básica que o PIC ira executar. Onde a instrução é representada por um código operativo (do ingles operationcode ou abreviadamente opcode) podemos memorizar 14 bits em cada locação da memória EEPROM. Esta memória noPIC16C84 dispões de 1024 locações e cada uma devera conter uma só instrução. Um exemplo de opcode em notaçãobinaria esta escrito a seguir :

00 0001 0000 0000B

é mais provavel que um opcode venha representado na notação exadecimal ou seja:

0100H

que representa exatamente o mesmo valor mas numa forma reduzida. La letra H, escrita no final do valor 0100, indica otipo de notação (Hexadecimal). O mesmo valor pode ser representado em assembler com a notação 0x100 que éderivado da linguagem C ou H'0100'.

Este codigo, completamente sem sentido para nós humanos, é o que o PIC esta preparado para entender. Para facilitar acompreenção ao programador, se recorre a um instrumento e convenção para tornar a instrução mais compreensivel.

A primeira covenção é a que associa o opcode (um total de 35 para o PIC16C84) a uma sigla mnemonica, ou seja umainicial que seja facil de recordar o significado da instrução

Voltando ao nosso exemplo o opcode 0100H corresponde a instrução mnemonica CLRW que é a forma abreviada dainstrução CLEAR W REGISTER, ou seja zere o registro W (veremos posteriormente o que significa).

Outra convenção consiste na definição, da variavel, da costanti, do label(rótulo) de referencia ao endereço de memoria,etc. O propósito desta convenção é de facilitar a escrita de um programa para o PIC e é chamada linguagem assembler.Um programa escrito em linguagem assembler pode ser escrito em qualquer PC utilizando-se qualquer processador detexto que possa gerar arquivos ASCII(Word,Notpad etc).Um arquivo de texto que contenha um programa em assembleré denominado de source ou codigo assembler.

Uma vez preparado o nosso codigo assembler (veremos mais adiante), iremos precisar de um programa para traduzir asinstruções mnemonicas e todas as outras formas convencionais com que escrevemos o nosso codigo em uma serie denumeros (o opcode) reconhecivel diretamente pelo PIC. Este programa se chama compilador assembler ouassemblador.

Na figura seguinte esta esquematizado o fluxograma de operações e arquivos que devera ser realizado para passar umum codigo assembler a um PIC a ser programado.

Lição 1 passo 3

http://www.tanzilli.com/pbe/brasiliano/less1/passo3.htm (1 of 3) [27/5/2003 12:57:24]

Page 9: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Como já foi dito a primeira operação a ser efetuada é a escrita do codigo assembler e a sua gravação em um arquivo detexto com a extenção .ASM. Para fazer isto aviamos dito para recorrer a um editor ASCII, ou seja um programa deescrita por exemplo o NOTEPAD.EXE do Windows 3.1© ou Windows 95© ou o EDIT.EXE do MS/DOS©. Épossivel gerar este arquivo com programas mais sofisticados como o Word© ou Wordperfect© tendo somente quetomar o cuidado de muda-los para o formato texto e não em seu formato nativo. Isto para evitar que venhamosmemorizar antes o caractere de controle de formatação de testo que o compilador assembler não esta preparado parareconhecer.

Na nossa primeira experiência pratica utilizaremos o arquivo de nome LED.ASM.

O proximo passo é a compilação do codigo, ou seja a transformação em opcode do codigo mnemonico ou instruçõesassembler deste conteudo.

Lição 1 passo 3

http://www.tanzilli.com/pbe/brasiliano/less1/passo3.htm (2 of 3) [27/5/2003 12:57:24]

Page 10: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

O compilador assembler que utilizaremos é o MPASMWIN.EXE produto da Microchip e disponivel no site internet; épossivel também conseguir uma cópia nas paginas de downloads.

Como é possivel ver adiante, alem do nosso codigo com extenção .ASM é necessario fornecer ao compilador umsegundo arquivo produto da Microchip com extensão .INC diferente do tipo que estamos utilizando. No nosso caso oarquivo é o P16F84.INC. Este codigo contem algumas definições da qual dependi o tipo de chip utilizado e que veremosmais adiante.

Durante a compilação do codigo, o compilador assembler gera uma serie de arquivos com nome identico ao codigo mascom extensões diferentes:

.HEX é o arquivo que contem o codigo de operação o qual sera enviado ao PIC via programador.●

.LST é um arquivo de texto na qual vem reportado por inteiro o codigo assembler e a correspondente traduçãoem opcode. Não é utilizavel pela programação do PIC mas é extremamente util para verificar o processo decompilação que o compilador fez.

.ERR contem uma lista de erro de compilação que mostra o numero da linha do codigo na qual esta com erro nocodigo assembler.

O arquivo .LST, .ERR é utilizado somente para controle da compilação. Somente o arquivo .HEX sera utilizadorealmente para programar o PIC. Vejamos como.

O arquivo.HEX não é um arquivo no formato binario e não reflete diretamante o conteudo que devera ter a EEPROMdo PIC. Mas os formatos refletirão diretamente quando forem transferidos ao PIC em uma forma legivel e com algumasinstruções a mais.

Sem entrar em detalhes é util saber que tal formato é diretamente riconhecido pelo programador do PIC que promoveradurante a programação a converção em binario e contem, outro opcode outras informações que serão adcionadas aosendereços na qual vamos transferir o opcode.

No proximo passo analisaremos o nosso primeiro codigo assembler e veremos um boa parte da convenção utilizada nalinguagem assembler.

 

Lição 1 passo 3

http://www.tanzilli.com/pbe/brasiliano/less1/passo3.htm (3 of 3) [27/5/2003 12:57:24]

Page 11: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 1 Passo 4/6

Analisando um codigo assembler

Analisaremos agora linha por linha o conteudo do nosso codigo LED.ASM. Se voce dispõe de uma impressora é utilefetuar uma copia do codigo para poder seguir melhor a nossa explicação. Em alternativa é preferivel que voce visualizeo codigo em uma janéla separada de maneira a poder seguir simultaneamente o codigo e a relativa explicação.

Partiremos da primeira linha de codigo:PROCESSOR 16F84

PROCESSOR é uma diretiva do compilador assembler que indica a definição de qual microprocessador esta escrito onosso codigo. A diretiva não é uma instrução mnemonica que o compilador traduz no respectivo opcode, mas sim umasimples indicação enviada ao compilador para determinar o funcionamento durante a compilação. E neste casoinformamos ao compilador que a instrução que acabamos de colocar no nosso codigo é relativa a de um PIC16C84.

RADIX DEC

A diretiva RADIX serve para informar o compilador que o numero sem a notação, sera entendido como numerodecimal. Ou seja se quisermos especificar, por exemplo o numero hexadecimal 10 (16 decimal) não podemos escreversomente 10 porque ele sera interpretado como 10 decimal, neste caso ecrevemos10h ou 0x10 ou H'10'.

INCLUDE "P16F84.INC"

Veja uma outra diretiva. Desta vez indicamos ao compilador a nossa intenção de incluir no codigo um segundo arquivodenominado P16C84.INC. O compilador se limitará a substituir a linha contendo a diretiva INCLUDE com o conteudodo arquivo indicado e vai efetuar a compilação como se fosse ante disso parte do nosso codigo.

LED EQU 0

Mais diretiva ! Mas quando veremos as instruções? Calma tenha um pouco de paciência.

A diretiva EQU é muito importante quando si trata de definir com ela uma costanti simbolica dentro do nosso codigo.Em particular a palavra LED da qui em diante no codigo sera equivalente ao valor 0. O ponto principal da existência dadiretiva EQU é se não tornar o codigo mais legivel e podermos colocar um valor costanti em um unico ponto do codigo

É importante notar que a palavra LED não identifica uma variavel mas semplesmente um nome simbolico validodurante a compilação. Não será nunca possivel inserir instruções do tipo LED = 3 dentro do codigo quando adeterminação dinamica de um valor e de uma variavel é uma operação que recebe a intervenção da CPU do PIC e quesempre deve ser expressa com instrução e não diretiva.

A diretiva faz sentido somente durante a compilação do codigo depois o PIC não podera mais seguir uma diretiva.

Vejamos agora a linha seguinte:

ORG 0CH

ORG tambem é uma diretiva que permite definir-mos o endereço na qual queremos que o compilador inicie a alocar odado ou a instrução seguinte. E neste caso estamos definindo uma area de dados dentro do PIC ou seja uma area em quememorizaremos variavel e contador durante a execução do nosso programa. Esta area coincide exatamente com a areade RAM do PIC definida pela Micrchip como FILE REGISTER.

O registrador de arquivo nada mais é do que uma locação na RAM disponivel que começa a partir do endereço 0CH.Este enderço é fixo e não pode ser modificado enquanto a locação anterior for usada para outro registro especial de usointerno.

Count RES 2

Lição 1 passo 4

http://www.tanzilli.com/pbe/brasiliano/less1/passo4.htm (1 of 6) [27/5/2003 12:57:25]

Page 12: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Nesta linha encontramos um label(rotulo): Count e uma diretiva: RES.

A diretiva RES indica ao compilador que queremos reservar um certo numero de bytes no meio do regsitrador dearquivos(file register) dentro da area de dados; e neste caso 2 bytes. O label Count, onde Count é um nome para nós, éum marcador que no resto do codigo assumirá o valor do endereço em que esta colocado. Dado este que anteriormenteaviamos definido o endereço de partida em 0CH com a diretiva ORG, Count irá a 0CH. Se nesse exemplo inserir-mosum label após a linha sucessiva essa irá a 0CH + 2 (dois são os bytes que aviamos reservado) ou seja 0EH. O nome dolabel pode ser qualquer nome com exeção da palavra reservada ao compilador as quais são as instruções mnemonicas ediretivas)

Una label si distingue da una costante simbolica perchè il suo valore viene calcolato in fase di compilazione e nonassegnato da noi staticamente.

ORG 00H

Esta segunda diretiva ORG faz referencia a um endereço na area da (EEPROM) antes da area de dados. Deste ponto emdiante colocaremos de fato a instrução mnemonica que o compilador devera converter no respectivo opcode do PIC.

O primeiro opcode visto pelo PIC após o reset é aquele memorizado na locação 0, e dai o valor 00H inserido na ORG.

bsf STATUS,RP0

E finalmente a primeira instrução mnemonica de parametro, completa. O PIC tem uma CPU interna do tipo RISC ondea instrução ocupa una só locação de memoria, opcode e parametro incluso. E neste caso a instrução mnemonica bsf quedizer BIT SET FILE REGISTER ou seja coloque em um (condição logica alta) um dos bit contido na locação dememória ram especificada.

O parametro STATUS esta definido no arquivo P16F84.INC e o passa atravéz de uma diretiva EQU. O valor colocadoneste arquivo è 03H e corresponde a um registrador de arquivo (ou seja uma locação na ram na area de dados)reservado.

O proximo parametro RP0 esta definido tambem no arquivo P16C84.INC com valor 05H e corresponde ao numero dobit que se quer colocar em um. este registrador de arquivo tem 8 bits e coméça pelo numero 0 (bit menos significativo) evai até o numero 7 (bit mais significativo)

Esta instrução na pratica coloca em 1 o quinto bit do registrador de arquivo STATUS. Esta operação é necessaria, comoveremos na proxima lição, para acessar o registrador de arquivo TRISA e TRISB.

movlw 00011111B

Esta instrução significa: MOVE LITERAL TO W REGISTER (passar o literal para W) ou seja mover um valorconstante para o acumulador W. Como haveremos de ver mais adiante, o acumulador, é um registro particular utilizadopela CPU em todas as cituações em viérmos efetuar uma operação entre dois valores ou em operações de deslocamentoentre locações da memória. Na pratica é um registro de apoio utilizado pela CPU para memorizar temporariamente umbyte toda vez que houvér necessidade.

O valor costante para memorizar no 'accumulador é 00011111B ou seja um valor binario de 8 bits onde o bit mais dadireita representa o bit 0 ou o bit menos significativo.

Na proxima instrução temos:

movwf TRISA

o valor 00011111 esta memorizado no registro TRISA (como para o registro STATUS o TRISA tambem é definidoatravéz de uma diretiva EQU) a sua função é senão a de definir o funcionamento da linha de I/O do PORTA. Este bit éem particular um bit do registro TRISA e determina em leitura(entrada) sua rispectiva linha do portA , se estivesse em 0determinaria em escrita(saida).

Na tabela seguente esta descrito configuração que assumirão os pinios do PIC quando executar esta instrução:

Lição 1 passo 4

http://www.tanzilli.com/pbe/brasiliano/less1/passo4.htm (2 of 6) [27/5/2003 12:57:25]

Page 13: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

N.bit registro TRISB Linha porta A N.Pino Valor Estado

0 RA0 17 1 Entrada

1 RA1 18 1 Entrada

2 RA2 1 1 Entrada

3 RA3 2 1 Entrada

4 RA4 3 1 Entrada

5 - - 0 -

6 - - 0 -

7 - - 0 -

Como é possivel se ver o bit 5, 6 e 7 não correspondem a nenhuma linha de I/O e seus valores nada influenciam.

As duas proximas instruções indicam o funcionamento do portB do PIC:

movlw B'11111110'movwf TRISB

e neste caso a definição da linha sera a seguinte:

N.bit registro TRISB Linha porta B N.Pino Valor Estado

0 RB0 6 0 Saida

1 RB1 7 1 Entrada

2 RB2 8 1 Entrada

3 RB3 9 1 Entrada

4 RB4 10 1 Entrada

5 RB5 11 1 Entrada

6 RB6 12 1 Entrada

7 RB7 13 1 Entrada

Notou como o valor 0 no bit 0 do registro TRISB determina a configuração em escrita(saida) da respetiva linha do PIC.Na nossa aplicação esta enfatisado que esta linha sera usada para controlar o LED e faze-lo lampejar.

Aviamos visto que a instrução movwf TRISB transferia o valor contido no acumulador(inicializado anteriormente coma instrução movlw 11111110B) no registro TRISB. O significado de movwf é MOVE W TO FILE REGISTER ( passeo valor de W para o registrador de arquivo).

bcf STATUS,RP0

Ésta instrução é similar a bsf vista anteriormente, com a diferença de coloca-lo em zero. E(bcf) significa neste caso BITCLEAR FILE REGISTER.

Do ponto de vista funcional esta instrução permite o acesso ao registro interno do banco 0 ou seja da qual faz parte o

Lição 1 passo 4

http://www.tanzilli.com/pbe/brasiliano/less1/passo4.htm (3 of 6) [27/5/2003 12:57:25]

Page 14: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

portA e portB, e banco 1 da qual faz parte TRISA e TRISB. Uma descrição mais detalhada veremos mais a frente nestecurso.

bsf PORTB,LED

Com esta instrução sera efetuada a primeira operação na qual veremos o resultado do lado de fora do PIC.Particularmente ira acender o led conectado a linha RB0. PORTB é uma constante definida no P16C84.INC e fazreferencia ao registrador de arquivo correspondente a linha de I/O do portB onde LED é o numero da linha que ira a 1.Se bem recordas, no inicio do codigo a constante LED esta definida em 0, quando a linha que interessa sera RB0.

MainLoop

Esta linha contem um label ou seja uma referencia simbolica a um endereço de memória. O valor do label, como ditoanteriormente, vem calculado na fase de compilação com base no numero de instrução, a diretiva ORG e a outrainstrução alocam espaço na memória do PIC. E neste caso, se tinhamos a instrução colocada a partir da ultima diretivaORG podemos colocar o valor que vira seguido a MainLoop ou seja 07H.

Na realidade o valor que assumi o label não tem muita importancia e o seu propósito é justamente o de indicar a posiçãopresisa do opcode na memória do PIC , ou seja um modo de referenciar uma determinada locação de memória.

E neste caso o label MainLoop sera utulisado como ponto de entrada num ciclo (do ingles Loop) de ecender e apagar oled, ou seja uma parte do codigo que colocara o mesmo num ciclo infinito. Encontraremos mais a frente uma referenciaa este label.

call Delay

Esta instrução determina uma chamada (do ingles call) a uma subrotina que inicia em correspondencia com o labelDelay.

A sub rotina é parte especial de um programa que efetua uma função especifica. onde a qualquer momento esta funçãopode ser chamada com uma só instrução,vejamos todas as instruções necessaarias para efetuala. Onde neste caso asubrotina incere um retardo para o tempo de acender e apagar o led.

A instrução que compõe a subrotina Delay foi inserida como se segue no codigo .

btfsc PORTB,LED

O significado desta instrução é BIT TEST FLAG, SKIP IF CLEAR ou seja controla o stado de um bit dentro de umregistro e pula a proxima instrução se o valor de tal bit é zero. O bit que sera controlado corresponde a linha de saida naqual esta conectado o led, fazendo este teste podemos determinar se o led esta aceso ou apagado, e então agir sobre ele,ou seja se o led estiver aceso nós o apagaremos e se estiver apagado nós o ecenderemos.

goto SetToZero

Esta instrução determina um salto incondicionado (do ingles GO TO, va para) para o label SetToZero onde teremos ainstrução para apagar o led. Esta instrução sera pulada para instrução seguinte se o led esta apagado.

bsf PORTB,LEDgoto MainLoop

Esta duas instruções simplesmente acendem o led e retornam o programa ao inicio do ciclo de lampejamento.

SetToZero bcf PORTB,LED goto MainLoop

Estas duas instruções simplesmente apagam o led e retornam o programa a inicio do ciclo de lampejamento.

A subrotina Delay

Como descrito anteriormente esta subrotina coloca um retardo de cerca de um segundo e pode ser chamada atravéz do

Lição 1 passo 4

http://www.tanzilli.com/pbe/brasiliano/less1/passo4.htm (4 of 6) [27/5/2003 12:57:25]

Page 15: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

programa com instrução call Delay.

Vejamos como funciona:

Delay clrf Count clrf Count+1

DelayLoop decfsz Count,1 goto DelayLoop decfsz Count+1,1 goto DelayLoop retlw 0

END

Delay e DelayLoop são dois label. Delay identifica o indereço de inicio da subrotina e sera utilizado pela chamadaatraves do corpo do programa principal. DelayLoop sera chamado internamente pela subroutina e serve como ponto deentrada para o cilclo(do ingles loop) de retardo.

Na pratica o retardo é conseguido executando-se milhares de instruções que não fazem nada !

Este tipo de retardo se chama retardo software ou retardo de programa. É o tipo de retardo mais simples de implementare pode ser utilizado quando não se deseja que o PIC faça-o.

clrf Countclrf Count+1

CLEAR FILE REGISTER zeramento de duas locação da ram reservada anteriormente com a instrução:

Count RES 2

Esta duas locações são adjacentes a partir do endereço referenciado pelo label Count.

decfsz Count,1

A instrução DECREMENT FILE REGISTER, SKIP IF ZERO ou seja decremente o conteudo do registro e pule aproxima instrução se for zero(e neste caso Count pula a proxima instrução se o valor devolvido for zero). Se o valordevolvido for diferente de zero executara a proxima instrução:

goto DelayLoop

Que manda a execução ao cilclo de retardo. Uma vez zero o contador Count ira a proxima instrução:

decfsz Count+1,1goto DelayLoop

Que decrementara o registro seguinte até que este chegue a zero. O registro Count+1 em particular sera decrementadode um até 256 decrementos de Count.

Quando então Count+1 chegar ao valor zero a instrução

return

que significa RETURN FROM SUBROUTINE determinara a saida da rotina de retardo e retornara a execução dainstrução imediatamente após call Delay.

E por fim a diretiva END que indica ao compilador o final do codigo assembler.

Lição 1 passo 4

http://www.tanzilli.com/pbe/brasiliano/less1/passo4.htm (5 of 6) [27/5/2003 12:57:25]

Page 16: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

No proximo passo compilaremos o codigo LED_1.ASM e programaremos o PIC com o codigo gerado pelo compiladorassembler.

Lição 1 passo 4

http://www.tanzilli.com/pbe/brasiliano/less1/passo4.htm (6 of 6) [27/5/2003 12:57:25]

Page 17: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 1 Passo 5/6

Compilando um codigo assembler

Vejamos agora como é possivel efetuar na pratica a compilação de um codigo assembler. 

Primeiramente crie em seu disco rigido um diretório de trabalho que de agora em diante ficara armazenado todos osprogramas do curso. Escolhe-se um nome por exemplo:

C:\PICPRG

(Qualquer outro nome valido de diretório ou drive, é obviamente valido. Bastará substituir no resto do curso todo oreferimento a C:\PICPRG pelo nome do drive e diretório escolhido).

Copiemos agóra no nosso diretório de trabalho C:\PICPRG ou aquele que voce escolheu o arquivo LED.ASM eP16F84.INC.  Para fazer isto basta clicar com o mouse sobre o nome do arquivo que se quer salvar em nosso diretóriode trabalho,repetindo a operação para ambos os arquivos.

Instalemos agóra o software necessario para compilar o nosso programa.

A Microchip coloca disponivel no site web o proprio assembler MPASM em dupla versão para sistemas operacionaisMicrosoft Windows 3.1 / 95 e para ambiente MS/DOS. Em seguida faremos referência a versão MS/DOS queigualmente se pode trabalhar com o prompt MS/DOS do Microsoft Windows.

Seguiremos a instrução fornecida na pagina da Microchip MPASM.EXE que contem o seguinte para MS/DOS doassembler. Copiemos então este arquivo para o nosso diretório de trabalho C:\PICPRG.

Atenção ! O MPASM é um produto de propriedade da Microchip Technology inc., lembre-se então de leratentamente as condições de uso indicadas durante a fase de instalação.

Compilaremos o nosso codigo LED.ASM colocando na frente do prompt do DOS a instrução:

MPASM LED.ASM

O resultado que deveremos obter no video é o seguinte:

Pressionamos uma tecla como requisita o MPASM e vamos ver que arquivo nos foi gerado. Se tudo deu certo

Lição 1 passo 5

http://www.tanzilli.com/pbe/brasiliano/less1/passo5.htm (1 of 2) [27/5/2003 12:57:28]

Page 18: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

deveremos ver os seguintes novos arquivos:

LED.HEXLED.LSTLED.ERRLED.COD

O conteudo dos arquivos já foi visto no passo 3 então prosseguiremos com programação do PIC utilizando um sóarquivo o LED.HEX que contem o arquivo compilado no formato Intel Hex 8.

 

Lição 1 passo 5

http://www.tanzilli.com/pbe/brasiliano/less1/passo5.htm (2 of 2) [27/5/2003 12:57:28]

Page 19: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 1 Passo 6/6

Programemos o PIC

Para programar o PIC nessa lição faremos referencia ao programador YAPP  A documentação do software pararealização do YAPP! esta descrita em nossa pagina hardware (Italian only) de suporte ao curso.

Para a programação do chip com outro tipo de programador deve-se ver a relativa documentação.

Copiamos no nosso diretório de trabalho C:\PICPRG o arquivo YAPP.EXE, e começamos a execução do YAPP com oseguinte comando no prompt do DOS:YAPP LED.HEX /COM2 /XT

com qual enviamos ao YAPP (conectado, por exemplo, na porta serial COM2) o arquivoLED.HEX contendo nossoprograma compilado e programaremos o PIC para funcionar com um cristal de quartzo externo.

Para maior informação sobre a sintaxe do programa YAPP.EXE veja a ducumentação relativa.   

Se a placa PicTech esta corretamente conectada deveremos ver aparecer o opcode hexadecimal das intruções semnenhum erro.

Terminada a programação deveremos ver o LED 1 lampejar na placa PicTech, como escrito no programa.

 

Lição 1 passo 6

http://www.tanzilli.com/pbe/brasiliano/less1/passo6.htm [27/5/2003 12:57:28]

Page 20: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 2 Introdução

Arquitetura interna do PIC

Ao termino desta lição saiba: Onde é memorizado o programa●

Onde são memorizados os dados●

O que é uma ALU, Um Acumulador, o Program Counter, o Stack e o Register File.●

Conteudo da lição 2A area de programa e o registrador de arquivo1.

A ALU e o registro W2.

O Program Counter e o Stack3.

Realizando "Luzes em sequencia"4.

Lição 2

http://www.tanzilli.com/pbe/brasiliano/less2/intro.htm [27/5/2003 12:57:29]

Page 21: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 2 Passso 1/4

A área de programa e o Registrador de arquivo

Depois de ter visto um pouco de pratica, passemos agóra a teoria. Iniciaremos agóra vendo como é feito um PIC, quaisdispositivos ele contem e como interagir entre eles.

Na figura seguinte esta ilustrado o esquema de blocos simplificado da arquitetura interna do PIC16F84 que nos ajudaraa entender o que sera explicado. As partes evidenciada em amarelo, é a componente que iremos analisar.

Iniciemos com a memória EEPROM e o REGISTER FILE.

A EEPROM é uma memória especial, cancelavel elétricamente, utilisada no PIC para memorizar o programa a serexecutado.

A sua capacidade de memorização é de 1024 locações e que poderão conter somente um opcode a 14 bit ou seja umainstrução basica do PIC. Um programa mais complexo que podemos realisar não podera ter mais do que 1024

Lição 2 passo 1

http://www.tanzilli.com/pbe/brasiliano/less2/passo1.htm (1 of 4) [27/5/2003 12:57:32]

Page 22: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

instruções.

Os endereços reservados para EEPROM começam em 0000H até 03FFH. O PIC pode somente executar instruçõesmemorizadas nestas locações. Não se pode de maneira nenhuma ler,escrever ou cancelar dados nesses endereços.

Par escrever, ler e cancelar estas locações é necessario um dispositivo externo cahmado programador. Um exemplo deprogramador é o nosso YAPP! ou o PICSTART-16+© produto da Microchip ou pode ser outro qualquer disponivel nocomercio.

A primeira locação de memória, o endereço 0000H, deve conter a primeira instrução que o PIC devera executar após oreset e por isso é denominada Reset Vector.

Como devemos lembrar, no codigo LED.ASM aprsentado na primeira lição onde esta inserida a primeira diretiva:

ORG 00H

para indicar o inicio do programa. Esta dirtiva idica de fato que a execução do programa após o reset deve iniciar noenderço 0000H da area de programa.

A instrução que vem logo após a diretiva ORG 00H:

bsf STATUS,RP0

sera então a primeira instrução a ser executada.

O REGISTER FILE é uma parte da locação de memória RAM denominada REGISTRO. Diferente da memóriaEEPROM destinada a conter o programa, a area de memória RAM é diretamante visivel pelo resto do programaigualmente.

Onde podemos escrever, ler, ou modificar tranquilamente qualquer enderço do REGISTER FILE no nosso programa aqualquer momento em que for necessario.

A unica limitação consiste de que alguns desses registros desenvolvem funções especiais pelo PIC e não podem serutilizados para outra coisa a não ser para aquilo a qual eles estão reservados. Estes registro encontram-se nas locaçõesbase da area de memória RAM segundo o que esta ilustrado em seguida.

A locacão de memória presente noREGISTER FILE são inderessadasdiretamente em um espaço de memória quevai de 00H a 2FH um total de 48 bytes,denominada pagina 0. um segundo espaço deendereçamento deniminado pagina 1 vai de80H a AFH. Para acessar esse segundo espa,oé necessario recorrer a dois bits auxiliaresRP0 e RP1 segundo a modalidade que iremosexplicar mais adiante.

As primeiras 12 locações da pagina 0 (de 00Ha 0BH) e da pagina 1 (de 80H a 8BH) sãoaquelas reservadas as funcões especiais para ofuncionamento do PIC e, como já dito, nãopodem ser utilizadas para outra coisa.

As 36 locações na pagina 0 pode serinderessada de 0CH a 2FH podemos aquiutilisar livremente pelo nosso programa paramemorisar variaveis,contadores, etc.

Lição 2 passo 1

http://www.tanzilli.com/pbe/brasiliano/less2/passo1.htm (2 of 4) [27/5/2003 12:57:32]

Page 23: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

No nosso exemplo LED.ASMa diretiva:

ORG 0CH

indica o endereço de inicio da area de dadosutilizada pelo nosso programa.

A diretiva que segue:

Count RES 2

reserva um espaço de duas locações, que oprograma utulizará para momorizar ocontador de retardo da subrotina Delay.

Os registros especiais do PIC serão utilizados com muita frequencia nos programas.

Por exemplo, se fizermos a cópia dos registros especiais TRISA e TRISB, para definir qual linha de I/O sera entrada equal sera saida. O mesmo estado lógico da linha de I/O depende do valor de dois registros PORTA e PORTB.

Alguns registros reportarão o estado de funcionamento do dispositivo interno do PIC ou o resultado de operações

Lição 2 passo 1

http://www.tanzilli.com/pbe/brasiliano/less2/passo1.htm (3 of 4) [27/5/2003 12:57:32]

Page 24: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

aritiméticas e logica.

É necessario conhecer portanto exatamente qual função desenvolve, cada um dos registros especiais e qual efeito seobetem ao manipular seus conteudos.

Para facilitar as opreções de seus registros especiais, no arquivo P16F84.INC (que como recordamos estava incluido nocodigo LED.ASM com a diretiva INCLUDE) a Microchip inseriu uma lista de nomes que indentificam univocalmentequalquer registro especial e a qual esta associado o endereço corespondente na area do REGISTER FILE.

Se, por exemplo, quiesermos definir toda a linha do PORTB do PIC em escrita agindo sobre o TRISB, podemosescolher e referenciar diretamente o registro com o seu endereço:

movlw B'00000000' movwf 06H

ou então, refernciar o mesmo registro com o seu nome simbólico:

movlw B'00000000' movwf TRISB

tendo que ter a certeza de ter incerido a diretiva INCLUDE "P16C84.INC" no nosso codigo.

Na proxima lição veremos um outro componente interno do PIC denominado de ALU e o registro W conhecidoanteriormente com o nome de accumulador.

 

Lição 2 passo 1

http://www.tanzilli.com/pbe/brasiliano/less2/passo1.htm (4 of 4) [27/5/2003 12:57:32]

Page 25: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 2 Passo 2/4

A ALU e o registro W

Iremos agora ilustrar outros dois componentes fundamentais na arquitetura do PIC, a ALU e o registro W ouacumulador.

A ALU (siglas de Arithmetic and Logic Unit ou seja unidade aritimetica e lógica) é a componente mais complexa doPIC por conter todos os circuitos destinados a desenvolver as funções de calculo e manipulação de dados durante aexecução de um programa.

A ALU é uma componente presente em todos os microprocessadores e dessa depende diretamente a capacidade decalculo do micro em si.

A ALU do PIC16F84 esta preparada para operar com 8 bits, ou seja valor numerico não maior do que 255. Existemprocessadores com ALU de 16, 32, 64 bits e mais. A familia Intel© 80386©, 486© e Pentium© por exemplo dispõe deuma ALU de 32 bits. A capacidade de calculo presente nesses micros são notavelmente superior em detrimento da

Lição 2 passo 2

http://www.tanzilli.com/pbe/brasiliano/less2/passo2.htm (1 of 2) [27/5/2003 12:57:33]

Page 26: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

complexidade dos circuitos internos de acessoria e consequentemente do espaço ocupado.

Diretamente conheço a ALU como registro W denominado antes de acumulador. Este registro consiste de umalocação de memória destinada a conter um só valor de 8 bits.

A diferença entre o registro W e outras locações de memória consiste no fato de que, por refernciar o registro W, a ALUnão pode fornecer nenhum endereço mas podemos acessa-los diretamente.

O registro W sera utilizado especificamente no programa pelo PIC.

Façamos um exemplo pratico. Suponhamos querer colocar na locação de memória 0CH do REGISTER FILE o valor01H. Procurando entre as instruções do PIC veremos rapido que não existe uma unica instrução capaz de efetuar estaoperação mas deveremos necessariamente recorrer ao aculador e usar duas instruções em sequencia.

Vejamos porque:

Como dissemos anteriormente, o opcode de uma instrução não pode exeder aos 14 bits e assim teremos:

8 bits para especificar o valor que queremos colocar na locação de memória,7 bits para especificar em qual locação de memória queremoss inserir o nosso valor,6 bits para especificar qual instrução queremos usar.

teremos um total de 8 + 7 + 6 = 21 bits.

Devemos então recorrer a duas instruções, ou seja:

movlw 01H movwf 0CH

que a primeira colocará no registro W o valor 01H com a instrução MOVe Literal to W e depois "moveremos" paralocação 0CH com a instrução MOVe W para F.

No proximo passo encontraremos o Program Counter e o Stack que facilitara a entender como funciona a instrução desalto do PIC.

 

Lição 2 passo 2

http://www.tanzilli.com/pbe/brasiliano/less2/passo2.htm (2 of 2) [27/5/2003 12:57:33]

Page 27: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 2 Passo 3/4

O contador de programa e o Stack

Nesta lição analizaremos o funcionamento do Program Counter e do Stack dois componentes importantes para acompreensão da instrução de salto e chamada a subrotina.

Como visto na lição anterior, o PIC16F84 inicia a execução do programa a partir do Reset Vector ou seja da locação dememória 0000H. Depois de ter executado esta instrução passa para a proxima instrução memorizada na locação 0001He assim por diante. Se não existisse instrução capaz de influenciar a execução progressiva do programa, o PIC chegariaaté o final na ultima instrução memorizada na ultima locação e não saberia mais como continuar.

Sabemos obviamente que não é bem assim e qualquer sistema a microprocessador ou linguagem de programação dispõede instrução de desvio, ou seja instruções capaz de modificar o fluxo de execução do programa.

Uma destas instruções é o goto (do inglês go to, va para). Quando o PIC encontra um goto não segue mais a instruçãoimediatamente após, mas desvia-se diretamante para a locação de memória especicada na instrução.

Lição 2 passo 3

http://www.tanzilli.com/pbe/brasiliano/less2/passo3.htm (1 of 3) [27/5/2003 12:57:35]

Page 28: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Façamos um exemplo :

ORG 00H

Point1 movlw 10 goto Point1

No reset o PIC seguira a instrução movlw 10 memorizada na locação 0000H que colocara no acomulador o valordecimal 10. Onde então passara à executar a proxima goto Point1. Esta instrução determinará um desvioincondicionado para locação de memória especificada pelo label Point1 ou seja de novo para locação 0000H.

O programa não f'ará outra coisa se não a de executar um cilco infinito seguindo continuamente as instruçõesespecificadas.

Durante este ciclo, para determinar qual é a proxima instrução a ser seguida, o PIC utiliza um registro especialdenominado Program Counter ou seja contador de programa. Este tera sempre o enderço da proxima instrução a serexecutada. No reset este estará sempre zerado, determinando o inicio da execução no endereço 0000H, e cada instruçãotera um incremento de um para poder passar para proxima instrução.

A instrução goto permite a colocação de um novo valor no Program Counter e consequentemente desvia-a a umalocação qualquer da area de programa do PIC.

Uma outra instrução muito interessante é o call ou seja a chamada a subrotina.

Esta instrução funciona de maneira muito similar ao goto com a unica diferença que, a primeira, desvia para umalocação de memória especificada e continua a execução do programa, enquanto o call desviara o programa para umasubrotina especificada e executara a mesma, e retornara a execução da instrução imediatamente após a chamada call, ovalor imediatamente após a chamada call sera armazenado em uma area particular da memória denominada Stack.

Vejamos melhor com um exemplo:

ORG 00H

Point1 movlw 10 call Point2 goto Point1

Point2 movlw 11 return

Neste caso o PIC, após ter executado movlw 10 passa a executar o call Point2. Antes de desviar memoriza no Stack oendereço 0002H, ou seja a proxima locação ao call. Passa então a executar a instrução movlw 11, memorizada emcorrespondencia ao label Point2. E neste ponto encontra uma nova instrução o return que, como podemos deduzir deseu nome, permite o "RETORNO", ou seja retorne a execução da instrução imediatamente após o call.

Esta operação é denominada de: "chamada a subrotina", ou seja uma interrupção momentanea do fluxo normal doprograma para "chamar" a execução de uma serie de instruções, para depois retornar a execução normal do programa.

Para poder retornar para onde havia interrompido, o PIC utiliza o ultimo valor armazenado no Stack e o coloca de novono Program Counter.

A palavra stack em inglês significa "catasta" e por esse fato é possivel acascatar um endereço sobre o outro para ser

Lição 2 passo 3

http://www.tanzilli.com/pbe/brasiliano/less2/passo3.htm (2 of 3) [27/5/2003 12:57:35]

Page 29: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

recuperado quando necessario. Este tipo de memorização era antes denominado de LIFO do inglês Last In First Out,em que o ultimo elemento armazenado(last in) deve necessariamente ser o primeniro a sair (last out).

Graças ao Stack é possivel efetuar varios call, um dentro do outro e manter sempre o retorno ao fluxo do programaquando se encontra uma instrção return.

Vejamos um outro exemplo:

ORG 00H

Point1 movlw 10 call Point2 goto Point1

Point2 movlw 11 call Point3 return

Point3 movlw 12 return

No exemplo acima a rotina principal Point1 promove a chamada do primeiro call para subrotina Point2, a subrotinaPoint2 chama outra subrotina no caso Point3, este ultimo por sua vez, encontra um returm e retorna para Point2 queencontra o outro return e retorna para a execução da rotina Point1 que no caso é a principal.

Os endereços a serem memorizados no stack são dois e quando vir a encontrar um segundo call procurara pelo returncorrespondente ao primeiro e assim por diante. Se diz então que o call é "nidificate" ou seja um dentro do outro.

O PIC16F84 dispõe de um stack de 8 niveis, ou seja um Stack que consegue armazenar no maximo 8 chamadas àsubrotina.

É importante assegurar-se, durante a formulação de um programa que, se tenha sempre uma instrução returm emcorrespondencia a um call para evitar o perigo de desalinhamento do stack que em execução pode gerar erros quedificilmente encontraremos.

Na proximo passo modificaremos o nosso codigo LED.ASM para entender melhor o que foi dito até aqui.

Lição 2 passo 3

http://www.tanzilli.com/pbe/brasiliano/less2/passo3.htm (3 of 3) [27/5/2003 12:57:35]

Page 30: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 2 Passo 4/4

Realisando as "Luzes em sequência"

Faremos agóra uma reelaboração do codigo LED.ASM apresentado na primeira lição fazendo-o realizar um lampejadorde quatro led's. E o novo codigo modificado se chamará SEQ.ASM.

O circuito a ser realizado esta representado no seguinte arquivo no formato Acrobat Reader (10Kb): example2.pdfsubstancialmente equivalente ao circuito apresentado na primeira lição, com a unica diferença que agóra a quantidade deled's conectados serão quatro antes éra um.

As linha de I/O utilizadas serão RB0 para o prmeiro led, RB1 para o segundo, RB2 para o terceiro RB3 para o quarto.Vamos configurar todas em escrita no inicio do programa trocando as instruções:

movlw 11111110B movwf TRISB

para

movlw 11110000B movwf TRISB

em que os quatro bits menos significativos, corresponde a linha RB0,1,2,3 foram colocados a zero para definir esta linhaem escrita.

Na area de memória do REGISTER FILE (que no codigo inicia com a diretiva ORG 0CH) alem dos dois bytesreferenciados pelo label Count, reservaremos mais um byte com o label Shift que utilizaremos para determinar asequencia de funcionamento dos led's. A diretiva a ser inserida é:

Shift RES 1

Antes de iniciar o ciclo principal(label MainLoop) vamos inicializar um novo registro Shift a 00000001B com aseguinte instrução:

movlw 00000001B movwf Shift

Neste ponto, no ciclo principal do nosso programa, vamos tratar de transferir o valor memorizado no registro Shift parao PortB obtendo então o inicio de funcionamento do primeiro led, a instrução sera a seguinte:

movf Shift,W movwf PORTB

que então efetuara o giro para esquerda do valor contido no Shift de um bit, com a seguinte instrução:

bcf STATUS,S rlf Shift,F

A primeira instrução serve para zerar o bit CARRY do REGISTRO DE STATUS que vamos analisar na proxima lição.RLF Rotate Left F through Carry (rotaciona para esquerda o bit do carry) desloca um bit para esquerda o valormemorizado no registro Shift inserindo na posição ocupada pelo bit 0 o valor do bit do Carry(que como dissemosveremos em seguida). Para fazer com que este bit seja sempre zero tera que ser executada antes da RLF a instruçãoBCF STATUS,C para zerar este bit.

Neste ponto o registro Shift sera 00000010B, onde, no proximo ciclo, uma vez transaferido esse valor para o PortB seobtera o apagamento do LED1 e o acendimento do LED2 e assim por diante nos ciclos sucessivos.

Lição 2 passo 4

http://www.tanzilli.com/pbe/brasiliano/less2/passo4.htm (1 of 2) [27/5/2003 12:57:35]

Page 31: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Quando o bit 4 do Shift for a 1, então todos os quatro leds estiveram acesos pelo menos uma vez e tornara a iniciar doled 1. Na instrução seguinte veremos este tipo de controle:

btfsc Shift,4 swapf Shift,F

A instrução btfsc Shift,4 controla exatamente até que o bit 4 do registro Shift vale 1. Depois executa a proximainstrução swapf Shift,F, e continua.

A instrução swap (do ingles "troca") na pratica troca o quarto bit mais sigficativo contido no registro Shift, pelo quartobit menos significativo. Do valor inicial do registro Shift igual a 00010000 obtido através do ciclo de repetiçãoMainLoop se obtem o valor 0000001 que na pratica faz acender o primeiro led.

 

Lição 2 passo 4

http://www.tanzilli.com/pbe/brasiliano/less2/passo4.htm (2 of 2) [27/5/2003 12:57:35]

Page 32: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 3 Introdução

Introdução aos periféricos

Ao termino desta lição saiba: Como funciona e como se programa a linha de I/O●

Conteudo da Lição 3A porta A e B1.

Estado de saida da linha de I/O2.

Entrada de teclas3.

 

Lição 3

http://www.tanzilli.com/pbe/brasiliano/less3/intro.htm [27/5/2003 12:57:36]

Page 33: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 3 Passo 1/3

A porta A e B

O PIC16C84 dispões de um total de 13 linhas de I/O organizadas em duas potas denominadas de PORTA A e PORTAB. A PORTA A dispõe de 5 linhas configuraveis tanto em entrada como em saida identificadas pelas siglas RA0, RA1,RA2, RA3 e RA4. A PORTA B dispõe de 8 linhas tambem configuraveis seja em entrada ou em saida identificadaspelas siglas RB0, RB1, RB2, RB3, RB4, RB5, RB6 e RB7.

A subdivisão da linha em duas portas diferentes é devido ao tipo de arquitetura interna do PIC16C84 que preve umcontrole de dados de no maximo 8 bits.

Para o controle da linha de I/O do programa, o PIC dispõe de dois registros internos que controlam as portas e sãochamados de TRISA e PORTA para a porta A e TRISB e PORTB para a porta B.

Os registros TRIS A e B , determinarão o funcionamento em entrada ou em saida da mesma linha, e o registro PORT A

Lição 3 Passo 1

http://www.tanzilli.com/pbe/brasiliano/less3/passo1.htm (1 of 2) [27/5/2003 12:57:39]

Page 34: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

e B determinarão o status da linha en saida ou reportarão o status da linha em entrada.

Todos os bits contidos nos registros mencionados correspondem univocalmente a uma linha de I/O.

Por exemplo o bit 0 do registro PORTA e do registo TRIS A corespondem a linha RA0 , o bit 1 a linha RA1 e assimpor diante.

Se o bit 0 do registro TRISA for colocado em zero, a linha RA0 estara configurada como linha de saida, por isso ovalor a que ira o bit 0 do registro PORTA detrminara o stado logico de tal linha (0 = 0volts, 1 = 5 volts).

Sel il bit 0 de registro TRISA viene messo a uno, la linea RA0 verrà configurata come linea in ingresso, quindi lo statologico in cui verrà posta dalla circuiteria esterna la linea RA0 si rifletterà sullo stato del bit 0 del registro PORTA.

Fassamos um exemplo pratico, imaginemos querer conectar um led sobre a linha RB0 e uma chave sobre a linha RB4, ocodigo a se escrever será o seguinte:

movlw 00010000Btris B

onde aqui será colocado a 0 o bit 0(linha RB0 em escrita(saida), e a 1 o bit 4 (linha RB4) em entrada. recorde-se de talpropósito que na notação binaria do assembler o bit mais a direita corresponde com o bit menos significativo por isso obit 0.

Para acender o led devemos escrever o seguinte codigo:

bsf PORTB,0

Para apaga-lo:bcf PORTB,0

Para ler-mos o estado da chave conectada a linha RB4, o codigo será:btfss PORTB,4goto SwitchAMassagoto SwitchAlPositivo

No proximo passo analizaremos o estado que controlara a linha de I/O.

Lição 3 Passo 1

http://www.tanzilli.com/pbe/brasiliano/less3/passo1.htm (2 of 2) [27/5/2003 12:57:39]

Page 35: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 3 Passo 2/3

Estado de escrita da linha de I/O

Por ser o PIC mais maleavel as diversas exigências de utilização, a Microchip tem implementado diverssas tipologia destatus de escrita para a linha de I/O. Tendo então dois grupos de pinos a qual o comportamento é ligeiramentediferenciado do outro grupo. Conhecendo melhor o funcionamento dos diversos status de escrita podemos desfrutarmelhor das caracteristicas e otimizar melhor o nosso projéto.

Estado de escrita das linhas RA0, RA1, RA2 e RA3

Iniciaremos do grupo da linha RA0, RA1, RA2 e RA3 na qual representamos, na figura seguinte, o esquema do estadode escrita extraido do data sheet da Microchip:

Como dito no passo anterior, a configuração de uma linha como entrada ou saida depende do estado do bit no registroTRIS(TRISA para o PORTA e TRISB para o PORTB).

Lição 3 Passo 2

http://www.tanzilli.com/pbe/brasiliano/less3/passo2.htm (1 of 5) [27/5/2003 12:57:41]

Page 36: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Pegaremos como exemplo a linha RA0 e analizaremos o funcionamento do estado de saida seja quando a mesmafunciona em entrada ou quando em saida.

Funcionamnto em entrada

Para configurar a linha RA0 em entrada, devemos colocar em 1 o bit 0 do registro TRISA com a instrução:

bsf TRISA,0

Esta instrução determinara uma comutação a 1 do estado logico do flip-flop do D-latch indicado no bloco com o nomeTRIS latch. Para outra linha linha de I/O existe um destes flip-flop e o estado logico em que se trava dependeextritamamente do estado logico do relativo bit no registro TRIS(ou melhor disendo todos o bit's do registro TRIS éfisicamente implementato com um TRIS latch).

A saida Q do TRIS latch é conectada a entrada de uma porta lógica do tipo OR. Isto significa que, independente dovalor presente a outra entrada, a saida da porta OR estara sempre em 1 em quanto uma de suas entradas vale 1(veja natabela verdade). E nesta condição o transistor P não conduz e mantem a linha RA0 desconetada do positivo daalimentação.

Do mesmo modo a saida negativa Q do TRIS latch e conectada a entrada de uma porta AND onde a saida desta estarasempre em 0 em quanto uma de suas entradas vale 0 (veja tabela verdade). E nesta condição em que o transistor N nãoconduz mantendo a linha RA0 desconectada da massa. O estado logico da linha RA0 dependerá exclusivamente docircuito externo a que o conetar-mos.

Aplicando 0 ou 5 volts ao pino RA0, sera possivel ler-mos o estado presente no circuito externo a entrada do blocorepresentado por TTl input buffer e do latch de entrada.

Funcionamento em saida

Para configurar a linha de RA0 em saida, devemos colocar em 0 o bit 0 do registro TRISA com a instrução:

bcf TRISA,0

Esta deterimina a comutação para 0 da saida Q do TRIS latch ( e para 1 a saida Q negativa). E neste estado o valor dasaida da porta OR e AND depende exclusivamente do estado de saida do Q negativo do Data Latch. Como para oTRISlatch, em que o Data Latch depende do estado de um bit em um registro, particularmente do registro PORTA. A suasaida negativa sera enviada para entrada das duas portas logicas OR e AND e que estão diretamente sobre a base dotransistor P e N.

Se colocar-mos em 0 o bit 0 do registro PORTA com a instrução:

bcf PORTA,0

obtremos a condução do transistor N e portanto irá a 0 a linha RA0. Se ao invés colocar-mos em 1 o bit 0 com ainstrução:

bsf PORTA,0

obteremos a condução do transistor P e portanto ira a +5 volts a linha RA0. Nesta condição sera sempre possivel revero valor enviado sobre a linha através do circuito de entrada.

Estado de saida da linha RA4

Analizaremos agóra o funcionamento do estado de saida da linha RA4 que é diferente de todas as outras linhas de I/Oenquanto compartilha o mesmo pino do PIC16c84 com o TOCKI o qual iremos analizar no proximo passo.

Na figura seguinte esta descrito o esquema de blocos do estado de saida extraido do data sheet Microchip:

Lição 3 Passo 2

http://www.tanzilli.com/pbe/brasiliano/less3/passo2.htm (2 of 5) [27/5/2003 12:57:41]

Page 37: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

A logica de comutação é substancialmente identica ao grupo das linha RA0 a 3 com excessão da auxencia da porta ORe do transistor P, ou seja de todos os circuitos que permitem a ligação ao positivo, da linha RA4. Isto significa emtermos praticos, que quando a linha RA4 esta programada em saida podera assumir um nivel que dependera do circuitoexterno pois na realidade não esta conectada ao positivo e sim desconectada. Este tipo de circuito de saida chama-se"coletor aberto" e é util para aplicações em que é necessario compartilhar uma mesma ligação com mais pinos de saidaou que se tenha a necessidade de colocar em alta impedancia uma linha de saida e podendo assim reprograma-la comolinha de entrada.

Se quisermos tornar seguro que a linha RA4 vá a 1 devemos conectar externamente um rsistor de pull-up, ou seja umresistor conctado ao positivo da alimentação.

Veremos em seguida a utilização da linha indicada no eaquema acima TMR0 clock input.

Estado de saida das linhas RB0, RB1, RB2 e RB3

Onde que para este grupo de linhas permanece substancialmente invariada a lógica de comutação. Estas dispõe de umcircuito a mais, o weak pull-up ativavel quando a linha for programada em entrada.

A entrada de fato, como explicado anteriormente, a linha vem completamante desligada do PIC. O estado da linhadepende então exclusivamente do circuito externo. Se o circuito é do tipo de coletor aberto ou simplismente éconstituido de uma simples chave que, quando precionada, conecta a massa a linha de I\O, é necessario inserir umresistor de pull-up vinda do positivo para tornar seguro quando a chave for solta o nivel voltar a uma condição lógica1estavel sobre a linha de entrada. O circuito de weak pull-up permite evitar o uso do resistor de pull-up e é possivel de

Lição 3 Passo 2

http://www.tanzilli.com/pbe/brasiliano/less3/passo2.htm (3 of 5) [27/5/2003 12:57:41]

Page 38: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

ser ativado agindo sobre o bit RBPU do registro OPTION.

Na figura seguinte esta representado o esquema de blocos do estado de sida extrido do data sheet Microchip:

Alem disso a linha RB0 sozinha, apresenta uma caracteristica muito particular. Esta , quando for configurada comolinha de entrada, pode gerar, em correspondencia a uma troca de estado lógico, uma interrupt, ou seja uma interrupçãoimediata do programa em execução e uma chamada a uma subrotina espeial denominada interrupt handler. Mas dissofalaremos em seguida.

Estado de saida das linhas RB4, RB5, RB6 e RB7

O circuito de comutação deste grupo de linhas é identico ao grupo RB0 a 3. Esta linha dispõe tambem de um circuito deweak pull-up. E mais, com respeito a linha RB0 - 3 tem a vantagem de poder revelar variações de estado sobre qualquerlinha e gerar uma interrupção da qual falaremos na proxima lição.

Na figura seguinte esta reproduzido o esquema de blocos do estado de saida extraido do data sheet Micrchip.

Lição 3 Passo 2

http://www.tanzilli.com/pbe/brasiliano/less3/passo2.htm (4 of 5) [27/5/2003 12:57:41]

Page 39: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 3 Passo 2

http://www.tanzilli.com/pbe/brasiliano/less3/passo2.htm (5 of 5) [27/5/2003 12:57:41]

Page 40: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 3 Passo 3/3

Entrada de teclado

Depois de termos realizado, no exemplo anterior, as luzes em sequencia mostrando as linhas de RB0 a RB3 como linhasde saida, vejamos agora como podemos realizar uma entrada de teclado configurando as linhas de RB4 a RB7 comolinhas de entrada.

Para fazer-mos isto ampliaremos o circuito apresentado na lição 2 com quatro teclas denominadas SW1, SW2, SW3,SW4 e liga-las segundo o esquema elétrico: exemplo3.pdf (formato Acrobat Reader 12Kb).

Nenhuma destas teclas conecta a massa, as linhas de entrada normalmente mantidas a + 5 volts através dos resistores (deR6 a R9). Pegando, por exemplo, o pino 10 do PIC 16F84, esta linha será mantida em + 5 volts até que não sejapressionada a tecla SW1 que promoverá a mudança da linha para 0 volts.

Realizemos um programa de exemplo que acenda qualquer um dos led's D1, D2, D3 e D4 em correspondecia aopressionamento de uma das teclas SW1, SW2, SW3 e SW4.

O código do exemplo esta representado no arquivo INPUT.ASM.

A parte inicial do programa executa a mesma função efetuada no exemplo anterior e uma instrução a mais:

movlw 11110000B movwf TRISB

configurando as linhas de RB0 a RB3 em saida para a conecção com os led's e as linhas de RB4 a RB7 em entrada paraa conecção com as quatro chaves(teclas) ao resto do programa.

A instrução:

bcf STATUS,RP0

Efetua uma troca sobre o banco do registro 0 de modo que possamos acessar diretamente o status da linhas de I/O.

MainLoop

clrf PORTB

Esta instrução apaga todos os led's conectados sobre a PORTA B em qualquer ciclo do loop de modo que possam seracesos com base no status das teclas.

btfss PORTB,SW1 bsf PORTB,LED1

Estas duas instruções serão executadas por qualquer linha conectada a uma tecla para verificar se a tecla foi pressionadae então acender o led correspondente.

na prática:

btfss PORTB,SW1

pula a proxima:

bsf PORTB,LED1

só se a tecla SW1 for solta. Caso contrario continuará acendendo o led. Esta cópia de instrução sera executada por

Lezione 3 Passo 3

http://www.tanzilli.com/pbe/brasiliano/less3/passo3.htm (1 of 2) [27/5/2003 12:57:42]

Page 41: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

qualquer outra tecla.

E tudo é executado dentro de um simples loop atravéz da instrução:

goto MainLoop

 

Lezione 3 Passo 3

http://www.tanzilli.com/pbe/brasiliano/less3/passo3.htm (2 of 2) [27/5/2003 12:57:42]

Page 42: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 4 Introdução

O contador TMR0 e o PRESCALER

Ao termino desta lição saiba: Qual a utilidade do contador TMR0●

Para que serve e como se programa o PRESCALER●

Conteudo da lição 4O registro contador TMR01.

O Prescaler2.

 

Lição 4

http://www.tanzilli.com/pbe/brasiliano/less4/intro.htm [27/5/2003 12:57:42]

Page 43: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 4 Passo 1/2

O registro contador TMR0

Vejamos agóra o que é e como funciona o registro TMR0.

O registro TMR0 é um contador, ou seja um registro particular, na qual, seu conteudo ve-se incrementado com cadenciaregular e programada diretamente pelo hardware do PIC. Na pratica, a diferença de outro registro, é que o TMR0 nãomantem inalterado o valor que é memorizado, mas o incrementa continuamente, se por exemplo escrevermos nele ovalor 10 com a instrução:

movlw 10movwf TMR0

Após um tempo par de quatro ciclos de maquina, o conteudo do registro começa a ser incrementado em +1 ou seja 11,12, 13 e assim por diante com a cadencia constante e independente da execução do resto do programa.

Lição 4 Passo 1

http://www.tanzilli.com/pbe/brasiliano/less4/passo1.htm (1 of 4) [27/5/2003 12:57:44]

Page 44: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Se por exemplo, após ter colocado um valor no registro TMR0, executar-mos um loop infinito

movlw 10movwf TMR0

loop goto loop

o registro TMR0 sera incrementado pelo hardware interno do PIC durante a execução do loop.

Uma vez atingido o valor 255 o registro TMR0 sera zerado automaticamente retornando então a contagem, mas não dovalor originalmente imposto mas do zero.

A frequencia é diretamente proporcional a frequencia de clock aplicada ao chip e pode ser modificada programando-seoportunamente os seus bits de configuração.

Na figura seguinte esta representada a cadeia de blocos interno do PIC que determina o funcionamnto do registroTMR0.

O bloco Fosc/4 e T0CKI representados em azul representam as duas possiveis fontes de sinal para o contador TMR0.

Fosc/4 é um sinal gerado internamnte no PIC pelo circuito de clock e é par na frequencia de clock dividida por quatro.

T0CKI é um sinal gerado de um evetual circuito externo e aplicado ao pino T0CKI correspondente ao pino 3 no PIC16C84.

O blocos T0CS e PSA descritos em verde são dois comutadores de sinal na qual estão representando um dos dois tiposde sinal de entrada com base no valor dos bits TOCS e PSA do do registro OPTION.

O bloco PRESCALER é um divisor programavel e que seu funcionamento sera explicado na proximo passo.

Vejamos na pratica como é possivel agir sobre este bloco para obter diferentes modalidades de contagem pelo registroTMR0.

Iniciaremos programando o bit T0CS em 0 e PSA em 1. A configuração de funcionamento que obteremos é arepresentada na figura abaixo:

Lição 4 Passo 1

http://www.tanzilli.com/pbe/brasiliano/less4/passo1.htm (2 of 4) [27/5/2003 12:57:44]

Page 45: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

A parte em vermelho mostra-nos o percurso que efetua o sinal antes de chegar ao contador TMR0.

Como já aviamos dito anteriormente, a frequencia Fosc/4 é par e de um quarto da frequencia de colck. Utilizando-se umcristal de quartzo de 4Mhz teremos uma frequencia par de 1 MHz. Tal frequencia sera enviada diretamente ao registroTMR0 sem aver nenhuma modificação. A cadencia de contagem que se obtem e então par e de 1 milhão de incrementospor segundo do valor presente no TMR0.

Imaginemos agóra modificar o status do bit T0CS de 0 para 1 a configuração que obteremos é seguinte:

Desta vez será o sinal aplicado ao pino TOCKI do PIC a ser enviado diretamente ao contador TMR0 determinando afrequencia de contagem. Aplicando-se por exemplo a este pino uma frequencia par de 100Hz obteremos uma decontagem par de cem encrementos por segundo.

A presença da porta lógica XOR(execlusive OR) na entrada TOCKI do PIC permite determinar o caminho do bit TOSEdo registro OPTION se o contador TMR0 deve ser incrementado na decida do pulso(TOSE=1) ou na subida dopulso(TOSE=0) do sinal externo aplicado.

Na figura seguinte esta representada a correspondencia entre a cadencia do sianal externo e o valor que assume ocontador TMR0 :

Lição 4 Passo 1

http://www.tanzilli.com/pbe/brasiliano/less4/passo1.htm (3 of 4) [27/5/2003 12:57:44]

Page 46: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Na proximo passo veremos como é possivel dividir interiormente a frequencia de contagem, interna ou exeterna,ativando o PRESCALER.

 

Lição 4 Passo 1

http://www.tanzilli.com/pbe/brasiliano/less4/passo1.htm (4 of 4) [27/5/2003 12:57:44]

Page 47: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 4 Passo 2/2

O PRESCALER

O ultimo bloco a ser analizado para poder utilizar completamente o registro TMR0 é o PRESCALER.

Se configurar-mos o bit PSA do registro OPTION em 0 enviamos ao registro TMR0 o sinal de saida do PRESCALERcomo é visivel na figura abaixo:

O PRESCALER consiste na pratica de um divisor programavel de 8 bits utilizado no caso pela frequencia de contagemenviada ao contador TMR0 que é demasiada alta para nossos propositos.

No exemplo descrito na lição anterior aviamos visto que utilizando um cristal de 4Mhz obtinhamos uma frequencia decontagem par de 1 Mhz que para muitas aplicações podera ser muito elevada.

Com o uso do PRESCALER podemos dividir interiormente a frequencia Fosc/4 configurando desta forma os bits PS0,PS1, PS2 do registro OPTION segundo a tabéla abaixo:

PS2 PS1 PS0 Divisor Frequencia de saida do prescaler (Hz)

0 0 0 2 500.000

0 0 1 4 250.000

0 1 0 8 125.000

0 1 1 16 62.500

1 0 0 32 31.250

1 0 1 64 15.625

1 1 0 128 7.813

1 1 1 256 3.906

Iremos agóra efetuar um experimento sobre o que foi visto até aqui para exercitar-mos o aprendisado.

Na lição 2 aviamos realizado um lampejador de quatro led's onde a sequencia de lampejo era determinada por umasubrotina software, ou seja um retardo baseado no tempo de execução de um ciclo continuo da instrução.

Iremos agóra rescrever a mesma subrotina para introduzir um retardo par de um segundo utilizando o registro TMR0.

Lição 4 Passo 2

http://www.tanzilli.com/pbe/brasiliano/less4/passo2.htm (1 of 2) [27/5/2003 12:57:45]

Page 48: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

A modificação esta descrita no arquivo SEQTMR0.ASM.

Devemos antes de tudo programar o PRESCALER para obter uma frequencia de contagem colocando a seguinteinstrução no endereço do programa:

movlw 00000100Bmovwf OPTION_REG

Na pratica iremos programar o bit TOCS em 0 para selecionar como fonte de contagem o clock do PIC, o bit PSA em 0para levar o PRESCALER ao registro TMR0 ao invéz do Watch Dog(o qual veremos em seguida) e o bit deconfiguração do PRESCALER em 100 para obter uma frequencia de divisão par de 1:32.

A frequencia de contagem que obteremos sobre TMR0 que será par é:

Fosc = 1Mhz / 32 = 31.250 Hz

A subrotina Delay deverá utilizar oportunamente o registro TMR0 para obter um retardo par de um segundo. Vejamoscomo. As primeiras instruções que virão em seguida no Delay serão:

movlw 6movwf TMR0

e

movlw 125movwf Count

A duas primeira memorizam no TMR0 o valor 6 de modo que o registro TMR0 chegará a zero depois de 250contagens(256 - 6 = 250) obtendo assim uma frequencia de passgem pelo zero do TMR0 par de:

31.250 / 250 = 125 Hz

A instrução seguinte memorizara em um registro de 8 bits(Count) o valor 125 de tal modo que, decrementara esteregistro de um a cada passagem pelo zero do TMR0, até que se obtenha uma frequencia de passagem pelo zero doregistro Count par de:

125/125 = 1Hz

A instrução inserida no loop DelayLoop se encarregara então de controlar se o TMR0 já chegou a zero, quando entãoreinicializara em 6 e decrementara o valor contido em Count. Quando Count alcançar antes desse o zero ai teratranscorrido um segundo e a subrotina poderá retornar ao programa que a chamou.

 

Lição 4 Passo 2

http://www.tanzilli.com/pbe/brasiliano/less4/passo2.htm (2 of 2) [27/5/2003 12:57:45]

Page 49: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 5 Introdução

As interrupções

Ao termino desta lição saiba: O que é e como controlar as interrupções no PIC●

Como se deve escrever uma interrupit handler●

Quais o tipos de eventos controlaveis do PICF84●

Come controlar mais interrupções contemporaneamente●

Conteudo da lição 5Interrupção1.

Exemplo de controle de uma interrupção2.

Exemplo prático de controle de mais de uma interrupção3.

Lição 5

http://www.tanzilli.com/pbe/brasiliano/less5/intro.htm [27/5/2003 12:57:46]

Page 50: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 5 Passo 1/3

Interrupção

A interrupção é uma técnica particular do PIC que permite interceptar eventos externos ao programa em execução,interrompe momentaneamente a operação do programa em andamento, controla o evento com uma subrotina apropriadae retorna para a execução do programa.

Seja para fazer um paragrafo mais ou menos explicativo, podemos dizer que a interupção é para o PIC, se não,o quepara nós representaria uma cahamada telefonica.

Para receber-mos um telefonema não precisamos nos preocupar em ficar levantando continuamente o monofone dogancho para ver se tem alguem querendo falar com nós, mas podemos tranquilamente aguardar pelo toque dacampanhinha quando alguem nos chama. Quando então apenas levatamos o monofone do gancho e interronpemosmomentaneamente o sistema de chamada, respondemos ao telefone e , uma vez terminada a conversassão, retornamos omonofone no gancho ou seja, do ponto onde aviamos interrompido.

Appena sentiamo lo squillo, possiamo decidere di interrompere momentaneamente le nostre faccende, rispondere altelefono e, una volta terminata la conversazione, riprendere dal punto in cui avevamo interrotto.

Transportando o termo deste paragrafo ao PIC veremos que::

O nosso telefone corresponde ao programa em execução;●

a chamada de alguem corresponde ao evento de controle;●

o monofone corresponde a requisição de interrupção;●

a nossa reposta ao telefone corresponmde a subrotina de controle da interrupção.●

É evidente que assim como é extremamente mais eficaz se ter uma campnhinha conectada ao telefone é extremamentemais eficaz controlar nosso evento com uma interrupção ao invés de diretamente pelo programa.

Tipos de eventos e bit's de abilitaçãoO PIC16C84 esta preparado para controlar intrrupções ao final de quatro eventos diferentes,vejamos quais são:

 1. A troca de estado sobre a linha RB0 (External interrupt RB0/INT pin).2. Ao final da contagem do registro TMR0 (TMR0 overflow interrupt).3. A troca de estado sobre uma das linhas de RB4 a RB7 (PORTB change interrupts).4. Ao final da escrita sobre um endereço da EEPROM (EEPROM write complete interrupt).5.

A interrupção de qualquer um destes evenbtos pode ser conseguido abilitando ou desabilitando independentemente unsdos outros, agindo sobre os seguintes bit's do registro INTCON:

 ●

INTE (bit 4) se este bit estiver em 1 abilitara a interrupção de troca de estado sobre a linha RB0●

T0IE (bit 5) se este bit estiver em 1 abilitara a interrupção de final de contagem do registro TMR0●

RBIE (bit 3) se este bit estiver em 1 abilitara a interrupção de traca de estado sobre uma das linhas de RB4 aRB7

EEIE (bit 6) se este bit estiuver em 1 abilitara a interrupção de final de escrita sobre um endereço da EEPROM●

Existe um outro bit de abilitação geral de interrupção que deve ser setado antes destes ou seja o bit GIE (GlobalInterrupt Enable bit) e este é o bit 7 do registro INTCON.

Lição 5 Passo 1

http://www.tanzilli.com/pbe/brasiliano/less5/passo1.htm (1 of 2) [27/5/2003 12:57:47]

Page 51: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Vetor de Interrupção e Controle de Interrupção(Interrupt vector e Interrupt handler)

Qualquer que seja o evento abilitado, ao se manifestar, o PIC interrompe a execução do programa em andamento,memoriza automaticamente no STACK o valor corrente do PROGRAM COUNTER e pula para a instrução presenteno endereço de memória 0004H denominada Interrupt vector(vetor de interrupção).

Deste ponto em diante devemos colocar a nossa subrotina de controle denominada Interrupt Handler (controle deinterrupção).

Pode-se habilitar mais interrupções e, a primeira providencia da interrupt handler e a de verificar qual o evento abilitadofez gerar a interrupção e a execução da parte do programa relativo

Este contole pode ser ser efetuado utilizando a Interrupt flag.

Interrupt flag(sinalizador de interrupção)Dado que qualquer interrupção gera uma chamada do endereço 04H,  no registro INTCON esta presente o flag queindica qual o evento que gerou a interrupção vejamos:

 ●

INTF (bit 1) Se vale 1 a interrupção é um estado gerado na troca de estado subre a linha RB0.●

T0IF (bit 2) Se vale 1 a interrupção é um estado gerado no termino da contagem do timer TMR0.●

RBIF (bit 0) Se vale 1 a interrupção é um estado gferado da troca de estado de uma das linhas de RB4 a RB7.●

Como se pode ver a interrupção de final de escrita na EEPROM não tem previsto nenhum flag de sinalização para que ainterrup handler deva considerar que a interupção é um estado gerado deste evento quando todos os tres flags supracitados irão a 0.

Importante: Uma vez conhecido qual o flag esta ativo, a interrupt handler deve zera-lo, ou então não mais gerarainterrupção correspondente.

Retorno de uma interrupt handler

Quando for gerada uma interrupção o PIC desbilita automatimamente o bit GIE(global Interrupt Enable) do registroINTECON de modo a desbilitar todas as interrupções restantes. Para poder retornar ao programa principal e reinicializarem 1este bit deve-se utilisar a instrução :

RETFIE

No proximo passo veremos um exemplo pratico do uso das interrupções.

Lição 5 Passo 1

http://www.tanzilli.com/pbe/brasiliano/less5/passo1.htm (2 of 2) [27/5/2003 12:57:47]

Page 52: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 5 Passo 2/3

Exemplo prático de controle de interrupção

Vejamos agóra um exemplo pratico de controle de intrerrupção. Pegaremos como base partida o codiogo LED.ASMusado na lição 1 para realisar um lampejador a led.

Como recordamos este programa faz lampejar o LED1 simplesmente, presente sobre a placa PicTech, num ciclocontinuo utilizando um retardo software introduzido da subrotina Delay

Vejamos agóra como é possivel fazer precionando uma tecla acender o LED2 temporariamente com a execução doprograma principal.

O codigo de exemplo que iremos analizar esta disponivel no INTRB.ASM

O circuito a ser realizado esta representado no seguinte arquivo no formato Acrobat Reader (12Kb): example3.pdf.

Uma vez carregado o programa INTRB.ASM na placa PicTech notaremos que o LED D1 lampejará exatamente comoaviamos colocado o programa LED.ASM.Devemos agóra precionar as teclas de SW1 a SW4. Veremos que o LED D2se acende imediatamente e permanece aceso por um tempoo par de 3 lampejops do LED 1.

Na pratica entre o loop principal, derivado do codigo LED.ASM, continua a faser lampejar o LED D1 utilisando umretardo software introduzido da subrotina Delay, o PIC fara com que ao precionar-mos uma tecla, sinalizaraimediatamente sobre o LED 2 sem influenciar de maneira evidente a frequencia de lampejo.

Primeiro analisaremos o codigo INTRB.ASM vejamos a diferença de comporatamento com o outro codigo que faz amesma operação sem trer que recorrer a interrupção.

Para este propósito compilaremos e colocaremos na placa Pictech o programa NOINTRB.ASM. Notaremos que aacenssão do led 2 em correspondencia com o precinamento de uma tecla é ligeiramente retardado em quanto a leitura doestado da linha RB4-7 não sera efetuada pelo hardware de controle de interrupção mas diretamente do programaprincipal a cada ciclo do loop. O rapido retardo é então devolvido a presença da subrotina Delay dentro do loopprincipal.

Analisaremos agóra o codigo INTRB.ASM.

Partindo da diretiva ORG 00H que, como vimos serve para posicionar o nosso programa a partir da posição de reset, ouseja da locação 0.

Notamos subtamente que a primeira instrução que o PIC encontra é um desvio incondicionado para o label Start:

ORG 00H goto Start

seguido de uma nova diretiva:

ORG 04H

e então do codigo da subrotina de controle da interupção:

bsf PORTB,LED2

movlw 3 movwf nTick

Lição 5 Passo 2

http://www.tanzilli.com/pbe/brasiliano/less5/passo2.htm (1 of 2) [27/5/2003 12:57:47]

Page 53: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

bcf INTCON,RBIF

retfie

Como haviamos dito na lição anterior, a interrupt Handler alocar necessariamente a partir do endereço 04H, para evitarque seja executada logo após o reset devemos pula-la com uma intrução de salto incondicional.

O codigo da interrupt handler, neste casso, é muito simples e se limita a acender o LED D2, que inseri no registroexistente nTick o numero de lampejos até chegar a LED D2, devera apagar-se e zerar o flag RBIF para permitir aocircuito a geração de nova interrupção.

A instrução RETFIE permite ao PIC retornar a executar o programa do ponto que foi interrompido pela interrupão.

Mas porque é gerado uma interrupção quando precionamos uma tecla qualquer ?

Pois a primeira intrução que o PIC executa após o reset é a seguinte:

movlw 10001000B movwf INTCON

onde na pratica foi colocado a um o bit GIE(bit 7) que é a abilitação global das interrupções e onde o bit RBIF (bit 3)que abilita, particularmente, a interrupção sobre troca de estado da linha RB4-7.

Na pratica, avendo conctado as cheves SW1,SW2, SW3 e SW4 sobre a linha de I/O RB4, RB5, RB6 e RB7, com umprecionar de qualquer uma das teclas ha uma traca de estado que gera uma interrupção

No llop principal, alem da operação de acender e apagar do LED 1, sera decrementado o contador nTich até chegar azero. Em correspondência com este sera apagado o LED 2.

 

Lição 5 Passo 2

http://www.tanzilli.com/pbe/brasiliano/less5/passo2.htm (2 of 2) [27/5/2003 12:57:47]

Page 54: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 5 Passo 3/3

Exemplo prático de controle de mais interrupções

Vejamos agóra como controlar mais interrupções contemporaneamente.

Utilizando sempre como base o codigo anterior INTRB.ASM poderemos controlar até mesmo uma interupção sobre afina contagem do registro TMR0. Ou seja façamos lampejar o LED D3 em correspondencia com a contagem de TMR0.

O código a se utilizar é DBLINT.ASM.

Compile e descarregue o programa DBLINT.ASM na placa PicTech e vermos que alem do LED D1 que lampeja com afrequencia anterior, e o LED D3 com uma frequencia mais elevada.

Precionado-se uma tecla qualquer, obtemos a costumeira acenção por tres ciclos do LED D2. O efeito final que obtemosé a execução de tres tarefas a uma velociade tal que se assemelha com uma execução paralela.

Analizando agóra o codigo DBLINT.ASM.

Ao modificar o anterior observe a interrupt handler no inicio do qual esta efetuado um controlle sobre qual evento haviagerado a interrupção. Com a instrução:

btfsc INTCON,T0IF

goto IntT0IF

btfsc INTCON,RBIF

goto IntRBIF

sera controlado o flag T0IF e RBIF para ver respectivamente se o evento que provocou a interrupção provem doregistro TMR0 ou da porta RB4-RB7. E seguida sera posta em execução a relativa subrotina de controle a partir dolabel intT0IF e intRBIF.

Antes de devolver o controle ao programa principal devemos zerar o flag T0IF e RBIF para assegurar que o proximoevento possa gerar interrupção.

Lição 5 Passo 3

http://www.tanzilli.com/pbe/brasiliano/less5/passo3.htm [27/5/2003 12:57:48]

Page 55: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 6 Introdução

O Power Down Mode e o Watch Dog Timer

Ao termino di desta lição saiba: Como colocar o PICmicro em Power Down Mode e como desperta-lo●

Como funciona o Watch Dog Timer●

Conteudo da lição 6Funcionamento do Power Down Mode1.

Funcionamento do Watch dog timer2.

 

Lição 6

http://www.tanzilli.com/pbe/brasiliano/less6/intro.htm [27/5/2003 12:57:49]

Page 56: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 6 Passo 1/2

Funcionamento do Power Down Mode

O Power Down Mode e Sleep Mode é um estado particular de funcionamento do PICmicro utilizado para reduzir oconsumo de corrente no memento em que o PICmicro não é utilizado e aguarda um evento externo.

Se pegar-mos como exemplo um controle remoto para TV veremos que na maior parte do tempo o PICmicro permaneceaguardando que alguem precione uma tecla. Apenas quando à precionamos o PICmicro efetua uma breve transmissão ese coloca de novo a espera de um novo precionar de tecla.

O tempo de utilização efetivo da CPU do PICmicro é então limitado a poucos milisegundos necessario para efetuar atransmissão ao passo que para outros não é preciso nenhuma elaboração particular.

Para evitar o consumo inutil frente a limitada energia da bateria é possivel desligar boa parte do circuito defuncionamento do PICmicro e reaviva-lo somente quando um evento externo ocorrer.

Vejamos como.

A instrução SLEEPA instrução SLEEP sera utilizada para colocar o PICmicro em Power Down Mode e reduzir consequentemente acorrente absorvida que passara de cerca dos 2mA(a 5 volts com clock de 4Mhz) para cerca dos 2uA, ou seja 1000 vezesmenos !

Para entrar em Power Down Mode basta inserir-mos esta instrução em um ponto qualquer do nosso programa:

SLEEP

Qualquer instrução presente depois de SLLEP não sera executada pelo PICmicro que terminara neste ponto suaexecução, desligará todos os circuitos internos, menos aqueles necessarios a manter o estado da linha de I/O (estadologico alto,baixo ou de alta impedancia) para informar a condição de "reaviva-lo" o qual veremos em seguida.

Para reduzir o consumo de corrente neste estado, não devemos fazer obviamente um circuito que conectado a linha deescrita do PIC consuma corrente exessiva. O melhor circuito que podemos projetar é aquele que absorverá o minimo decorrente na condição de Power Down. Um outro truque recomendado pela Microchip é conectar ao posivo(Vdd) ou aonegativo(vss) da alimentação todas a linhas em alta impedância não utilizadas, como a linha RA4/T0CKI (pin 3).

O "despertar" do PICmicroPara despertar o PICmicro do seu sono podemos utilizar diverssas técnicas:

Reset do PICmicro colocando em 0 o pino MCLR (pino 4)1. Timeout do timer do Watchdog (se abilitado)2. Verificação de uma situação de interrupção (interrupção do pino RB0/INT, troca de estado sobre a porta B,termino da operação de escrita na EEPROM)

3.

No caso 1 e 2 o PICmicro sera resetado e a execução começará da posição 0.

No caso 3 o PICmicro se comporta como no atendimento de uma interrupção irá para a primeira interrup handler e entãoretornará para execução após a instrução SLLEP. Para que o PICmicro possa retornar de uma interrrupção devemosabilitar o flag do registro INTCON.

Exemplo do Power Down mode

Lição 6 Passo 1

http://www.tanzilli.com/pbe/brasiliano/less6/passo1.htm (1 of 2) [27/5/2003 12:57:50]

Page 57: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Veremos agora um simples exemplo de utilização do Power Down Mode e da modalidade de "despertar" do PICmicro.O modo utilizado sera a interrupção sobre o fronte de descida aplicado ao pino RB0/INT utilizando-se uma chave depressão. O codigo utilizado é o PDM.ASM.

O esquema para reliza-lo esta disponivel no arquivo exemplo4.pdf (formato Acrobat Reader 10Kb).

Na prática o LED D1 conectado a linha RB2 lampejará para indicar a execussão do programa em andamento.Prescionando-se a tecla SW2 o programa executrá a instrução :

  SLEEP

colocando o PICmicro em Power Down Mode. O LED D1 se manterá aceso até o momento em que prescionarmosSW2.

Para fazer a saida do Power Down Mode do PICmicro, é só apertar SW1 para gerar uma interrupção e retornar paraexecução do programa.

 

Lição 6 Passo 1

http://www.tanzilli.com/pbe/brasiliano/less6/passo1.htm (2 of 2) [27/5/2003 12:57:50]

Page 58: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Lição 6 Passo 2/2

O watch dog timer (WDT)

Nesta lição analizaremos o funcionamento do Watch Dog Timer (que traduzindo em Português significa Cão deGuarda) e sua finalidade é a de melhorar o funcionamento do nosso circuito baseado no PICmicro.

O Wtch Dog Timer é na prática um oscilador interno do PICmicro, mas completamente independente do resto docircuito, cuja finalidade é informar eventuais bloqueios da CPU do micro e resetar o PICmicro para poder retornar aexecução normal do ProgramaI.

Para poder informar um eventual bloqueio da CPU durante a execução do programa principal, sera colocada dentrodeste, uma instrução especial, ou seja:

CLRWDT (CLeaR Watch Dog Timer)

a qual zerara em intervalos regulares o Watch Dog Timer e assim não permitindo o mesmo, terminar sua contagem. Se aCPU não executa esta intrução antes de terminar a contagem sera entendido como um bloqueio de programa por motivoqualquer, e sera efetuado o Reset da CPU.

O periodo minimo para que a CPU seja resetada é de cerca de 18ms (isso dependera da temperatura e da tensão dealimentação). Porem é possivel progrmar o PRESCALER do Watch Dog Timer para obter um tempo de retardo maiorcom cerca de 2 a 3 segundos.

Para abilitar o Watch Dog Timer devemos abilitar na fase de programação o flag WDTE do byte de configuração. Omeio de ativação deste flag depende do programador que esteja sendo usado. No caso do YAPP! verssão 2.5 é possivelabilitar o Watch Dog Timer com o comando:

[2] - Watch Dog Timer

Ajuste do PRESCALER ao WDTAgindo sobre o bit PSA do registro OPTION_REG é possivel ajustar o prescaler do Watch Dog Timer para obtermostempo de retardo maiores. O bit PSA sera setado em um com a instrução:

BSF OPTION_REG,PSA

Caso contrario o prescaler estara ligado ao TIMER 0. Obviamente ajustando o prescaler ao WTD não sera possivelajusta-lo completamente para TIMER 0 e viceversa.

Intervindo sobre o valor do bit PS0, PS1 e PS2 do mesmo registro OPTION_REG podemos obter diverssos intervalosde retardo. A setagem correta deverá ser feita tendo em conta o maximo retardo que podemos obter dentro do nossoprograma entre a execução de duas instruções CLRWD sucessivas.

Na tabela seguinte esta representada a correspondência entre os valores destes bit's e os intervalos que obteremos.

PS2 PS1 PS0 Divisor Periodo de retardo do WDT

0 0 0 1 18ms

0 0 1 2 36ms

0 1 0 4 72ms

0 1 1 8 144ms

1 0 0 16 288ms

1 0 1 32 576ms

1 1 0 64 1.152s

Lição 6 Passo 2

http://www.tanzilli.com/pbe/brasiliano/less6/passo2.htm (1 of 2) [27/5/2003 12:57:51]

Page 59: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

1 1 1 128 2.304s

Exemplo prático de uso do Watch Dog TimerVejamos agóra, como sempre, um exemplo prático de uso do Watch Dog Timer. Usaremos o mesmo esquema usado noexemplo anterior e visto no arquivo exemplo4.pdf (formato Acrobat Reader 10K), o codigo esta representado no arquivoWDT.ASM.

Na prática este exemplo não diferencia-se muito do exemplo usado pelo Power Down Mode.

Na prática apenas o programa entrara em execussão e veremos o LED 1 lampejar. Durante o lampejo sera executadacontinuamente a instrução CLRWD para evitar que a CPU possa ser resetada( para tal propósito não se esqueça deprogramar o PICmicro com a opção WDTE abilitada).

Só quando prescionamos a tecla SW2 a CPU entra em um loop infinito(StopLoop) sem executar o CLRWD.

Transcorridos cerca de 2 ou 3 segundos, o Watch Dog Timer efetua o reset da CPU e o led começa a lampejarnovamente

Devemos agóra reprogramar o PIC16F84 com o mesmo programador. Note-se que prescionando a tecla SW2 o lampejoé bloaqueado e não se desbloqueia mais.

Maiores informações sobre o funcionamento do Watch Dog Timer podem ser extraidos do datasheet Microchip doPIC16F84(documento DS30430C na pagina 50)

 

Lição 6 Passo 2

http://www.tanzilli.com/pbe/brasiliano/less6/passo2.htm (2 of 2) [27/5/2003 12:57:51]

Page 60: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

A A

B B

C C

D D

8

8

7

7

6

6

5

5

4

4

3

3

2

2

1

1

VER: OF:PAGES:DATE:

ENGINEER:NOTE:

PROJECT:

2 NOV 1998

PIC BY EXAMPLE

1 11.0

EXAMPLE N.4SERGIO TANZILLI

WWW.PICPOINT.COM

GND GND

C3

22PF

C2

22PFX1

4MH

Z

+5

6RB0 7RB1 8RB2 9RB3 10RB4 11RB5 12RB6 13RB7

17RA0 18RA1 1RA2 2RA3 3RTCC/RA44 MCLR

16 OSC1/CLKIN

15 OSC2/CLKOUT

5 VSS

14 VDD

U1

PIC16F84

1

IN 2GND

3OUT

U27805

C6

100KP

F

C5

100KP

F

C7

47UF

C4

100UF

GND

+5+12

+12VCC

GND

123456

J1

DIN_6

C1 100K

PF

R1

10K

GND

R2470CA

D1

LED

12SW1

12SW2

GND

+5

R3

R4

YA

PP

!

2 X 10K

Page 61: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

;**************************************************; Pic by example; WDT.ASM; Watch Dog Timer example;; (c) 2001, Sergio Tanzilli ; http://www.tanzilli.com;**************************************************

PROCESSOR 16F84 RADIX DEC INCLUDE "P16F84.INC"

;Setup of chip flags

;Enable watch dog timer ;Enable power up timer ;XT oscillator ;Disable code protect

__CONFIG 3FF5H

SWITCH1 EQU 0SWITCH2 EQU 1LED1 EQU 2

ORG 0CH

;16 bit counter used in the delay subroutine

Count RES 2

;Reset Vector ;Start point at CPU reset

ORG 00H

;Jump to main body of program.

goto Start

;********************************************************************** ; Interrupt vector ; Start point for every interrupt handler ;**********************************************************************

ORG 04H

;********************************************************************** ; Interrupt handler ;**********************************************************************

bcf INTCON,INTF ;Reset INTF flag retfie ;Return to the main body

;********************************************************************** ; Main body ;**********************************************************************Start:

bsf STATUS,RP0 ;Swap to data bank 1

http://www.tanzilli.com/pbe/examples/wdt.asm

http://www.tanzilli.com/pbe/examples/wdt.asm (1 of 3) [27/5/2003 12:57:53]

Page 62: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

;I/O lines definition on port A (0=output, 1=input)

movlw 00011111B ;Definition of port a movwf TRISA & 0x7F

;I/O lines definition on port B (0=output, 1=input)

bsf TRISB & 0x7F,SWITCH1 ;Switch 1 bsf TRISB & 0x7F,SWITCH2 ;Switch 2 bcf TRISB & 0x7F,LED1 ;Led 1

;Set to 0 the INTEDG bit on OPTION register ;to have an interrupt on the falling edge of RB0/INT

bcf OPTION_REG & 0x7F,INTEDG

;Assign the PRESCALER to Watch dog timer

bsf OPTION_REG & 0x7F,PSA

;Set the PRESCALER to 1:128

bsf OPTION_REG & 0x7F,PS0 bsf OPTION_REG & 0x7F,PS1 bsf OPTION_REG & 0x7F,PS2

bcf STATUS,RP0 ;Swap to data bank 0

bsf INTCON,GIE ;Enables interrupts bsf INTCON,INTE ;Enables RB0/INT interrupt

bcf PORTB,LED1 ;Turn off LED1

;********************************************************************** ; Main loop ;**********************************************************************

MainLoop

btfss PORTB,SWITCH2 ;If switch2 is down enter inStopLoop goto StopLoop ;Stops CPU

clrwdt ;Clear wtahc dog timer

call Delay ;Software delay

;If LED1 in on then turn it off and viceversa

btfss PORTB,LED1 ;Led on ? goto TurnOnLed1 ;No, turn it on goto TurnOffLed1 ;Yes, turn it off

;Turn LED1 on

TurnOnLed1 bsf PORTB,LED1 goto MainLoop

;Turn LED1 off

http://www.tanzilli.com/pbe/examples/wdt.asm

http://www.tanzilli.com/pbe/examples/wdt.asm (2 of 3) [27/5/2003 12:57:53]

Page 63: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

TurnOffLed1 bcf PORTB,LED1 goto MainLoop

;********************************************************************** ; Software delay ;**********************************************************************

Delay clrf Count clrf Count+1

DelayLoop

decfsz Count,1 goto DelayLoop

decfsz Count+1,1 goto DelayLoop

return

END

http://www.tanzilli.com/pbe/examples/wdt.asm

http://www.tanzilli.com/pbe/examples/wdt.asm (3 of 3) [27/5/2003 12:57:53]

Page 64: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

;**************************************************; Pic by example;; PDM.ASM; Power Down Mode example;; (c) 2001, Sergio Tanzilli ; http://www.tanzilli.com;**************************************************

PROCESSOR 16F84 RADIX DEC INCLUDE "P16F84.INC"

;Set chip configuration

;Disable watch dog timer ;Enable power up timer ;XT oscillator ;Disable code protect

__CONFIG 3FF1H

SWITCH1 EQU 0SWITCH2 EQU 1LED1 EQU 2

ORG 0CH

;16 bit counter used in the delay subroutine

Count RES 2

;Reset Vector ;Start point at CPU reset

ORG 00H

;Jump to main body of program.

goto Start

;********************************************************************** ; Interrupt vector ; Start point for every interrupt handler ;**********************************************************************

ORG 04H

;********************************************************************** ; Interrupt handler ;**********************************************************************

bcf INTCON,INTF ;Reset INTF flag retfie ;Return to the main body

;********************************************************************** ; Main body ;**********************************************************************Start:

http://www.tanzilli.com/pbe/examples/pdm.asm

http://www.tanzilli.com/pbe/examples/pdm.asm (1 of 3) [27/5/2003 12:57:53]

Page 65: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

bsf STATUS,RP0 ;Swap to data bank 1

;I/O lines definition on port A (0=output, 1=input)

movlw 00011111B ;Definition of port a movwf TRISA & 0x7F

;I/O lines definition on port B (0=output, 1=input)

bsf TRISB & 0x7F,SWITCH1 ;Switch 1 bsf TRISB & 0x7F,SWITCH2 ;Switch 2 bcf TRISB & 0x7F,LED1 ;Led 1

;Set to 0 the INTEDG bit on OPTION register ;to have an interrupt on the falling edge of RB0/INT

bcf OPTION_REG & 0x7F,INTEDG bcf STATUS,RP0 ;Swap to data bank 0

bsf INTCON,GIE ;Enables interrupts bsf INTCON,INTE ;Enables RB0/INT interrupt

bcf PORTB,LED1 ;Turn off LED1

;********************************************************************** ; Main loop ;**********************************************************************

MainLoop

btfss PORTB,SWITCH2 ;If switch2 is down enter in sleep ;Power Down Mode

call Delay ;Software delay

;If LED1 in on then turn it off and viceversa

btfss PORTB,LED1 ;Led on ? goto TurnOnLed1 ;No, turn it on goto TurnOffLed1 ;Yes, turn it off

;Turn LED1 on

TurnOnLed1 bsf PORTB,LED1 goto MainLoop

;Turn LED1 off

TurnOffLed1 bcf PORTB,LED1 goto MainLoop

;********************************************************************** ; Software delay ;**********************************************************************

Delay clrf Count clrf Count+1

http://www.tanzilli.com/pbe/examples/pdm.asm

http://www.tanzilli.com/pbe/examples/pdm.asm (2 of 3) [27/5/2003 12:57:53]

Page 66: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

DelayLoop

decfsz Count,1 goto DelayLoop

decfsz Count+1,1 goto DelayLoop

return

END

http://www.tanzilli.com/pbe/examples/pdm.asm

http://www.tanzilli.com/pbe/examples/pdm.asm (3 of 3) [27/5/2003 12:57:53]

Page 67: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

;**************************************************; Pic by example; INTRB.ASM;; (c) 2001, Sergio Tanzilli ; http://www.tanzilli.com;**************************************************

PROCESSOR 16F84 RADIX DEC INCLUDE "P16F84.INC"

;Setup of PIC configuration flags

;XT oscillator ;Disable watch dog timer ;Enable power up timer ;Disable code protect

__CONFIG 3FF1H

LED1 EQU 0LED2 EQU 1LED3 EQU 2LED4 EQU 3

ORG 0CH

Count RES 2nTick RES 1 ;Registro utilizzato per contare il numero di ;lampeggi del LED 1

;Reset Vector ;Punto di inizio del programma al reset della CPU

ORG 00H

;Salta al corpo principale del programma. Questo jump Š necessario ;per evitare tutta la parte di codice per la gestione degli ;interrupt.

goto Start

;Interrupt vector ;Punto di inizio per tutte le subroutine di gestione degli interrupt

ORG 04H

;********************************************************************** ; Interrupt handler ;**********************************************************************

;Accende il led 2 per segnalare che c'e' stato un interrupt bsf PORTB,LED2

;Inizializza il contatore di lampeggi del LED1 movlw 3 movwf nTick

;Azzera nuovamente il flag RBIF per consentire all'interrupt di ;ripetersi

http://www.tanzilli.com/pbe/examples/intrb.asm

http://www.tanzilli.com/pbe/examples/intrb.asm (1 of 3) [27/5/2003 12:57:55]

Page 68: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

bcf INTCON,RBIF

;Ritorna al programma principale retfie

;********************************************************************** ; Programma principale ;**********************************************************************Start: ;Commuta sul secondo banco dei registri per accedere ai registri TRISA e TRISB

bsf STATUS,RP0

;Definizione delle linee di I/O (0=Uscita, 1=Ingresso) ;Definizione della porta A

movlw 00011111B movwf TRISA & 7FH

;Definizione della porta B ;Le linee da RB0 a RB3 vengono programmate in uscita per essere collegate aiquattro led ;Le linee da RB4 a RB7 vengono programmate in ingresso per essere collegate aiquattro pulsanti

movlw 11110000B movwf TRISB & 7FH

;Commuta sul primo banco dei registri

bcf STATUS,RP0

;Spegne tutti i led collegati sulla porta B bcf PORTB,LED1 bcf PORTB,LED2 bcf PORTB,LED3 bcf PORTB,LED4

;Abilita l'interrupt sul cambiamento di stato delle linee RB4,5,6,7 movlw 10001000B movwf INTCON

;********************************************************************** ; Loop principale ;**********************************************************************

MainLoop

call Delay ;Ritardo software

btfss PORTB,LED1 ;Led acceso ? goto TurnOnLed1 ;No, lo accende goto TurnOffLed1 ;Si, lo spegne

;Accensione led e decremento del contatore di lampeggi

TurnOnLed1 bsf PORTB,LED1

;Controlla se LED 2 di segnalazione dell'interrupt e' gia acceso. ;Se e' acceso decrementa il contatore nTick ad ogni lampeggio di

http://www.tanzilli.com/pbe/examples/intrb.asm

http://www.tanzilli.com/pbe/examples/intrb.asm (2 of 3) [27/5/2003 12:57:55]

Page 69: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

;LED1. Quando nTick vale 0 spegne LED 2

btfss PORTB,LED2 ;LED2 acceso ? goto MainLoop ;No, continua a lampeggiare

decf nTick,1 ;Si, decrementa nTick btfss STATUS,Z ;nTick = 0 ? goto MainLoop ;No, continua a lampeggiare

bcf PORTB,LED2 ;Si, spegne LED2

goto MainLoop ;Continua a lampeggiare

;Spegnimento led

TurnOffLed1

bcf PORTB,LED1 ;Spegne LED 1 goto MainLoop ;Continua a lampeggiare

;********************************************************************** ; Subroutine ;**********************************************************************

;Subroutine di ritardo software

Delay clrf Count clrf Count+1

DelayLoop

decfsz Count,1 goto DelayLoop

decfsz Count+1,1 goto DelayLoop

return

END

http://www.tanzilli.com/pbe/examples/intrb.asm

http://www.tanzilli.com/pbe/examples/intrb.asm (3 of 3) [27/5/2003 12:57:55]

Page 70: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

;**************************************************; Pic by example; DBLINT.ASM;; (c) 2001, Sergio Tanzilli ; http://www.tanzilli.com;**************************************************

PROCESSOR 16F84 RADIX DEC INCLUDE "P16F84.INC" ERRORLEVEL -302

;Setup of PIC configuration flags

;XT oscillator ;Disable watch dog timer ;Enable power up timer ;Disable code protect

__CONFIG 3FF1H

LED1 EQU 0LED2 EQU 1LED3 EQU 2LED4 EQU 3

ORG 0CH

Count RES 2nTick RES 1

;Reset Vector ;Starting point at CPU reset

ORG 00H

;Jump to the main body of program to avoid the interrupt handler ;code.

goto Start

;Interrupt vector ;Starting point at CPU interrupts

ORG 04H

;********************************************************************** ; Interrupt handler ;**********************************************************************

;Check the interrupt event

btfsc INTCON,T0IF goto IntT0IF btfsc INTCON,RBIF goto IntRBIF

;Reset the T0IF and RBIF flags to re-enable the interruptsEnd_ih bcf INTCON,T0IF

http://www.tanzilli.com/pbe/examples/dblint.asm

http://www.tanzilli.com/pbe/examples/dblint.asm (1 of 4) [27/5/2003 12:57:55]

Page 71: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

bcf INTCON,RBIF

;Go back to the main program retfie

;********************************************************************** ; TMR0 Interrupt handler ;**********************************************************************IntT0IF

;Turn on LED3 if it's off

btfsc PORTB,LED3 goto LED3_off

bsf PORTB,LED3 goto End_ihLED3_off bcf PORTB,LED3 goto End_ih

;********************************************************************** ; RB4-RB7 interrupt handler ;**********************************************************************

IntRBIF ;Turn on LED 2

bsf PORTB,LED2

;Starts the LED1 blink counter movlw 3 movwf nTick

goto End_ih

;********************************************************************** ; Main body ;**********************************************************************Start: ;Commuta sul secondo banco dei registri per accedere ai registri TRISA e TRISB

bsf STATUS,RP0

;Definizione delle linee di I/O (0=Uscita, 1=Ingresso) ;Definizione della porta A

movlw 00011111B movwf TRISA & 7FH

;Definizione della porta B ;Le linee da RB0 a RB3 vengono programmate in uscita per essere collegate aiquattro led ;Le linee da RB4 a RB7 vengono programmate in ingresso per essere collegate aiquattro pulsanti

movlw 11110000B movwf TRISB & 7FH

;Assegna il PRESCALER a TMR0 e lo configura a 1:256

http://www.tanzilli.com/pbe/examples/dblint.asm

http://www.tanzilli.com/pbe/examples/dblint.asm (2 of 4) [27/5/2003 12:57:55]

Page 72: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

movlw 00000111B movwf OPTION_REG & 7FH

;Commuta sul primo banco dei registri

bcf STATUS,RP0

;Spegne tutti i led collegati sulla porta B bcf PORTB,LED1 bcf PORTB,LED2 bcf PORTB,LED3 bcf PORTB,LED4

;Abilita l'interrupt sul TMR0 e sul cambiamento di stato delle linee RB4,5,6,7

movlw 10101000B movwf INTCON

;********************************************************************** ; Loop principale ;**********************************************************************

MainLoop

call Delay ;Ritardo software

btfss PORTB,LED1 ;Led acceso ? goto TurnOnLed1 ;No, lo accende goto TurnOffLed1 ;Si, lo spegne

;Accensione led e decremento del contatore di lampeggi

TurnOnLed1 bsf PORTB,LED1

;Controlla se LED 2 di segnalazione dell'interrupt e' gia acceso. ;Se e' acceso decrementa il contatore nTick ad ogni lampeggio di ;LED1. Quando nTick vale 0 spegne LED 2

btfss PORTB,LED2 ;LED2 acceso ? goto MainLoop ;No, continua a lampeggiare

decf nTick,1 ;Si, decrementa nTick btfss STATUS,Z ;nTick = 0 ? goto MainLoop ;No, continua a lampeggiare

bcf PORTB,LED2 ;Si, spegne LED2

goto MainLoop ;Continua a lampeggiare

;Spegnimento led

TurnOffLed1

bcf PORTB,LED1 ;Spegne LED 1 goto MainLoop ;Continua a lampeggiare

;**********************************************************************

http://www.tanzilli.com/pbe/examples/dblint.asm

http://www.tanzilli.com/pbe/examples/dblint.asm (3 of 4) [27/5/2003 12:57:55]

Page 73: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

; Subroutine ;**********************************************************************

;Subroutine di ritardo software

Delay clrf Count clrf Count+1

DelayLoop

decfsz Count,1 goto DelayLoop

decfsz Count+1,1 goto DelayLoop

return

END

http://www.tanzilli.com/pbe/examples/dblint.asm

http://www.tanzilli.com/pbe/examples/dblint.asm (4 of 4) [27/5/2003 12:57:55]

Page 74: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

;**************************************************; Pic by example; LED.ASM;; (c) 2001, Sergio Tanzilli ; http://www.tanzilli.com;**************************************************

PROCESSOR 16F84 RADIX DEC INCLUDE "P16F84.INC" ERRORLEVEL -302

;Setup of PIC configuration flags

;XT oscillator ;Disable watch dog timer ;Enable power up timer ;Disable code protect

__CONFIG 0x3FF1

LED EQU 0

ORG 0x0C

Count RES 2

;Reset Vector ;Start point at CPU reset

ORG 0x00

bsf STATUS,RP0

movlw B'00011111' movwf TRISA

movlw B'11111110' movwf TRISB

bcf STATUS,RP0

bsf PORTB,LED

MainLoop

call Delay

btfsc PORTB,LED goto SetToZero

bsf PORTB,LED goto MainLoop

SetToZero

bcf PORTB,LED goto MainLoop

http://www.tanzilli.com/pbe/examples/led.asm

http://www.tanzilli.com/pbe/examples/led.asm (1 of 2) [27/5/2003 12:57:56]

Page 75: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

;Subroutines

;Software delay

Delay clrf Count clrf Count+1

DelayLoop

decfsz Count,1 goto DelayLoop

decfsz Count+1,1 goto DelayLoop

return

END

http://www.tanzilli.com/pbe/examples/led.asm

http://www.tanzilli.com/pbe/examples/led.asm (2 of 2) [27/5/2003 12:57:56]

Page 76: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

A A

B B

C C

D D

8

8

7

7

6

6

5

5

4

4

3

3

2

2

1

1

VER: OF:PAGES:DATE:ENGINEER:NOTE:PROJECT:

2 NOV 1998

PIC BY EXAMPLE

1 11.0

EXAMPLE N.3SERGIO TANZILLI

WWW.PICPOINT.COM

GND GND

C3

22PF

C2

22PFX1

4MH

Z

+5

6RB0 7RB1 8RB2 9RB3 10RB4 11RB5 12RB6 13RB7

17RA0 18RA1 1RA2 2RA3 3RTCC/RA44 MCLR16 OSC1/CLKIN

15 OSC2/CLKOUT5 VSS

14 VDD

U1

PIC16C84

1

IN 2GND

3OUT

U27805

C6

100K

PFC5

100K

PF C7

47U

F

C4

100U

F

GND

+5+12

+12VCC

GND

123456

J1

DIN_6

YA

PP

!

C1

100K

PF

R1

10K

GND

CA

D4

LED

R5470

CA

D3

LED

R4470

CA

D2

LED

R3470

R2470CA

D1

LED

12SW1

12SW2

12SW3

12SW4

GND

R6

R7

R8

R9

4 X 10K

+5

Page 77: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

;**************************************************; Pic by example; NOINTRB.ASM;; (c) 2001, Sergio Tanzilli ; http://www.tanzilli.com;**************************************************

PROCESSOR 16F84 RADIX DEC INCLUDE "P16F84.INC"

;Setup of PIC configuration flags

;XT oscillator ;Disable watch dog timer ;Enable power up timer ;Disable code protect

__CONFIG 3FF1H

LED1 EQU 0LED2 EQU 1LED3 EQU 2LED4 EQU 3

ORG 0CH

Count RES 2nTick RES 1 ;Registro utilizzato per contare il numero di ;lampeggi del LED 1

;Reset Vector ;Punto di inizio del programma al reset della CPU

ORG 00H

;********************************************************************** ; Programma principale ;**********************************************************************Start: ;Commuta sul secondo banco dei registri per accedere ai registri TRISA e TRISB

bsf STATUS,RP0

;Definizione delle linee di I/O (0=Uscita, 1=Ingresso) ;Definizione della porta A

movlw 00011111B movwf TRISA & 7FH

;Definizione della porta B ;Le linee da RB0 a RB3 vengono programmate in uscita per essere collegate aiquattro led ;Le linee da RB4 a RB7 vengono programmate in ingresso per essere collegate aiquattro pulsanti

movlw 11110000B movwf TRISB & 7FH

;Commuta sul primo banco dei registri

http://www.tanzilli.com/pbe/examples/nointrb.asm

http://www.tanzilli.com/pbe/examples/nointrb.asm (1 of 3) [27/5/2003 12:57:58]

Page 78: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

bcf STATUS,RP0

;Spegne tutti i led collegati sulla porta B bcf PORTB,LED1 bcf PORTB,LED2 bcf PORTB,LED3 bcf PORTB,LED4

;********************************************************************** ; Loop principale ;**********************************************************************

MainLoop

KeyCheck btfsc PORTB,LED2 goto _KeyCheck

comf PORTB,W andlw 0F0H btfsc STATUS,Z goto _KeyCheck

bsf PORTB,LED2

movlw 3 movwf nTick

_KeyCheck

call Delay ;Ritardo software

btfss PORTB,LED1 ;Led acceso ? goto TurnOnLed1 ;No, lo accende goto TurnOffLed1 ;Si, lo spegne

;Accensione led e decremento del contatore di lampeggi

TurnOnLed1 bsf PORTB,LED1

;Controlla se LED 2 di segnalazione dell'interrupt e' gia acceso. ;Se e' acceso decrementa il contatore nTick ad ogni lampeggio di ;LED1. Quando nTick vale 0 spegne LED 2

btfss PORTB,LED2 ;LED2 acceso ? goto MainLoop ;No, continua a lampeggiare

decf nTick,1 ;Si, decrementa nTick btfss STATUS,Z ;nTick = 0 ? goto MainLoop ;No, continua a lampeggiare

bcf PORTB,LED2 ;Si, spegne LED2

goto MainLoop ;Continua a lampeggiare

;Spegnimento led

TurnOffLed1

http://www.tanzilli.com/pbe/examples/nointrb.asm

http://www.tanzilli.com/pbe/examples/nointrb.asm (2 of 3) [27/5/2003 12:57:58]

Page 79: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

bcf PORTB,LED1 ;Spegne LED 1 goto MainLoop ;Continua a lampeggiare

;********************************************************************** ; Subroutine ;**********************************************************************

;Subroutine di ritardo software

Delay clrf Count clrf Count+1

DelayLoop

decfsz Count,1 goto DelayLoop

decfsz Count+1,1 goto DelayLoop

return

END

http://www.tanzilli.com/pbe/examples/nointrb.asm

http://www.tanzilli.com/pbe/examples/nointrb.asm (3 of 3) [27/5/2003 12:57:58]

Page 80: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

;**************************************************; Pic by example; SEQTMR0.ASM; Luci sequenziali con temporizzazione via TIMER 0;; (c) 2001, Sergio Tanzilli ; http://www.tanzilli.com;**************************************************

PROCESSOR 16F84 RADIX DEC INCLUDE "P16F84.INC"

;Setup of PIC configuration flags

;XT oscillator ;Disable watch dog timer ;Enable power up timer ;Disable code protect

__CONFIG 3FF1H

ORG 0CH

Count RES 1Shift RES 1

;Reset Vector - Punto di inizio del programma al reset della CPU

ORG 00H

;Commuta sul secondo banco dei registri

bsf STATUS,RP0

;Definizione delle linee di I/O (0=Uscita, 1=Ingresso)

movlw 00011111B movwf TRISA & 7FH

movlw 11110000B movwf TRISB & 7FH

;Assegna il PRESCALER a TMR0 e lo configura a 1:32 ;Vedi subroutine Delay per maggiori chiarimenti

movlw 00000100B movwf OPTION_REG & 0x7F

;Commuta sul primo banco dei registri

bcf STATUS,RP0

;Il registro Shift viene utilizzato per rappresentare internamente ;lo stato delle linee di uscita della porta B dove sono collegati i led. ;Il bit 0 del registro Shift viene settato ad uno per iniziare il ciclo ;dal primo led.

movlw 00000001B movwf Shift

http://www.tanzilli.com/pbe/examples/seqtmr0.asm

http://www.tanzilli.com/pbe/examples/seqtmr0.asm (1 of 3) [27/5/2003 12:57:59]

Page 81: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

;Loop di scorrimentoMainLoop

;Invia sulla porta B il registro Shift cosi che ogni bit settato ad uno in Shift ;fara' accendere il led relativo

movf Shift,W movwf PORTB

;Per ruotare le luci usa l'istruzione rlf che effettua lo shift a sinistra deibit ;contenuti nel registro ed inserisce nel bit 0 lo stato del bit di carry. Per ;questo motivo prima di effettuare l'istruzione rlf azzera il bit di carry conl'istruzione ;bcf STATUS,C.

bcf STATUS,C rlf Shift,F

;Quando lo shift raggiunge il bit 4 vengono invertiti i primi quattro bit delregistro ;Shift con i secondi quattro bit in modo da ricominciare il ciclo dal bit 0. ; ; Ecco cosa succede ai bit del registro Shift durante l'esecuzione di questoloop: ; ; 00000001 <--- Valore iniziale (primo led acceso) ; 00000010 rlf ; 00000100 rlf ; 00001000 rlf ; 00010000 rlf a questo punto viene eseguita l'istruzione swapf ottenendo:

; 00000001 ...e cosi' via

btfsc Shift,4 swapf Shift,F

;Inserisce un ritardo tra una accensione e l'altra

call Delay

;Torna ad eseguire nuovamente il loop

goto MainLoop

;************** ; Subroutines ;**************

; Inserimento di un ritardo pari ad un secondo ; utilizzando il registro TMR0 ; ; Il ritardo viene ottenuto dalla frequenza in uscita al PRESCALER pari a: ; 4Mhz / 4 / 32 = 31.250 Hz

; ... divisa per 250 dal TMR0 32.250 / 250 = 125 Hz ; ... e per 125 dal contatore Count 125 / 125 = 1Hz

http://www.tanzilli.com/pbe/examples/seqtmr0.asm

http://www.tanzilli.com/pbe/examples/seqtmr0.asm (2 of 3) [27/5/2003 12:57:59]

Page 82: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Delay ; Inizializza TMR0 per ottenere 250 conteggi prima di arrivare a zero.

; Il registro TMR0 e' un registro ad 8 bit quindi se viene incrementato ; nuovamentre quando arriva a 255 ricomincia a contare da zero. ; Se lo si inizializza a 6 dovra' essere incrementato 256 - 6 = 250 volte ; prima passare per lo zero.

movlw 6 movwf TMR0

; Il registro Count viene inizializzato a 125 in quanto il suo scopo e' far ; uscire il loop

movlw 125 movwf Count

;Loop di conteggio

DelayLoop

;TMR0 vale 0 ?

movf TMR0,W btfss STATUS,Z goto DelayLoop ;No, aspetta...

movlw 6 ;Si, reimposta TMR0 e controlla se movwf TMR0 ;e' passato per 125 volte per lo zero

decfsz Count,1 goto DelayLoop

return

END

http://www.tanzilli.com/pbe/examples/seqtmr0.asm

http://www.tanzilli.com/pbe/examples/seqtmr0.asm (3 of 3) [27/5/2003 12:57:59]

Page 83: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

;**************************************************; Pic by example; INPUT.ASM;; (c) 2001, Sergio Tanzilli ; http://www.tanzilli.com;**************************************************

PROCESSOR 16F84 RADIX DEC INCLUDE "P16F84.INC"

;Setup of PIC configuration flags

;XT oscillator ;Disable watch dog timer ;Enable power up timer ;Disable code protect

__CONFIG 3FF1H

LED1 EQU 0LED2 EQU 1LED3 EQU 2LED4 EQU 3SW1 EQU 4SW2 EQU 5SW3 EQU 6SW4 EQU 7

ORG 0CH

;Reset Vector ;Punto di inizio del programma al reset della CPU

ORG 00H

;Commuta sul secondo banco dei registri per accedere ai registri TRISA e TRISB

bsf STATUS,RP0

;Definizione delle linee di I/O (0=Uscita, 1=Ingresso)

;Definizione della porta A

movlw 00011111B movwf TRISA & 7FH

;Definizione della porta B ;Le linee da RB0 a RB3 vengono programmate in uscita per essere collegate aiquattro led ;Le linee da RB4 a RB7 vengono programmate in ingresso per essere collegate aiquattro pulsanti

movlw 11110000B movwf TRISB & 7FH

;Commuta sul primo banco dei registri

bcf STATUS,RP0

http://www.tanzilli.com/pbe/examples/input.asm

http://www.tanzilli.com/pbe/examples/input.asm (1 of 2) [27/5/2003 12:57:59]

Page 84: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

MainLoop ;Spegne tutti i led clrf PORTB

;Se e' premuto il pulsante SW1 accende il LED1 btfss PORTB,SW1 bsf PORTB,LED1

;Se e' premuto il pulsante SW2 accende il LED2 btfss PORTB,SW2 bsf PORTB,LED2

;Se e' premuto il pulsante SW3 accende il LED3 btfss PORTB,SW3 bsf PORTB,LED3

;Se e' premuto il pulsante SW4 accende il LED4 btfss PORTB,SW4 bsf PORTB,LED4

goto MainLoop

END

http://www.tanzilli.com/pbe/examples/input.asm

http://www.tanzilli.com/pbe/examples/input.asm (2 of 2) [27/5/2003 12:57:59]

Page 85: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

MOVLW MOVe Literal to W

Dá a W um valor constante

Sintaxi:

movlw k

Operação equivalente:

W = k

Descrição:

Passa ao acumulador W um valor constante k.

Esemplo:

org 00H

start movlw 20 ...

Após ter executado este programa o acumulador W irá a 20.

Nota:

Esta instrução não influencia nenhum bit de status.

 

instrução MOVLW

http://www.tanzilli.com/pbe/brasiliano/istruzioni/movlw.htm [27/5/2003 12:57:59]

Page 86: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

MOVWF MOVe W to F

Move o conteudo do registro W para o registro F

Sintaxi:

movwf f

Operazção equivalente:

f = W

Descrição:

Esta instrução copia o conteudo do registro W no registro de paramnetro f.

Esemplo:

Caso queiramos escrever o valor 10H (esadecimale) no registro TMR0. A instrução a se executar sera aseguinte:

movlw 10H ;Escreve no registro W o valor 10Hmovwf 01H ;e o memoriza no registro TMR0

Para o registro utilizado pelo PIC para a função especifica, solidademente não sera inserido diretamente oendereço mas o relativo nome simbólico definido no arquivo P16F84.INC. O codigo torna-se então oseguinte:

movlw 10H ;Escreva no registro W o valor 10Hmovwf TMR0 ;e o memoriza no registro TMR0

Nota:

A execução do MOVWF não influencia nenhum bit de status.

 

instrução MOVWF

http://www.tanzilli.com/pbe/brasiliano/istruzioni/movwf.htm [27/5/2003 12:58:01]

Page 87: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

LIST; P16F84.INC Standard Header File, Version 2.00 Microchip Technology, Inc. NOLIST

; This header file defines configurations, registers, and other useful bits of; information for the PIC16F84 microcontroller. These names are taken to match ; the data sheets as closely as possible.

; Note that the processor must be selected before this file is ; included. The processor may be selected the following ways:

; 1. Command line switch:; C:\ MPASM MYFILE.ASM /PIC16F84; 2. LIST directive in the source file; LIST P=PIC16F84; 3. Processor Type entry in the MPASM full-screen interface

;==========================================================================;; Revision History;;==========================================================================

;Rev: Date: Reason:

;2.00 07/24/96 Renamed to reflect the name change to PIC16F84.;1.01 05/17/96 Corrected BADRAM map;1.00 10/31/95 Initial Release

;==========================================================================;; Verify Processor;;==========================================================================

IFNDEF __16F84 MESSG "Processor-header file mismatch. Verify selected processor." ENDIF

;==========================================================================;; Register Definitions;;==========================================================================

W EQU H'0000'F EQU H'0001'

;----- Register Files------------------------------------------------------

INDF EQU H'0000'TMR0 EQU H'0001'PCL EQU H'0002'STATUS EQU H'0003'FSR EQU H'0004'PORTA EQU H'0005'PORTB EQU H'0006'EEDATA EQU H'0008'EEADR EQU H'0009'PCLATH EQU H'000A'INTCON EQU H'000B'

http://www.tanzilli.com/pbe/examples/p16f84.inc

http://www.tanzilli.com/pbe/examples/p16f84.inc (1 of 3) [27/5/2003 12:58:02]

Page 88: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

OPTION_REG EQU H'0081'TRISA EQU H'0085'TRISB EQU H'0086'EECON1 EQU H'0088'EECON2 EQU H'0089'

;----- STATUS Bits --------------------------------------------------------

IRP EQU H'0007'RP1 EQU H'0006'RP0 EQU H'0005'NOT_TO EQU H'0004'NOT_PD EQU H'0003'Z EQU H'0002'DC EQU H'0001'C EQU H'0000'

;----- INTCON Bits --------------------------------------------------------

GIE EQU H'0007'EEIE EQU H'0006'T0IE EQU H'0005'INTE EQU H'0004'RBIE EQU H'0003'T0IF EQU H'0002'INTF EQU H'0001'RBIF EQU H'0000'

;----- OPTION Bits --------------------------------------------------------

NOT_RBPU EQU H'0007'INTEDG EQU H'0006'T0CS EQU H'0005'T0SE EQU H'0004'PSA EQU H'0003'PS2 EQU H'0002'PS1 EQU H'0001'PS0 EQU H'0000'

;----- EECON1 Bits --------------------------------------------------------

EEIF EQU H'0004'WRERR EQU H'0003'WREN EQU H'0002'WR EQU H'0001'RD EQU H'0000'

;==========================================================================;; RAM Definition;;==========================================================================

__MAXRAM H'CF' __BADRAM H'07', H'50'-H'7F', H'87'

;==========================================================================;; Configuration Bits;

http://www.tanzilli.com/pbe/examples/p16f84.inc

http://www.tanzilli.com/pbe/examples/p16f84.inc (2 of 3) [27/5/2003 12:58:02]

Page 89: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

;==========================================================================

_CP_ON EQU H'000F'_CP_OFF EQU H'3FFF'_PWRTE_ON EQU H'3FF7'_PWRTE_OFF EQU H'3FFF'_WDT_ON EQU H'3FFF'_WDT_OFF EQU H'3FFB'_LP_OSC EQU H'3FFC'_XT_OSC EQU H'3FFD'_HS_OSC EQU H'3FFE'_RC_OSC EQU H'3FFF'

LIST

http://www.tanzilli.com/pbe/examples/p16f84.inc

http://www.tanzilli.com/pbe/examples/p16f84.inc (3 of 3) [27/5/2003 12:58:02]

Page 90: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

BCF Bit Clear F

Azzera un bit nel registro F

Sintaxi:

bcf f,b

Operação equivalente:

f(b) = 0

Descrição:

Esta instrução zera o bit b do registro no endereço f .

Exemplo:

parm1 equ 0CH

org 00H movlw 11111111B ;Valore inicial movwf parm1

bcf parm1,0 ;D0=0

Ao termino do programa o registro parm1 sera 11111111B.

Nota:

Esta operação não influencia nenhum bit de status.

 

instrução BCF

http://www.tanzilli.com/pbe/brasiliano/istruzioni/bcf.htm [27/5/2003 12:58:03]

Page 91: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

CLRF CLeaR F register

Zera o registro F

Sintaxi:

clrf f

Operação equivalente:

f = 0

Descrição:

Esta instruçao zera o valor contido no registro enderçado do paramentro f.

Esemplo:

Uma ipotese, se quisermos zerar o registro TMR0 no qual o endereço é 01H exadecimal, a instrução a seexecutar será:

clrf 01H

Ou, se incluirmos no endereço do nosso codigo o arquivo P16F84.INC, poderemos utilizar o nomesimbolico do registro TMR0.

clrf TMR0

Após a execução desta instrução o bit Z do registro STATUS sera colocado em 1.

 

instrução CLRF

http://www.tanzilli.com/pbe/brasiliano/istruzioni/clrf.htm [27/5/2003 12:58:04]

Page 92: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

BTFSS Bit Test F, Skip if Set

Pula a proxima instrução se um bit no registro F for 1

Sintaxi:

btfss f,b

Operação equivalente:

f(b) = 1 ? Se é , pule uma instrução

Descrição:

Testa o bit b contido no registro do endereço f e pula a instução seguinte se este for 1.

Esemplo:

parm1 equ 0CH

org 00H movlw 11111111B ;Valor inicial movwf parm1loop btfss parm1,0 ;D0 = 1 ? Se, é goto loop ;Não, executa o loop

Este programa executa um loop infinito o mesmo programa não executará o loop se substituirmos ainstrução:

movlw 11111111B ;Valor inicial

con l'istruzione:

movlw 11111110B ;Valor inicial

Nota:

Esta instrução não influência nenhum bit de status.

 

instrução BTFSS

http://www.tanzilli.com/pbe/brasiliano/istruzioni/btfss.htm [27/5/2003 12:58:06]

Page 93: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

GOTO GO TO address

Desvia a execução do programa para o endeço especificado k

Sintaxi:

goto k

Descrição:

Determina o desvio do programa em execução para o endereço k. O parametro k pode ser especificadoutilizando-se diretamente um valor numerico do endereço ou então o relativo label.

Esemplo:

org 00H

loop goto loop

Este programa executa um cilclo (loop) infinito.

Nota:

Esta instrução não influencia nenhum bit de status.

 

instrução GOTO

http://www.tanzilli.com/pbe/brasiliano/istruzioni/goto.htm [27/5/2003 12:58:07]

Page 94: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

BSF Bit Set F

Coloca em um o bit no registro F

Sintaxi:

bsf f,b

Operação equivalente:

f(b) = 1

Descrição:

Esta instrução coloca em um o bit b do registro no endereço f.

Exemplo:

parm1 equ 0CH

org 00H movlw 00000000B ;Valore inicial movwf parm1

bsf parm1,0 ;D0=1

Ao terminar o programa o registro parm1 será 00000001B.

Nota:

Esta instrução não influencia nenhum bit de status.

 

instrução BSF

http://www.tanzilli.com/pbe/brasiliano/istruzioni/bsf.htm [27/5/2003 12:58:09]

Page 95: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Descricão dos pinos do PIC16F84

 

1 RA2É uma linha de I/O programavel em entrada ou saida da unidade.

Corresponde ao BIT 2 da PORTA A.

2 RA3É uma linha de I/O programavel em entrada ou saida da unidade.

Corresponde ao BIT 3 da PORTA A.

3 RA4 / RTCCÉ um pino multi funcão que pode ser programado como uma linha normal de I/O ou como linhade clock para entrada em sentido ao contador RTCC.

Se programada como linha de I/O corresponde ao BIT 4 da PORTA A ao contrario de outra linhade I/O, quando esta linha funciona como saida, trabalha em coletor aberto.

4 MCLR / VPPEm condicão normal de funcionamento desenvolve a a funcão de Master CLeaR ou seja Resetestara ativo a nivel 0. Pode ser conectado a um circuito de reset externo ou simplesmenteconectando-o ao positivo da alimentacão.

Quando o PICl PIC vier posto em Program Mode sera utilizado como entrada para a tensão deprogramacão Vpp.

5 VSSÉ o pino que vai conectado ao negativo da tensão de alimentacão.

6 RB0É uma linha de I/O programavel em entrada ou em saida.

Corrisponde ao BIT 0 da PORTA B e pode ser programada para gerar interrupcão.

7 RB1É uma linha de I/O programavel em entrada ou em saida.

Corresponde ao BIT 1 da PORTA B.

8 RB2É uma linha de I/O programavel em entrada ou em saida.

Corresponde ao BIT 2 da PORTA B.

Descrizione dei pin del PIC1F84

http://www.tanzilli.com/pbe/brasiliano/gloss/pin.htm (1 of 2) [27/5/2003 12:58:14]

Page 96: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

9 RB3 É uma linha de I/O programavel em entrada ou em saida.

Corresponde ao BIT 3 da PORTA B.

10 RB4 É uma linha de I/O programavel em entrada ou em saida.

Corresponde ao BIT 4 da PORTA B.

11 RB5 É uma linha de I/O programavel em entrada ou em saida.

Corresponde ao BIT 5 da PORTA B.

12 RB6 É uma linha de I/O programavel em entrada ou saida.

Corresponde ao BIT 6 da PORTA B.

13 RB7 É uma linha de I/O programavel em entrada ou saida.

Corresponde ao BIT 7 da PORTA B.

14 VDDÉ o terminal positivo de alimentacão do PIC.

em todas as tres versões disponiveis do PIC16F84 (comercial, industrial e automotiva) a tensãopode assumir um valor que vai de um minimo de 2.0 volts a um maximo de 6.0 volts.

15 OSC2 / CLKOUTÉ um pino de coneccão no caso de se utilizar um cristal de quartzo para gerar o clock. E comosaida de clock caso for aplicado um oscilador RC externo.

16 OSC1 / CLKINÉ um pino de coneccão para o caso de se utilisar um cristal de quartzo ou um circuito RC paragerar o clock. E tamabem como entrada caso utilizemos um oscilador externo.

17 RA0É uma linha de I/O programavel em entrada ou saida.

Corresponde ao BIT 0 da PORTA A.

18 RA1É uma linha de I/O programavel em entrada ou saida.

Corresponde ao BIT 1 da PORTA A.

 

Descrizione dei pin del PIC1F84

http://www.tanzilli.com/pbe/brasiliano/gloss/pin.htm (2 of 2) [27/5/2003 12:58:14]

Page 97: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Glossario de termos utilizados

RESET

O termo reset representa o zeramento do software em funcionamento como também do hardwarese ou seja todos osdispositivos internos do PIC são zerados.

O reset pode ser obtido ligando-se ou desligando-se o PIC ou conctando a massa o pino MCLR.

No reset o programa em execução sera imediatamente interrompido, todos os registradores de arquivos internosreinicializados e o programa reativado do inicio ou seja do Reset Vector, ou então da instrução memorizada na locação0x0000(no PIC 16F84).

 

Glossario (reset)

http://www.tanzilli.com/pbe/brasiliano/gloss/reset.htm [27/5/2003 12:58:15]

Page 98: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Glossario de termos utilizados

SUBROTINA

É um fraguimento de instrução chamado mais de uma vez dentro um programa. Tipicamente uma subrotina serácolocada em um programa seja para separar logicamente a função do resto do codigo ou seja para economizar espaço dememoria ecrevendo-se uma só vez o grupo de instruções necessaria.

A extrutura de base de uma subrotina e a seguinte:

Label istruzione 1 istruzione 2 ... istruzione n

return

Label é um nome da subrotina que poderá ser utilizado dentro do codigo para rechamar atravéz de uma instruçãoCALL. Se por exemplo escrever-mos uma subrotina que soma dois numeros, podemos colocar no lugar da palavraLabel a palavra Somma e então rechamar a subrotina quando for necessario fazer uma soma com a instrução.

call Somma

A instrução retlw seve ser sempre colocada no fim de uma subrotina de modo tal que a CPU possa rechamar a execuçãodo programa da proxima instrução ao call.

 

Glossario (subroutine)

http://www.tanzilli.com/pbe/brasiliano/gloss/subr.htm [27/5/2003 12:58:17]

Page 99: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

RETURN RETURN from subroutine

Retorna de uma subrotina

Sintaxi:

return

Descrição:

Esta instrução deve ser inserida no termino de cada subrotina para retornar a execução do programaprincipal.

Esemplo:

org 00H call mySub1 ....

mySub1 nop

return

Nota:

No PIC16F84 podemos fazer apenas 8 chamadas a subrotinas, do tipo:

org 00H call mySub1 ....

mySub1 call mySub2 return

mySub2 call mySub3 return

mySub3 return

Nota:

Esta instrução não influencia nenhum bit de status.

Veja antes a instrução RETLW.

instrução RETURN

http://www.tanzilli.com/pbe/brasiliano/istruzioni/return.htm (1 of 2) [27/5/2003 12:58:19]

Page 100: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

 

instrução RETURN

http://www.tanzilli.com/pbe/brasiliano/istruzioni/return.htm (2 of 2) [27/5/2003 12:58:19]

Page 101: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

CALL Subrotina CALL

Chamada a uma subrotina

Sintaxi:

call k

Descrição:

Rechama em execução uma subroutine memorizada no endereço k. O paramentro k pode serespecificado utilizando-se diretamante o valor numerico do endereço ou então o relativo label.

Esemplo:

org 00H call ledOn ...

;Subroutine di accensione di un led

ledOn bsf PORTB,LED1 return

Quando a CPU do PIC encontra uma instrução CALL, memoriza no STACK o valor do registro PC+1 demodo a poder retornar para instrução após o CALL, em seguida escreve no PC o endereço da subrotinapulando a execução desta ultima.

O valor original do PC sera recuperado pela subrotina com a execução da instrução de retorno RETURNou RETLW.

No PIC16F84 estão disponiveis 8 niveis de stack, para qual o numero maximo de CALL é 8, ou seja ainstrução CALL dentro de uma subrotina pode ter no maximo 8 cahamadas ou 8 niveis.

Nota:

Esta instrução não influencia nenhum bit de status.

 

instrução CALL

http://www.tanzilli.com/pbe/brasiliano/istruzioni/call.htm [27/5/2003 12:58:21]

Page 102: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

RETLW RETurn Literal to W

Retorna de uma subrotina com uma constante em W

Sintaxi:

retlw k

Descrição:

Esta instrução retorna o controle de uma subrotina ao programa principal. A difernça da instruçãoRETURN é que permite passar, atravez do acumulador W, o valor k ao programa principal.

Esemplo:

rtc equ 0CH

org 00H call mySub1 movwf rtc ...

mySub1 nop retlw 10

Uma vez executado esse programa ele memorizará no registro rtc o valor 10 passado pela subrotinamySub1.

Nota:

Esta instrução não influencia nenhum bit de ststus.

Veja antes a instrução RETURN.

 

instrução RETLW

http://www.tanzilli.com/pbe/brasiliano/istruzioni/retlw.htm [27/5/2003 12:58:26]

Page 103: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

NOP No OPeration

Nenhuma operação

Sintaxi:

nop

Descrição:

Esta instrução não executa nenhuma operação mas é util para inserir retardo par de um ciclo de maquina.

Esemplo:

Utilizando um cristal de quartzo de 4MHz podemos obter um retardo par de 1µs para cada instruçãoNOP colocada no nosso codigo.

nop ;Executa um retardo par de 1µs

Nota:

NOP não influencia nehum bit de status.

 

instrução NOP

http://www.tanzilli.com/pbe/brasiliano/istruzioni/nop.htm [27/5/2003 12:58:27]

Page 104: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

;**************************************************; Pic by example; SEQ.ASM;; (c) 2001, Sergio Tanzilli ; http://www.tanzilli.com;**************************************************

PROCESSOR 16F84 RADIX DEC INCLUDE "P16F84.INC" ERRORLEVEL -302

;Setup of PIC configuration flags

;XT oscillator ;Disable watch dog timer ;Enable power up timer ;Disable code protect

__CONFIG 0x3FF1

ORG 0x0C

Count RES 2Shift RES 1

;Reset Vector ;Program start point at CPU reset

ORG 0x00

bsf STATUS,RP0

movlw B'00011111' movwf TRISA

movlw B'11110000' movwf TRISB

bcf STATUS,RP0

movlw B'00000001' movwf Shift

MainLoop

movf Shift,W movwf PORTB

bcf STATUS,C rlf Shift,F

btfsc Shift,4 swapf Shift,F

call Delay

goto MainLoop

; Subroutines

http://www.tanzilli.com/pbe/examples/seq.asm

http://www.tanzilli.com/pbe/examples/seq.asm (1 of 2) [27/5/2003 12:58:28]

Page 105: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Delay clrf Count clrf Count+1

DelayLoop

decfsz Count,1 goto DelayLoop

decfsz Count+1,1 goto DelayLoop

return

END

http://www.tanzilli.com/pbe/examples/seq.asm

http://www.tanzilli.com/pbe/examples/seq.asm (2 of 2) [27/5/2003 12:58:28]

Page 106: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

A A

B B

C C

D D

8

8

7

7

6

6

5

5

4

4

3

3

2

2

1

1

VER: OF:PAGES:DATE:ENGINEER:NOTE:PROJECT:

2 NOV 1998

PIC BY EXAMPLE

1 11.0

EXAMPLE N.2SERGIO TANZILLI

WWW.PICPOINT.COM

GND GND

C3

22PF

C2

22PFX1

4MH

Z

+5

6RB0 7RB1 8RB2 9RB3 10RB4 11RB5 12RB6 13RB7

17RA0 18RA1 1RA2 2RA3 3RTCC/RA44 MCLR16 OSC1/CLKIN

15 OSC2/CLKOUT5 VSS

14 VDD

U1

PIC16C84

1

IN 2GND

3OUT

U27805

C6

100K

PFC5

100K

PF C7

47U

F

C4

100U

F

GND

+5+12

+12VCC

GND

123456

J1

DIN_6

YA

PP

!

C1

100K

PF

R1

10K

GND

GND

CA

D4

LED

R5470

CA

D3

LED

R4470

CA

D2

LED

R3470

R2470CA

D1

LED

Page 107: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Glossario de termos utilizados

ROM, PROM, EPROM, EEPROM, FLASH

São memorias que não perdem o seu conteudo com a falta de alimentação e por esse motivo são normalmente utilisadasem sistemas microprocessados para armazenar o programa a ser executado e em alguns caso para armazenar dadospermanentes.

Vjamos a difernça entre os varios tipos:

ROM - Read Only Memory (memoria somente de leitura) é uma memoria ja programada que não podeser modificada ou apagada.

PROM - Programmable Read Only Memory (memoria programavel somente para leitura) é umamemoria ROM não préviamente programada. A programação pode ser feita atravéz de um equipamentoespecial de programação chamado de programador de PROM.

EPROM - Erasable Programmable Read Only Memory (memoria somente de leitura programvel eapagavel) é uma memoria PROM que pode ser apagada se exposta a luz de uma lampada ultra violeta.Por este motivo o dispositivo é dotado de EPROM existe uma janéla transparente na qual é possivel fazerpassar para dentro do chip a luz UV.

EEPROM - Electrical Erasable Programmable Read Only Memory (memoria somente de leituraprogramavel, e apagavel eletricamente) é uma memoria EPROM que pode ser apagada aletricamente semo auxilio da lampada UV.

FLASH - Assemelha-se em tudo e para tudo com a EEPROM ou seja é uma memoria que pode serapagada e modificada eletricamente sem o auxilio de lamapada UV.

 

Glossario (rom, ram, eprom, eeprom, flash)

http://www.tanzilli.com/pbe/brasiliano/gloss/rom.htm [27/5/2003 12:58:30]

Page 108: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Glossario de termos utilizados

OPCODE

OPerativo CODE (do inglês codigo operativo) é o valor numérico que identifica univocalmante uma instrução do PIC ede seu parametro de funcionamento.

Por exemplo a instrução:CLRWDT

tem um opcode par de 00 0000 0110 0100 (0x0064 in esadecimale) que é diferente de qualquer outro codigo operativode qualquer outra instrução.

No caso de instrução com paramentro, como por exemplo:CLRF F

onde F é o endereço do registro a ser zerado, no opcode sera colocado antes o paramentro. Por exemplo se quisermoszerar no Registrador de arquivo o endereço 0x0C, o opcode será:

00 0001 1000 1100

onde a parte em vermelho é o codigo que identifica a instrução e a parte em azul é o parametro da instrução. Neste casoo endereço do registro (0001100 = 0x0C).

 

Glossario (opcode)

http://www.tanzilli.com/pbe/brasiliano/gloss/opcode.htm [27/5/2003 12:58:32]

Page 109: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Glossario dei termini utilizzati

RAM

É um tipo de memória que mantem os dados memorizados enquanto for mantida a alimentação. O acesso interno deuma memória RAM pode ser feito em leitura ou escrita, ou em qualquer posição de memória especificando-se oendereço da posição que se quer utilizar.

Dada a exetrma facilidade de escrever e ler uma RAM esta sera normalmente utilizada em um sistema microprocessadopara memorizar o dado de trabalho gerado dinamicamente pelo programa em execução(variaveis,array, etc.).

Siglas de Random Access Memory ou seja (memoria de acesso aleatório).

 

Glossario (ram)

http://www.tanzilli.com/pbe/brasiliano/gloss/ram.htm [27/5/2003 12:58:33]

Page 110: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

www.tanzilli.com

http://www.tanzilli.com/index.php3?id=17 (4 of 4) [27/5/2003 12:59:36]

Page 111: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

www.tanzilli.com

http://www.tanzilli.com/index.php3?page=prodotti.php&pclass=5 (6 of 6) [27/5/2003 13:00:22]

Page 112: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Glossario de termos utilizados

CPU

Siglas de Central Process Unit (unidade de processamento central) é a componente que em um sistema demicroprocessador executa as intruções de programa.

 

Glossario (cpu)

http://www.tanzilli.com/pbe/brasiliano/gloss/cpu.htm [27/5/2003 13:05:13]

Page 113: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Diretivas do assembler MPASM

PROCESSADOR

Sintaxiprocessor <processor_type>

Descrição

Define o tipo de processador quer utilizar.

Exemploprocessor 16F84

 

Glossario (processor)

http://www.tanzilli.com/pbe/brasiliano/gloss/processor.htm [27/5/2003 13:05:30]

Page 114: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

AVVERTENZA !Il progetto Yapp! non viene più supportato dall'autore. 

Questo programmatore è ormai superato dai tempi per cui l'autore mantiene in lineaqueste pagine solo per scopi didattici e ne sconsiglia vivamente la realizzazione per altriscopi. Non viene inoltre fornita alcuna garanzia di funzionamento. 

Lo Yapp! non viene assolutamente commercializzato dall'autore in nessuna forma per cuieventuali versioni commerciali esistenti in commercio sono state realizzate in modoassolutamente indipendente.

Yet Another Pic Programmer - Versione 2.7Programmatore RS232 ICSP© per PICmicro©Autore: Sergio Tanzilli ( [email protected] )Ultimo aggiornamento: 26 luglio 2000

IntroduzioneNote da leggere attentamente prima di realizzare lo Yapp!Modelli di PIC programmabiliCome si usa lo Yapp!RealizzazioneLinks & DownloadNote sulla programmazione ICSP™ dei PICmicro™Protocollo di comunicazione tra Yapp! e PCElenco dei comandiVersioni firmwareRingraziamenti

Software di gestione Yapp!Home page di Sergio Tanzilli ( http://www.tanzilli.com )

Introduzione

Lo Yapp! è un programmatore in-circuit seriale compatibile con gran parte dei PICmicro© chesupportano la programmazione ICSP© (In Circuit Serial Programming) di Microchip©. Lo Yapp! ènato come tool di supporto e come esempio stesso di applicazione basata su PICmicro per il corsoPic By Example disponibile gratuitamente su internet all'indirizzo ( http://www.tanzilli.com/pbe ).

In queste pagine viene presentata tutta la documentazione necessaria per la sua realizzazione(schemi elettrici, source, manuali, ecc.).

Note da leggere attentamente prima di realizzare lo Yapp!

Per le modalità di programmazione adottate,  lo Yapp! viene classificato, secondo le specificheMicrochip, come un programmatore di tipo "prototype" o "development" e non adatto quindi ad unuso professionale. 

Yet Another Pic Programmer

http://www.tanzilli.com/progetti/yapp/ (1 of 11) [27/5/2003 13:05:48]

Page 115: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Si sconsiglia vivamente la realizzazione dello Yapp! per la duplicazione di chip per il crack didispositivi hardware di qualsiasi genere. L'autore non fornisce alcuna informazione o supporto dialcun genere a riguardo.

La versione attuale dello Yapp! non è compatibile con i chip 12C508A e 12C509A ed in generalecon tutti i chip la cui sigla termina con la lettera A o B.

Lo Yapp! non è un programmatore commerciale, o meglio, esistono alcune società ed alcuniprivati che hanno realizzato lo Yapp! e che lo vendono in Kit o già montato e funzionante. L'autorenon è in alcun modo responsabile per i malfunzionamenti che questi prodotti dovessero presentareper i quali vanno contattati i rispettivi costruttori.

Per poter realizzare lo Yapp! è necessario disporre di un PIC16F84 opportunamentepre-programmato. Il programma da inserire su questo PICmicro è disponibile in queste pagine ma ècomunque necessario trovare il modo di programmare questo PICmicro.

L'autore non si assume alcuna responsabilità su eventuali malfunzionamenti o danni causati a coseo persone derivanti dall'uso dello Yapp! o, in genere, dall'uso delle informazioni presentate suqueste pagine. Tutto il materiale viene fornito così come è senza nessuna forma di garanzia sullasua validità .

L'autore non si assume alcuna responsabilità su eventuali malfunzionamenti o danni causati a coseo persone derivanti dall'uso dello Yapp! o, in genere, dall'uso delle informazioni presentate suqueste pagine. Tutto il materiale viene fornito così come è senza nessuna forma di garanzia sullasua validità .

Modelli di PIC programmabili

Anche se nato per i PIC16C84, lo Yapp! è in grado di programmare diversi modelli di PICmicro.Essendo un progetto "aperto" e disponibile gratuitamente per ovvie ragioni di costo e di tempo,l'autore non ha potuto effettuare test su tutti i modelli di PICmicro esistenti. Grazie allacollaborazione di alcuni "beta tester" è stato comunque possibile verificarne il correttofunzionamento su alcuni modelli.

Ecco i modelli su cui lo Yapp! ha dato prova di un buon livello di funzionamento:

12C508, 12C509, 16C620, 16C621, 16C63, 16C71, 16C72, 16C73, 16C84, 16F84

Lo Yapp! è comunque predisposto su carta per lavorare su altri modelli anche se nessuno finora hafatto delle prove vere e proprie. I modelli supportati "teoricamente" sono i seguenti:

16C554, 16C556, 16C558, 16C61, 16C62, 16C620, 16C621, 16C622, 16C64, 16C65, 16C66,16C67, 16C710, 16C711, 16C74, 16C76, 16C77, 16F83, 16C923, 16C924, 16CE623, 16CE624,16CE625

Come si usa lo Yapp!

Come visibile nella figura seguente, lo Yapp! si connette al PC tramite la porta seriale RS232 ed alprototipo tramite un connettore a 6 pin.

A differenza di molti altri programmatori dello stesso tipo, lo Yapp! non utilizza i criteri della portaseriale (DTS e RTS) per generare i segnali di programmazione ma solamente le linee RXD e TXDper comunicare ad alto livello con il PC. Per permettere questo lo Yapp! contiene a sua volta un PICprogrammato che ne gestisce completamente le funzioni. Questa caratteristica consente di utilizzare

Yet Another Pic Programmer

http://www.tanzilli.com/progetti/yapp/ (2 of 11) [27/5/2003 13:05:48]

Page 116: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

lo Yapp! con diversi sistemi operativi e linguaggi di programmazione ma presenta lo svantaggio didover disporre di un PICmicro già programmato per poter essere realizzato.

In queste pagine viene fornita la documentazione completa del protocollo di comunicazione traYapp! e PC per favorire chi volesse sviluppare un proprio programma di gestione su PC. Vengonoinoltre forniti alcuni programmi di gestione per diversi sistemi operativi realizzati da diversi autori. 

Lo Yapp! si occupa di generare tutti i segnali necessari per programmare il PICmicro a partire daicomandi inviato dal PC sulla porta RS232. In pratica lo Yapp! si occupa di tradurre i comandi dalformato seriale asincrono a 9600 baud 8,1,N nel formato Microchip e viceversa. Tutte letemporizzazioni interne necessarie alla corretta programmazione vengono gestite dal micro(anch'esso un PICmicro) presente sullo Yapp! liberando il programma di gestione su PC dalleproblematiche di gestione delle temporizzazione. Questa caratteristica ci consente di scrivere ilprogramma di gestione con linguaggi ad alto livello tramite i quali risulta difficile gestiretemporizzazioni precise.

Il collegamento tra lo Yapp! e la scheda da programmare avviene tramite un connettore a seicontatti sul quale sono presenti i seguenti segnali:

MCLR ( pin1 ) Da collegare al pin MCLR del PIC da programmare.DATA ( pin 2 ) Da collegare al pin RB7 del PIC da programmare.CLOCK ( pin 3 ) Da collegare al pin RB6 del PIC da programmare.GND ( pin 4 ) Massa.N.C. ( pin 5 ) Questo pin non viene collegato e serve come chiave per evitareinserzioni errate.VCC ( pin 6 ) Tensione di alimentazione proveniente dalla scheda prototipo, vieneutilizzata per alimentare lo YAPP e deve essere compresa tra 12,6 e 14,6 volt.

All'interno del corso Pic By Example ( http://www.tanzilli.com/pbe ) troverete molti schemi di prototipipredisposi per essere collegati allo Yapp!.

Realizzazione

Come possiamo vedere dallo schema elettrico, lo Yapp! utilizza un PICmicro ( U1 ) per il suofunzionamento, in particolare un PIC16F84 di cui viene fornito il sorgente in assembler. In alternativaè possibile utilizzare anche un PIC16C84 cambiando semplicemente la direttiva PROCESSORall'interno del file sorgente YAPP.ASM.

Come già dettp il PICmicro a bordo dello Yapp! si occupa di interpretare i comandi ricevuti dal PCtramite la porta RS232 e di inviare i segnali di programmazione corretti al PIC da programmare.

Il circuito integrato U2, un MAX232, si occupa di convertire i segnali RS232 la cui tensione varia da–12 volt a + 12 volt nei rispettivi segnali TTL da 0 a 5 gestibili dal PIC16F84  (U1). In particolare sulpin 12 (RB6) del PIC viene inviato il TxD proveniente dal PC e dal pin 11 (RB5) viene generato ilsegnale da inviare all’RxD del PC.

Lo YAPP si comporta come un dispositivo DCE (Data Comunication Equipment) e per collegarlo alPC occorre utilizzare un cavo dritto, ovvero un cavo in cui i connettori alle estremità siano collegatipin a pin. Un cavo modem può andare benissimo mentre è assolutamente da evitare l’uso di uncavo null-modem nel quale vengono scambiati i collegamenti tra i pin dei connettori. Chi volesserealizzare in proprio il cavo di collegamento può seguire lo schema riportato nella seguente figura:

Yet Another Pic Programmer

http://www.tanzilli.com/progetti/yapp/ (3 of 11) [27/5/2003 13:05:48]

Page 117: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Il diodo led verde D1 ed il diodo led rosso D2 servono rispettivamente ad indicare quando lo Yapp! èpronto a ricevere comandi dal PC (stato di READY) o quando lo Yapp! è entrato inPROGRAMMAZIONE.

Quando il led verde è acceso, la linea MCLR viene messa a +5 volt consentendo al PIC appenaprogrammato di iniziare l’esecuzione del codice.

L’alimentazione dello Yapp! viene ricavata direttamente dalla scheda prototipo tramite il pin 6 delconnettore e quindi ridotta a +5 volt dall’integrato U3 per alimentare gli integrati U1 e U2. La +12 voltviene utilizzata anche per generare la tensione di programmazione Vpp inviata al PIC tramite il pinMCLR.

Per realizzare lo Yapp! è disponibile il master di un circuito stampato singola faccia.

Links & Download

Schema elettrico dello Yapp! versione 2.7 YAPP27.PDF

Master PCB ) versione 5 YAPP27.PCB . Dal sito Holophase potrete scaricare una demo pervisualizzare il PCB: ( http://www.holophase.com )

Sorgenti in assembler del firmware versione 2.7 per il PIC16F84 montato sullo Yapp! ( U1 )FWYAPP27.ZIP

Software di gestione

Corso per principianti sui PICmicro "Pic By Example": http://www.tanzilli.com/pbe

Note sulla programmazione ICSP™ dei PICmicro™

La programmazione ICSP (In-Circuit Serial Programming) implementata dalla Microchip per laprogrammazione di alcune famiglie di PICmicro, consente di programmare i chip direttamente sullascheda destinazione abbreviando i tempi di sviluppo e produzione.

Queste pagine contengono una breve introduzione alla programmazione ICSP per i PIC16F84.Tutta la documentazione necessaria per programmare altre famiglie di PIC è disponibilegratuitamente sul sito Microchip ( http://www.microchip.com ) o sul CD distribuito sempre daMicrochip.

La programmazione ICSP viene effettuata tramite tre soli collegamenti + massa tra il programmatoreed il PIC da programmare ovvero:

Yet Another Pic Programmer

http://www.tanzilli.com/progetti/yapp/ (4 of 11) [27/5/2003 13:05:48]

Page 118: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

MCLR Piedino di master clear (pin 4 su PIC16F84) utilizzato per applicare la tensionedi programmazione VPP al chip.RB6 Linea 6 della porta B (pin 12 su PIC16F84) utilizzata come linea CLOCK.RB7 Linea 7 della porta B (pin 13 su PIC16F84) utilizzata come linea DATA.

La modalità di comunicazione con il PIC è di tipo seriale sincrono in cui i bit trasmessi sulla lineaDATA (pin RB7) vengono scanditi dal segnale generato sulla linea di CLOCK (pin RB6).Quest’ultimo viene generato dal programmatore mentre il DATA è bidirezionale a secondadell’operazione in corso. Nella seguente figura viene riportato un esempio di trasmissione di uncomando dal programmatore al PIC.

Tutte le operazioni sul PIC da programmare devono essere precedute dall’invio di un comando daparte del programmatore per comunicare al PIC l’operazione che si intende eseguire. La lunghezzadei comandi è sempre di 6 bit a volte seguiti da una trasmissione di 14 bit contenenti il valore daprogrammare. Di seguito  viene riportato a titolo d'esempio l’elenco dei comandi riconosciuti daiPIC16x84:

Load Configuration ( 000000B )Invia al PIC il prossimo dato da scrivere in memoria programma. Al codice comandosegue immediatamente il dato da memorizzare.

Load Data for Program Memory ( 000010B )Invia al PIC il prossimo dato da scrivere in memoria dati. Al codice comando segueimmediatamente il dato da memorizzare.

Read Data from Program Memory ( 000100B )Legge dal PIC la locazione corrente dall’area programma. Appena riceve questocomando il PIC trasmette al programmatore il valore letto.

Increment Address ( 000110B )Incrementa il puntatore alla locazione corrente nella memoriadati/configurazione/programma.

Begin Programming ( 001000B )Programma la locazione corrente.

Load Data for Data Memory ( 000011B )Invia al PIC il prossimo valore da scrivere in memoria dati. Al codice comando segueimmediatamente il dato da memorizzare.

Read Data from Data Memory ( 000101B )Legge dal PIC la locazione corrente dalla memoria dati. Appena riceve questocomando il PIC trasmette al programmatore il valore letto.

Yet Another Pic Programmer

http://www.tanzilli.com/progetti/yapp/ (5 of 11) [27/5/2003 13:05:48]

Page 119: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Bulk Erase Program Memory ( 001001B )Cancella l’intera memoria programma

Bulk Erase Data Memory ( 001011B )Cancella l’intera memoria dati

Il PIC16F84 dispone internamente di tre aree di memoria distinte programmabilidall’esterno: l’area programma pari ad 1 kbyte, l’area dati pari a 64 byte e l’areaconfigurazione pari a 8 byte. Tutte le aree di memoria sono implementate su FLASH.Le sole aree di programma e dati possono essere lette dall’esterno.

Per poter scrivere in una qualsiasi locazione il programmatore deve inviare al PIC unodei comandi LOAD seguito da 14 bit contenenti il dato da memorizzare. Volendo adesempio scrivere nella locazione 0 della memoria programma basterà inviare al PIC lasequenza:

Load Data for Program Memory + valore a 14 bitBegin Programming

Il comando Load Data trasferisce semplicemente il dato a 14 bit in un bufferprovvisorio all’interno del PIC, il comando Begin Programming effettua la scritturavera e propria del dato nella memoria programma. L’indirizzo della locazione dimemoria che viene scritta è contenuto in un puntatore di scrittura azzeratoautomaticamente non appena il PIC viene messo in programmazione (MCLR=12 volt)ed incrementato tramite il comando:

Increment Address

A questo punto per programmare la locazione successiva basterà trasmetterenuovamente i seguenti comandi:

Load Data for Program Memory + valore locazione 1Begin ProgrammingIncrement Address

e così via fino alla scrittura completa del programma. Per poter scrivere in unalocazione di memoria non è necessario effettuare operazioni di cancellazione.

L’area dati e l’area configurazione si programmano con le stesse modalità utilizzando ilcomando LOAD relativo. L’area dati è un’area FLASH visibile anche dal programma inesecuzione sul PIC, la sua programmazione può essere utile per assegnare dei valoriiniziali alle variabili utilizzate dal nostro programma. L’area configurazione contienedati invisibili al programma su PIC ma utili per determinare la modalità difunzionamento di alcuni dispositivi interni al PIC quali l’oscillatore di clock, il watchdogtimer, ecc. che vedremo successivamente durante il nostro corso.

Protocollo di comunicazione tra Yapp! e PC

Lo Yapp! si connette al PC tramite una porta seriale RS232 ed al prototipo tramite unconnettore a 6 pin come rappresentato in figura:

I soli segnali utilizzati sono l'RXD ed il TXD, la velocità di trasferimento è fissa a 9600baud, 8 data bit, no parity, 1 stop bit. La sincronizzazione tra il PC e lo Yapp! viene

Yet Another Pic Programmer

http://www.tanzilli.com/progetti/yapp/ (6 of 11) [27/5/2003 13:05:48]

Page 120: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

effettuata via software. In pratica solo il PC può iniziare un trasmissione mentre loYapp! deve sempre rispondere con almeno un byte. Se lo Yapp! non risponde, il PCdeve uscire per timeout e segnalare la mancanza di connessione con lo Yapp!. Il PCinizia la trasmissione inviando da 1 a 3 byte a seconda del tipo di comando richiesto.Lo Yapp! risponde sempre con 1 o 2 byte.

Elenco dei comandi

Il primo carattere trasmesso dal PC allo Yapp! è sempre un comando. Alcuni comandipossono essere seguiti da 1 o 2 byte di dati. Nella seguente tabella vengono riportatitutti i comandi riconosciuto dal firmware dello Yapp! versione 2.7.

Comando Formato Descrizione

LOAD_CONFIG 0x00DATA_LODATA_HI

Load ConfigurationScrive nel registro di programmazione del PIC il prossimodato da scrivere nella memoria di configurazione. Se sitrasmette questo comando subito dopo un comandoPROG_MODE il puntatore di scrittura interno al PIC vienesettato all'indirizzo 0x2000 (inizio della memoria diconfigurazione)

DATA è il dato da memorizzare nel registro diprogrammazione.

Return: ACK (0x10)

Comando standard Microchip

LOAD_DATA 0x02DATA_LODATA_HI

Load Data for Program MemoryScrive nel registro di programmazione del PIC il prossimodato da scrivere nella memoria programma. Se si trasmettequesto comando subito dopo un comando PROG_MODE ilpuntatore di scrittura interno al PIC viene settato all'indirizzo0x0000 (inizio della memoria programma)

DATA è il dato da memorizzare nel registro diprogrammazione.

Return: ACK (0x10)

Comando standard Microchip

READ_DATA 0x04 Read Data from Program MemoryLegge dal PIC la locazione corrente dall’area programma.

Return: In risposta il PIC trasmette il dato nella formaDATA_LO, DATA_HI.

Comando standard Microchip

INC_ADDR 0x06 Increment AddressIncrementa il puntatore alla locazione corrente nella memoriadati/configurazione/programma.

Return: ACK (0x10)

Comando standard Microchip

Yet Another Pic Programmer

http://www.tanzilli.com/progetti/yapp/ (7 of 11) [27/5/2003 13:05:48]

Page 121: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

BEGIN_PROG 0x08 Begin ProgrammingProgramma la locazione corrente. Con questo comando vieneprogrammata la locazione corrente con il valore contenuto nelregistro di programmazione. Il comando viene inviato al PICdirettamente senza alcun controllo. L'unica operazioneeffettuata dallo YAPP! è l'inserimento di un tempo di attesa(impostato con i comandi SET_FLASH_MODE,SET_EPROM_MODE) prima di rispondere con un ACK. Vedicomando WPL.

Return: ACK (0x10)

Comando standard Microchip

LOAD_DATA_DM 0x03DATA_LODATA_HI

Load Data for Data MemoryScrive nel registro di programmazione del PIC il prossimodato da scrivere nella memoria dati. Se si trasmette questocomando subito dopo un comando PROG_MODE il puntatoredi scrittura interno al PIC viene settato all'inizio dell'area dati.

DATA è il dato da memorizzare nel registro diprogrammazione.

Return: ACK (0x10)

Comando standard MicrochipApplicabile solo ai PIC16x84

READ_DATA_DM 0x05 Read Data from Data MemoryLegge dal PIC la locazione corrente dall’area dati

Return: In risposta il PIC trasmette il dato nella formaDATA_LO, DATA_HI.

Comando standard MicrochipApplicabile solo ai PIC16x84

END_PROG 0x0E End programmingTermina la programmazione dei PIC dotati di EPROM.

Return: ACK (0x10)

Comando standard MicrochipApplicabile solo ai PIC dotati di EPROM

RESET_MODE 0x40 Reset ModeApplica al PIC da programmare 0 volt sul pin MCLR (reset) e5 volt sui pin DATA (RB7) e CLOCK (RB6). In questacondizione il PIC da programmare si trova in stato di reset.

Return: ACK (0x10)

Comando YAPP!

Yet Another Pic Programmer

http://www.tanzilli.com/progetti/yapp/ (8 of 11) [27/5/2003 13:05:48]

Page 122: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

PROG_MODE 0x41 Programming Mode (TMOD1)Applica al PIC da programmare 12 volt sul pin MCLR (reset)e 0 volt sui pin DATA (RB7) e CLOCK (RB6). In questacondizione il PIC da programmare si trova in stato diprogrammazione. Questo comando deve essere inviato primadi qualsiasi comando diretto al PIC.

Return: ACK (0x10)

Comando YAPP!

RUN_MODE 0x42 Run ModeApplica al PIC da programmare 5 volt sul pin MCLR (reset)ed 1 volt sui pin DATA (RB7) e CLOCK (RB6). In questacondizione il PIC da programmare si trova in stato di running.Questo comando deve essere inviato prima di uscire dalprogramma di gestione dello YAPP! per mettere lo YAPP! instato di riposo.

Return: ACK (0x10)

Comando YAPP!

SET_CLOCK_HI 0x43 Set Clock HiApplica 1 volt sul pin CLOCK (RB6) del PIC daprogrammare. Questo comando viene utilizzatoesclusivamente per verificare il funzionamento dell'hardwaredello YAPP!.

Return: ACK (0x10)

Comando YAPP!

SET_CLOCK_LO 0x44 Set Clock LoApplica 0 volt sul pin CLOCK (RB6) del PIC daprogrammare. Questo comando viene utilizzatoesclusivamente per verificare il funzionamento dell'hardwaredello YAPP!.

Return: ACK (0x10)

Comando YAPP!

SET_DATA_HI 0x45 Set Data HiApplica 1 volt sul pin DATA (RB7) del PIC da programmare.Questo comando viene utilizzato esclusivamente perverificare il funzionamento dell'hardware dello YAPP!.

Return: ACK (0x10)

Comando YAPP!

SET_DATA_LO 0x46 Set Data LoApplica 0 volt sul pin DATA (RB7) del PIC da programmare.Questo comando viene utilizzato esclusivamente perverificare il funzionamento dell'hardware dello YAPP!.

Return: ACK (0x10)

Comando YAPP!

Yet Another Pic Programmer

http://www.tanzilli.com/progetti/yapp/ (9 of 11) [27/5/2003 13:05:48]

Page 123: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

SET_FLASH_MODE 0x47 Set FLASH programming modePredispone lo YAPP! per la programmazione di PIC dotati dimemoria FLASH. Questo programma determina il ritardo diprogrammazione (10ms) applicato al comandoBEGIN_PROG ed il tipo di algoritmo di programmazioneapplicato dal comando WPL.

Return: ACK (0x10)

Comando YAPP!

SET_EPROM_MODE 0x48 Set EPROM programming modePredispone lo YAPP! per la programmazione di PIC dotati dimemoria EPROM. Questo programma determina il ritardo diprogrammazione (100us) applicato al comandoBEGIN_PROG ed il tipo di algoritmo di programmazioneapplicato dal comando WPL.

Return: ACK (0x10)

Comando YAPP!

GET_VERSION 0x49 Get firmware versionLegge la versione firmware dello YAPP!

Return: VERSION (1 byte). Esempio versione 2.5 ritorna conun byte esadecimale pari a 0x25.

Comando YAPP!

WPL 0x4ADATA_LODATA_HI

Write Program LocationEffetua la programmazione di una locazione di memoriaprogramma. Questo comando applica l'algoritmo diprogrammazione adatto per il tipo di memoria, effettua laverifica di avvenuta programmazione ed incrementa ilpuntatore di lettura.

Return: ACK (0x10) se la locazione è stata programmata everificata correttamente. NACK (0x02) se la verifica harilevato un errore di programmazione.

Comando YAPP!

BLANK_CHECK 0x4BLEN_LOLEN_HIMASK

Write Program LocationControlla se la memoria programma dei PIC dotati di EPROMè vergine (tutte le cella a 0x3FFF o 0x0FFF). Il dato LENcontiene la lunghezza della memoria da verificare. Mentre ildato MASK contiene la maschera utilizzata per la verificadelle celle vergini. Se ad esempio deve essere controllata laverginità delle celle nei PIC16F84 dotati di CPU a 14 bit. Ildato mask deve contenere la maschera di bit del byte piu'significativo dell'opcode ovvero 0x3f (parte alta del valoremassimo memorizzabile in una word 0x3FFF). Per iPIC12C508 in cui la CPU è dotata di 12 bit la maschera sarà0x0F (parte alta del valore massimo memorizzabile in unaword 0x0FFF).

Return: ACK (0x10) se tutta la memoria programma contiene0x3FFF (o 0x0FFF)  NACK (0x02) se anche una solalocazione non vale 0x3FFF (o 0x0FFF).

Yet Another Pic Programmer

http://www.tanzilli.com/progetti/yapp/ (10 of 11) [27/5/2003 13:05:48]

Page 124: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Comando YAPP!

Tutti i codici comando non direttamente riconosciuti dallo YAPP! vengono comunquetrasmessi al PIC (solo i 6 bit meno significativi). Questo consente di inviare al PIC tutti icomandi previsti dalla Microchip ma non testati direttamente dall'autore dello YAPP!(ad esempio: Bulk Erase Program Memory e Bulk Erase Data Memory riconosciutidai PIC16x84). A questi comandi lo YAPP! risponde sempre con un ACK (0x10).

Il comando WPL effettua le operazioni specificate nel documento Microchip sullaprogrammazione ICSP per quel che riguarda la scrittura   della memoria programma,ad eccezione del cambio sulla tensione di alimentazione non implementato sullaversione corrente dell'hardware dello YAPP!. Per questo motivo lo YAPP! è daconsiderarsi un programmatore per sviluppatori e non adatto alla produzione. Prima diutilizzare il comando WPL occorre aver specificato il tipo di memoria con i comandiSET_FLASH_MODE o SET_EPROM_COM, aver messo il PIC in modalità diprogrammazione con il comenaod PROG_MODE ed aver caricato almeno un dato(non importa quale) nel registro di programmazione con il comando LOAD_DATA inmodo da resettare il puntatore di programmazione del PIC. Il comando WPL in praticainvia al PIC i seguenti comandi senza ulteriore intervento del program su PC:LOAD_DATA, BEGIN_PROG, END_PROG (solo EPROM), READ_DATA,INC_ADDR. L'incremento dell'indirizzo avviene sia che la locazione sia stataprogrammata correttamente che no.

Per default lo YAPP! è settato in FLASH mode.

 Versioni firmware

Versione 2.7 Correzione del bug della versione 2.5 per cui veniva programmato ancheil byte di calibrazione dell'oscillatore.Allineamento del firmware allo schema elettrico versione 2.7.Ampliamento della durata dei segnali di CLOCK e DATA.Versione 2.6 Versione interna non rilasciata.Versione 2.5/2.5a Programma anche i PIC12C508/509Versione 2.4 Programma anche i PIC16C6X/7X/9XX. Implementa due nuovi comandi:WPL Write Program Location per la gestione della programmazione/verifica e BCBlank Check.

Ringraziamenti

Un ringraziamento speciale a quanti hanno collaborato e continuano a collaborare allabuona riuscita del progetto Yapp!, con particolare riferimento a:

Tiziano Galizia - Realizzazione PCB doppia facciaFabrizio Sciarra -  Porting su LinuxAlessandro Razeto - Porting su LinuxTito Dal Canton  -  Beta tester e porting su MACAlessandro Ballerini - Beta testerAntonio Casini - Beta testerMassimo Battisti - Yapp95 per la gestione dello Yapp! in Win95/98/NTAlberto Consolini - Yappw per la gestione dello Yapp! su Win 95/98/NT

 

Yet Another Pic Programmer

http://www.tanzilli.com/progetti/yapp/ (11 of 11) [27/5/2003 13:05:48]

Page 125: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

A A

B B

C C

D D

8

8

7

7

6

6

5

5

4

4

3

3

2

2

1

1

VER: OF:PAGES:DATE:ENGINEER:NOTE:PROJECT:

2 NOV 1998

PIC BY EXAMPLE

1 11.0

EXAMPLE N.1SERGIO TANZILLI

WWW.PICPOINT.COM

GND GND

C3

22PF

C2

22PFX1

4MH

Z

+5

6RB0 7RB1 8RB2 9RB3 10RB4 11RB5 12RB6 13RB7

17RA0 18RA1 1RA2 2RA3 3RTCC/RA44 MCLR16 OSC1/CLKIN

15 OSC2/CLKOUT5 VSS

14 VDD

U1

PIC16C84

1

IN 2GND

3OUT

U27805

C6

100K

PFC5

100K

PF C7

47U

F

C4

100U

F

GND

+5+12

+12VCC

GND

123456

J1

DIN_6

YA

PP

!CA

D1

LED

R2470

GND

C1

100K

PF

R1

10K

GND

Page 126: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Glossario de termos utilizados

NotaçãoBINARIA e EXADECIMAL

Notação utilizada em programação paa indicar valores numerico em alternativa a notação decimal. A notação Binariaou notação na base 2, representa o bit que podem assumir só 2 valores 0 ou 1 e representa diretamente a modalidade dememorização dos numeros de um microprocessador. A notação Exadecimal ou notação na base 16, representa onumero atravéz de cifras exadecimal que podem assumir 16 valores. Em seguida sera mostrada uma simples tabela decorrespondecia para os mesmos valores entre notação binaria, decimal e exadeciamal.

Decimal Exadecimal Binaria

0 0 0

1 1 1

2 2 10

3 3 11

4 4 100

5 5 101

6 6 110

7 7 111

8 8 1000

9 9 1001

10 A 1010

11 B 1011

12 C 1100

13 D 1101

14 E 1110

15 F 1111

16 10 10000

Na linguagem assembler do PICmicro a notação exadecimal pode ser representada em tres diferentes formas:

H'<hex_digit>' , 0x<hex_digit> e <hex_digit>H

onde, por exemplo, o mesmo numero exadeciamal 1 A será representado na seguinte forma:

H'1A', 0x1A oppure 1AH

A notação binaria pode ser representada em duas formas:

B'<binary_digit>' e <binary_digit>B

onde o mesmo numero binario 01101100 será representado na seguinte forma :

B'01101100' e 01101100B.

Glossario (notazione)

http://www.tanzilli.com/pbe/brasiliano/gloss/notaz.htm (1 of 2) [27/5/2003 13:07:08]

Page 127: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

 

Glossario (notazione)

http://www.tanzilli.com/pbe/brasiliano/gloss/notaz.htm (2 of 2) [27/5/2003 13:07:08]

Page 128: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Diretivas do assembler MPASM

RADIX

Sintaxiradix <default_radix>

Descrição

Defini-se o radix default para expressão numerica. Se não especifica-la o radix de default seráexadecimal.O parametro <default_radix> pode valer: hex, dec ou oct.

Exemploradix dec

Glossario (radix)

http://www.tanzilli.com/pbe/brasiliano/gloss/radix.htm [27/5/2003 13:07:52]

Page 129: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Glossario de termos utilizados

AND●

CPU●

Memoria ROM, PROM, EPROM ed EEPROM●

Memoria RAM●

Microcontrolador●

NOT●

Notação decimal, exadecimal e binaria●

Pin MCLR/VPP●

Pin OSC1/CLKIN●

Pin OSC2/CLKOUT●

Pin RA0●

Pin RA1●

Pin RA2●

Pin RA3●

Pin RA4/RTCC●

Pin RB0/INT●

Pin RB1●

Pin RB2●

Pin RB3●

Pin RB4●

Pin RB5●

Pin RB6●

Pin RB7●

Pin VDD●

Pin VSS●

Opcode●

OR●

Reset●

Subroutine●

XOR●

 

Glossario

http://www.tanzilli.com/pbe/brasiliano/gloss/glossario.htm [27/5/2003 13:26:16]

Page 130: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Glossario de termos utilizados

OPERAÇÃO BOOLEANA

A operação booleana e uma operação algébrica entre numeros binarios ulteis em programação para trabalhar bobre osbit's contidos no registro do PIC. Vejamos brevemente a operação utilizada na programação do PIC.

AND

O AND entre dois bit's segue a seguinte tabela verdade:

0 AND 0 = 00 AND 1 = 01 AND 0 = 01 AND 1 = 1

Na prática se um dos dois bit's valer 0 então o resultado será par 0. O AND entre dois registros será efetuado com acopia entre os bit's que ocupam a mesma posição como representado no exemplo abaixo:

01010101 AND11110000 =--------------01010000

OR (o OR inclusivo)

O OR entre dois bit's segue a seguinte tabela verdade:

0 OR 0 = 00 OR 1 = 11 OR 0 = 11 OR 1 = 1

Na prática se um dos dois bit's vale 1 então o resultado será par de 1. O OR entre dois registro será efetuado com a copiaentre o bit que ocupa a mesma posição come representado na figura abaixo:

01010101 OR11110000 =--------------11110101

XOR (o OR esclusivo)

O XOR entre dois bit's segue a seguinte tabela verdade:

0 XOR 0 = 00 XOR 1 = 11 XOR 0 = 11 XOR 1 = 0

Na prática se um dos dois bit's são iguais o resultado será 0 caso contrário valerá 1. O XOR entre dois registros seraefetuado com a copia entre o bit que ocupa a mesma posição como representado no exemplo abaixo:

Glossario (Operazioni booleane)

http://www.tanzilli.com/pbe/brasiliano/gloss/bool.htm (1 of 2) [27/5/2003 13:26:19]

Page 131: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

01010101 XOR11110000 =--------------10100101

NOT

O NOT consiste na simples negação do valor de um bit. Ou seja se um bit vale 0 o seu NOT será 1 e viceversa.

NOT 0 = 1

NOT 1 = 0

O NOT de um registro será efetuado negando simplesmente o bit como representado abaixo:

01010101 NOT =----------------10101010

 

Glossario (Operazioni booleane)

http://www.tanzilli.com/pbe/brasiliano/gloss/bool.htm (2 of 2) [27/5/2003 13:26:19]

Page 132: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Glossario de termosi utilizados

MICROCONTROLADOR

Chip programavel dotado de dispositivos com base a poder memorizar um programa (memoria EPROM ou EEPROM),para poder memorizar dados e valores ( memoria RAM), executa a função de entrada/saida (linha de I/O, porta seria,etc.) e outras funções de auxilio ( gerador de clock, contador, etc.). O Microcomtrolador se destingue do processadorpropriamente pela presença de dispositivos auxiliares dentro do mesmo chip que contem a CPU.

 

Glossario (microcontroller)

http://www.tanzilli.com/pbe/brasiliano/gloss/microc.htm [27/5/2003 13:26:27]

Page 133: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Diretivas do assembler MPASM

PROCESSADOR●

RADIX●

 

Direttive

http://www.tanzilli.com/pbe/brasiliano/gloss/direttive.htm [27/5/2003 13:27:03]

Page 134: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

Set de instruções do PIC16F84

Este é o set completo de instruções reconhecido pelo PIC16F84:

Sintaxi Descrição Microchip Operação equivalente

ADDLW k Add Literal and W W = W + k

ADDWF f,d Add W and f d  =  W + f (onde d pode ser W ou f)

ANDLW k AND Literal with W W = W AND k

ANDWF f,d AND W with f d = W AND f (onded pode ser W ou f)

BCF f,b Bit Clear f f(b) = 0

BSF f,b Bit Set f f(b) = 1

BTFSC f,b Bit Test f, Skip if Clear f(b) = 0 ? Se é, pule uma instrução

BTFSS f,b Bit Test f, skip if Set f(b) = 1 ? Se é, pule uma instrução

CALL k Subroutine Call Chamada a uma subrotina no endereço k

CLRF f Clear f f = 0

CLRW Clear W Register W = 0

CLRWDT Clear Watchdog Timer Watchdog timer = 0

COMF f,d Complement f d = not f (onde d pode ser W ou f)

DECF f,d Decrement f d = f -1 (onde d pode ser W ou f)

DECFSZ f,d Decrement f, Skip if 0 d = f -1 (onde d pode ser W ou f) se d = 0 pula

GOTO k Go to address Pule para o endereço k

INCF f,d Increment f d = f +1 (onde d pode ser W ou f)

INCFSZ f,d Increment f, Skip if 0 d = f +1 (onde d pode ser W ou f) se d = 0 pule

IORLW k Inclusive OR Literal with W W = W OR k

IORWF f,d Inclusive OR W with f d = f OR W (onde d pode ser W ou f)

MOVLW k Move literal to W W = k

MOVF f,d Move f d = f (onde d pode ser W ou f)

MOVWF f Move W to f f = W

NOP No Operation Nenhuma operação

OPTION Load Option Register OPTION = W

RETFIE Return from Interrupt Retorna de uma interrupt handler

Set de instruções

http://www.tanzilli.com/pbe/brasiliano/istruzioni/istruzioni.htm (1 of 2) [27/5/2003 13:27:11]

Page 135: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

RETLW k Return Literal to W Retorna de uma subrotina com W = k

RETURN Return from Subroutine Retorna de uma subrotina

RLF f,d Rotale Left f through Carry d = f << 1 (onde d pode ser W ou f)

RRF f,d Rotale Right f through Carry d = f >> 1 (onde d pode ser W o f)

SLEEP Go into Standby Mode Coloca em standby o PIC

SUBLW k Subtract W from Literal W = k - W

SUBWF f,d Subtract W from f d = f - W (onde d pode ser W ou f)

SWAPF f Swap f f = Swap do bit 0123 com 4567 de f

TRIS f Load TRIS Register TRIS di f = W

XORLW k Exclusive OR Literal with W W = W XOR k

XORWF f,d Exclusive OR W with f d = f  XOR W (onde d pode ser W ou f)

 

Set de instruções

http://www.tanzilli.com/pbe/brasiliano/istruzioni/istruzioni.htm (2 of 2) [27/5/2003 13:27:11]

Page 136: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

ADDLW ADD Literal and W

Soma a constante k a W

Sintaxi:

addlw k

Operação equivalente:

W = W + k

Descrição:

Soma a constante k ao valor memorizado no acumulador W e coloca o resultado no acumulador.

Exemplo:

org 00H

start movlw 10 addlw 12 ...

Depois de ter executado este programa o acumulador W terá o valor 22

Nota:

Esta instrução influência o bit Z, DC e C do registro STATUS.

Z vale 1 se o resultado da operação for 0.●

DC vale 1 se o resultado da operação é um numero superior a 15.●

C vale 1 se o resultado é positivo ou seja se o bit 7 do registro contem o resultado 0 e 1 se oresultado é negativo ou seja se o bit 7 do registro tiver um resultado que vale 1.

instrução ADDLW

http://www.tanzilli.com/pbe/brasiliano/istruzioni/addlw.htm [27/5/2003 13:27:14]

Page 137: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

ADDWF ADD W and F

Soma o valor contido em W com o valor contido no registro F

Sintaxi:

addwf f,d

Operação equivalente:

d  =  W + f (onde d pode ser W ou f)

Descrição:

Esta instrução soma o valor contido no acumulador W com o valor contido no registro inderessado peloparametro f. O parametro d é um flag que indica sobre qual registro deve ser memorizado o resulatado.

Para d = W o resultado sera memorizado no registro W.Para d = F o resultado sera memorizado no registro f.

Exemplo:

Vejamos um exemplo de somo entre dois registros:

add1 equ 0CHadd2 equ 0DH

org 00H movlw 10 ;Primeiro somador = 10 movwf add1

movlw 15 ;Segundo somador = 15 movwf add2

movf add1,W ;W = add1 addwf add2,W ;W = W + add2

Nota:

Esta instrução influencia o bit Z, DC e C do registro STATUS.

Z vale 1 se o resultado da operação for 0.●

DC vale 1 se o resultado da operação é um numero superior a 15.●

C vale 1 se o resultado é positivo ou seja se o bit 7 do resgistro que conter o resultado for 0 e 1 seoresultado é negativo ou seja se o bit 7 do registro que contem o resultado for 1.

 

instrução ADDWF

http://www.tanzilli.com/pbe/brasiliano/istruzioni/addwf.htm [27/5/2003 13:27:18]

Page 138: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

ANDLW AND Literal com W

Efetua o AND entre W e uma constante k

Sintaxi:

andlw k

Operação equivalente:

W = W AND k

Descrição:

Efetua p AND entre o valor contido no acumulador W e o valor constante k. O resultado seramemorizado no acumulador.

Exemplo:

org 00H

start movlw 10101010B andlw 11110000B ...

Depois de haver executado este programa o acumulador W irá 10100000B.

Nota:

Esta instrução infuencia o bit Z do registro STATUS.

Z vale 1 se o resultado da operação for 0.●

 

instrução ANDLW

http://www.tanzilli.com/pbe/brasiliano/istruzioni/andlw.htm [27/5/2003 13:27:21]

Page 139: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

ANDWF AND W com F

Efetua o AND logico entre o valor contido em W e o valor contido no registro F

Sintaxi:

andwf f,d

Operação equivalente:

d = W AND f (onde d pode ser W o f)

Descrição:

Esta instrução efetua o AND lógico entre o valor contido no aculmulador W e o valor contido no registroendereçado do parametro f. O parametro d é um flag que indica sobre qual registro deve ser memorizadoo resultado.

Para d = W o resultado sera memorizado no registro WPer d = F o resultado sera memorizado no registro f

Exemplo:

Frequentemente o AND lógico sera utilizado para mascarar o valor de algum bit dentro de um registro.Se por exemplo quisessemos extrair do numero binario 01010101B o quarto bit menos significativo a fimde obter o seguinte valor 00000101B, bastará preparar uma mascara do tipo 00001111B e fazer o ANDcom o nosso valor, vejamos como :

movlw 01010101B ;Memoriza no registromovwf 0CH ;0CH o valor inicial da mascara

movlw 00001111B ;Prepara a mascara do bitandwf 0CH,W ;Efetua o AND e memoriza o ;risultato no acumulador W

O resultado em W será 00000101B como descrito.I

W = 00001111 ANDf = 01010101 =----------------W = 0000010101

ANDWF influencia o bit Z do registro STATUS que irá a 1 se o resultado da operação é igual a 0.

 

instrução ANDWF

http://www.tanzilli.com/pbe/brasiliano/istruzioni/andwf.htm [27/5/2003 13:27:26]

Page 140: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

BTFSC Bit Test F, Skip if Clear

Pula a proxima instrução se um bit no registro F for 0

Sintaxi:

btfsc f,b

Operação equivalente:

f(b) = 0 ? Si, salta una istruzione

Descrição:

Testa o bit contido no registro no endereço f e pula a proxima instrução se este valer 0.

Exemplo:

parm1 equ 0CH

org 00H movlw 11111110B ;Valor inicial movwf parm1loop btfsc parm1,0 ;D0 = 0 ? Se, é goto loop ;Não, execute o loop

Este programa executa um loop infinito o mesmo programa não executará o loop se substituirmos ainstrução :

movlw 11111110B ;Valor inicial

com instrução:

movlw 11111111B ;Valor inicial

Nota:

Esta instrução não infulencia nenhum bit de status.

 

 

instrução BTFSC

http://www.tanzilli.com/pbe/brasiliano/istruzioni/btfsc.htm [27/5/2003 13:27:37]

Page 141: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

CLRWDT CLeaR WatchDog Timer

Reset do timer do watchdog

Sintaxi:

clrwdt

Descrição:

Esta instrução deve ser utilizada quando programarmos o PIC com a opção Watchdog ( fusivel WDTE ).Nesta modalidade o PIC abilita um timer que, uma vez trascorriodo um determinado tempo, efetua oreset do mesmo. Para evitar o reset do nosso programa deveremos executar ciclicamente a instruçãoCLRWDT para zerar o timer antes deste tempo. Se não zerarmos o timer neste tempo, o circuito dewatchdog ( do inglês cão de guarda ) interpretará este como um bloco de programa em execução eefetuará o reset para bloquea-lo.

Esemplo:

org 00H

loop clrwdt goto loop

Nota:

Esta instrução não influencia nenhum bit de status.

 

instrução CLRWDT

http://www.tanzilli.com/pbe/brasiliano/istruzioni/clrwdt.htm [27/5/2003 13:27:51]

Page 142: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

COMF COMplement F

Efetua o complemento do registro F

Sintaxi:

comf f,d

Operação equivalente:

d = NOT f (onde d pode ser W ou f )

Descrição:

Esta instrução efetua o complemento do valor contido no registro endereçado pelo parametro f. Oparametro d determina o destino do valor obtido.

Para d = W o valor sera memorizado no registro WPara d = F o valor sera salovo no registro f.  

Esemplo:

parm1 equ 0CH

org 00H movlw 01010101B movwf parm1

comf parm1,F ...

Ao termino da execução do programa o valor do registro parm1 será 10101010B.

Nota:

Esta instrução influencia o bit Z do registro STATUS.

Z vale 1 se o resultado da operação for 0.●

 

instrução COMF

http://www.tanzilli.com/pbe/brasiliano/istruzioni/comf.htm [27/5/2003 13:27:55]

Page 143: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

DECF DECrement F register

Decrementa o conteudo do registro F

Sintaxi:

decf f,d

Operação equivalente:

d = f -1 (onde d pode ser W ou f )

descrição:

Esta instrução decrementa o conteudo do registro endereçado pelo paramentro f. O parametro d é um flag queindica sobre qual registro deve ser memorizado o resultado.

Para d = W o resultado sera memorizado no registro WPara d = F o resultado sera memorizado no registro f

Esemplo:

Com o progama seguinte escrevemos o valor 23H no registro de endereço 0CH e assim o decrementamos deum. Ao termino da execução o registro da posição 0CH terá o valor 22H.

 

movlw 23H ;Escreve em W o valor 23Hmovwf 0CH ;Copia no registro 0CH o valoroe de Wdecf 0CH,F ;Decremente o valor contido no registro 0CH

Esemplo:

Esta instrução influencia o bit Z do registro de STATUS.

Z vale 1 se o resultado da operação for 0.●

 

instrução DECF

http://www.tanzilli.com/pbe/brasiliano/istruzioni/decf.htm [27/5/2003 13:28:00]

Page 144: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

DECFSZ DECrement F, Skip if Zero

Decrementa o valor do registro f e pula a próxima instrução se o risultato for zero

Sintaxi:

decfsz f,b

Operação equivalente:

d = f -1 (onde d pode ser W o f ) se d = 0 pula

Descrição:

Decrementa o valor de regisatro do endereço f e se o resultado for zero pula a proxima instrução. Oresultado do decremento pode ser memorizado no mesmo registro f ou então no acumulador W com baseno valor do flag d.

Para d = W o resultado sera memorizado no registro WPara d = F o resultado sera memorizado no registro f

Esemplo:

counter equ 0CH

org 00H movlw 10 ;counter = 10 movwf counterloop decfsz counter,F ;counter = counter -1 ;counter = 0 ? Se for goto loop ;Não, continua

Este programa executa 10 vezes a instrução decfsz até que counter seja = 0.

Nota:

Esta instrução não influencia nenhum bit de status.

 

instrução DECFSZ

http://www.tanzilli.com/pbe/brasiliano/istruzioni/decfsz.htm [27/5/2003 13:28:05]

Page 145: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

INCF INCrement F

Incrementa o valor do registro no endereço F

Sintaxi:

incf f,d

Operação equivalente:

d = f +1 (onde d pode ser W o f)

Descrção:

Incrementa o conteudo do registro no endereço f e memoriza o resultado no mesmo registro ou noacumulador W dependendo do valor do flag d.

Para d = W o resultado sera memorizado no registro WPara d = F o resultado sera memorizado no mesmo registro F

Nota:

Esta instrução influencia o bit Z do registro STATUS.

Z vale 1 se o resultado da operação for 0.●

 

instrução INCF

http://www.tanzilli.com/pbe/brasiliano/istruzioni/incf.htm [27/5/2003 13:28:09]

Page 146: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

INCFSZ INCrement F, Skip if Zero

Incrementa o valor do registro f e pula a proxima instrução se o resultato for zero

Sintaxi:

incfsz f,b

Operação equivalente:

d = f +1 (onde d pode ser W ou f) se d = 0 pula

Descrição:

Incrementa o valor do registro f e se o resultado for zero pula a proxima instrução. O resultado doincremento pode ser memorizado no mesmo registro f ou então no acumulador W dependendo do flag d.

Para d = W o resultado sera memorizado no registro WPara d = F o resultado sera memorizado no registro f

Esemplo:

counter equ 0CH

org 00H movlw 250 ;counter = 250 movwf counterloop incfsz counter,F ;counter = counter + 1 ;counter = 0 ? Se for goto loop ;Não, continua

Este programa executa para 256 -10 = 6 vezes a instrução incfsz até que counter = 0. Sendo counter umregistro de 8 bit's quando for incrementado do valor 255 assume novamente o valor 0 e dai a formula 256- 10 = 6.

Nota:

Esta instrução não influencia nenhum bit de status.

 

instrução INCFSZ

http://www.tanzilli.com/pbe/brasiliano/istruzioni/incfsz.htm [27/5/2003 13:28:18]

Page 147: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

IORLW Inclusive OR Literal with W

Efetua o inclusive OR entre W e uma constante k

Sintaxi:

iorlw k

Operação equivalente:

W = W OR k

Descrição:

Efetua o inclusive OR entre o valor contindo no acumulador W e o valor da constante k.

Esemplo:

org 00H

start movlw 00001111B iorlw 11110000B ...

Após ser executado esse programa o acumulador W será 11111111B.

Nota:

Esta instrução influencia o Z do registro de STATUS.

Z vale 1 se o resultado da operação for 0.●

 

instrução IORLW

http://www.tanzilli.com/pbe/brasiliano/istruzioni/iorlw.htm [27/5/2003 13:28:24]

Page 148: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

IORWF Inclusive OR W with F

Effettua l'OR inclusivo tra il valore contenuto in W ed il valore contenuto nel registro F

Sintassi:

iorwf f,d

Operazione equivalente:

d = f OR W (dove d può essere W o f)

Descrizione:

Questa istruzione effettua l'OR inclusivo tra il valore contenuto nell'accumulatore W ed il valorecontenuto nel registro indirizzato dal parametro f. Il parametro d determina dove viene memorizzato ilrisultato dell'operazione:

Per d = W il risultato viene memorizzato nell'accumulatore W.Per d = F il risultato viene memorizzato nel registro f.

Esempio:

parm1 equ 0CH

org 00H movlw 00001111B movwf parm1

movlw 11111111B iorwf parm1,F

Al termine dell'esecuzione il valore del registro parm1 sarà 11111111B.

Note:

Questa istruzione influenza il bit Z del registro STATUS.

Z vale 1 se il risultato dell'operazione vale 0.●

 

instrução IORWF

http://www.tanzilli.com/pbe/brasiliano/istruzioni/iorwf.htm [27/5/2003 13:28:28]

Page 149: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

MOVF MOVe F

Move o conteudo do registro F

Sintaxi:

movf f,d

Operação equivalente:

d = f (onde d pode ser W ou f)

Descrição:

Esta instrução copia o conteudo do registro endereçado pelo paramentro f ou no acumulador W ou nomesmo registro F. O parametro d determina o destino.

Para d = W o valor sera memorizado no registro WPara d = F o valor sera mantido no registro f. E neste caso a utilidade desta instrução esta no fato quesera alterado o bit Z do flag STATUS dependendo do valor contido no registro f.

Esemplo:

O exemplo a seguir copia o valor contido no registro do endereço 0CH no acumulador W:

movf 0CH,W

 

instrução MOVF

http://www.tanzilli.com/pbe/brasiliano/istruzioni/movf.htm [27/5/2003 13:28:37]

Page 150: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

OPTION load OPTION register

Passa o valor de W ao registro OPTION

Sintaxi:

option

Operação equivalnte:

OPTION = W

Descrição:

Esta instrução memoriza no registro especial OPTION o valor contido no acumulador W.

Esemplo:

org 00H

start movlw 01000100B option ...

Nota:

Esta instrução existe para manter a compatibilidade com o PIC produto final, a Microchip não aconselhao uso. Em alternativa é aconselhavel usar a seguinte instrução:

org 00H

start

bsf STATUS,RP0 ;Ativa o banco de registro 1

movlw 01000100B movwf OPTION_REG ...

Na prática se aconselha a escrever diretamente no registro OPTION presente no banco 1 de registros doPIC utilizando MOVWF ante a instrução OPTION que no futuro poderá não mais ser implementada.

Esta instrução não influencia nenhum bit de status.

 

instrução OPTION

http://www.tanzilli.com/pbe/brasiliano/istruzioni/option.htm [27/5/2003 13:28:47]

Page 151: Indice das lições 1 - rmeletronica.com.brrmeletronica.com.br/files1/apostiladepic.pdf · No nosso caso para o oscilador de clok usaremos um cristal de quartzo de 4 MHz e dois capacitores

RETFIE RET From Interrupt

Retorna de uma subrotina

Sintaxi:

retfie

Descrição:

Esta instrução deve ser colocada no termino de cada subrotina de controle das interrupções para retornaro controle ao programa principal.

Esemplo:

org 00Hloop goto loop ;Loop infinito

org 04H ;Interrupt vector

intHandler

retfie ;Retorna da interrupção

Neste codigo o programa principal executa um loop infinito. Se abilitarmos uma das interrupções do16F84 ele não apenas verificará o controle como irá automaticamente ao programa alocado no endereço04H ( no exemplo intHandler), a instrução RETFI determinará então o retorno ao loop principal.

Nota:

Esta instrução não influencia nenhum bit de ststus.

 

instrução RETFIE

http://www.tanzilli.com/pbe/brasiliano/istruzioni/retfie.htm [27/5/2003 13:28:50]