Você está na página 1de 51

Page 1 of 12

Curso de Programao PIC Introduo


Este Curso de Programao foi projetado para introduzir o NOVATO na programao dos microcontroladores PIC12C508A e PIC16F84. O '508A o "beb" da gama de microcontroladores com 6 linhas que podem ser configuradas como entrada ou sada (O pino GP3 s pode ser uma linha de entrada) e o 'F84 a verso de "uma porta e meia" com 13 linhas. Ambos so dispositivos muito pequenos no mundo "micro" mas eles so a escolha mais certa para comear. Antes de comear este curso ns preparamos uma discusso, por Jim Brown BSc(Eng), HDipEdAd, GDE (Inteligncias), sobre o microcontrolador PIC16F84. Leia apenas os primeiros 25% e volte ao nosso curso.

Voc pode ler gradualmente depois o restante.


A pinagem para os dois chips que estamos cobrindo neste curso a seguinte:

Page 2 of 12

ALIMENTANDO UM PROJETO
Todos os projetos precisam ser alimentados a partir de uma fonte de energia. Esta pode ser uma bateria, uma fonte de alimentao ou mesmo um conjunto de clulas solares. Clique aqui para um artigo sobre Alimentando um Projeto.

OS PICs
Ns escolhemos estes dois microcontroladores da gama de dispositivos PIC pois eles so os mais baratos e os melhores (para o novato). Voc ver o que ns queremos dizer, E CONCORDAR, depois que voc houver lido o curso. Talvez voc esteja querendo saber por que ns produzimos tantas informaes sobre programar estes chips, uma vez que h uma quantidade enorme j disponvel em livros e em websites. A razo que a informao geralmente de uma natureza altamente tcnica e no projetada para orientar o REAL NOVATO a programar. O que necessrio um curso para pessoas absolutamente leigas. Um que introduza a menor quantidade de complicao para conseguir fazer um programa pronto e funcionando. E isso o que ns fizemos. Voc no tem que saber lgebra Booleana, matemtica complexa ou o efeito de XOR'ing em um arquivo para ser capaz de programar. Ns fizemos tudo de um modo simples. O curso tambm lhe mostra como conectar os chips a dispositivos externos e aproveitar as idias de um projeto aplicando-as em outro voc poder criar um circuito totalmente novo com o mnimo de conhecimento tcnico. H uma coisa surpreendente sobre programar. Um programa pode ser construdo usando-se pensamento altamente complexo ou pensamento muito simples. O resultado final ser o mesmo, mas a abordagem mais simples poder conter mais instrues para

http://www.novaeletronica.net/q/n5/cursopic/cursopic_1.htm

03/12/2009

Page 3 of 12

alcanar o resultado final. Mas quem se preocupa com algumas instrues a mais quando o micro estiver processando a 1.000.000 instrues por segundo!? Nos comearemos com um programa bem simples, com cinco linhas para acender um LED com um microcontrolador PIC12C508A.

SetUp MOVLW 3E TRIS 06 TRISB

;Torna GP0 sada ;Carrega o arquivo

Out0 MOVLW 01 ;Carrega 1 em W MOVWF 06 ;Torna GP0 HIGH GOTO Out0 ; V para Out0

Este o programa mais simples para o '508A. Ele acende um LED como mostrado na animao abaixo: Clique na animao abaixo e voc ver o LED conectado a GP0 (General Purpose IN-OUT line ZERO - Pin 7) acender:

O que este programa est fazendo:


Nas primeiras duas linhas a porta de entrada/sada configurada de forma que a primeira linha (GP0) uma sada. GP0 LIGADO

http://www.novaeletronica.net/q/n5/cursopic/cursopic_1.htm

03/12/2009

Page 4 of 12

(ON) e isso iluminar o LED conectado linha. O programa vai para a quinta linha e mandado de volta terceira linha. As instrues 3, 4 formam um loop e o micro o executa repetidamente at que a alimentao seja interrompida. O diagrama acima muito simples. A chave de fora poder LIGADA o LED acende. Voc no precisa de um microcontrolador para acender um LED mas este o circuito mais simples para explicar como o microcontrolador opera. O ponto importante para se notar a operao do micro. Ele no executa as 5 instrues do programa acima e para. Ele mantm o programa em andamento uma vez que o oscilador interno do chip continua operando todo o tempo. O conjunto de instrues para o PIC12C508A no tem uma instruo PARE ou INTERROMPA, assim voc tem que escrever o programa de forma que o micro execute os laos (loops) ao redor das vrias instrues. Estas instrues s vezes so chamadas instrues "que-no-fazem-nada". No exemplo acima, o micro executa o loop ao redor das instrues 3, 4 e 5, executando 3, 4, 5, 3, 4, 5, 3, 4, 5, etc. O fluxograma para o micro mostrado abaixo:

USANDO UM PIC16F84
O mesmo programa pode ser escrito para o microcontrolador PIC16F84. Embora os dois chips no tenham exatamente o mesmo conjunto de instrues, aproximadamente 90% desse conjunto o mesmo e neste curso ns iremos nos concentrar nas instrues que so comuns a ambos os chips. As instrues para acessar as linhad de GP0 a GP5, para o PIC12C508A so as mesmas para acessar de RB0 a RB5 para o chip de PIC16F84. Isto significa que muitos dos programas e projetos que ns estaremos apresentando podem ser "queimados" em qualquer um dos chips. "Queimar" um nome antigo para "programar" e ns o

http://www.novaeletronica.net/q/n5/cursopic/cursopic_1.htm

03/12/2009

Page 5 of 12

usamos para diferenciar entre a operao de escrever um programa - geralmente chamada de Programao, da operao de carregar um programa em um chip - tambm chamada de Programao. Assim que um projeto requeira mais de 5 ou 6 linhas (linhas de entrada/sada) o micro PIC16F84 ser usado. Mas isto est se tornando muito avanado rpido demais; voltando ao programa mais simples, ele pode ser queimado ou pode "baixado " em um PIC16F84 e o circuito abaixo acender um LED. A instruo: MOVWF LIGAR (tornar HIGH) GP0 para um PIC12C508A ou Linha RB0 para um PIC16F84. O PIC12C508A tem um oscilador interno e nenhum componente externo necessrio. O PIC16F84 tem alguns componentes de oscilador internos e voc tem que acrescentar os componentes de tempo (o resistor e capacitor). Estes dois componentes so mostrados no diagrama abaixo:

FAZENDO UM LED PISCAR


Suponha que voc queira fazer o LED piscar, ficando aceso por 0,1s e apagado por 0,9s. Isso requer um programa de 4 etapas mostrado no grfico abaixo:

http://www.novaeletronica.net/q/n5/cursopic/cursopic_1.htm

03/12/2009

Page 6 of 12

A partir do fluxograma voc pode ver que precisa fazer 4 coisas: 1. LIGAR uma sada 2. Manter a sada LIGADA por um perodo de tempo chamado tempo de Atraso 3. DESLIGAR a sada 4. Manter a sada DESLIGADA por um perodo de tempo chamado tempo de atraso O que voc precisa manter em mente que o processador (o corao do chip do microcontrolador) deve ser mantido funcionando todo o tempo. O chip do PIC12C508A contm um oscilador a 4MHz e esta freqncia dividida internamente por 4 de forma que uma instruo seja processada a cada microssegundo. Isto torna muito fcil a criao de rotinas de atraso precisas. O chip do PIC16F84 exige componentes externos para completar o circuito do oscilador. Usando um resistor 4k7 e um capacitor 22p o circuito do oscilador operar a 4MHz Em nosso exemplo ns podemos criar um atraso sabendo que cada instruo leva 1 microssegundo para executar ou 2 microsegundos se um desvio estiver envolvido. Isto significa ns precisamos produzir uma sub-rotina "que-no-faz -nada" de 100,000 ciclos para criar um atraso de 0.1 segundos. Para produzir o atraso de 0.9 segundos, a rotina de atraso acima mencionada chamada 9 vezes. Para criar a rotina necessria para fazer o LED piscar, voc pode comear do zero lendo as notas ns provemos em nossos captulos ou ir direto para o captulo Biblioteca de Rotinas. Toda a informao que voc precisa para escrever um programa em um gabarito est contida na 24 deste curso.

http://www.novaeletronica.net/q/n5/cursopic/cursopic_1.htm

03/12/2009

Page 7 of 12

A pgina contm um arquivo compactado .zip chamado: Blank_F84.zip e o arquivo dentro dele chamado Blank_F84.asm. Carregue-o e salve conforme detalhado na pgina. Com isso voc ser capaz de escrever programas em um editor de texto e execut-los em um PIC16F84. Estas so as linhas de cdigo que voc precisar:
FlashLED1 BSF 03h,5 MOVLW 00 MOVWF 06 BCF 03h,5 BSF 06,0 CALL Delay1 BCF 06,0 MOVLW 09 MOVWF 0C CALL Delay1 DECFSZ 0C GOTO AA1 GOTO Loop1 ;Seleciona Page1 ;para tornar GP0 sada ;Seleciona Page0 ;CONFIGURA o bit0 como HIGH ;Torna bit0 LOW ;Coloca 9 em W ;0C o arquivo de loops

Loop1

AA1

Delay1 DelX

MOVLW 82h MOVWF 1A DECFSZ 1B GOTO DelX DECFSZ 1A GOTO DelX RETLW 00

;130 loops ;256 decrementos ;instruo de 2 s

Este programa LIGA um LED por 0,1s (rotina Delay1) ento o APAGA e o mantm assim por 0,9s chamando a rotina Delay1 9 vezes.

A seguinte animao mostra o resultado de queimar o cdigo em um '508A:

http://www.novaeletronica.net/q/n5/cursopic/cursopic_1.htm

03/12/2009

Page 8 of 12

O programa pode ser baixado em um PIC16F84 e o circuito abaixo far o LED piscar:

Mas, antes que voc se apresse em fazer qualquer coisa, voc tem que entender que um chip PIC12c508A s pode ser queimado UMA VEZ porque as clulas que mantm o programa recebem uma carga durante a programao e esta carga no pode ser removida. O chip possui garantia para manter um programa por muitos anos mas voc s usa este chip quando estiver completamente satisfeito com um programa e o projeto estiver pronto para concluso.

DOIS CHIPS
Este curso concentra-se em dois chips. O PIC12C508A e PIC16F84. No momento voc ainda no sabe o quanto so poderosos estes chips e o tipo de projetos que podem ser desenvolvidos com eles. Este conhecimento vir "durante o curso", ento vamos explicar a nossa poltica: Primeiramente ns tentamos usar um PIC12C508A para um projeto. Se o projeto requer menos que 5 linhas de entrada e/ou sada, o PIC12C508A ser satisfatrio. Caso contrrio voc ter que usar o PIC16F84. Programar um PIC16F84 fcil porque ele programado no Programador Multi Chip e colocado no projeto em desenvolvimento. Se o projeto precisar de um PIC12C508A, voc precisar de um adaptador. O adaptador contm um PIC16F84 e possui os componentes do oscilador soldados aos pinos. Um soquete CI de 8 pinos soldado ao soquete de 18 pinos e ajustado ao projeto em

http://www.novaeletronica.net/q/n5/cursopic/cursopic_1.htm

03/12/2009

Page 9 of 12

desenvolvimento. O chip PIC16F84 tirado do adaptador e "queimado" no Programador Multi Chip. Ento colocado no adaptador e funciona precisamente como um chip PIC12C508A. Quando o programa funciona com perfeio, voc pode queimar um chip PIC12C508A real e inclu-lo no projeto. O diagrama abaixo mostra como o adaptador segura o chip PIC16F84 e se adapta a um soquete de 8 pinos no projeto voc est desenvolvendo.

Este o modo mais barato de montar um projeto com o chip PIC12C508A. Qualquer outro modo seria muito mais caro O PIC12C508A s pode ser programado UMA VEZ e o desenvolvimento de um projeto pode precisar de at 50 ou mais "ajustes" at que esteja operando corretamente. Voc pode usar 50 chips PIC12C508A, ou comprar a verso EPROM. Estes so bem mais caros e voc precisar de pelo menos de 5 a 10, porque eles precisam ser apagados durante 20 minutos antes que um programa novo possa ser gravado e isto reduz a velocidade e aumenta o tempo de desenvolvimento. Voc tambm precisar de uma lmpada apagadora de EPROM. Nosso adaptador de 8 para 18 pinos custa muito pouco e torna o desenvolvimento de um programa bastante simples. Voc pode programar o PIC16F84 com instrues que funcionam com PIC12C508A e o programa pode ser queimado em um PIC12C508A. Para o exemplo ns usamos o nosso projeto de Provador Lgico. Esse projeto usa um chip PIC12C508A de 8 pinos e, utilizando o adaptador de 8 para 18 pinos e um chip PIC16F84, um programa pode ser desenvolvido a quase NENHUM CUSTO. Um truque inteligente ajustar um chip de PIC a uma soquete para CIs e manter os dois conectados ao se transferir as instrues do programador para um projeto. muito mais fcil de remover um chip do soquete (no projeto) com os seus dedos. Veja a fotografia abaixo:

http://www.novaeletronica.net/q/n5/cursopic/cursopic_1.htm

03/12/2009

Page 10 of 12

O chip PIC encaixado em a um soquete de CI para fcil remoo durante a programao.

O diagrama abaixo mostra o PIC16F84 sendo queimado no Programador Multi Chip, encaixado no adaptador de 8 para 18 pinos e conectado ao projeto do Provador Lgico:

Adaptando o chip PIC (e o soquete CI) no adaptador e a um projeto em desenvolvimento.

http://www.novaeletronica.net/q/n5/cursopic/cursopic_1.htm

03/12/2009

Page 11 of 12

Por qu ns usamos o PIC12C508A?


O '508A bem mais barato que o '84 e se o seu projeto for muito simples, isso o ideal. Podem ser criados projetos bem pequenos e baratos com o PIC12C508A e isto abre um campo inteiramente novo para outros projetos. O PIC16F84 pode ser programado e apagado mais de 1000 vezes e ideal para o trabalho de desenvolvimento. H muitos projetos desenvolvidos com base no PIC12C508A, mas os custos de desenvolvimento sero considerveis se voc no usar a nossa abordagem. Como voc ler nos captulos que seguem, este curso completamente PRTICO e o introduz na rea da programao com a menor despesa possvel. Por causa disto ns no usamos nenhum dos conceitos de "STAMP" uma vez que estes so muito caros e reduzem enormemente a capacidade do chip. Nosso objetivo lhe introduzir em programao, assim voc poder produzir projetos com microcontroladores e at vender chips programados por cerca de US$ 5.00 cada (em quantidades grandes). Isto algo que nunca havia sido cogitado anteriormente. por isso que este curso se destaca de todos os outros. Assim que voc entrar na programao PIC, voc deve procurar na Internet por grupos de usurios de PIC, pois eles tm um mundo de informaes valiosas em seus sites, o que lhe ajudar em muito a entender programao PIC. Os chips que ns escolhemos lhe permitiro criar projetos equivalentes a projetos que utilizavam 6 ou 8 chips (ou at mais na antiga tecnologia de portas, contadores etc) e produzir artigos como fechaduras eletrnicas que usam carto de acesso, etiquetas de segurana que transmitem a at um metro eletrnico ou algo assim, displays, jogos, dispositivos de telefonia, alarmes, interagir com dispositivos conectados, osciladores, projetos de robtica e muito mais,. Como disse um programador: "Voc nunca mais usar um temporizador 555!. Todas as idias e projetos que j foram produzidos para um mdulo do tipo "STAMP" podem ser criadas agora em um nico chip e produzido por menos que 1/4 do custo. Surpreendentemente, nosso curso ter uma atrao enorme para queles que j programam com algum desses mdulos caros. Com bastante freqencia aparecer alguma idia conveniente para se comercializar. a que o projeto precisa ser convertido para um desenho bem mais barato para torn-lo comercializvel. tambm a que ns entramos. O custo de um chip e uma placa de CI para prototipao raramente ultrapassa o valor de US$ 5.00, permitindo a voc lanar seu prprio produto. Mas obviamente voc ter que comear do princpio e se familiarizar com o cdigo

http://www.novaeletronica.net/q/n5/cursopic/cursopic_1.htm

03/12/2009

Page 12 of 12

de instruo e capacidades do chip. Na prxima seo ns apresentamos vrios projetos que usam ambos os chips. Alguns dos projetos so simples enquanto outros so bastante complexos. Porm eu posso o assegurar eles apresentam menos que a metade da complexidade de um projeto que no utilize um microcontrolador. Toda a programao "linear" (muito simples) e passando por cada linha voc poder ver exatamente o que est sendo feito a cada passo. O problema maior com o conceito de STAMP o custo de duplicao. O primeiro prottipo pode custar de US$ 40 a US$ 70, mas as cpias adicionais vo custar mais que US$ 20. Com a nossa abordagem voc pode vender um chip completamente programado por de US$ 5.00 a US$ 8.00 (eles custam to pouco quanto US$ 2 em grandes quantidades), e uma placa de CI montada por menos de US$12.00. Isto lhe d uma vantagem inicial no mundo do marketing e o torna competitivo em fabricar e vender as suas idias. Muitos diro que o "conceito de STAMP" pode ter um programa completo e funcionando com bem poucas instrues, mas ns temos contornamos isso projetando um conjunto de rotinas para executar muitas das operaes voc necessitar no desenvolvimento de um programa e as colocamos em uma BIBLIOTECA DE ROTINAS . Desse modo voc poder ter seus programas completos e funcionando com pouqussimo esforo. A vantagem da nossa abordagem que o micro opera em velocidade mxima e o espao de memria de programa pode ser utilizado completamente, e nenhum chip adicional exigido para armazenar o programa e todas as linhas de entrada-sada do chip esto disponveis. Realmente no h nenhuma comparao entre os dois conceitos e as diferenas no sero mencionadas novamente. A vantagem maior de fazer coisas do nosso modo que voc tem o controle total sobre o programa. Se algo no funcionar, voc no tem que imaginar se a rotina provida por "STAMP ou CLONE" no est executando a sua funo corretamente ou se o seu cdigo tem um bug (erro de programao). Usando diretamente as instrues do micro (do conjunto de aproximadamente 33 instrues) voc pode ver o que est acontecendo exatamente e por que no est funcionando.

http://www.novaeletronica.net/q/n5/cursopic/cursopic_1.htm

03/12/2009

Page 1 of 6

VISO GERAL
As coisas que voc precisa para comear Pgina 2 PAGINAS : | 01 | 02 | 03 | 04 | 05 |
Este curso contm toda a informao que voc precisa para comear o seu projeto. Mas antes de voc comear na "estrada do desenvolvimento", h algumas coisas preliminares que precisam ser cobertas:

O Microcontrolador
Um microcontrolador um "computador-em-um-chip. " Os dois microcontroladores que ns escolhemos para este curso so os mais bsicos e provem o ponto de partida para qualquer um que queira realizar um projeto "computadorizado". Eles so o PIC12C508A e o PIC16F84. As iniciais "PIC" so geralmente adotadas, significando "Controlador de Interface Programvel" (originalmente em ingls Programmable Interface Controler). Os chips PIC se tornaram conhecidos como o Sonho dos Programadores. Eles so fceis trabalhar com e todas as informaes tcnicas necessrias para entender a sua operao encontram-se disponveis GRATUITAMENTE na Internet e so suportadas por grupos de entusiastas de PIC, no mundo inteiro. Mas a informao muito vasta e desconexa e alguma parte dela de difcil acesso. Ns reunimos muito dessa informao e a apresentamos de uma maneira que possa ser compreendida por um hobista iniciante. Basicamente um microcontrolador capaz de armazenar e executar um programa. Ele pega as instrues ou dados do programa, e/ou de fontes externas, e fornece a sada do processamento em dispositivos para criar um resultado. Ele pode efetivamente tomar o lugar de um ou mesmo centenas de circuitos integrados e componentes simples. Isto torna o projeto de microcontrolador muito mais simples em aparncia do que o projeto que ele est substituindo. O programa pode ser projetado para executar clculos matemticos ou analticos e oferecer uma resposta rpida e deste modo podem at parecer que tem "inteligncia. O microcontrolador mais simples da famlia PIC o PIC12C508A. um dispositivo de 8 pinos com 5 linhas de entrada/sada mais uma linha apenas de entrada. Os outros dois pinos so para o plo positivo (+5v) e plo 0v (tambm chamado plo negativo ou terra). O diagrama abaixo mostra as atribuies de cada pino:

As linhas de sada so chamadas GP (de Propsito Geral -general purpose) e so identificadas por GP0, GP1, GP2, GP3, GP4, e GP5. O diagrama abaixo mostra como o chip conectado fonte de alimentao.

http://www.novaeletronica.net/q/n5/cursopic/cursopic_2.htm

03/12/2009

Page 2 of 6

Conectando um PIC12C508A aos terminais da fonte O PIC12C508A tem um oscilador interno e assim nenhum outro componente necessrio para t-lo operacional. O oscilador interno no absolutamente preciso e se voc precisar de uma contagem de tempo precisa, voc pode adicionar um cristal como mostrado acima. Isto reduz a capacidade do chip em de entrada/sada. O circuito acima tem um boto conectado GP3. Considerando que esta uma linha exclusivamente de entrada, este o melhor lugar para conectar o interruptor. O interruptor pode ter qualquer funo. Depende do programa. Pode ser projetado para ser: reset, comeo, incremento, decremento, pnico, aumento de brilho, mudana de uma melodia, etc etc. O chip executar feitos surpreendentes; tudo depende do seu programa. O programa na pgina anterior tem 5 linhas, o chip pode armazenar aproximadamente 511 linhas de programa e um programa deste tamanho realmente "realizador"! Isso significa mais de 10 pginas de exerccios de programas! Mas a coisa principal que limita seu uso o nmero de sadas. Ele s tem 5 sadas. Por isso que ns inclumos o prximo chip da famlia, o PIC16F84.

O PIC16F84 tem 13 linhas e tomar lugar em seus projetos maisavanados. Voc tambm pode usar um PIC16C84. Ambos os chips so quase idnticos exceto que o PIC16C84 tem os arquivos de 0C a 2F enquanto que o F84 tem arquivos at 4F. O circuito bsico para um PIC16F84, conectado aos plos da fonte, mostrado abaixo:

http://www.novaeletronica.net/q/n5/cursopic/cursopic_2.htm

03/12/2009

Page 3 of 6

Conectando um PIC16F84 aos terminais da fonte O chip requer "componentes de contagem de tempo" conectados linha "clock in" para completar o circuito de oscilador. Estes componentes permitem ao chip produzir uma freqncia (chamada de pulso de clock) na linha "clock in" e ento o micro executar as instrues do programa. Escolhendo um resistor 4k7 e um capacitor de 22p, o chip operar a 4MHz. O chip pode ser operado a qualquer freqncia, e diretamente a 0Hz! (Isto chamado de single-steppinng) O princpio deste curso est em produzir o programa, queim-lo no chip e executar uma determinada tarefa. A operao de "queimar" tambm chamada de "programao" e para realizar essa tarefa ns provemos dois projetos de programao. Um um programador independente, o Programador Multi-chip, e o outro um programador "intercalado no circuito, o Display 5x7. Uma das vantagens do PIC16F84 (e do PIC16C84) a capacidade de programao in-circuit". O projeto deve ser planejado para progamao "in-circuit", e pela incluso de um soquete de 4 pinos, o chip pode ser atualizado sem precisar ser removido da placa. O soquete permite levar 4 linhas porta serial de um computador para programao "in-circuit". Isso apresenta muitas vantagens. Um produto bsico pode ser projetado para vrios clientes ou operaes diferentes, usando tecnologia de montagem de superfcie (surface mount technology - SMT), e programado na ltima fase da montagem. O programa apropriado pode ento ser instalado. Uma vez que os produtos so montados "vazios", o software mais recente pode ser instalado, e atualizaes podem ser adicionadas sem qualquer trabalho de re-projeto ou remoo do chip. O produto tambm pode ser atualizado a qualquer hora, bastando conect-lo a um programador.

Construindo os Projetos
Os projetos deste curso podem ser construdos a partir de sua prpria fonte de componente, geralmente chamados de peas de uma "caixa-de-sucata" ou de um kit disponvel simplesmente clicando-se no boto "Compre-me", ao lado do artigo. Voc pode construir os projetos de seus prprios materiais mas o problema maior a placa de CI. Ela o um artigo que faz o projeto parecer

http://www.novaeletronica.net/q/n5/cursopic/cursopic_2.htm

03/12/2009

Page 4 of 6

profissional e todas as placas providas nos equipamentos so de fiberglass. Todas elas tm uma camada (chamada uma legenda) e uma mscara de soldagem. Os pontos de solda so todos pr-estanhados para facilitar a soldagem e as extremidades da placa so acabadas, sem rebarbas de corte. Algumas destas caractersticas no podem ser obtidas quando voc faz a sua prpria placa de CI,e, embora eu tenha que confessar que eu fiz alguns tbuas em meus primeiros dias, assim que eu adquiri uma feita por um fabricante de placas de CI, eu nunca mais voltei para o "feito-em-casa". Pelo baixo custo de uma placa o projeto aparentar ser 1000% melhor. Em essncia, eu recomendo que voc use uma placa de CI pr-fabricada preferivelmente a uma matriz ou breadboard (normalmente uma placa de plstico, vazia e perfurada, que usada como suporte para prottipos de circuitos eletrnicos). A chance de um engano de circuito eliminada e voc pode ver exatamente onde cada componente colocado. Todas as placas esto disponveis separadamente, assim no h nenhuma desculpa para no produzir o melhor projeto possvel. Agora, vamos aos componentes. Todos os componentes usados nos projetos so "padro" e podem ser comprados em qualquer loja de componentes eletrnicos. S h um problema. As peas usadas nos kits so as menores disponveis e o espaamento entre os furos para soldagem espaando foi projetado adequadamente a elas. Se voc for usar componentes do "estilo antigo", eles no vo se ajustar e ficaro salientes na placa. Este , especialmente, o caso de chaves, plugues, soquetes de CI e capacitores eletrolticos. Fique avisado que os kits providos para os cursos no so "kits de sobras"; eles no contm excessos ou artigos sem marca. Muitos kits so comprados por hobistas em lotes de 10 ou 20, so montados e comercializados por eles como um negcio. Ns temos muitos clientes cujo negcio gira exclusivamente em torno dos nossos produtos, e isso um dos objetivos deste curso. Como ns dissemos na introduo, os projetos lhe mostram como criar um projeto de microcontrolador ao custo mais baixo possvel, mantendo tudo "em-casa". Tudo o que voc tem que fazer manter seus olhos abertos para uma possvel aplicao. Um cronmetro simples ou controlador, especialmente no campo mdico, ou algo para ajudar uma pessoa a resolver um problema. Pode ser um vibrador que funcione como campainha para uma pessoa surda, uma interface de detector de lcool para prevenir a conduo um carro com uma leitura mais de 0.03% ou 0.08% dependendo da legislao local, um pilltimer para lembrar idosos de tomar seus remdios, um detector de volta para impedir algum com algum problema de ficar vagando sem retorno. Os melhores projetos aparecero quando voc menos esperar por isso, e se voc tiver feito o seu dever de casa em projetos de microcontroladores, voc poder pr a idia em prtica.

As coisas que voc precisa:


O nico artigo que voc precisa comprar para comear o Kit laboratrio 1, cabo serial para ligar ao computar ao programador de pic NE100. Este equipamento est disponvel por preo bem acessvel . O Kit laboratorio 1 para o PIC16F84 lhe mostra mais de 15 experincias para mostrar como escrever um programa. O software necessrio para o programador de chip "NE100" fornecido por um programa chamado ICPROG. Esse programa tambm est disponvel para download dentro de um arquivo zip neste site da Web. Voc tambm precisar de um editor de texto como NotePad ou TextPad, no qual

http://www.novaeletronica.net/q/n5/cursopic/cursopic_2.htm

03/12/2009

Page 5 of 6

voc escrever seus programas. E voc precisar salv-lo como um arquivo .asm.

A seguir:
Depois de montar o Kit Laboratrio 1 e efetuar os experimentos voc estar pronto para a prxima fase. Ela pode ser qualquer projeto que necessite de um chip PICF84, por exemplo o Provador Lgico (verso F84). O prximo passo poder "programar" (queimar) os chips PIC12c508A. Isto lhe dar a capacidade de produzir o menor e mais barato produto para o seu projeto. Voc precisar comprar o Programador Multi-chip. Esse programador lhe permitir queimar chips PIC12C508A e voc poder construir os outros projetos desta revista. Aps ter trabalhado com ambos os chips, voc estar pronto para projetar alguma coisa por si mesmo.

E mais ainda . . .
Um dos captulos mais curtos neste curso o mais importante. Ele "Desenvolvendo Um Projeto." Esse captulo contm as ferramentas de desenvolvimento ns criamos para lhe ajudar a comear o seu projeto. Possui mdulos para lhe ajudar a desenhar um projeto via "breadboarding" e quando voc estiver contente com o funcionamento do circuito, voc pode transferir os componentes para uma placa matriz e pode juntar os componentes com fios de arame de cobre estanhado. Uma vez que o projeto esteja funcionando uma tarefa mais simples projetar uma placa de circuito impresso - simplesmente siga o mesmo layout e garantido que o projeto funcionar. Como um professor muito inteligente disse um dia: "Qual a diferena entre voc e um neurocirurgio? A resposta dele: "Duas Semanas." Voc pode aprender qualquer coisa em um espao muito curto de tempo se voc se aplicar e tiver as ferramentas e equipamentos certos. Este curso tem a informao que voc precisa e tudo que voc tem que fazer "absorv-la. Eu estou certo que voc concordar. Abaixo, um grfico das caractersticas que ns cobrimos. Clique nos links azuis e voc ser direcionado para a pgina correspondente:

http://www.novaeletronica.net/q/n5/cursopic/cursopic_2.htm

03/12/2009

Page 6 of 6

PAGINAS :

| 01 | 02 | 03 | 04 | 05 |

http://www.novaeletronica.net/q/n5/cursopic/cursopic_2.htm

03/12/2009

Page 1 of 7

25mA
A corrente de operao para cada linha de sada Pgina 3 PAGINAS : | 01 | 02 | 03 | 04 | 05 |06 | 07 |
Cada linha de sada de um PIC12c508A pode entregar um mximo de 25mA enquanto que o microcontrolador PIC16F84 pode entregar um mximo de 20mA e receber 25mA. Ns permitimos um mximo de 25mA para todas as situaes para manter as coisas mais simples.

O que isso significa?


Significa que qualquer dispositivo conectado a uma sada tem que receber 25mA ou menos. Se necessitar mais do que os 25mA, um transistor de buffer (tambm chamado de transistor amplificador de corrente) deve ser somado e isto ser discutido logo mais adiante. Porm, h outro modo para limitar a corrente - com a adio de um resistor limitador de corrente. Um dispositivo tpico que requer um resistor limitador de corrente o LED. Um LED deve ser alimentado com 25mA ou menos para funcionar corretamente. Mas voc no pode conect-lo diretamente sada de um microcontrolador. Isso pode parecer uma contradio, porque a sada de corrente de um microcontrolador 25mA e um LED requer 25mA. O ponto tcnico este: A linha de sada de um microcontrolador capaz de entregar mais que 25mA e um LED capaz de receber mais do que 25mA e se os dois estiverem conectados juntos diretamente, um dos transistoresdriver no chip ser danificado. Para limitar a corrente a 25mA, um resistor deve ser conectado em srie com os LEDS. Ele chamado um resistor limitador de corrente. Definir o valor do resistor limitador de corrente requer alguma matemtica mas isto muito fcil quando voc sabe como.

25mA
A corrente levada por um dispositivo chamada a CORRENTE DE CARGA. Vinte e cinco milli-amperes no significam muito em termos de eletricidade mas em eletrnica, impressionante o que pode ser conseguido. 25mA so 0.025 A e isso no suficiente para fazer um motor funcionar ou acender uma lmpada incandescente mas h vrios dispositivos que podem ser acionados 1. LEDs (Light Emitting Diodes) requerem at cerca de 25mA para iluminao total. 2. Membranas Piezo requerem uma corrente muito baixa e podem ser acionadas diretamente por uma linha de sada. 3. Rels de baixa corrente podem ser acionados diretamente contanto que operem em 25mA e 5v. Se forem necessrios mais de 25mA, um transistor driver (tambm chamado de transistor de amplificao ou estgio de amplificao) ser necessrio. A especificao para a linha de sada de um microcontrolador PIC 25mA e 5v. Em outras palavras a linha de sada tem uma voltagem de sada de 5v e corrente mxima que podem ser fornecida por ela de 25mA. A linha de sada vai, teoricamente, entregar mais que 25mA, mas o transistor no chip pode ser danificado (aquecer demais) se uma corrente mais elevada fluir. A corrente fornecida pela linha de sada determinada pela resistncia do

http://www.novaeletronica.net/q/n5/cursopic/cursopic_3.htm

03/12/2009

Page 2 of 7

dispositivo (ou dispositivos), conectado(s) linha. O dispositivo mais simples um resistor como mostrado na fig.1:

Se o valor do resistor for muito baixo, mais que 25mA fluiro. Se a resistncia for alta, menos que 25mA fluiro. O fluxo da corrente no determinado pelo chip mas pelo valor do resistor. O resistor chamado RESISTOR de CARGA ou simplesmente de CARGA. O VALOR DO RESISTOR DE CARGA A resistncia do resistor de carga determinada pela Lei de Ohm. Ns sabemos que a voltagem na linha 5v. Esta V na frmula. A corrente mxima disponvel 0.025A = I na frmula. A Lei de Ohm declara: I = V/R (Corrente igual a voltagem dividida pela resistncia). Esta equao pode ser re-organizada assim: R = V/I Colocando-se os dois valores na equao temos: R = 5/.025 = 200 = 200ohms. Um resistor de 200 ohm conectado a uma linha de sada permitir que fluam 25mA quando a sada for ALTA (HIGH). Esta s uma explicao terica sobre como um resistor em uma linha de sada no executar nenhuma funo! No far nada por si s apenas ficar ligeiramente morno. Mas um resistor executar mais de 20 funes diferentes dependendo de onde colocado no circuito e do valor dos componentes ao seu redor. Em nosso primeiro exemplo abaixo, um resistor somado em srie com um LED de forma que o LED receber um mximo de 25mA. O propsito do resistor duplo. Primeiramente permite o LED crie uma voltagem caracterstica de 1.7v (para um vermelho LED) e secundariamente tem um valor que permita que 25mA passem pelo LED. O resistor estar usando 5v em uma extremidade e 1.7v na outra. Estas voltagens so providas pelo chip e o LED e o resistor no tem nada a ver com a sua origem. O resistor simplesmente permite que uma certa quantia de corrente o atravesse dependendo de seu valor, e esse o valor trabalhado acima. Um ponto a se destacar: Os 508A tm 5 linhas de sada e se todas as sadas estiverem entregando 25mA, a sada total para o chip ser 125mA. Isto est ligeiramente acima da corrente mxima permissvel de 100mA para o chip, mas no ser um problema. O PIC16F84 tem um mximo de 150mA para o chip e assim s 6 linhas podem estar entregando corrente ao mesmo tempo. Vamos para uma situao prtica: CONECTANDO UM LED Se um LED for conectado a uma das sadas como mostrado na fig. 2,

http://www.novaeletronica.net/q/n5/cursopic/cursopic_3.htm

03/12/2009

Page 3 of 7

uma certa voltagem encontrada passando por ele, de acordo com a cor do LED. Isso chamado de voltagem CARACTERSTICA ou voltagem de queda no LED. Essa voltagem existe, no importa o quanto o LED esteja iluminado. Isso completamente diferente das caractersticas de uma lmpada incandescente e por isso que LEDs e lmpadas precisam ser tratados diferentemente quando estivermos trabalhando com as suas necessidades operacionais. Para um LED vermelho a "voltagem caracterstica" 1.7v. Para um LED laranja a "voltagem caracterstica" 1.9v. Para um LED verde a "voltagem caracterstica" 2.1v. LEDs no podem ser conectados diretamente uma linha de sada sem um resistor limitador de voltagem. A razo muito tcnica, mas basicamente um LED vermelho, por exemplo, no se acende at que exatamente 1.7v o estejam alimentando, e, se a voltagem tentar subir alm dos 1.7v, os LEDs brilharo com mais intensidade; permita uma corrente muito alta e eles sero danificados quando a intensidade da corrente for superior a 40mA. virtualmente impossvel prover uma voltagem constante de 1.7v e o modo mais simples para se prevenir danos ao LED conectar um resistor em srie. Se o valor do resistor for determinado atravs de uma formula, uma corrente precisa ser entregue ao LED e tudo ficar ok. O LED durar 100 anos ou mais! Suppose we want to deliver 25mA to a LED. Se ns tomarmos um LED vermelho, o valor de resistncia pode ser definida pela lei de Ohm. A voltagem que passa pelo resistor determinada por: 5v - 1.7v = 3.3v (A voltagem atravs do LED a voltagem de 5V da alimentao, menos os 1.7v dissipados pelo LED devido caracterstica queda de voltagem mencionada acima). Esse o valor para V. I = V/R 0.025 = 3.3/R R = 132 Use um resistor de 130 ohm. Um LED laranja tem uma voltagem caracterstica mais alta, de 1.9v e assim, um resistor limitador de valor mais baixo ser necessrio para os 25mA. Use um 120R. Para um LED verde, use um 100R. LEDs de alto brilho esto disponveis em todas as cores e embora eles sejam classificados em 25mA, eles produziro brilho muito bom com corrente de 5 a 15 mA. Para projetos alimentados por bateria a corrente de LEDs pode ser reduzida para valores to baixos quanto 1mA, e isso aumentar enormemente a vida da bateria. A Tabela 1 fornece o valor para o resistor limitador para um LED vermelho, em diferentes correntes. O modo mais fcil para determinar o valor de resistncia por um resistor limitador pr um LED em srie com um resistor de 1K com alimentao de 5v. Gradualmente reduza o valor do resistor at que um brilho satisfatrio seja obtido. A iluminao de um LED informada em milicandelas (mcd) e como a fabricao melhorou durante os ltimos anos, o brilho emitido aumentou consideravelmente. Por isso melhor experimentar com resistores de

http://www.novaeletronica.net/q/n5/cursopic/cursopic_3.htm

03/12/2009

Page 4 of 7

valores diferentes at chegar a um valor adequado para seu(s) LED(s) em particular.

Resistor de queda para um LED vermelho a 5V:


25mA 15mA 10mA 5mA 1mA 130 ohms 220 ohms 330 ohms 680 ohms 3k3

Tabela 1. Valores do resistor de queda CONECTANDO UM DIAFRAGMA PIEZO


Um diafragma piezo essencialmente bem parecido a um condensador (aprox 22n) no que concerne ao microcontrolador. Exige muito pouca corrente para operar. Um diafragma piezo um dispositivo passivo. No contm nenhum componente ativo para criar o tom. Buzzers, sirenes e vibradores piezo tm componentes ativos dentro do alojamento (transistores, sufoque, etc) para criar um som bastante alto. Estes dispositivos operam com alimentao de corrente contnua (6 a 12v). Um diafragma piezo requer uma onda senoidal quadrada - em outras palavras uma forma de onda "pulsante" para fazer o diafragma curvar-se e assim produzir o som irritante caracterstico. A amplitude da onda determina a intensidade do som e a freqncia da onda determina o tom. FORNECENDO CARGAS DE ALTA CORRENTE Cargas que requerem mais que 25 Ma devem ser conectadAs a uma sada do microcontrolador atravs de um transistor de amplificao (driver). Um transistor-driver na realidade um amplificador de corrente. Transistores podem ser classificados em componentes de corrente baixa, mdia e alta. Se uma carga necessita, digamos, de 100 mA, um transistor amplificador de baixa corrente ser necessrio. Se uma carga requer de 500mA a 1A, um transistor amplificador de mdia corrente ser necessrio. Para correntes superiores a 1A, um transistor amplificador de alta corrente ser necessrio. Para 100mA, um do tipo baixa corrente como BC 547, 2N 3904 ou BC 338 ser adequado. Se ns assumirmos que o transistor possui um ganho de corrente de 100, 1mA ser necessrio na sua base para que o transistor entregue 100mA. Voc no consegue coisa alguma a partir do nada! Para um transistor ser capaz de ENTREGAR uma corrente para uma CARGA, ele necessita que uma corrente seja ENTREGUE a ele primeiro em sua base. Por isso que um transistor chamado de um dispositivo amplificador de corrente. Se o transistor estiver controlando uma lmpada, a corrente inicial para o filamento da lmpada aproximadamente 6 vezes a corrente de iluminao e assim o transistor dever ser capaz de entregar 600mA. Para entregar 600mA, a base deve ser alimentada com pelo menos 6mA. Para entregar esta corrente na base, o valor do resistor-base pode ser determinado como explicado a seguir: A voltagem pelo resistor base ser: 5v (a sada do '508A) menos a voltagem base-emissor do transistor-driver (0.7v) = 5 - 0.7 = 4.3v Resistncia do resistor base: = V/I = 4.3/.006 = 700 R = 700 ohms. Use 680 ohms.

http://www.novaeletronica.net/q/n5/cursopic/cursopic_3.htm

03/12/2009

Page 5 of 7

Este o valor mximo de resistncia que voc deve usar. (Lembre-se: quanto mais alto o valor de um resistor, MENOS corrente ir passar por ele.) Teoricamente um resistor 680R saturar o transistor completamente e prover 600mA para ligar a lmpada. Mas suponha que o transistor no tenha um ganho de 100. Pode ter s um ganho de 80 ao entregar uma corrente alta. Neste caso os 600mA no fluiro em sua totalidade e sob as piores condies a Lmpada no ir iluminar-se. Para considerar essa possibilidade, o valor do resistor base pode ser reduzido de forma que uma corrente ligeiramente mais alta fluir pelo transistor. Deste modo voc est garantindo que o transistor ser saturado, no caso do ganho no ser 100. bom manter uma margem de garantia e assim um resistor to baixo quanto um 470R pode ser usado. Um resistor baixo, de 470 ohm no danificar o transistor e no far o globo ascender de forma "muito brilhante." simplesmente um valor para assegurar que o transistor sature-se completamente mesmo nas piores condies. Se o transistor no se saturar completamente, ficar mais quente que o normal e o globo ficar escuro. Isto pode aquecer demais o transistor e causar danos - por isso importante que o transistor seja saturado COMPLETAMENTE. Uma corrente inicial alta um dos problemas ocultos quando acionamos globos geralmente no encontrado at que um globo de corrente alta seja empregado ou vrios globos sejam acionados ao mesmo tempo. Como voc pode ver, corrente requerida da sada do microcontrolador para acionar o transistor e se forem acionadas cargas de correntes altas, os 25mA do micro sero gastos muito rapidamente! Suponha que voc queira acionar uma lmpada automotiva de 12v. Um transistor driver de alta-potncia ser necessrio uma vez que a corrente inicial de aproximadamente 6 ampres. Transistores de corrente alta tm aproximadamente um ganho de corrente de apenas 20 a 50 e se voc usar a pior situao, a corrente requerida na base para saturar completamente (ligar) o transistor ser 5,000/20 =250mA. Obviamente isto est alm da capacidade de sada do microcontrolador. Assim voc tem que efetuar alguns clculos antes de conectar dispositivos de corrente alta. A resposta acrescentar um transistor amplificador extra entre o chip e o transistor de potncia como mostrado na fig: 3. este transistor chamado transistor de buffer e efetivamente amplia a capacidade do chip por um fator de cerca de 100. Se o transistor de sada (o transistor de potncia) requer uma corrente de 250mA em sua base, o transistor de buffer entregar esta corrente e ir precisar de 250/100 = 2.5mA do microprocessador. Os 2.5mA podem ser providos facilmente pelo micro e assim, ns estamos de volta ao negcio. O s transistores de sada e o driver podem estar em dois arranjos diferentes. A Fig. 3 mostra dois transistores individualmente ou um nico transistor Darlington como mostrado na fig.4.

http://www.novaeletronica.net/q/n5/cursopic/cursopic_3.htm

03/12/2009

Page 6 of 7

O resultado exatamente o mesmo. A nica diferena o nmero de componentes necessrios e o espao ocupado na placa de circuito impresso. Na fig. 3, quando a sada do micro BAIXA, o transistor PNP de buffer est ligado. Isto entrega corrente base do transistor de sada por um resistor 18R. Ns determinamos que a corrente na base deve ser de 250mA para ligar com segurana a lmpada de 12v x 1amp. Esta corrente tem que passar pelo resistor 18R, e a potncia em watts dissipada por este resistor ser surpreendente! Ela precisa ser 1watt! Esta corrente perdida j que no executa nenhuma funo e os 250mA colocaro uma carga pesada na alimentao de 5v. A soluo pr um transistor Darlington na sada, como mostrado na fig. 4. Um transistor Darlington composto de dois transistores no mesmo estojo e se parece com um transistor normal com trs terminais. Um transistor Darlington tpico pode ter um ganho de 2,500 e se a lmpada requerer 6 amperes para ligar, a corrente requerida na base ser 2.5mA. O resistor separador de 1K entregar aproximadamente 3.5mA, lembrando que h uma queda de 1.2v entre base e o plo negativo negativa para o transistor de Darlington. Mas a maior vantagem maior do projeto com o Darlington a ausncia do resistor de 18 ohm. Isto eliminar a forte demanda nos 5v da alimentao. Um transistor Darlington satisfatrio para uma carga de at 4 ampres o BD 679. A pinagem para um BD 679 mostrado na fig. 5.

http://www.novaeletronica.net/q/n5/cursopic/cursopic_3.htm

03/12/2009

Page 7 of 7

DRIVING TRIACS
Se cargas altas de corrente alternada precisarem ser acionadas, um TRIAC pode ser usado, como mostrado na fig. 6.

Um TRIAC especialmente adequado para acionar cargas de corrente alternada pois conduz em qualquer direo e pode ser ligado parcialmente durante um ciclo (cada meio-ciclo) fornecendo suavizao para lmpadas (dimmer) ou controle de velocidade para motores. TRIACs esto disponveis em verses "sensitive gate" que requerem baixa corrente no gate. Isto ideal para o micro '508A. TRIACs requerem a menor CORRENTE DE DISPARO NO GATE, quando a corrente no gate negativa.

PAGINAS :

| 01 | 02 | 03 | 04 | 05 |06 | 07 |

http://www.novaeletronica.net/q/n5/cursopic/cursopic_3.htm

03/12/2009

Page 1 of 3

Seguindo Adiante
Observando um PROGRAMA Pgina 4 PAGINAS : | 01 | 02 | 03 | 04 | 05 |06 | 07 |

Antes de ns comearmos o curso, vamos mais adiante e vejamos como tratar uma sentena simples. interessante saber o que vem pela frente e em direo a qu voc est trabalhando. Uma solicitao chegou na semana passada para auxlio com um programa para PIC. O escritor perguntava: Ol, eu estou tentando construir um projeto que funcione como uma secretria eletrnica. Eu estou tento problemas em programar o PIC16F84 para fazer o seguinte:

Faa "W". Verifique se "X" acontece. Se "X" no acontece no tempo "Y" ento faa "Z". Eu espero que voc entenda o que eu estou perguntando.
Esta uma necessidade tpica ao escrever quase qualquer programa e embora ns no saibamos o suficiente da sentena para criar um programa completo (ou sub-rotina) ns podemos explicar como agir no que diz respeito a tarefa H duas coisas que voc precisa lembrar: 1. O microcontrolador tem um oscilador interno (chamado clock) que funciona o tempo todo. Este oscilador incrementa um arquivo chamado o Contador do Programa e faz o micro continuar a executar a seqncia de instrues do programa. O programa pode ter laos (loops) e saltos (jumps) que fazem o micro desviar a execuo do programa para cima e para baixo, mas ainda assim ele est avanando pelo programa." 2. Voc deve evitar criar programas que faam o micro permanecer em um loop enquanto espera que um evento em particular acontea. O microcontrolador pode fazer s uma coisa de cada vez e se estiver ocupado exclusivamente em um loop, no poder estar produzindo a uma exibio ou executando outras operaes. O programa deve ser estruturado de forma que cheque ou "consulte" uma linha de sada para ver se essa linha mudou de estado. Se voc verificar a linha uma base regular, o evento no ser perdido. O programa que satisfaz a declarao acima chamado de sub-rotina. Ele chamado a partir da rotina principal Main. A primeira coisa a fazer preparar um fluxograma:

http://www.novaeletronica.net/q/n5/cursopic/cursopic_4.htm

03/12/2009

Page 2 of 3

Flow diagram for "X", "Y" and "Z" A seo de contador/timer "pesquisa" ou "verifica em loops" uma linha de sada procurando por uma mudana. Isto feito muitas vezes e forma um ATRASO de TEMPO. O contador/timer est carregado com um valor e decrementa a contagem at zero. Quando o contador/timer for zero, o programa executa o caminho "time-up".

MOVLW 40h MOVWF 1Ch Do "W" BSF 06h,0 CALL Delay BCF 06,0 AA CALL Delay BTFSS 06,1 GOTO BB RETLW 00 DECFSZ 1Ch GOTO AA BSF 06,1 CALL Delay BCF 06,1 RETLW 00 MOVLW 80h MOVWF 1Ah MOVLW 60h MOVWF 1Bh DECFSZ 1Bh GOTO Del3 DECFSZ 1Ah GOTO Del2 RETLW 00

;Carrega o arquivo de contagem regressiva 1C ;Torna RB0 HIGH ;Seleciona Page0 ;Torna RB0 LOW

;A entrada "X" est HIGH? ;Sim. Retorna para Main ;Decrementa o arquivo de contagem regressiva ;Tempo no acabou. Faa novamente ;Tempo acabou. Faa "Z" ;Torna RB1 LOW ;Retorna para Main

BB Do "Z"

Delay Del2 Del3

;Carrega um valor no arquivo 1A ;Carrega um valor no arquivo 1B

;Retorna para a sub-rotina acima

http://www.novaeletronica.net/q/n5/cursopic/cursopic_4.htm

03/12/2009

Page 3 of 3

Programa para a questo sobre "X", "Y" , "Z" acima

O tempo "Y" composto pelos loops dentro do arquivo de contagem regressiva 1C e inclui o comprimento de tempo criado pelo Delay. A quantidade de tempo levado por cada uma as operaes "W" e "Z" pode ser ajustada pela sub-rotina Delay. No momento voc no sabe nada sobre as instrues que ns usamos no programa acima ou como interpret-las, mas voc pode ver aproximadamente quantas linhas de cdigo so necessrias para trabalharmos com a questo proposta acima. A vantagem de trabalhar com uma linguagem de baixo nvel como as instrues no programa acima, a habilidade de dizer exatamente para o microcontrolador o que voc quer que ele faa, do modo mais simples e mais rpido. Produzir um programa em Cdigo de Mquina ou Mnemnico o mais prximo que voc pode chegar do tipo de instrues que so diretamente lidas pelo microcontrolador e isto chamado linguagem de baixo nvel. Um idioma de alto nvel um idioma de interpretador, como BASIC ou C++. H vrios "truques" no programa acima e estes geralmente esto na colocao de uma instruo em um lugar incomum. Um deles foi a a colocao de CALL Delay CHAMADA como a 6 instruo. .

AA

CALL Delay BTFSS 06,1 GOTO BB RETLW 00 DECFSZ 1Ch

;A entrada "X" HIGH? ;Sim. Retorne para Main ;Decremente arquivo de contagem regressiva

Isto permite que a sub-rotina Delay seja chamada durante cada loop do contador/timer. Posteriormente, neste curso, voc aprender o significado de cada instruo e ver por que o nico lugar para a instruo CALL Delay antes de decrementar o arquivo de contagem. O outro ponto que voc pode observar nesta fase inicial a simplicidade das instrues. Cada letra representa uma palavra. Por exemplo, BTFSS 06,1 significa: Teste o Bit 1 do Arquivo 06 e Salte se estiver Ligado (1). As letras que compe a instruo so chamadas Mnemnicas e isso significa simplesmente um "conjunto de letras que so fceis se lembrar". Ns no podemos cobrir mais nada do programa at que as instrues sejam explicadas completamente.. Isso o que ns faremos nas prximas pginas: Pgina 5: Conjunto de instrues do PIC12C508A. Pgina 6: Conjunto de instrues do PIC16F84.

Prosseguir para Introduo no Laboratrio 1 as 18 experincias

PAGINAS :

| 01 | 02 | 03 | 04 | 05 |06 | 07 |

http://www.novaeletronica.net/q/n5/cursopic/cursopic_4.htm

03/12/2009

Page 1 of 2

| 01 | 02 | 03 | 04 | 05 |06 | 07 | CONJUNTO DE INSTRUES PARA O PIC12C508A


Veja o conjunto de instrues explicado para detalhes Os termos em AZUL so para auxlio Os termos em VERMELHO no esto disponveis para o 508A
ADDLW ADDWF ADDWF ANDLW ANDWF ANDWF BCF BSF BTFSC BTFSS Call CLRF CLRW CLRWDT COMF COMF DECF DECF DECFSZ DECFSZ GOTO IN INCF INCF INCFSZ INCFSZ IORLW IORWF IORWF LOAD MOVLW MOVF MOVF MOVWF NOP OPTION OR OUT READ RETLW RETURN RLF RLF RRF RRF SLEEP SUBLW Soma literal e W No disponvel para o 508A. Soma W e f (resultado em W) ex. ADDWF 0C,0 Soma W e f (resultado em f) ex ADDWF 0C,1 E literal com W ex. ANDLW 40h E W com f (resultado em W) ex ANDWF 0C,0 E W com f (resultado em f) ex ANDWF 0C,1 Limpa bit f bit0 at bit7 ex. BCF 1E,7 Liga bit f bit0 at bit7 ex. BSF 1F,3 Testa bit, ignora se desligado bit0 at bit7 ex. BTFSC 1A,5 Testa bit, ignora se ligado bit0 at bit7 ex. BTFSS 1B,6 Chama sub-rotina (faixa: 00atFF) Nota: apenas primeiros 256 label bytes!! Ex. CALL Tone1 file Limpa f ex. CLRF 1A Limpa W Limpa o cronmetro watchdog file,0 Complemento de f (resultado em W) ex. COMF 0C,0 file,1 Complemento de f (resultado em f) ex. COMF 0C,1 file,0 Decrementa f (resultado em W) ex. DECF 0D,0 file,1 Decrementa f (resultado em f) ex. DECF 0D,1 file,0 Decrementa f, ignora se 0 (resultado em W) ex. DECFSZ 1A,0 Decrementa f, ignora se 0 (resultado em f) ex. DECFSZ 1A,1 file,1 esta a instruo a ser utilizada Desvio incondicional (faixa:000atFFF) ex. GOTO Tone2 (000 label at 3FF para 508) L uma entrada BTFSS 06,0 06,1 06,2 06,3 06,4 06,5 para uma linha de entrada, ou MOV06,0 para porta file,0 Incrementa f (resultado em W) ex. INCF 1A,0 file,1 Incrementa f (resultado em f) ex. INCF 1A,1 file,0 Incrementa f, ignora se 0 (resultado em W) ex. INCFSZ 1A,0 file,1 Incrementa f, ignora se 0 (resultado em f) ex. INCFSZ 1A,1 00 to FF Inclusive OU literal com W ex. IORLW 20h file,0 Inclusive OU W com f (resultado em W) ex. IORWF 0D,0 file,1 Inclusive OU W com f (resultado em f) ex. IORWF 0D,1 Carrega um arquivo com um nmero (chamado literal) Uso: MOVLW XX ento MOVWF 1C (ou qualquer outro arquivo) Move literal para W Carrega W com um nmero ex. MOVLW 00 to FF 80h file,0 Move f (resultado em W) Copia F em W ex. MOVF 0E,0 Move f (resultado em f) Move F de e para F no coloca F em file,1 W ex. MOVF )E,1 file Move W para f Copia W em f ex. MOVWF 0C Nenhuma operao Carrega o registrador OPTION Veja IORWF e etc acima Para ligar uma sada. Uso: BSF 06,0,1,2,4,5 ou MOVF 1C e ento MOVWF 06 L uma entrada BTFSS 06,0 06,1 06,2 06,3 06,4 06,5 para linha de entrada ou MOVF 06,0 para porta. 00 to FF Retorna com literal em W ex. RETLW 80h Retorna de sub-rotina. No disponvel para o 508A. Uso RETLW 00 Desloca a esquerda de f por transporte (resultado em W) file,0 Dobra o valor * ex. RLF 1C,0 Desloca a esquerda de f por transporte (resultado em f) Dobra file,1 o valor * ex. RLF 1C,1 Desloca a direita de f por transporte (resultado em W) Divide file,0 por 2 o valor * ex. RRF 1D,0 Desloca a direita de f por transporte (resultado em f) Divide file,1 por 2 o valor * ex. RRF 1D,1 Sleep Subtrai W de literal. NO subtrai a literal de W. No disponvel 00 to FF para o 508A. 00 to FF file,0 file,1 00 to FF file,0 file,1 file,bit file,bit file,bit file,bit

http://www.novaeletronica.net/q/n5/cursopic/cursopic_5.htm

03/12/2009

Page 2 of 2

Subtrai W de f (resultado em W) ex. SUBWF 0E,0 Subtrai W de f (resultado em f) ex. SUBWF 0E,1 Troca meio-bytes (Nibbles) em f (resultado em W) ex. SWAPF SWAPF file,0 0C,0 Troca meio-bytes (Nibbles) em f (resultado em f) ex. SWAPF SWAPF file,1 0C,1 Carrega o arquivo TRIS do registrador W. GP0, GP1, GP2, GP3, TRIS 06h GP4, GP5 ** XORLW 00 to FF Exclusive OU literal com W ex. XORLW 40h XORWF file,0 Exclusive OU W com f (resultado em W) ex. XORWF 0C,0 XORWF file,1 Exclusive OU W com f (resultado em f) ex. XORWF 0C,1 * Deve-se limpar o transporte (carry) antes de RLF ou RRF se o arquivo for lido. Para RLF o valor duplicado, para RRF dividido pela metade. ** GP3 = SOMENTE entrada

SUBWF SUBWF

file,0 file,1

| 01 | 02 | 03 | 04 | 05 |06 | 07 |

http://www.novaeletronica.net/q/n5/cursopic/cursopic_5.htm

03/12/2009

Page 1 of 2

Pgina 5 PAGINAS : | 01 | 02 | 03 | 04 | 05 |06 | 07 |

CONJUNTO DE INSTRUES PARA O PIC16F84


Veja o conjunto de instrues explicado para detalhes. Os arquivos em um PIC16F84 so: Destino 0 = W 1 = F 00 a 06 Registradores de propsitos especiais 07 a 4F Arquivos de propsito geral.

A PORTA A tem 5 linhas RA0 RA4 (RA4 no entrega corrente apenas


recebe 25mA) Literal pe outro nome para NMERO ou VALOR. Seu valor varia de 00 at FF. W o Registrador de Trabalho (working) ou acumulador em outros processadores. Nmeros so Carregados em W e a partir de W so MOVidos para outros arquivos (e o valor permanece em W) ADDLW 00 to FF Soma literal W ex. ADDLW 84h . No disponvel para o 508A Soma W e f (resultado em W) ex. ADDWF 0C,0 (o arquivo no ADDWF file,0 alterado) ADDWF file,1 Soma W e f (resultado em f) ex. ADDWF 0C,1 ANDLW 00 to FF E literal com W ex. ANDLW 40h E W com f (resultado em W) ex. ANDWF 0C,0 (o arquivo no ANDWF file,0 alterado) ADDWF file,1 Soma W e f (resultado em f) ex. ADDWF 0C,1 BCF file, bit Limpa Bit de f bit0 at bit7 i.e. 0 at 7 ex. BCF 1E,7 BSF file, bit Liga Bit de f bit0 at bit7 i.e. 0 at 7 ex. BSF 1F,3 Testa Bit, ignora se limpo bit0 at bit7 i.e. 0 at 7 ex. BTFSC BTFSC file, bit 1A,5 Testa Bit, ignora se ligado bit0 at bit7 i.e. 0 at 7 ex BTFSS BTFSS file,bit 1B,6 CALL label Chama uma sub-rotina (faixa: 000 at 3FF) ex. CALL Tone1 CLRF file Limpa F ex. CLRF 1A CLRW Limpa W CLRWDT Limpa o cronmetro Watchdog Complemento de f (resultado em W) ex. COMF 0C,0 (o arquivo COMF file,0 no alterado) COMF file,1 Complemento de f (resultado em f) ex. COMF 0C,1 Decrementa f (resultado em W) ex. DECF 0D,0 (o arquivo no DECF file,0 alterado) DECF file,1 Decrementa f (resultado em f) ex. DECF 0D,1 Decremente f, ignora se 0 (resultado em W) ex. DECFSZ 1A,0 DECFSZ file,0 (o arquivo no alterado) Decremente f, ignora se 0 (resultado em f) ex. DECFSZ 1A,1 DECFSZ file,1 Esta a instruo a usar. GOTO label Desvio incondicional (faixa: 000 at 3FF) ex. GOTO Tone2 L uma entrada, veja BTFSS 06,0 BTFSS 05,0 etc para linha de entrada, ou IN MOVF 05,0 MOVF 06,0 Incrementa f (resultado em W) ex. INCF 1A,0 (o arquivo no INCF file,0 alterado) INCF file,1 Incrementa f (resultado em f) ex. INCF 1A,1 Incrementa f, ignora se 0 (resultado em W) ex. INCFSZ 1A,0 INCFSZ file,0 (o arquivo no alterado) INCFSZ file,1 Incrementa f, ignora se 0 (resultado em f) ex. INCFSZ 1A,1 IORLW 00 to FF Inclusive OU literal com W ex. IORLW 20h IORWF file,0 Inclusive OU W com f (resultado em W) ex. IORWF 0D,0 IORWF file,1 Inclusive OU W com f (resultado em f) ex. IORWF 0D,1 Carrega um arquivo com um nmero (chamado literal) Uso: MOVLW XX LOAD ento MOVWF 1C (ou qualquer outro arquivo) Move literal para W Carrega W com um nmero ex. MOVLW MOVLW 00 to FF 80h MOVF file,0 Move f (resultado em W) Copia F em W ex. MOVF 0E,0 Move f (resultado em f) Move F de e para F no coloca F em MOVF file,1 W ex. MOVF )E,1

A PORTA B tem 8 linhas RB0 RB7 Os termos em AZUL so para auxiliar -

http://www.novaeletronica.net/q/n5/cursopic/cursopic_6.htm

03/12/2009

Page 2 of 2

file Move W para f Copia W em f ex. MOVWF 0C Nenhuma operao Veja IORWF e etc acima Para ligar uma sada. Uso: BSF 05,0 BSF 06,0 etc ou MOVF 1C e ento OUT MOVWF 06 L uma linha de entrada. Uso: BTFSS 06,0 ou BTFSS 06,1 ou BTFSS 06,2 READ etc RETLW 00 to FF Retorna com literal em W ex. RETLW 80h Retorna de sub-rotina. No disponvel para o PIC12C508A. RETURN Uso RETLW 00 at FF Desloca a esquerda de f por transporte (resultado em W) RLF file,0 Dobra o valor * ex. RLF 1C,0 Desloca a esquerda de f por transporte (resultado em f) Dobra RLF file,1 o valor * ex. RLF 1C,1 Desloca a direita de f por transporte (resultado em W) Divide RRF file,0 por 2 o valor * ex. RRF 1D,0 Desloca a direita de f por transporte (resultado em f) Divide RRF file,1 por 2 o valor * ex. RRF 1D,1 SLEEP SLEEP SUBLW 00 to FF Subtrai W de literal. NO subtrai literal de W ex. SUBWF 40h Subtrai W de f (resultado em W) ex. SUBWF 0E,0 (o arquivo SUBWF file,0 no alterado) SUBWF file,1 Subtrai W de f (resultado em f) ex. SUBWF 0E,1 Troca meio-bytes (Nibbles) em f (resultado em W) ex. SWAPF SWAPF file,0 0C,0(arquivo no alterado) Troca meio-bytes (Nibbles) em f (resultado em f) ex. SWAPF SWAPF file,1 0C,1 Carrega o arquivo TRISA do registrador W. Alternativa: TRIS 05h MOVLW XX e ento MOVWF 05 ** (porta A 5 linhas) Carrega o arquivo TRISB do registrador W. Alternativa: TRIS 06h MOVLW XX e ento MOVWF 06 ** (porta B 8 linhas) XORLW 00 to FF Exclusive OU literal com W ex. XORLW 40h Exclusive OU W com f (resultado em W) ex. XORWF 0C,0 (o XORWF file,0 arquivo no alterado) XORWF file,1 Exclusive OU W com f (resultado em f) ex. XORWF 0C,1 * Deve-se limpar o transporte (carry) antes de RLF ou RRF se o arquivo for lido. Para RLF o valor duplicado, para RRF dividido pela metade. ** Deve se usar BSF 03,5 antes das duas instrues alternativas e BCF03,5 aps as duas instrues para se chegar Bank1 aonde o arquivo de controle de entrada/sada para as duas portas fica localizado

MOVWF NOP OR

PAGINAS :

| 01 | 02 | 03 | 04 | 05 |06 | 07 |

http://www.novaeletronica.net/q/n5/cursopic/cursopic_6.htm

03/12/2009

Page 1 of 19

| 01 | 02 | 03 | 04 | 05 |06 | 07 |

Entendendo e Programando o PIC16F84 Um tutorial para iniciantes por


Jim_Mackena_BSc(Eng), HDipEdAd,_GDE (Wits)
Para entender como programar um microcontrolador, voc precisa de contribuio de muitas fontes diferentes. Isso inclui idias e discusses de instrutores diferentes. Cada um oferece um ponto de vista diferente com uma terminologia para descrever uma caracterstica, especialmente sobre algo to complexo quanto programao. Este artigo de Jim Brown cobre muito das caractersticas do microcontrolador PIC16F84 e lhe ajudar a adquirir um conhecimento geral sobre este surpreendente dispositivo.

Contedo:
Introduo O que voc precisa O que voc deveria saber Arquitetura ao PIC16F84 Conjunto de Instrues Um programa simples para o PIC16F84 Usando MPLAB para depurar um programa Pausa para refletir O Conjunto de Instrues Formato da Instruo O Registrador STATUS

1: Instrues Move
MOVF f,d (Move f) MOVWF f (Move W para f) MOVLW k (Move literal para W)

2: Instrues Clear
CLRF f (Limpa f) CLRW (Limpa W)

3: Instrues Aritmticas
ADDWF f,d (Soma W & f) SUBWF f,d (Subtrai W de f) ADDLW k (Soma literal e W) SUBLW k (Subtrai W de literal)

4: Funes Lgicas
ANDWF f,d (E W com f) IORWF f,d (Inclusive OU W com f) XORWF f,d (Exclusive OU W com f) ANDLW k (E literal com W) IORLW k (Inclusive OU literal com W) XORLW k (Exclusive OU literal com W) COMF f,d (Complemento f)

5: Decrementando & Incrementando


DEC f,d (Decrementa f) INC f,d (Incrementa f)

6: Ligando e limpando Bit

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Page 2 of 19

BCF f,b (Bit limpa f) BSF f,b (Bit liga f)

7: Controle do Programa
GOTO k (Vai para endereo) CALL k (Chama sub-rotina) RETURN (Retorna de sub-rotina) RETLW k (Retorna com literal em W) RETFIE (Retorna de Interrupo)

8: Instrues Skip
DECFSZ f,d (Decrementa f, ignora se 0) INCFSZ f,d (Incrementa f, ignora se 0) BTFSC f,b (Bit testa f, ignora se limpo) BTFSS f,b (Bit testa f, ignora se ligado)

9: Rotaes e Troca
RRF f,d (Rotaciona f para a direita por transporte) RLF f,d (Rotaciona f para a esquerda por transporte) SWAPF f,d (Troca os meio-bytes em f)

10: Sleep & Timer Watchdog


SLEEP (Sleep,) CLRWDT (Limpa o timer watchdog.)

11: Miscelnea
NOP (Nenhuma operao) OPTION (No recomendado) TRIS (N]ao recomendado) Pausa para refletir Interrupes no PIC16F84 O que uma interrupo? Tipos de interrupo e o registrador INTCON Lidando com uma interrupo Timers no PIC16F84 A Idia bsica O mdulo TIMER0 Usando overflow do timer Usando a memria de dados EEPROM

Introduo
Quando eu comecei a pensar em programar o PIC16F84, eu fiquei amedrontado pelo que eu vi. Parecia to complexo. A folha de dados do PIC16F84 da Microchip um excelente documento tcnico e o manual do MPASM um guia de referncia completo. Nenhum destes documentos me serviu como um tutorial que era o que eu precisava. Assim este artigo um tutorial para programar o PIC16F84, cobrindo o conjunto de instrues e algumas diretivas do MPASM. Pelo seu contedo ele cobre o prprio PIC16F84 em termos de registros, pinos e assim por diante. Ao final, voc no ser um super expert no 84. Mas voc se sentir bastante vontade com esse componente.

O Qu voc precisa
Primeiro, voc precisa ter alguma da documentao da Microchip. Como um mnimo, voc precisar da folha de dados do PIC16F84. Ela contm toda a informao real que voc precisar do prprio chip. Voc tambm deve ter o Guia de usurio do MPASM. Ambos estes esto disponveis no site da Microchip, http://www.microchip.com , ou do seu CD anual 'Biblioteca Tcnica Microchip'. Voc poderia trabalhar atravs deste artigo apenas com o mencionado acima, mas voc conseguir muito mais dele sendo capaz de experimentar. Assim, carregue uma cpia do MPLAB (para Windows) no seu PC.

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Page 3 of 19

Este o Ambiente de Desenvolvimento Interativo (IDE) deles, e contm um editor, o assembler e um simulador. Aqui, voc pode criar seu cdigo fonte (editor), produzir o cdigo executvel (assembler) e executar no seu PC (simulador). No simulador, voc pode observar a execuo do programa enquanto mantm a vista nos registros e voc pode at mesmo simular eventos como mudanas causadas por fatores externos nos pinos de I/O. Voc realmente deveria adquiri-lo pois tambm est disponvel como o manual do MPASM mencionado mais acima. Faa todo o seu tutorial antes de comear este artigo e isso lhe ajudar a entender os pontos que ns estaremos cobrindo. O Simulador (Emulador) muito bom para observar os registradores e executar um programa em um modo passo a passo, mas isso no resolver todos os seus problemas quando uma falha acontecer. O modo passo a passo no leva em conta o efeito de uma entrada em um programa e uma rotina de delay deve ser ignorada para se prevenir horas de espera para a execuo do programa. Isso tudo que voc precisa, mas h muito mais coisas das quais voc pode gostar. No menos, um chip PIC16F84 e um programador. O programador Multi-Chip apresentado por Nova Eletrnica o equipamento mais barato no mercado e vem com alguns softwares para download para programar-se uma gama de chips, na qual o PIC16F84 est includo.. De extrema ajuda, talvez numa jornada mais longa, so as Notas de Aplicao da Microchip (ANs). Eles as disponibilizaram como uma grande fonte de informao acessvel a qualquer momento, bem mo o CD-ROM mencionado acima. Estas notas cobrem todos os tipos de usos dos PICs, com muitas dicas teis para uso no mundo real. As ANs esto em formato Adobe .pdf: Usando o Adobe Acrobat voc pode procurar pelas ANs por situaes como 'motor' ou 'serial' e ler as anotaes destinadas s suas necessidades. Um das notas, AN585 sobre sistemas operacionais de tempo real para o PIC, refere-se Programao de Tempo Real - Tpicos Negligenciados. Eu lhe peo que adquira uma cpia com urgncia. em tutorial fascinante sobre todo o assunto das interrupes, controle de lao -fechado e similares.

O que voc deveria saber


Na verdade, no sou eu quem deve dizer o que voc deveria saber: Eu no sei quem voc ou o que voc faz. Mas, eu acho que voc achar o andamento deste tutorial mais fcil se voc entender (ou puder descobrir com facilidade) a terminologia bsica dos computadores, como bits, bytes & EEPROM e conceitos como binrio e hexa. Claro que se voc estiver usando o simulador em seu PC, voc tem que estar familiarizado com seu PC e Windows, e ter passado pelo tutorial de IDE. Certamente eu no espero que voc tenha qualquer conhecimento do PIC16F84 este tutorial voltado para o mais absoluto iniciante.

Arquitetura do PIC16F84
Um microcontrolador como o PIC16F84 , por sua natureza, um computador completo em um chip. Ele possui: 1. um processador e 2. registradores, como tambm 3. programa e 4. memria de dados. Isto o faz diferente de uma CPU, (Unidade de Processador Central) que tem s o processador e registradores. 1: O PIC16F84 tem um processador de 8-bits, e isso tudo que ns precisamos saber. 2: Os 90 registradores so a rea de armazenamento interno do processador. Estes tm nomes como (STATUS, PORTA etc). Alguns tm funes especiais e ns os examinaremos depois. Por exemplo, PORTA armazena os contedos de uma das portas de I/O, isto a chamada porta A. Dos 90 registradores, 68 so registradores de propsito gerais, e ns podemos consider-los como nosso (ao contrrio daqueles especiais do processador) e uslos como nosso 'bloco de rascunho''. 3: O PIC16F84 tem uma memria de programa de 1k: isso significa que h 1024 locais para programa. A memria vai do endereo 000h at o 3FFh: 3FFhex so 1023 em notao decimal, sendo assim h 1024 locais que incluem 000. 4: O PIC16F84 tem 64 bytes de memria de dados, chamados de memria de EEPROM a qual usada para armazenamento de, por exemplo, valores para ajuste de dados recebidos do mundo externo. Ns olharemos para o uso dessa memria EEPROM por ltimo nesta discusso. Alm disso, o dispositivo inclui quatro tipos de interrupo e 13 pinos de I/O.

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Page 4 of 19

5: Interrupes so uns meios de parar a execuo do programa e atender a uma operao definida pela interrupo. Por exemplo, o acionamento de um boto poderia interromper o fluxo normal do programa e poderia executar alguma operao especial. Ns examinaremos as tcnicas de interrupo do PIC16F84 depois. 6: O uso dos pinos de I/O a chave para o uso de um dispositivo como os '84, uma vez que qualquer processo consiste em 3 partes: a entrada para o processo, o prprio processo, e a sada. O PIC16F84 tem 13 pinos configurados como 2 porta: porta A tem 5 alfinetes e a porta B tem 8; e ns os estaremos usando mais adiante.

Conjunto de instrues
H 35 instrues no conjunto de instrues do PIC16F84, consistindo em um opcode (cdigo de operao) e operando(s). Basicamente, o opcode especifica o que fazer e o(s) operando(s) especificam como ou onde. Estas instrues so divididas em 3 grupos: orientadas byte, orientadas a bit e literal & controle. Mais tarde ns usaremos cada uma dessas operaes. Para agora, olhemos para uma das instrues. Concentre-se mais no formato, em lugar da funo, a qual veremos logo mais adiante. Eu escolhi a instruo ADDWF. Neste tutorial, eu adotei a fonte Courier para todos os exemplos de codificao. A sintaxe desta instruo : ADDWF f,d Onde ADDWF o opcode e "f d" so os operandos. As letras ADDWF so chamadas de um mnemnico. Esta uma abreviao que tanto o computador quanto os humanos podem entender. Voc ver este mesmo layout em todas as instrues. Agora um bom momento para falar do registrador de trabalho. Ele um registrador especial (acima de todos j mencionados), conhecido como registrador W e onde a unidade aritmtica e lgica (ALU) faz os clculos. Qualquer instruo com W no nome age em W. Os outros registradores so conhecidos como arquivos e ns usamos a letra 'F' nos comandos para indicar que um arquivo est sendo acessado. Assim, ns podemos entender que o comando ADDWF soma W ao arquivo F. Mas o que arquivo F? Para cada arquivo (diferente de W) determinado um endereo hexadecimal. Por exemplo, o arquivo 0C chamado "0C", arquivo 10 chamado "10" e arquivo 2F chamado "2F. A letra minscula "h" sempre includa para indicar que arquivo tem um valor hexadecimal, como arquivo 10h por exemplo, que na realidade o dcimo sexto arquivo na memria. Alguns arquivos tm nomes, como por exemplo: PORTA 05h, PORTB 06h e TRISA 85h. O 'f' na instruo acima o endereo atual do arquivo. No h nenhum arquivo chamado "F" ou "f". Isso um smbolo para representar qualquer um dos arquivos. Assim, ns codificaramos a instruo: "some W ao arquivo 3C" como: ADDWF 3Ch,d Bem, no totalmente - para que serve aquele 'd'? o destino do resultado, e voc ver isto em muitas instrues. Dependendo da exigncia, o resultado da instruo pode ser posto no registro de funcionamento (W) ou no prprio arquivo F. Se 'd' for 0, o resultado estar em W, Se 'd' for 1, o resultado estar em F. A instruo pode ser seja qualquer um do seguinte: ADDWF 3Ch,0; soma W ao arquivo 3C, resultado em W ADDWF 3Ch,1; soma W ao arquivo 3C, resultado em 3C Vamos escrever....

Um programa simples para o PIC'84


Este programa de exemplo serve para vrios propsitos. Alm de mostrar como usar alguns instrues, apresenta tambm alguns conceitos do assembler e vai tambm mostrar algumas tcnicas simples para o simulador. O programa, Simple.asm apresentado abaixo; Eu lhe guiarei linha por linha. Programa 1: Simple.asm ;simple.asm ;para demonstrar o aspecto de um programa ;e introduzir algumas instrues e diretivas

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Page 5 of 19

;***************** setup *************************** processor 16F84 ;tipo de processador org 0010h ;origem do programa na memria w equ 0 ;para instrues de byte, use w & f f equ 1 ; ao invs de 0 & 1, isso bem mais claro MyReg_1 equ H'10' ;posio Meus Registradores na memria MyReg_2 equ H'15' ; em h'10' & H'15' ;***************** programa ****************************** ;Ns vamos carregar o acumulador (reg w) com valores ; e efetuar algumas operaes aritmticas em W utilizando ; MyReg_1&2 movlw H'08' ;coloca o valor H'08' no registrador w movwf MyReg_1 ;move o contedo de w para MyReg_1 ; nota o mesmo que movwf 10h, j que ; MyReg_1 e 10h so a mesma coisa. movlw 32h ;coloca 32h no registrador W addwf MyReg_1,f ;soma o contedo de w quele em MyReg_1 ; a resposta vai para MyReg_1, devido ao f. movlw 92h ;coloca o valor 92h no registrador w movwf MyReg_2 ;move o contedo de W para MyReg_2 ; nota o mesmo que movwf 15h, j que ; MyReg_2 e 15h so a mesma coisa. movlw 26h ;coloca 26h no acumulador W subwf MyReg_2,w ;subtrai w de MyReg_2 ; a resposta vai para w end Vamos dar uma olhada nesse programa de exemplo. Voc pode verificar o que ir se seguir encontrando cada diretiva ou instruo na seo Programao PIC deste Site. Qualquer coisa depois de um ';' um comentrio. Todo livro de programao recomenda a criao de comentrios para explicar o que est acontecendo. Na seo chamada 'setup', ns encontramos trs diretivas do assembler: "processador 16F84" informa ao assembler para qual chip o programa foi escrito. Se isto estiver incorreto, o cdigo ser preparado pelo assembler para o processador errado. "org" diz ao assembler aonde comear a colocar o cdigo na memria de programa. Voc deve colocar seu cdigo alm de 004h para ficar claro o endereo para onde o processador deve ir quando uma interrupo descoberta. "equ" uma equivalncia ou "igual a." Simplesmente significa que os itens em qualquer lado de equ significam a mesma coisa. Por exemplo, a instruo ADDWF espera um 0 ou 1 no lugar de 'd': igualando 'w' a 0' significa que ns podemos usar 'w' na instruo em lugar de 0'. Isto mais fcil de se lembrar durante a codificao, e para ler depois. Analogamente, igualando MyReg_1 a 10h toda vez que nos referirmos ao registrador, ser mais fcil de faz-lo atravs do seu nome mais significante e fcil de lembrar. Na parte chamada 'programa', ns encontramos vrias instrues do PIC16F84. Confira as descries completas; ns as estaremos estudando mais tarde. MOVLW k faz o valor k (no exemplo 08h) ser colocado no registrador de trabalho. MOVWF f copia o contedo de W no registrador f. Note que movwf estritamente uma nomenclatura equivocada, j que na realidade ocorre uma cpia (W no esvaziado), e no uma movimentao (na qual W seria esvaziado). Note tambm a conveno da Microchip de comparar movlw e movwf: descrevendo a operao os parnteses () significam 'o contedos de'. Assim k (W) quer dizer que o valor k se torna o contedo de W; (W) (f) meios que o contedo de W se tornam o contedo de f. Por ltimo, certifique-se de entender o uso do conceito de equ com respeito a registradores. O ' f ' em MOVWF f refere-se a um arquivo. Ele mostra que arquivos tm endereos hexadecimais e ns esperaramos ler a instruo como MOVWF 10h por exemplo. Igualando MyReg_1 a 10h, quer dizer que ns podemos escrever MOVWF MyReg_1 com o mesmo resultado. ADDWF f,d e SUBWF f,d respectivamente executam a adio e subtrao aritmticas nos contedos de W e f. Note o uso de equivalncias aqui tambm; ns podemos nos referir a MyReg_1 como antes, e tambm substituir os valores permitidos de d (no exemplo 0 e1) por w e f respectivamente.

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Page 6 of 19

Conseqentemente ns podemos escrever ADDWF MyReg_1,f no lugar de ADDWF 10h,1. Vamos montar e executar esse programa...

Usando MPLAB para depurar o programa...


Este um processo de trs passos: editar o cdigo fonte, mont-lo e ento execut-o no simulador para ver o que acontece. Se voc trabalhou atravs do tutorial da MPLAB, voc j sabe sobre editar e montar. Eu assumirei que voc o fez, assim ns podemos passar para a simulao. Com o exemplo .asm montado com sucesso, e o editor sendo a nica janela aberta no MPLAB, execute o programa passo a passo (o cone de pegada). No ajuda muito - voc v cada linha do programa ser realada medida que ativada, mas isso tudo. Assim, comecemos a usar algumas das outras facilidades do simulador. Eu sugiro que voc abra as seguintes janelas no MPLAB. Todas servem a propsitos semelhantes - isto , ver o que est acontecendo nos registradores - mas todas executam diferentemente. Eu achei isto til ter todas abertas simultaneamente para comparar as implementaes: Janela > File Register Esta janela lista o contedo de todos os registradores de arquivos de 00 a 4F - ie, no mostra aqueles na regio 80 a 8B. medida que voc caminha pelo programa poder ver o contedo hexadecimal dos registradores 10h e 15h mudando. Note que qualquer registrador cujo contedo mudou h pouco mostrado em vermelho - e volta para azul no prximo passo (a menos que haja outra mudana). Janela > Special Function Registers Aqui voc pode ver os SFRs (Registradores de Funo Especial) por nome ao invs de local, que o que mostra a janela anterior. O contedo mostrado em decimal, hexa e binrio. Janela > New Watch Window Esta sua janela personalizada para os registradores, e lhe permite selecionar quais registradores voc quer monitorar. Todos os registradores esto disponveis sua escolha, SFRs e GPRs. Quando voc escolhe esta janela mostrada uma caixa de seleo com uma seta para baixo. Clique na seta, e uma lista de todos os registradores aparece: escolha o voc quer (eg, Myreg_1) e ento clique OK. Voc ver o contedo do registrador exibido na janela. Para adicionar outros registradores voc pode clicar no cone no canto esquerdo superior da janela e ento escolher Add Watch; ou simplesmente apertea a tecla insert (enquanto a janela est ativa). Voc pode salvar as combinaes usadas com mais freqncia como arquivos .wat, e ento carreg-las depois atravs da Janela> Load Watch Window. Uma palavra de advertncia... De onde veio a lista de nomes de registradores para selecionar? Os SFRs so bvios: o MPLAB sabe a respeito deles de qualquer maneira. Os outros, como MyReg_1 e2, entram das diretivas de equ em seu cdigo, o que excelente. Porm, em nosso exemplo, ns usamos tambm w equ 0 e f equ 1 embora estes no so planejados como nomes de registro. Porm, eles ainda aparecem na lista de possibilidades. A que est o problema - apenas no os escolha voc diz. Mas no esquea que aquele W um registrador: ento agora h duas entradas de W na lista, uma desde o princpio (o registro de funcionamento), e ns criamos a outra com equ. Usar qualquer uma delas, causa um erro de smbolo no encontrado em sua tabela de observao, o que significa que voc no pode monitorar o registro de funcionamento se voc declarou um equ de W em seu cdigo. Tente voc, ento comente a linha com erro com um ;', re-monte e tente novamente. Agora voc pode usar o registro de trabalho no seu monitoramento. Com estas trs janelas, caminhe pelo seu programa: agora voc tem alguma noo do que est acontecendo. Fique satisfeito consigo mesmo porque tudo est funcionando ok. Pausa para refletir Para onde devemos ir a partir daqui? Bem, onde ns estamos agora? Ns vimos brevemente a arquitetura e o conjunto de instrues; ns criamos um programa simples e examinamos o cdigo para adquirir o feeling disso; ns editamos e montamos esse programa; e ns vimos algumas das facilidades do simulador. Eu penso que ns deveramos olhar mais detalhadamente o conjunto de instrues.

O Conjunto de Instrues

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Page 7 of 19

A Microchip tem detalhes completos do conjunto de instrues. Elas se agrupam em 3 categorias, o que eu no considero particularmente til. Estas categorias so operaes Orientadas a Byte, a Bit e a Literal/Controle. Eu assumi a postura de agrupar as instrues dentro daquilo que ns usaremos para cada comando, tais como executar operaes aritmticas. Um arquivo de ajuda para as janelas est disponvel na Internet no site da Trisys Inc: Eu achei isso muito til. uma arquivo de ajuda normal com os links e buscas esperados. Para cada instruo, eu expliquei a operao, e aprofundei essas explicaes onde achei apropriado. (Por exemplo, eu expliquei o que um Inclusive-OU de fato est em IORWF). Talvez mais importante ainda, eu sugeri exerccios para usar as instrues apresentadas. Os exerccios sugeridos so bastante simples, mas o deixaro usar cada instruo, e tambm praticar o uso do simulador. Lembre-se de usar os recursos, como a janela de monitoramento para ver o que est acontecendo a cada passo do seu programa: preste ateno nos registradores que voc decidiu usar, bem como nos registradores W e STATUS.

Formato da instruo
O agrupamento da Microchip mantm as instrues de formato semelhante juntas. As instrues aparecem assim: : byte_command f,d onde f a designao do arquivo do registrador e d o destino; se d=0, o resultado vai para W. Se d=1, o resultado vai para o registrador f bit_command f,b onde f o arquivo do registrador, e b o bit dentro dele; bits so numerados da direita para a esquerda de 0 a 7. No texto, um bit escrito como FILE_REG <n>, por exemplo INTCON <4> significa o bit nmero 4 no registrador intcon. O registrador INTCON fica no local 0B other_command k onde k uma constante ou literal de 8-bit.

O registrador STATUS
O '84 tm o registrador STATUS em 03h. Ele contm o estado aritmtico da unidade de aritmtica e lgica. Muitas instrues do '84 afetam certas partes do STATUS. Muitas instrues afetam STATUS <2>, Z - a flag Zero que ligada se o resultado de uma operao for zero. Certas operaes afetam os bits de transporte: STATUS <0>, C - o bit Carry, ativado se um transporte ocorrer no bit mais a esquerda no resultado; STATUS <1>, DC - o bit Digit Carry, ativado se houver um transporte entre os dgitos hexadecimais (ie, do meio-bit -bit 3 - ao bit esquerda -bit 4). Dois comandos afetam STATUS <3>, o bit Power Down PD, e STATUS <4>, o bit Time Out TO.

1: Instrues Move
Ns encontramos algumas dessas instrues, que nada fazem alm de colocar coisas nos registradores. MOVF f,d (Move f) (f) (dest) MOVWF f (Move W to f) (w) (f) MOVLW k (Move literal to W) k (W) Exerccio: Escreva um programa para usar estes comandos para (por exemplo) por algo em W, mover de l para outro registrador, ento ponha alguma outra coisa em W, e ento mova a coisa original de volta para W. Veja moves.asm..

2: Intrues Clear
Estes dois commandos limpam um registrador. CLRF f (Clear f) 00h (f) CLRW (Clear W) 00h (W)

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Page 8 of 19

Exerccio: Amplie o programa anterior para limpar os registradores no final. Veja clears.asm

3: Instrues Aritmticas
Executar operaes aritmticas muito importante. O '84 pode apenas somar e subtrair. A aritmtica ocorre entre W e um registrador f: ADDWF f,d (Add W & f) (W)+(f) (dest) SUBWF f,d (Subtract W from f) (f)-(W) (dest) or between W and a literal: ADDLW k (Add literal & W) (W)+k (W) SUBLW k (Subtract W from literal) k-(W) (W), Exerccio: Use estes e os comandos anteriores para carregar um registrador a partir de W e efetuar algumas adies e subtraes. Preste ateno no bit Carry e no bit Zero no registrador STATUS. Veja arith.asm. Aparte tcnico: Voc pode ver que a subtrao feita usando o mtodo do segundo complemento. Este o modo normal que a subtrao acontece com binrios. Eu explicarei, ento mostrarei um exemplo. Primeiramente, expresse ambos os nmeros em binrio. Deixe o nmero a partir do qual voc est subtraindo inalterado. Forme o segundo complemento do que est sendo subtrado assim: mude todos os 0s para 1s e todos os 1s para 0s (este o complemento), some 1 ao dgito direita dgito, transportando esquerda conforme necessrio. Agora acrescente o resultado ao outro nmero inalterado. Descarte o transporte esquerda, se houver. O resultado a resposta. Vamos conferir... Ns queremos subtrais 20 de 27 devemos obter 7. Proceda como segue: Convert para binrio: 27 11011 . . . . x 20 10100 . . . . y complement0: 01011

Faa o segundo complemento de y: some 1: Some x e z: (1) 00111 = 7 01100 . . . . z

+ 11011 . . . . x

O 1 entre parnteses o transporte, que descartado.

4: Funes Lgicas
Nesta fase, antes de ns examinarmos as funes lgicas providas pelo 84, ns discutiremos as funes lgicas em geral. Considere um dispositivo eletrnico com 3 fios ligados. Digamos que 2 fios so entradas, e o resultado no terceiro fio dependa das entradas. Alm disso, ns diremos que esse um dispositivo digital, de forma que os 3 fios possam ter apenas os valores binrios de 1 e 0. Que relaes podem existir entre as 2 entradas e a sada? As combinaes de entrada so fceis: 00, 01, 10 e 11. O fio 3 podem ser 1 se, e somente se, as entradas forem ambas 1 (i.e: 11) ou se uma ou ambas as entradas forem 1 (i.e: 01, 10, 11), e outras combinaes. As relaes bsicas so conhecidas como E e OU (AND e OR). AND significa ambas as entradas enquanto OR significa qualquer uma ou ambas. A maioria das explicaes a respeito disso, resultam em uma TABELA da VERDADE, desenhada abaixo para as seguintes operaes lgicas: AND, OR, XOR, NAND, NOR. Eu as explicarei aps voc ter dado uma olhada na tabela.

Entradas A B

A AND B A OR B

A XOR B

A NAND B

A NOR B

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Page 9 of 19

ambos 00

ou, ambos

ou, no ambos

no ambos

nem um, no ambos

0 0 0 1

0 1 1 1

0 1 1 0

1 1 1 0

1 0 0 0

01 10 11

A funo AND significa que o resultado s ser 1 quando ambas as entradas forem 1. OR significa que qualquer uma das entradas pode ser um 1 para a sada ser 1, mas assim tambm ser se ambas as entradas forem 1. A funo XOR quer dizer "eXclusive OR", e significa dizer que qualquer entrada sendo 1 far o resultado na sada ser 1, e, especificamente exclui a situao onde ambas as contribuies forem 1. Finalmente, NAND e NOR so as negaes de AND e OR respectivamente: compare as colunas e voc ver o que isso significa. A propsito, a funo OR (ao contrrio da funo de XOR) s vezes conhecida como "Inclusive OR" (IOR). O PIC16F84 usa este termo. O PIC16F84 prov vrias operaes lgicas que agem em dois valores de 8-bits; esses valores so comparados bit a bit. Por exemplo - sem olhar para uma instruo do '84 considere o ANDing dos nmeros H'5F' (equivalente a D'95 ou B'01011111') e H'A3 (que D'163' ou B'10100011'); resultando em H'03 (que D'3' ou B'00000011'). 5F: 01011111 A3: 10100011

and: 00000011 Claramente, s nas 2 posies mais direita AND satisfeito. O resultado a 1, e 0 em qualquer outro lugar. Vamos ver as instrues fornecidas pelo 'PIC16F84. A comparao ocorre entre os registradores W e f: ANDWF f,d (AND W with f) (W) AND (f) (dest) IORWF f,d (Inclusive OR W with f) (W) OR (f) (dest) XORWF f,d (Exclusive OR W with f) (W) XOR (f) (dest) ou entre W e uma literal: ANDLW k (AND literal with W) (W) AND k (W) IORLW k (Inclusive OR literal with W) (W) OR k (W) XORLW k (Exclusive OR literal with W) (W) XOR k (W) Por fim, voc deve ter notado que o '84 no suporta as funes NAND ou NOR. Ao contrrio, ele prove meios de complementar (negar) um registrador; isso significa que para realizar NAND voc primeiro deve efetuar AND e ento: COMF f,d (Complementa f) complemento de (f) (dest) Exerccio: Eu sugiro duas coisas aqui. Primeiro, usando a calculadora do Windows, verifique os resultados acima: isto assegurar voc entendeu os conceitos. Ento, escreva para um programa em assembler para conferir as instrues do '84, carregando os registros apropriados e executando as operaes e conferindo os resultados. Veja lgic.asm.

5: Decrementando e Incrementando
Duas instrues simples podem decrementar ou incrementar o contedo de um registrador, assim: DEC f,d (Decrementa f) (f)-1 (dest) INC f,d (Incrementa f) (f)+1 (dest) Exerccio: Em um programa, talvez aproveitando um dos anteriores nos quais voc fez alguma aritmtica ou alguma lgica, verifique o funcionamento destes comandos. Fique atento flag Zero, que ativada se qualquer comando fizer o registro em questo zerar: ns nos

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Page 10 of 19

basearemos nesse fato depois em dois outros comandos. Veja dec_int.asm

6: Ativando e limpando Bits


Usando os dois comandos a seguir, voc pode ativar ou limpar qualquer bit b no registrador f. Mas, por qu? Duas razes vm mente: Primeiro, como exemplo, o registrador em questo pode ser uma porta, controlando algum equipamento externo. Cada bit pode estar ativando um dispositivo diferente: um motor, uma luz, ou o que quer que seja. Ativando e limpando cada bit, liga e desliga cada dispositivo. Segundo, como veremos no item 8 mais abaixo, ns podemos usar o fato de um bit estar ativado ou no para pular instrues em nosso programa. A capacidade de ativar ou limpar qualquer bit, nos d a habilidade para controlar esse processo. BCF f,b (limpa Bit em f) 0 (f<b>) BSF f,b (ativa Bit em f) 1 (f<b>) Ns lemos essas duas operaes como 0 (ou 1) se tornando o contedo do bit b no registrador f. Exerccio: Coloque esses comandos em qualquer um dos programas anteriores e observe as mudanas a bits individuais em sua janela de monitoramento. Veja bits.asm.

7: Controle de Programa
Por muitas razes, ns precisamos controlar o fluxo atravs do nosso programa. Normalmente, o fluxo procede linearmente a partir do topo; e freqentemente isto no adequado ao que queremos. Primeiramente, ns podemos precisar efetuar laos por certas instrues: ns poderamos ter um sistema no qual um determinado processo seja contnuo. Este poderia ser o controle de um transportador que continuamente acrescenta ingredientes a um depsito. Aqui, quando um depsito realizado ns voltamos ao topo e passamos novamente pelos mesmos passos somando mais depsitos a cada passagem. Segundo, pode ser uma parte de nosso programa que ser til em muitas outras partes. Em lugar de repetir este cdigo em muitos lugares, ns separamos esse pedao do restante do cdigo; ento ns simplesmente chamamos isto to freqentemente quanto precisarmos. O pedao reutilizvel chamado de SUB-ROTINA. A seqncia de dados devolve o controle ao ponto em que foi chamada quando terminar. Vamos ver os laos (looping) primeiro: GOTO k (V para um endereo) k (PC) Esta instruo vai para k, e faz isso carregando o endereo k dentro do contador do programa, PC. Para usar GOTO voc deve primeiro informar para onde quer que o programa v, utilizando para isso um Label. Ento voc usa GOTO Label. Exerccio: Modifique um dos programas que voc j escreveu. Voc pode colocar um rtulo (label) perto do incio, e um GOTO mais adiante. medida que voc anda pelo programa ver realada a linha em que seu programa est fazendo o loop. Olhe para o contador do programa (PCL) na janela de monitoramento e voc pode conferir isso. Veja GOTO.asm Agora ns examinaremos seqncia de dados. Ns precisamos entender o conceito de stack (pilha). A pilha - que tem 8 nveis no PIC16F84 - o lugar onde o endereo da prxima instruo colocado, quando uma instruo CALL encontrada. medida que cada instruo executada, trabalho do Contador do programa (PC) saber onde o microcontrolador est, a qualquer tempo. A colocao do prximo endereo na Pilha diz ao microcontrolador aonde ir, depois que uma sub-rotina tenha acabado. Ns nos referimos carregar a pilha como popping, isto lendo o ltimo valor e girando a pilha para cima. A pilha s acessvel pelo topo: assim como uma pilha de pratos. O topo da pilha abreviado por TOS (Top of stack). H 2 instrues associadas com qualquer sub-rotina - uma para enviar o microcontrolador sub-rotina, e a outra para traz-lo de volta.: CALL k (Call sub-rotina) (PC)+1 TOS, k (PC) A chamada CALL para uma sub-rotina empurra o PC+1 atual para o topo da pilha, ento altera o PC para o endereo k. Isto resulta em um salto no fluxo do programa para a subrotina, mas o endereo para voltar aps a execuo da sub-rotina est preservado na pilha para recuperao posterior.

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Page 11 of 19

RETURN (Retorna da sub-rotina) TOS (PC) RETURN a ltima instruo da sub-rotina. A instruo de retorno l e remove o ltimo dado da pilha e assim o programa retorna ao lugar certo. Pense na profundidade da pilha: significa que chamadas podem ser encadeadas, e o fluxo estar correto contanto que cada chamada tenha um retorno correspondente. RETLW k (Retorna com literal em W) k (W), TOS (PC) Isto retorna com k (W) somado. RETFIE (Retorna de Interrupo) TOS (PC), 1 GIE Quando uma interrupo acontece, o PC empurrado para a pilha da mesma forma que acontece com uma chamada de sub-rotina, ento RETFIE gira a pilha. Tambm, a ocorrncia de uma interrupo incapacita interrupes adicionais: algum no quer as interrupes sejam interrompidas. O que acontece que a interrupo faz com que a flag de interrupo global, GIE (INTCON <7>) seja fixada em 0. Voltar de uma interrupo significa que devem ser permitidas interrupes adicionais, conseqentemente RETFIE fixa GIE de volta a 1.

8: Ignorando instrues
Existem 4 instrues que permitem que voc ignore a instruo seguinte. DECFSZ f,d (Decrementa f, ignora se 0) (f)-1 (dest), ignora se o resultado for = 0 INCFSZ f,d (Incrementa f, ignora se 0) (f)+1 (dest), ignora se o resultado for = 0 Os comandos acima so baseados nos comandos DECF e INCF vistos anteriormente. A parte SZ signfica skip if zero' (ignora se for zero). Exerccio: Confira essas 2 instrues carregando um valor inicial em um registrador chamado 'count.' Ento use qualquer instruo para mudar esse valor, efetuando laos nesse bloco de cdigo. Confira para ver se a instruo que segue o decfsz ou incfsz (provavelmente um GOTO, para causar lao) ignorada ou no, como apropriado. Veja Skip.asm. BTFSC f,b (Testa Bit f, ignora se limpo) skip if (f<b>)=0 BTFSS f,b (Testa Bit f, ignora se ativado) skip if (f<b>)=1 Leia estas instrues como testa bit f e ignora se ativado. Exerccio: Escreva um programa com um bloco de cdigo com um loop. Ponha um BTFSS no final, seguido por um GOTO para retornar ao incio. Inclua um pouco mais de cdigo. O BTFSS precisar referir-se uma das portas de I/O do PIC16F84 como seu f (H'05' ou H'06' para PortA e B respectivamente), e voc pode usar qualquer pino de 0 a 4 na PortaA, 0 a 7 na PortaB. Voc deve ter outro GOTO exatamente no final para efetuar um loop mais externo para o comeo, assim voc pode ver o loop do programa para ver o que acontece quando um pino de entrada sofre alterao. Veja Bits.asm. See Bits.asm. Mas como ns fazemos com que o pino mude de estado? H um modo fcil de fazer isso no simulador da MPLAB. V em Debug> Simulatos stimulus> Asynchronous stimulus; voc ver uma tabela de botes de Stim0 at Stim12. Clique com o boto direito em qualquer um, por exemplo, Stim7, e clique em Assign pin. D um duplo-clique no pino que voc escolheu para usar como sensor, talvez fosse RA3. Stim7 ento muda para RA3. Agora clique com o boto direito novamente no boto: voc pode escolher pulsar, tornar LOW, HIGH ou chavear o pino. Aqui, ns vamos escolher chavear o pino. Agora ns estamos prontos para efetuar os testes. Caminhe pelo seu programa. Dependendo do estado inicial do pino, o qual ainda desconhecido na ligao da alimentao, o programa far o loop ou no. (No loop mais interno, isto , ele sempre voltar para o incio a partir do final, para propsitos de teste) A qualquer hora que voc quiser, clique com o boto esquerdo no boto Stim que voc escolher, que agora ns sabemos que RA3. (Se voc tiver a exibio das portas em uma janela de monitoramento, voc ver o pino mudar de estado nos limites da prxima instruo). De qualquer modo, da prxima vez o programa chegar ao passo BTFSS, ele deveria se comportar diferentemente, j que ns chaveamos o pino e assim o BTFSS deveria ter uma resposta diferente.

9: Rotaes e Trocas
Trs instrues permitem a voc manipular os bits dentro de um registrador. Destas, duas deslizam os bits para a direita ou para a esquerda (atravs do bit de transporte), e a terceira inverte os dois meio-bits (nibbles) do registrador.. RRF f,d (Rotaciona f direita atravs do bit carry.)

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Page 12 of 19

Cada bit no registrador f deslocado 1 para a direita. O que sai fora para a direita movido para carry, e carry movido para a esquerda. RLF f,d (Rotaciona f esquerda atravs do bit carry) Cada bit no registrador f movido 1 para a esquerda. O que sai fora pela esquerda movido para dentro de carry, e carry circula para a direita. SWAPF f,d (Inverte os nibbles em f) (f<3:0) (dest<7:4>), (f<7:4>) (dest<3:0>) Exerccio: Observe o efeito desses comandos no contedo de um registrador. Veja Rot_swap.asm.

10: Sleep e o Timer Watchdog


Estes dois comandos esto relacionados. O WDT (Watchdog Timer) um dos caminhos para se despertar do comando sleep. SLEEP (Sleep) 0 WDT, 0 WDT prescaler, 1 TO, 0 PD CLRWDT (Clear watchdog timer) 0 WDT, 0 WDT prescaler, 1 TO, 1 PD

11: Miscelnea
NOP (Nenhuma operao) Esta instruo no faz nada. Ela bastante til para a criao de pequenos intervalos de atraso (1s) para permitir que alguma coisa seja pr-ajustada antes que outra operao seja executada. TRIS 05 Esta instruo controla a direo de cada linha da porta chamada Porta A. o Registro de Controle de Direo (DCR). H 5 linhas na porta A chamadas de RA0, RA1, RA2, RA3 e RA4. Cada linha pode ser de entrada ou de sada. Para fazer uma linha entrada, o bit correspondente no registro TRIS definido como "1. " Para fazer uma linha sada, o bit correspondente definido como "0. " Assim o valor 01 far RA0 uma entrada e todas as outras linhas sero sadas. O valor 23 (0010 0011) far RA0 e RA1 entradas e o bit5 no ter nenhum efeito, pois nenhuma linha corresponde a esse bit. TRIS 06 Esta instruo controla a direo de cada linha na porta B. Existem 8 linhas na porta B. RB0, RB1, RB2, RB3, RB4, RB5, RB6, and RB7. Um "0" no registrador TRIS torna a linha correspondente na porta B uma Sada. Um 1 no registrador TRIS torna a linha uma Entrada. Isso fcil de ser lembrado, pois 0 similar a 0utput (sada) e 1 similar a 1nput (entrada). Voc no deve usar a instruo a seguir, que foi includa para efeitos de compatibilidade. OPTION (No recomendado)

Pausa para refletir


Agora ns conhecemos cada instruo do PIC16F84, com toda a base necessria, e as usamos programas simples. Vamos a seguir explorar duas reas importantes do PIC16F84: interrupes e cronmetros. Estas duas reas passam o PIC16F84 para o mundo real.

Interrupes no '84
O que uma interrupo? Pense simples, isso exatamente o que quer dizer: uma forma de atrair a ateno do computador. Uma vez uma interrupo tenha sido tratada, o controle tem que voltar para onde estava anteriormente. No s isso, mas todo o estado do sistema deve ser recuperado: se qualquer registrador foi mudado durante o controle da interrupo, ele deve ser restaurado. Ns veremos isso mais adiante. Agora que ns sabemos o conceito de interrupo vamos ver como o 84 lida com esse conceito.

Tipos de Interrupo e o registrador INTCON

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Page 13 of 19

O PIC16F84 tem 4 tipos diferentes de interrupo: . uma interrupo externa no pino 6, tambm conhecido como: RB0 . uma mudana em qualquer dos pinos de 10 a 13, tambm chamados RB4 a RB7 . um estouro no cronmetro . uma de gravao completa na EEPROM. Para permitir interrupes, e para determinar a sua origem, o processador utiliza o registrador INTCON (0Bh). Cada bit serve a um propsito especfico, e interrompe o trabalho de acordo com o seu valor (ativado ou no). Primeiramente, interrupes, como um todo, podem ser habilitadas ou desabilitadas pelo bit INTCON <7>, o GIE (Habilitao de Interrupo Global). Se esse bit estiver zerado, ento nenhuma interrupo pode acontecer: Esse o valor no power-up. Tambm, se uma interrupo acontecer, ento o GIE zerado para prevenir a interrupo de ser suspensa; o retorno da interrupo com a instruo RETFIE re-habilita as interrupes. Segundo: cada um dos tipos de interrupo deve ser habilitado com seu prprio bit em INTCON, antes de poder ser utilizada: interrupo externa no pino 6: INTCON <4>, o bit INTE mudana em quaisquer dos pinos 10-13: INTCON <3>, o bit RBIE estouro do cronmetro: INTCON <5>, o bit T0IE gravao completa da EEPROM: INTCON <6>, o bit EEIE. Terceiro, quando interrupes acontecem, certos bits (conhecido como flags de interrupo) so ativados de forma que ns podemos ento determinar a origem da interrupo: interrupo externa no pino 6: INTCON <1>, o bit INTF mudana em quaisquer dos pinos 10-13: INTCON <0>, o bit RBIF estouro do cronmetro: INTCON <2>, o bit T0IF Por que ns precisamos saber a origem? Bem, dependendo do tipo de interrupo, ns entraremos em ao de modo diferente: verificar o bit apropriado nos diz que tipo de interrupo . Note que as flags de interrupo sempre so ativadas quando h uma interrupo, independente do estado do bit de habilitao correspondente.

Lidando com uma Interrupo


No PIC16F84, todas as interrupes so enviadas para 004h. Esse ponto o vetor de interrupo e o programa orientado a dirigir-se para esse endereo. No vetor, temos que ter certeza ns supriremos o cdigo necessrio para tratar com cuidado do problema. Um ponto crucial que ns podemos ter que salvar o status da mquina como ele estava antes da interrupo, antes de ns corrigirmos a interrupo. Claramente, as atividades empreendidas durante a correo poderiam mudar algumas coisas tais como os registradores W e STATUS; ns precisamos t-los restabelecidos aps ter controlado a interrupo, para que nosso outro trabalho possa continuar. O PIC16F84 s salva o Contador do programa na pilha (PC+1, na verdade), e cabe a ns assegurar que salvaremos e recuperaremos qualquer outra coisa que possamos precisamos! H 3 partes a um programa que devem controlar interrupes simples: . uma seo initialize onde, em nosso caso, ns habilitaremos as interrupes; . uma seo Main onde a maior parte do utilizada (fazendo clculos ou o que quer que seja) e a parte de manipulador(handler) onde a interrupo tratada. Initialize: ativa GIE , INTCON <7> para habilitar interrupes, ativa INTE, INTCON <4> para habilitar interrupes no pino 6 Handler: salva o estado da mquina; provavelmente W e STATUS; checa as flags de interrupo para determinar a origem; INTF, RBIF, T0IF derivam para o correto 'o sub-handler' para determinar o tipo de interrupo (embora ns fixamos apenas INTE). Faz o que necessrio para restaurar o estado anterior interrupo e retorna. Main: Efetua clculos, por exemplo. Exerccio: Comece lentamente com as interrupes. Isto pode se tornar bastante complexo. Escreva um programa para provocar a menor interrupo possvel: habilite-as e faa uma rotina de servio de interrupo (ISR interrupt service routine) que faa bem pouca, ou coisa

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Page 14 of 19

alguma que no seja reabilitar as interrupes e retorne, e uma rotina principal que somente faa loops por algum cdigo que espere por uma interrupo. Voc no precisa preservar o estado da mquina, nem conferir o tipo de interrupo nesta fase. Para ver este programa funcionando corretamente no simulador, eu sugiro usar a interrupo de mudana na porta B, usando a tcnica de estmulo assncrona discutida anteriormente. Use um chaveamento do pino para provocar a mudana: enquanto o programa estiver efetuando os loops na seo principal, chaveie o pino e verifique que a interrupo acontece quando voc executa o prximo passo do programa. Enquanto o programa estiver na ISR, chaveie o pino novamente: se tudo estiver funcionando, a mudana no pino no causar uma interrupo, porque GIE foi sido zerado. Veja Inter1.asm Exerccio: Agora implemente esse programa para salvar o estado da mquina no momento da interrupo. Teste isso, tenha certeza voc carregou W (digamos) na parte principal, ento altere-o na ISR, e verifique se ele restaurado corretamente. Veja inter2.asm. Exerccio: Finalmente, permita mais de um tipo de interrupo - mudana em um dos pinos da porta B 4:7 bem como uma interrupo no pino RB0/INT. Agora, voc precisar determinar o tipo de interrupo, e controlar isso adequadamente. Veja Inter3.asm.

Timers no '84
A idia bsica, que ns quereremos usar nosso PIC16F84 para cronometrar algo. Cronometrar,quer dizer do modo ns usamos um relgio normal: ns poderamos acender a iluminao de nosso aqurio por exemplo, ou fechar as cortinas s 18h00 todas as noites. Mas no h nenhum relgio nos 84: nenhum relgio no sentido de um relgio normal. O que h, entretanto, uma relao simples entre executar instrues e a velocidade em que o processador trabalha. Uma instruo completa em 1s quando o chip est operando 4MHz. Vamos conferir isso e introduzir uma caracterstica bem til do MPLAB ao mesmo tempo: o Cronmetro. No MPLAB prepare-se para executar qualquer um dos programas voc escreveu. Abra o cronmetro atravs de Janela >Cronmetro. Voc ver uma janela simples contendo 3 informaes importantes: o nmero de passos completos em um determinado tempo, e a freqncia. Veja se a freqncia est fixada agora em 4MHz, clique zero e execute um passo do seu programa uma vez. Voc deve ver que progrediu 1 ciclo em 1s. (A menos que esse passo fosse, coincidentemente, um desvio no programa, o que uma instruo de 2 ciclos.) Assim, ns temos o vislumbre de um relgio comum. Ns saberemos quanto tempo passou se ns soubermos quantos passos foram executados. Entre em Timer0

O Mdulo TIMER0
O cronmetro do PIC16F84, TIMER0, trabalha numa base em que cada vez que acontece um ciclo de instruo, um certo intervalo de tempo decorreu. Quando TIMER0 est correndo, seu registrador (TMR0) incrementado a cada ciclo; a cada 1s se o clock for de 4MHz. Ento, o valor de TMR0 representa o 'tempo' em passos de 1s. Mas TMR0, como todos os registradores, um registrador de 8 bits e assim s pode contar at FF: isso significa que o tempo vai at 255S o que no muito tempo. Projete a sua mente at a discusso de interrupes, onde ns dissemos que um dos tipos de interrupo era uma interrupo de estouro de cronmetro: isso significa que o registrador TMR0 ultrapassou o limite de FF e retornou para 00. Isso significa que essa interrupo acontece a cada 256S do tempo real. Cabe a ns fazer alguma coisa com esta interrupo, o que provavelmente significa incrementar um nosso prprio registrador. Vamos caminhar pelo processo de simplesmente ter TIMER0 funcionando, usando as tcnicas de interrupo com initialize, handler e main, vistas anteriormente. Initialize: ativa GIE, INTCON<7> para habilitar interrupes, ativa T0IE, INTCON<5> para habilitar a interrupo do timer limpa T0CS, OPTION<5> para habilitar o timer - veja ativar PSA, OPTIOPN<3>, para manter o prescaler fora disto. Handler: incremento 'cronometrado em funo do clock', nosso contador de overflow (estouro) Main: tem um loop para manter o programa rodando

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Page 15 of 19

Exerccio: Escreva um programa para implementar o cronmetro simples acima, tendo em mente que ns no estaremos fazendo nada com os estouros a no ser clic-los. Confira o programa no simulador, observando os registradores que voc acha que deve monitorar e tambm o cronmetro. Antes de voc comear, voc precisar entender como acessar o registrador de opo (OPTION), o que no exatamente to simples quanto acessar, digamos, STATUS. Eu explico isso mais abaixo. Veja Time1.asm Acessando registradores em Bank1: Voc deve ter percebido que alguns registradores como OPTION esto naquilo que referido como Bank1, ao invs de Bank0. Outros, como STATUS est em ambos Bank0 e Bank1. O que isto significa na prtica, que estes registradores do Bank1 normalmente no esto disponveis, porque nossa esfera de operaes o Bank0. Ns usamos o registrador de STATUS para alternar entre os bancos, com RP0 (STATUS <5>) fazendo o truque. Isto simplesmente significa que ns temos que ativar RP0 para ir para Bank1 e zer-lo para retornar. Para aqueles registradores que esto em ambos os bancos, voc tem acesso no importa de onde voc esteja, mas lembre-se que o registrador tem 2 endereos diferentes: STATUS tem seus endereos conhecidos em h'03' e h'83'.

Usando o estouro do timer


Agora ns provavelmente podemos ver para onde estamos indo. Ns temos um registrador que est se atualizando sempre que o cronmetro estoura. Isso acontece aproximadamente a cada 256s e o timer vai estourar em 256. Ns precisamos contar estes estouros tambm, em outro registrador (arquivo). Agora, ns estamos chegando mais perto de um segundo na cronometragem, que o objetivo que estamos perseguindo. At quanto ns precisamos contar no segundo arquivo para alcanar 1 segundo? Incrementar a cada .0,0256 segundos significa que existem aproximadamente 39 incrementos em um Segundo, ento isso significa que podemos contar segundos de tempo-real incrementando um outro registrador, SECONDS por exemplo, a cada 39 passos. Para conseguir minutos e horas, ns simplesmente tratamos com o estouro do registrador SECONDS para minutos a cada 60 segundos e o mesmo com um registrador de minutos, a cada 60 minutos para marcarmos as horas. Exerccio: Crie um programa para implementar o anterior, pelo menos at a parte do registrador SECONDS. Usando a memria de dados EEPROM

Apendice: Listagem dos Programas


Os programas a seguir tm o objetivo de ilustrar o uso dos comandos discutidos. Eles so simples e no mostram toda a tcnica de programao. Em cada um eu inclu uma seo chamada simulador. Nesta seo h uma sugesto para as coisas que voc possa querer fazer durante a simulao do seu programa. Por exemplo, voc poderia precisar ter uma janela de monitoramento aberta mostrando o registrador W e a Porta B, e tambm tendo a pilha sendo mostrada. claro que cabe a voc a forma de projetar e edificar esses programas, e a forma como voc vai fazer experimentos com eles no simulador. Programa 2: Moves.asm ;moves.asm para mostrar como MOVF, MOVWF & MOVLW funcionam ;*********************************** simulador *** ;watch window: reg1, w, pcl ;*********************************** setup *** processor 16F84 reg1 equ h'10' ;*********************************** programa *** start: movlw h'05' ;carrega w movwf reg1 ;move (w) para reg1 movlw h'82' ;altera w movf reg1,0 ;restaura w end

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Page 16 of 19

Program 3: Clears.asm ;clears.asm para mostrar como clrf & clrw funcionam ;baseado em moves.asm ;*********************************** simulador ;watch window: reg1, w, pcl ;*********************************** setup processor 16F84 reg1 equ h'10' ;*********************************** programa start: movlw h'05' ;carrega w movwf reg1 ;move (w) para reg1 movlw h'82' ;altera w movf reg1,0 ;restaura w clear: clrf reg1 ;limpa reg1 clrw ;limpa w end

Program 4: Arith.asm ;arith.asm para mostrar o uso de ADDWF, SUBWF, ADDLW, SUBLW ;************************************* simulador ;watch window: reg1,reg2,status,w,pcl ;************************************* setup processor 16F84 reg1 equ h'10' reg2 equ h'12' ;************************************* programa loads: movlw d'20' ;carrega w movwf reg1 ;carrega reg1 movlw d'80' ;carrega w mais uma vez movwf reg2 ;carrega reg2 arith: addlw d'05' ;adiciona d'05' a w sublw d'100' ;subtrai w de d'100' addwf reg1,1 ;soma w a reg1, dentro de reg1 subwf reg2,1 ;subtrai w de reg2, dentro de reg2 end

Program 5: Inter1.asm ;inter1.asm um manipulador simples de interrupes; ele no salva o estado da mquina ; nem determina o tipo de interrupo. ;*********************************************simulador ;watch window: intcon, pcl ;stack: mantenha aberta tambm- veja o endereo de retorno ida e volta ;asynch stimulus: tenha um chaveamento em rb4 ;********************************************* setup processor 16F84 movlw h'0' movwf h'0b' ;limpa intcon goto main ;salta sobre a isr ;********************************************** incio da isr isr: org h'0004' ;interrupes sempre apontam para c nop ;aqui nos lidamos de fato nop ; com a interrupo bcf h'0b',0 ;limpa int antes de retornar retfie ;isto reativa o intcon gie ;*********************************************** fim da isr ;*********************************************** incio de main main org h'0020' ; deixa espao bastante para a isr! bsf h'0b',7 ; ativa global int enable bsf h'0b',3 ; ativa mudana em b int enable

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Page 17 of 19

payrol nop goto nop nop end

nop ; payrol

; loop aqui at interruo, realize tarefas de payroll

Program 6: Inter2.asm ;inter2.asm salva o estado da mquina ; mas no determina o tipo de interrupo. ; ;****************************************************simulador ;watch window: intcon, pcl, portb, w, w_saved ;stack: mantenha aberta tambm- veja o endereo de retorno ida e volta ;asynch stimulus: tenha um chaveamento em rb4 ;**************************************************** setup processor 16F84 w_saved equ h'10' ;um lugar para manter w movlw h'0' movwf h'0b' ;limpa intcon goto main ;salta sobre a isr no incio ;**************************************************** isr isr org h'0004' ;interrupes sempre apontam para c movwf w_saved ;salva w como em main movlw h'65' ;alguma coisa para mudar w nop ;mais operaas da isr ;agora, restaurar w: no h ; "movfw"- 2 swapf's parece ser o caminho a seems to be ; seguir para faze-lo... swapf w_saved,1 ;primeiro, swap w_salvo nele prprio swapf w_saved,0 ;ento, swap dentro de w bcf h'0b',0 ;limpa int em b antes de voltar retfie ;isto reativa intcon gie ;***************************************************** final da isr ;****************************************************** Incio de main main: org h'0020' ; deixe espao para a isr! bsf h'0b',7 ; ativa global int enable bsf h'0b',3 ; ativa mudana em b int enable payrol nop ; loop aqui at a interrupo, nop ; fazendo instrues em payroll movlw h'0f' ; simule um calculo carregando w goto payrol nop nop end Program 7: Inter3.asm ;inter3.asm salva o estado da mquina ; e determina o tipo de interrupo. ; ;**************************************************simulator ;watch window: intcon, pcl, portb, w_saved, w ;stack:mantenha aberta tambm- veja o endereo de retorno ida e volta ;asynch stimulus tenha um chaveamento em rb4 (for rbi) e rb0(int) ;************************************************* setup processor 16F84 w_saved equ h'10' ;Um lugar para manter w movlw h'0' movwf h'0b' ;limpa intcon goto main ; salta sobre a isr no incio ;*************************************************** isr isr org h'0004' ;interrupes sempre apontam para c movwf w_saved ;salva w como ele estava am Main

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Page 18 of 19

;descobre qual o tipo de interrupo btfsc h'0b',0 ; uma rbi? call _rbi ;sim - chame o 'sub-handler' rbi btfsc h'0b',1 ; int? call _int ;sim chame o 'sub-handler' int ;termina aqui aps os sub-handler ;agora, restaura w swapf w_saved,1 ;primeiro, swap em w_salvo dentro dele mesmo swapf w_saved,0 ;ento, swap em w bcf h'0b',0 ;limpa rbif antes de voltar bcf h'0b',1 ;limpa intf antes de voltar retfie ;isto reativa intcon gie _rbi movlw h'65' ;faz algo para mudar w return _int movlw h'24' ;faz algo diferente com w return ;***************************************************** Final da isr ; ;**************************************************** Incio de main main org h'0020' ; leave room for the isr! bsf h'0b',7 ; ativa global int enable bsf h'0b',3 ; ativa mudana em b int enable bsf h'0b',4 ; ativa ext int no pin6 enable ; ns tivemos 2 tipos de interrupo! payrol nop ; loop aqui at interrupo, nop ; fazendo operaes em payroll movlw h'0f' ;simule clculo carregando w goto payrol nop nop end

Program 8: Time0.asm ;time0.asm para mostrar como timer0 funciona ;************************************ setup processor 16F84 STATUS EQU H'03' OPTIO EQU H'81' tmr0 EQU H'01' BANK_ EQU H'05' T0CS EQU H'05' PSA EQU H'03' clocked equ h'10' INTCON equ h'0B' T0IE equ h'05' GIE EQU H'07' goto top ;************************************ isr isr ORG h'0004' incf clocked ;clocked o relgio comum BCF INTCON,2 retfie ;************************************ programa top org h'0010' clrf tmr0 ;limpa o registrador tmr0 clrf clocked mode bsf STATUS,BANK_ ;alterna para page 1 bcf OPTIO,T0CS ;vai do counter para o timer bsf OPTIO,PSA ;sem prescaler ainda bsf INTCON,GIE bsf INTCON,T0IE loop nop

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Page 19 of 19

nop goto END

loop

| 01 | 02 | 03 | 04 | 05 |06 | 07 |

http://www.novaeletronica.net/q/n5/cursopic/cursopic_7.htm

03/12/2009

Você também pode gostar