Curso Pratico de PIC

Curso Pratico de PIC

(Parte 1 de 5)

Pic by example (Português)

Introdução Lições Glossario Diretivas Instruções Hardware Downloads

Curso prático sobre PICmicro™

Realisado por Sergio Tanzilli com a colaboração de Tiziano Galizia para PicPoint A tradução do Italiano para o Português é editada pôr Marcio Nassorri

PicByExample é um curso de programação elaborado para quem deseja iniciar pela primeira vez em projétos eletrônicos baseado nos microcontroladores PICmicro produzido pela Microchip Technology Inc.

O curso é direcionado aos principiantes que desejam ingressar pela primeira vez no fascinante mundo da microeletrônica como tambem para os que tem maiores conhecimentos e queiram aprender rapidamente como desenvolver aplicações para os PICmicro.

As lições podem ser lidas pagina pôr pagina como se fosse um livro, seguindo-se os argumentos propostos um por um, ou também selecionando-os diretamente segundo os proprios interesses, descritos no indice de lições.

Os argumentos tratados correspondem aos aspéctos ligados aos projétos do hardware bem como aqueles ligados ao desenvolvimento do software e são amplamente explicados por exemplos práticos e indicações claras para realização das aplicações de teste.

A linguagem de programação utilizada no nosso curso e para realização das aplicações de teste é o ASSEMBLER.

O curso esta escrito inteiramente no formato HTML e pode ser consultado por browsers mais difusos. Durante a leitura será possível acessar através das conecções de hipertexto(link) diretamente ao principal, aos esquemas elétricos e a especificações mais profundas com um simples click do mouse.

O exemplo prático ilustrado faz refência à placa PicTech disponivel em kit, ou podendo ser feita pôr conta própria seguindo-se as instruções contidas no curso.

O curso é completamente gratuito e pode ser acessado diretamente pela internet no endereço http://www.picpoint.com/picbyexample/index.htm . Para quem tiver dificuldade em efetuar o download da pagina, é possivel receber o curso via e-mail diretamente do autor: Sergio Tanzilli tanzilli@picpoint.com

BOA LEITURA E BOM DIVERTIMENTO COM O PICmicro™...!!!

Seremos enormemente gratos aos comentarios, indicações e conselhos, diretamente ao e-mail do autor:

Sergio Tanzilli tanzilli@picpoint.com

Rome - Italy Tel. +39 0335 61.52.295 http://www.ime.eb.br/~pinho/micro/apostila/pic/cursopic/brasiliano/index.htm [04/1/2005 1:36:43]

Indice delle lezioni Indice das lições

1. O que é o PIC ? 2. Realizando um simples lampejador com led 3. Escrita e compilação de um programa em assembler 4. Analisando um codigo assembler 5. Compilando um codigo assembler 6. Programando o PIC

1. A área de programa e o registrador de arquivo 2. A ALU e o registro W 3. O Programa Counter e o Stack 4. Realisando o "Luzes em sequência"

1. A porta A e B 2. Estado de saida da linha de I/O 3. Entrada de teclado

1. O registro contador TMR0 2. O Prescaler

1. Interrupções 2. Exemplo prático de controle de uma interrupção 3. Exemplo prático de controle de mais de uma interrupção http://www.ime.eb.br/~pinho/micro/apostila/pic/cursopic/brasiliano/lezioni.htm (1 of 2) [04/1/2005 1:36:52]

Indice delle lezioni

1. Funcionamnto do Power Down Mode 2. Primeiro exemplo sobre o Power Down Mode http://www.ime.eb.br/~pinho/micro/apostila/pic/cursopic/brasiliano/lezioni.htm (2 of 2) [04/1/2005 1:36:52]

Lição 1

Lição 1Introdução Introdução ao PIC

lO que é um PIC.
lComo realizar um simples circuito de prova.
lComo escrever e compilar um programa em assembler.
lComo programar um PIC.

Al termino desta lição saiba:

Conteudo da lição 1

1. O Que é um PIC 2. Realisando um simples lampejador com led 3. Escrita e compilação de um programa em assembler 4. Analisando um codigo em assembler 5. Compilando um codigo em assembler 6. Programando o PIC http://www.ime.eb.br/~pinho/micro/apostila/pic/cursopic/brasiliano/less1/intro.htm [04/1/2005 1:37:04]

Lição 1 passo 1

Lição 1Passo 1/6 O que é o PIC?

O PIC é um circuito integrado produzido pela Microchip Technology Inc., que pertence da categoria dos microcontroladores, ou seja um componente integrado que em um unico dispositivo contem todos os circuitos necessarios 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, mas internamente dispõe de todos os dispositivos tipicos de um sistema microprocessado, ou seja:

lUma CPU (Central Processor Unit ou seja Unidade de Processamento Central) e sua finalidade é interpretar as
lUma memoria PROM (Programmable Read Only Memory ou Memória Programavel Somente para Leitura) na

instruções de programa.

lUma memoria RAM (Random Access Memory ou Memoria de Accesso Aleatório) utilizada para memorizar as

qual ira memorizar de maneira permanente as instruções do programa.

lUma serie de LINHAS de I/O para controlar dispositivos externos ou receber pulsos de sensores, chaves, etc.
lUma serie de dispositivos auxiliares ao funcionamento, ou seja gerador de clock, bus, contador, etc.

variaveis utilizadas pelo programa.

A presença de todos estes dispositivos em um espaço extremamente pequeno, da ao projetista ampla gama de trabalho e enorme vantagem em usar um sistema microprocessado, onde em pouco tempo e com poucos componentes externos podemos 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 pequeno identificado pela sigla PIC12Cxx dotado de 8 pinos, até chegar a modelos maiores com sigla PIC17Cxx dotados de 40 pinos.

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

Para o nosso curso usaremos um modelo intermediario de PIC o PIC16C84. Este é dotado de 18 pinos sendo 13 http://www.ime.eb.br/~pinho/micro/apostila/pic/cursopic/brasiliano/less1/passo1.htm (1 of 2) [04/1/2005 1:37:19]

Lição 1 passo 1 disponiveis para o 'I/O ou seja para serem ligados ao nosso circuito e de algumas caracteristicas que o tornam um circuito 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 Electrical

Erasable Programmable Read Only Memory, que pode ser rescrita quantas vezes quisermos e que é ideal para o nosso experimento tornando a conecção para a programação on-board, ou seja podemos colocar o programa dentro do chip sem ter que remove-lo do circuito de prova.

Tal caracteristica é plenamente aproveitada em nosso programador YAPP! descrito neste curso e fornecido a qualquer um que queira adiquirir o nosso kit completo PicTech. Em alternativa é possivel utilizar um programador produzido pela 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 neste curso 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 e nomenclatura 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 cada uma(dual in line). Os pinos contrastados em AZUL representam as linhas de I/O disponiveis para a nossa aplicação, o pino em VERMELHO e o PRETO são os pinos de alimentação, e os em VERDE são reservados ao funcionamento do PIC (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 verificar imediatamente o seu funcionamento.

http://www.ime.eb.br/~pinho/micro/apostila/pic/cursopic/brasiliano/less1/passo1.htm (2 of 2) [04/1/2005 1:37:19]

Lição 1 passo 2

Lição 1Passo 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 um programa em assembler, como se compila e como se transfere para o interior da EEPROM do PIC o programa e assim faze-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ão ligados 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 a frequencia de clock utilizada para temporizar todo o ciclo de funcionamento interno do chip. Desta frequencia depende a maior parte das operações interna e em particular a velocidade com que o PIC processa as instruções do programa. No caso do PIC16C84-04/P tal frequencia pode chegar a um maximo de 4Mhz da qual se obtem uma velocidade de execução das instruções par de 1 milhão de instruções por segundo. No nosso caso para o oscilador de clok usaremos um 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 por intermé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 que o PIC devera executar.

http://www.ime.eb.br/~pinho/micro/apostila/pic/cursopic/brasiliano/less1/passo2.htm [04/1/2005 1:37:2]

Lição 1 passo 3

Lição 1Passo 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ça desenvolver seu trabalho.

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

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

que representa exatamente o mesmo valor mas numa forma reduzida. La letra H, escrita no final do valor 0100, indica o tipo 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 a compreençã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 uma inicial 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 da instruçã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 de texto 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 as instruções mnemonicas e todas as outras formas convencionais com que escrevemos o nosso codigo em uma serie de numeros (o opcode) reconhecivel diretamente pelo PIC. Este programa se chama compilador assembler ou assemblador.

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

http://www.ime.eb.br/~pinho/micro/apostila/pic/cursopic/brasiliano/less1/passo3.htm (1 of 3) [04/1/2005 1:37:32]

Lição 1 passo 3

Como já foi dito a primeira operação a ser efetuada é a escrita do codigo assembler e a sua gravação em um arquivo de texto com a extenção .ASM. Para fazer isto aviamos dito para recorrer a um editor ASCII, ou seja um programa de escrita 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 que tomar o cuidado de muda-los para o formato texto e não em seu formato nativo. Isto para evitar que venhamos memorizar antes o caractere de controle de formatação de testo que o compilador assembler não esta preparado para reconhecer.

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

http://www.ime.eb.br/~pinho/micro/apostila/pic/cursopic/brasiliano/less1/passo3.htm (2 of 3) [04/1/2005 1:37:32]

Lição 1 passo 3

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

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 um segundo arquivo produto da Microchip com extensão .INC diferente do tipo que estamos utilizando. No nosso caso o arquivo é o P16F84.INC. Este codigo contem algumas definições da qual dependi o tipo de chip utilizado e que veremos mais adiante.

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

lHEX é o arquivo que contem o codigo de operação o qual sera enviado ao PIC via programador.
lLST é um arquivo de texto na qual vem reportado por inteiro o codigo assembler e a correspondente tradução
lERR contem uma lista de erro de compilação que mostra o numero da linha do codigo na qual esta com erro no

em opcode. Não é utilizavel pela programação do PIC mas é extremamente util para verificar o processo de compilação que o compilador fez. codigo assembler.

O arquivo .LST, .ERR é utilizado somente para controle da compilação. Somente o arquivo .HEX sera utilizado realmente 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 EEPROM do PIC. Mas os formatos refletirão diretamente quando forem transferidos ao PIC em uma forma legivel e com algumas instruções a mais.

Sem entrar em detalhes é util saber que tal formato é diretamente riconhecido pelo programador do PIC que promovera durante a programação a converção em binario e contem, outro opcode outras informações que serão adcionadas aos endereç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 na linguagem assembler.

http://www.ime.eb.br/~pinho/micro/apostila/pic/cursopic/brasiliano/less1/passo3.htm (3 of 3) [04/1/2005 1:37:32]

Lição 1 passo 4

Lição 1Passo 4/6 Analisando um codigo assembler

(Parte 1 de 5)

Comentários