






















































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
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.
Tipologia: Notas de estudo
1 / 62
Esta página não é visível na pré-visualização
Não perca as partes importantes!























































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 ([email protected]).
Seremos enormemente gratos aos comentarios, indicações e conselhos, diretamente ao e-mail do autor:
Sergio Tanzilli ([email protected]) Rome - Italy Tel. +39 0335 61.52.
http://www.ime.eb.br/~pinho/micro/apostila/pic/cursopic/brasiliano/index.htm [04/11/2005 11:36:43]
Indice delle lezioni
http://www.ime.eb.br/~pinho/micro/apostila/pic/cursopic/brasiliano/lezioni.htm (1 of 2) [04/11/2005 11:36:52]
Lição 1
l O que é um PIC. l Como realizar um simples circuito de prova. l Como escrever e compilar um programa em assembler. l Como programar um PIC.
http://www.ime.eb.br/~pinho/micro/apostila/pic/cursopic/brasiliano/less1/intro.htm [04/11/2005 11:37:04]
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:
l Uma CPU ( C entral P rocessor U nit ou seja Unidade de Processamento Central) e sua finalidade é interpretar as instruções de programa. l Uma memoria PROM ( P rogrammable R ead O nly M emory ou Memória Programavel Somente para Leitura) na qual ira memorizar de maneira permanente as instruções do programa. l Uma memoria RAM ( R andom A ccess M emory ou Memoria de Accesso Aleatório) utilizada para memorizar as variaveis utilizadas pelo programa. l Uma serie de LINHAS de I/O para controlar dispositivos externos ou receber pulsos de sensores, chaves, etc. l 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 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
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/11/2005 11:37:22]
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 :
é 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 CL EA R 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.
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:
l .HEX é o arquivo que contem o codigo de operação o qual sera enviado ao PIC via programador. l .LST é um arquivo de texto na qual vem reportado por inteiro o codigo assembler e a correspondente tradução em opcode. Não é utilizavel pela programação do PIC mas é extremamente util para verificar o processo de compilação que o compilador fez. l .ERR contem uma lista de erro de compilação que mostra o numero da linha do codigo na qual esta com erro no 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.
Analisaremos agora linha por linha o conteudo do nosso codigo LED.ASM. Se voce dispõe de uma impressora é util
efetuar uma copia do codigo para poder seguir melhor a nossa explicação. Em alternativa é preferivel que voce visualize o 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 é uma diretiva do compilador assembler que indica a definição de qual microprocessador esta escrito o
nosso codigo. A diretiva não é uma instrução mnemonica que o compilador traduz no respectivo opcode, mas sim uma simples indicação enviada ao compilador para determinar o funcionamento durante a compilação. E neste caso informamos ao compilador que a instrução que acabamos de colocar no nosso codigo é relativa a de um PIC16C84.
A diretiva RADIX serve para informar o compilador que o numero sem a notação, sera entendido como numero
decimal. Ou seja se quisermos especificar, por exemplo o numero hexadecimal 10 (16 decimal) não podemos escrever somente 10 porque ele sera interpretado como 10 decimal, neste caso ecrevemos10h ou 0x10 ou H'10'.
Veja uma outra diretiva. Desta vez indicamos ao compilador a nossa intenção de incluir no codigo um segundo arquivo denominado P16C84.INC. O compilador se limitará a substituir a linha contendo a diretiva INCLUDE com o conteudo do arquivo indicado e vai efetuar a compilação como se fosse ante disso parte do nosso codigo.
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 da diretiva 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 valido durante a compilação. Não será nunca possivel inserir instruções do tipo LED = 3 dentro do codigo quando a determinação dinamica de um valor e de uma variavel é uma operação que recebe a intervenção da CPU do PIC e que sempre deve ser expressa com instrução e não diretiva.
reservado.
O proximo parametro RP0 esta definido tambem no arquivo P16C84.INC com valor 05H e corresponde ao numero do bit que se quer colocar em um. este registrador de arquivo tem 8 bits e coméça pelo numero 0 (bit menos significativo) e vai 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, como veremos na proxima lição, para acessar o registrador de arquivo TRISA e TRISB.
Esta instrução significa: MOV E L ITERAL TO W REGISTER (passar o literal para W) ou seja mover um valor constante para o acumulador W. Como haveremos de ver mais adiante, o acumulador, é um registro particular utilizado pela CPU em todas as cituações em viérmos efetuar uma operação entre dois valores ou em operações de deslocamento entre locações da memória. Na pratica é um registro de apoio utilizado pela CPU para memorizar temporariamente um byte 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 da
direita representa o bit 0 ou o bit menos significativo.
Na proxima instrução temos:
o valor 00011111 esta memorizado no registro TRISA (como para o registro STATUS o TRISA tambem é definido atravé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 0 determinaria em escrita(saida).
Na tabela seguente esta descrito configuração que assumirão os pinios do PIC quando executar esta instrução:
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:
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 com a instrução movlw 11111110B ) no registro TRISB. O significado de movwf é MOV E W TO F ILE REGISTER ( passe o valor de W para o registrador de arquivo).
Ésta instrução é similar a bsf vista anteriormente, com a diferença de coloca-lo em zero. E(bcf) significa neste caso B IT C LEAR F ILE 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 portA e portB, e banco 1 da qual faz parte TRISA e TRISB. Uma descrição mais detalhada veremos mais a frente neste curso.
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 faz
Estas duas instruções simplesmente apagam o led e retornam o programa a inicio do ciclo de lampejamento.
Como descrito anteriormente esta subrotina coloca um retardo de cerca de um segundo e pode ser chamada atravéz do programa com instrução call Delay.
Vejamos como funciona:
Delay e DelayLoop são dois label. Delay identifica o indereço de inicio da subrotina e sera utilizado pela chamada atraves do corpo do programa principal. DelayLoop sera chamado internamente pela subroutina e serve como ponto de entrada 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 implementar e pode ser utilizado quando não se deseja que o PIC faça-o.
CL EA R FILE REGISTER zeramento de duas locação da ram reservada anteriormente com a instrução:
Esta duas locações são adjacentes a partir do endereço referenciado pelo label Count.
A instrução DEC REMENT F ILE REGISTER, S KIP IF Z ERO ou seja decremente o conteudo do registro e pule a proxima instrução se for zero(e neste caso Count pula a proxima instrução se o valor devolvido for zero). Se o valor devolvido for diferente de zero executara a proxima instrução:
Que manda a execução ao cilclo de retardo. Uma vez zero o contador Count ira a proxima instrução:
Que decrementara o registro seguinte até que este chegue a zero. O registro Count+1 em particular sera decrementado de um até 256 decrementos de Count.
Quando então Count+1 chegar ao valor zero a instrução
que significa RETURN FROM SUBROUTINE determinara a saida da rotina de retardo e retornara a execução da instrução imediatamente após call Delay.
E por fim a diretiva END que indica ao compilador o final do codigo assembler.
No proximo passo compilaremos o codigo LED_1.ASM e programaremos o PIC com o codigo gerado pelo compilador
assembler.
Pressionamos uma tecla como requisita o MPASM e vamos ver que arquivo nos foi gerado. Se tudo deu certo deveremos ver os seguintes novos arquivos:
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.
Para programar o PIC nessa lição faremos referencia ao programador YAPP contido no hardware PicTech fornecido com a versão comercial deste curso. A documentação do software para realização tanto do PicTech quanto do YAPP! esta descrita em nossa pagina hardware 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 o seguinte comando no prompt do DOS:
com qual enviamos ao YAPP (conectado, por exemplo, na porta serial COM2) o arquivoLED.HEX contendo nosso programa 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 sem nenhum erro.
Terminada a programação deveremos ver o LED 1 lampejar na placa PicTech, como escrito no programa.
http://www.ime.eb.br/~pinho/micro/apostila/pic/cursopic/brasiliano/less1/passo6.htm [04/11/2005 11:38:04]