Guia de Trabalho Pratico Com Microcontrolador PIC

  • Upload
    nando

  • View
    253

  • Download
    1

Embed Size (px)

Citation preview

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    1/203

    DETUADepartamento de Electrnica e Telecomunicaes

    Universidade de Aveiro

    Microcontroladores PIC

    Guia de Trabalhos Prticos do Professor

    Jos Miguel Oliveira Gaspar < [email protected]>Olmpia Rodrigues< [email protected]>

    Alunos de seminrio da Licenciatura em Ensino de Electrnica e Informtica

    ltima Reviso

    4 de Maio de 2006

    mailto:[email protected]:[email protected]:[email protected]:[email protected]
  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    2/203

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    3/203

    Guia realizado sob a orientao doProf. Doutor Jos Lus Azevedo< [email protected]>

    Prof. Auxiliar do Departamento deElectrnica e Telecomunicaes da Universidade de Aveiro

    mailto:[email protected]:[email protected]
  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    4/203

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    5/203

    Resumo

    A elaborao deste guia insere-se no mbito do seminrio da Licenciatura em Ensino de Electr-nica e Informtica. A motivao do trabalho vm ao encontro da lacuna documental existente sobremicrocontroladores no mbito da disciplina de Sistemas Digitais do ensino secundrio, por formaminimizar a falta de recursos foram desenvolvidos dois guias de trabalhos prticos sobre microcon-troladores, um para cada, aluno e professor.Para o efeito escolheu-se um microcontrolador da famlia 16F87X da Microchip, para a realizaodos diversos trabalhos prticos

    iii

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    6/203

    Agradecimentos

    O nosso agradecimento vai para todos aqueles que connosco colaboraram para que este guia fosseuma realidade. Em especial aos colegas da sala 317 que em muito contriburam durante todo o semi-nrio.

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    7/203

    Contedo

    Resumo iii

    Contedo ix

    Lista de Figuras xii

    Lista de Tabelas xiii

    Introduo 1

    1 Enquadramento geral. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

    1.1 Trabalhos prticos a realizar. . . . . . . . . . . . . . . . . . . . . . . . . . 1

    2 Algumas caractersticas do PIC16F876. . . . . . . . . . . . . . . . . . . . . . . . . 3

    3 Hardware - Placa PIC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

    TP0 - Introduo ao Assembly e MPLAB IDE 5

    1 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    2 Objectivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    3 Descrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    3.1 Ambiente de desenvolvimentoMPLAB IDE . . . . . . . . . . . . . . . . . 5

    4 Trabalho a Realizar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    4.1 Criao de um projecto noMPLAB IDE . . . . . . . . . . . . . . . . . . . 8

    4.2 Traduo do cdigo fonte em cdigo mquina. . . . . . . . . . . . . . . . . 10

    4.3 Programao do PIC16F876 atravs da linha srie. . . . . . . . . . . . . . 11

    4.4 Estrutura base de um programa emAssembly . . . . . . . . . . . . . . . . . 12

    v

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    8/203

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    9/203

    ndice de Contedos

    4.1 Descrio do registo STATUS. . . . . . . . . . . . . . . . . . . . . . . . . 45

    5 Implementao em Assembly do PIC. . . . . . . . . . . . . . . . . . . . . . . . . . 47

    TP4 Contador de 60 segundos, verso I 53

    1 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

    2 Objectivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

    3 Descrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

    3.1 Rotina Delay. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    4 Trabalho a realizar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565 Implementao em Assembly do PIC. . . . . . . . . . . . . . . . . . . . . . . . . . 59

    5.1 Ponto 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

    5.2 Ponto 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

    5.3 Ponto 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

    TP5 Relgio de 60 segundos, verso II 79

    1 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792 Objectivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

    3 Descrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

    3.1 Timer 0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

    3.2 Registo OPTION_REG. . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

    3.3 Registo INTCON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

    4 Trabalho a realizar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845 Implementao em Assembly do PIC. . . . . . . . . . . . . . . . . . . . . . . . . . 85

    TP6 Semforo rodovirio(automveis/pees) 91

    1 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

    2 Objectivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

    3 Descrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

    3.1 Diagrama de estados - Semforo rodovirio. . . . . . . . . . . . . . . . . . 92

    4 Trabalho a realizar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

    vii

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    10/203

    Guio Prtico Sobre micro-controladores PIC

    5 Implementao em Assembly do PIC. . . . . . . . . . . . . . . . . . . . . . . . . . 95

    TP7 - Relgio 60 segundos, verso III 101

    1 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

    2 Objectivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

    3 Descrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

    3.1 Led pisca-pisca com boto ON/OFF por interrupo. . . . . . . . . . . . . 102

    4 Trabalho a realizar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

    5 Implementao em Assembly do PIC. . . . . . . . . . . . . . . . . . . . . . . . . . 1065.1 Ponto 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

    5.2 Ponto 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

    5.3 Ponto 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

    TP8 USART Universal Synchronous Asynchronous Receiver Transmitter 127

    1 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

    2 Objectivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1273 Descrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

    3.1 Congurao dos pinos de transmisso/recepo. . . . . . . . . . . . . . . 128

    3.2 Taxa de transmisso da USART. . . . . . . . . . . . . . . . . . . . . . . . 128

    3.3 Operao de transmisso. . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

    3.4 Operao de recepo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

    3.5 Registo TXSTA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1313.6 Registo RCSTA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

    4 Trabalho a realizar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

    5 Implementao em Assembly do PIC. . . . . . . . . . . . . . . . . . . . . . . . . . 134

    5.1 Ponto 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

    5.2 Ponto 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

    5.3 Ponto 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

    TP9 ADC - Converso Analgica / Digital 145

    viii

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    11/203

    ndice de Contedos

    1 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

    2 Objectivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

    3 Descrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

    3.1 Entrada Analgica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

    3.2 Resultado da converso A/D. . . . . . . . . . . . . . . . . . . . . . . . . . 146

    3.3 Mecanismo de aquisio da ADC. . . . . . . . . . . . . . . . . . . . . . . 147

    3.4 Etapas na programao da ADC ( polling) . . . . . . . . . . . . . . . . . . . 148

    3.5 Registo ADCON0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

    3.6 Registo ADCON1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

    4 Trabalho a realizar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

    5 Implementao em Assembly do PIC. . . . . . . . . . . . . . . . . . . . . . . . . . 153

    5.1 Ponto 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

    5.2 Ponto 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

    5.3 Ponto 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

    Apendix A 177

    Apendix B 179

    ix

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    12/203

    Guio Prtico Sobre micro-controladores PIC

    x

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    13/203

    Lista de Figuras

    1 Disposio dos componentes na placa de CI DETUA. . . . . . . . . . . . . . . . . 4

    2 Esquema da placa PIC DETUA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Janela associada ao processo de simulao de um programa no MPLAB IDE. . . . . 7

    4 Projecto em MPLAB IDE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    5 Visualizao de janelas de informao memria do PIC. . . . . . . . . . . . . . . . 8

    6 fase 1 - criao de um novo projecto .. . . . . . . . . . . . . . . . . . . . . . . . . 8

    7 fase 2 - seleco do microcontrolador.. . . . . . . . . . . . . . . . . . . . . . . . . 9

    8 Adicionar um cheiro fonte existente ou criar um novo.. . . . . . . . . . . . . . . . 9

    9 Traduo do cdigo fonte em cdigo mquina.. . . . . . . . . . . . . . . . . . . . . 10

    10 WinPIC Loader. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    11 Congurao de uma linha emE/S . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    12 Diagrama do circuito, led on/off.. . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    13 Diagrama temporal da sada temporizada. . . . . . . . . . . . . . . . . . . . . . . . 18

    14 Diagrama do circuito para o contador up/down. . . . . . . . . . . . . . . . . . . . . 19

    15 Acesso memria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    16 Endereamento Indirecto cdigo de demonstrao. . . . . . . . . . . . . . . . . . . 32

    17 Seleco do banco de memria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    18 Diagrama do circuito, 1displayde 7 segmentos. . . . . . . . . . . . . . . . . . . . 34

    19 Processo de refrescamento dosdisplays . . . . . . . . . . . . . . . . . . . . . . . . 44

    20 Seleco dos bancos de memria RAM.. . . . . . . . . . . . . . . . . . . . . . . . 45

    21 Diagrama de uxo da rotina Delay. . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    22 Diagrama do circuito para para visualizao do valor 0x60. . . . . . . . . . . . . 56

    xi

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    14/203

    Guio Prtico Sobre micro-controladores PIC

    23 Diagrama do circuito, exemplica a passagem de 60 59 . . . . . . . . . . . . . 57

    24 Diagrama do circuito, exemplica o trmino da contagem. . . . . . . . . . . . . . . 57

    25 Diagrama do circuito com sw, antes de se pressionar no boto. . . . . . . . . . . . . 58

    26 Diagrama do circuito com sw, aps pressionar no boto. . . . . . . . . . . . . . . . 58

    27 registo contador de 8 bits. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

    28 Diagrama de blocos do timer 0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

    29 Semforo rodovirio (automveis/pees). . . . . . . . . . . . . . . . . . . . . . . . 91

    30 Diagrama de estados do trabalho prtico. . . . . . . . . . . . . . . . . . . . . . . . 92

    31 Diagrama do circuito, semforo rodovirio. . . . . . . . . . . . . . . . . . . . . . . 93

    32 Exemplo de uma interrupo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

    33 Diagrama do circuito, interrupo do RBO/INT. . . . . . . . . . . . . . . . . . . . 104

    34 Atribuio do porto srie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

    35 Operao de transmisso assncrona. . . . . . . . . . . . . . . . . . . . . . . . . . 129

    36 Operaco de recepco assncrona. . . . . . . . . . . . . . . . . . . . . . . . . . . 130

    37 Ligao srie entre o PIC e o Computador. . . . . . . . . . . . . . . . . . . . . . . 13338 ADC, entradas analgicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

    39 Formato do resultado de 10 bits. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

    40 Mecanismo de aquisio da ADC. . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

    41 Diagrama do circuito do voltmetro digital, visualizao comdisplays7 segmentos . 151

    42 Diagrama do circuito do voltmetro digital, visualizao terminal srie. . . . . . . . 151

    43 Mapa de memria RAM, registos do PIC e registos de uso geral. . . . . . . . . . . 177

    xii

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    15/203

    Lista de Tabelas

    1 Descrio dos temas a abordar.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

    2 HEX 7 segmentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 Descrio do estado dosleds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

    4 Tempo minmo entre estados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

    5 Taxa de transmisso em modo assncrono (BRGH = 1). . . . . . . . . . . . . . . . 128

    xiii

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    16/203

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    17/203

    Introduo

    1 Enquadramento geral

    Os trabalhos prticos apresentados neste guia foram organizados de modo a que o aluno adquira, numaperspectiva evolutiva, conceitos fundamentais associados programao de microcontroladores.

    Cada um dos trabalhos d nfase ao desenvolvimento de uma temtica especca, podendo cadaum deles ser realizado independentemente um dos outros. Contudo, para um aluno sem experin-cia prvia que utilize a programao de microcontroladores aconselhvel que os trabalhos sejamrealizados pela ordem em que so apresentados, resultando esta recomendao em dois aspectos fun-damentais: a) os trabalhos esto organizados com um grau de diculdade crescente, sendo importanteque os conceitos a abordados, sejam compreendidos, antes de se passar aos seguintes; b) o cdigorealizado num dado trabalho possa ser reaproveitado em trabalhos posteriores.

    1.1 Trabalhos prticos a realizar

    Trabalho Durao Descrio

    0 1 aula Familiarizao c/ a linguagemassemblye ambiente de desenvolvimento MPLAB1 3 aulas Entrada/Sada - Congurao dos portos do PIC2 1 aula Implementao de umalookup table3 2 aulas Implementao de um sistema de visualizao por multiplexagem no tempo4 2 aulas Contagem de tempo por contagem de instrues5 1 aula Contagem de tempo com recurso atimers6 2 aulas Implementao de uma mquina de estados7 3 aulas Programao com interrupes ( Interrupt driven I/O)8 2 aulas Comunicao srie assncrona (USART)9 4 aulas Converso Analgia Digital (ADC)

    Tabela 1: Descrio dos temas a abordar.

    A tabela1 fornece uma curta descrio dos temas a abordar em cada trabalho prtico. O primeirotrabalho prticoTP0 tem como principal objectivo a familiarizao com a linguagem assembly e oambiente de desenvolvimento MPLAB IDE. Com este trabalho pretende-se que o aluno tome conheci-mento das potencialidades que ambiente de desenvolvimento disponibiliza na realizao dos trabalhos

    1

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    18/203

    Guia prtico sobre microcontroladores PIC

    futuros; o trabalho seguinteTP1 , continua com a familiarizao do aluno com novos conceitos, destavez a familiarizao do aluno com a linguagem assembly do PIC para programao dos portos de

    entrada e sada na leitura e escrita de dados.No trabalho prtico 2,TP2 , pretende-se que o aluno adquira os conhecimentos necessrios de

    modo a compreender o acesso a variveis na memria RAM por endereamento indirecto. Para tal,pretende-se implementar um descodicador hexadecimal / 7 segmentos atravs de um nicodisplay.

    No seguimento deste trabalho, surge o trabalho 3 (TP3), em que se pretende uma ampliao dotrabalho anterior a 3displaysde 7 segmentos, com o objectivo de construir um programa que permita avisualizao de dados nosdisplays, recorrendo ao refrescamento destes por multiplexagem no tempo.

    No trabalho prtico seguinte (TP4), recorre-se a contagem de tempo por contagem de instrues,usando para tal uma rotina de contagem de tempo por contagem de instrues (rotina Delay).

    O trabalho prtico 5 (TP5), tem como um objectivo principal a introduo programao dotimer 0 do PIC. Com este, vai-se poder alargar a gama de contagem de tempo, algo que com a utilizao darotinaDelayno possvel.

    Com o trabalho 6 (TP6), pretende-se construir uma mquina de estados que implementa um se-mforo rodovirio para pees e automveis, com o objectivo de aprofundar os conhecimentos acercado timer 0.

    Nos trabalhos prticos 4 e 5 implementou-se um relgio de 60seg recorrendo rotinaDelayetimer 0, respectivamente. Ambos implementados recorrendo transferncia de informao porpol-

    ling. Durante o trabalho 7 (TP7) pretende-se implementar novamente um relgio, recorrendo agora transferncia de informao por interrupo. Para isso necessria a compreenso do conceito deinterrupo de um programa.

    Com o grau de diculdade a crescer, os dois ltimos trabalhos reectem essa complexidade nosconceitos a adquirir. Assim, o trabalho 8 (TP8) tem como objectivo, a comunicao srie entre umcomputador (antrio) e o PIC, elaborando para tal um programa que implemente um terminal srie,recorrendo a rotinas para envio e recepo de caracter ou caracteres.

    Por m, o trabalho 9 (TP9) tem como objectivo principal a introduo converso A/D, im-

    plementando para esse m 2 trabalhos: um voltmetro digital bsico, e um sistema de medio dedistncias recorrendo a um sensor infravermelhos.

    2

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    19/203

    Introduo

    2 Algumas caractersticas do PIC16F876

    O PIC16F876, fabricado com a tecnologia CMOS dispe de:

    ProcessadorRISC ( Reduce Instrution Set Computer )

    35 instrues de 14 bits; Frequncia mxima de funcionamento - 20Mhz (frequncia do cristal); Cada ciclo de relgio corresponde frequncia do cristal / 4 = 5Mhz, efectuando a cada

    segundo5 MIPS (milhes de instrues por segundo); Tempo de execuo das instrues normais: 1 ciclo de relgio;

    Tempo de execuo das instrues de salto condicional (decfsz, incfsz, btfss, btfsc), quandoa executada a instruo de salto: 2 ciclos de relgio;

    Tempo de execuo de instrues de salto incondicional (goto): 2 ciclos de relgio.

    As seguintes caractersticas da memria;

    Memria de programa (FLASH) de 8K (words) de 14 bits; Cada instruo codicada numaword de 14 bits; Memria de dados RAM de 368 bytes;

    Memria de dados EEPROM de 256 bytes; Stack de 8 nveis.

    As seguintes caractersticas de perifricos:

    22 linhas de entrada/sada, agrupadas em 3 portos (PORTA 6 linhas, PORTB e PORTC 8 linhas);

    3 timers, 2 de 8 bits e 1 de 16 bits; Conversor analgico digital de 10 bits, com um mximo de 5 canais de entrada anal-

    gica; USART (Universal Synchronous Asynchronous Receiver Transmitter ); 13 tipos de interrupes, por exemplo externa RB0/INT, TMR0timer overow.

    3 Hardware - Placa PIC

    No propsito do guio descrever o funcionamento da placa PIC, este feito no site da disciplina.Neste pode-se encontrar todas as informaes relevantes sobre olayout e funcionamento da placa.Contudo para que o aluno/professor se se enquadrem com o hardware apresenta-se nas pginas se-guintes o esquema elctrico do circuito bem como a disposio dos componentes na placa de circuitoimpresso.

    3

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    20/203

    Guia prtico sobre microcontroladores PIC

    Figura 1: Disposio dos componentes na placa de CI DETUA

    Figura 2: Esquema da placa PIC DETUA

    4

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    21/203

    TP0 - Introduo ao Assembly e MPLAB IDE

    Tema a desenvolver Durao

    Familiarizao com o Assemly e MPLAB IDE 1 aula

    1 Resumo

    Pretende-se mostrar com este trabalho os passos necessrios criao de um projecto no ambiente dedesenvolvimentoMPLAB IDE (programa de software destinado a desenvolveraplicaes para micro-controladores da Microchip) e traduo para cdigo mquina do cdigo fonte associado, recorrendoa um pequeno exemplo em linguagemAssembly. Mostra-se ainda, o processo de programao doPIC16F876 atravs da linha srie.

    2 Objectivos

    Criao de um projecto no ambiente de desenvolvimentoMPLAB IDE .

    Conhecer o processo de traduo de cdigo fonte para cdigo mquina.

    Conhecer o processo de programao do microcontrolador atravs doWinPIC Loader .

    Introduo programao em linguagemAssembly.

    3 Descrio

    3.1 Ambiente de desenvolvimento MPLAB IDE

    O MPLAB IDE um ambiente de desenvolvimento integrado que permite a edio, odebugginge atraduo para cdigo mquina de programas em linguagemAssembly. Disponibiliza essencialmente,as seguintes ferramentas:

    Editor com reconhecimento das instrues do PIC e directivas do Assembler emsyntax high-light .

    Visualizao dos registos (memria RAM), da memria de programa e da EEPROM .

    MPLAB SIM , simulador de eventos, com as seguintes caractersticas: Possibilidade de alterao do cdigo fonte do programa, permitindo a sua re-execuo

    imediata;

    5

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    22/203

    Guia prtico sobre microcontroladores PIC

    Possibilidade de modicao dos valores dos registos e posies de memria do PIC emintervalos de tempo pr determinados.

    Possibilidade de modicao do valor lgico presente nas entradas do PIC. Simulao da evoluo do programa atravs da criao de um cenrio de estmulos exter-

    nos.

    No desenvolvimento inicial de um programa, muito provvel que este contenha erros de con-cepo que o impedem de realizar correctamente as tarefas para o qual foi projectado. Se porventuraisso acontecer, necessrio voltar a analisar o cdigo, de modo a encontrar a origem dos problemas.Em programas com alguma complexidade este processo lento, e muitas vezes ineciente, dado que necessrio carregar vrias vezes o programa no PIC, de modo a testar o seu funcionamento. Este

    um dos casos em que o simulador de softwareMPLAB SIM til uma vez que permite simularo programa no PC, como se este estivesse a ser executado no PIC. Outra das vantagens da utilizaodo simulador a possibilidade da criao a priori de cenrios de teste que servem de entrada para osimulador. A gura3 mostra a janela associada ao processo de simulao do programa exemplo.

    O ambiente de edio do projecto do programa exemplo mostrado na gura4. A janela lo-calizada no canto superior esquerdo representa oProject Manager , que contm as referncias aoscheiros que compem o projecto; logo abaixo desta, temos oMemory Usage Gauge, que mostra ainformao da quantidade de memria do programa e dados usada; no lado direito temos o editor;

    nalmente abaixo encontra-se a janela deoutput (sada), que fornece informaes sobre o estado doprograma aquando da traduo de cdigoAssemblypara cdigo mquina.No MPLAB IDE, a visualizao da memria (ver gura5) feita atravs das seguintes janelas:

    Program Memorymostra os endereos de memria o Opcode e a mnemnica correspondentedo programa, alocados dentro da gama de memria disponvel para o processador seleccionado.Se o PIC seleccionado suportar memria externa, e se esta estiver activa, a mesma tambm servisualizada.

    File Register mostra todos os registos do dispositivo seleccionado (corresponde memriaRAM do PIC).

    EEPROM mostra a memria de dados EEPROM para qualquer microcontrolador que disponhadeste tipo de memria (por exemplo o PIC16F876).

    6

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    23/203

    TP0 - Introduo ao Assembly e MPLAB IDE

    Figura 3: Janela associada ao processo de simulao de um programa no MPLAB IDE

    Figura 4: Projecto em MPLAB IDE

    7

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    24/203

    Guia prtico sobre microcontroladores PIC

    Figura 5: Visualizao de janelas de informao memria do PIC

    4 Trabalho a Realizar

    4.1 Criao de um projecto no MPLAB IDE

    1. Uma vez aberto o programaMPLAB IDE , na rea de trabalho, selecciona-se no menu principalProject New.

    2. Quando a dialog box New Project surgir introduz-se no campo Project Name exemplo , eno campo Project Directory c:\aulas\exemplo (ver gura6).

    Figura 6: fase 1 - criao de um novo projecto .

    8

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    25/203

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    26/203

    Guia prtico sobre microcontroladores PIC

    5. Dado que o projecto usa oMPlink , necessrio associar-se umlinker script ; este cheiro deneos comandos dolinker para cada PIC, especicando o seguinte:

    Regies de memria de dados e programa do PIC.

    Mapeamento de seces lgicas no cdigo fonte, em regies de programa e dados.

    Esto disponveis cheiros originais descript para todos os PIC, localizados por defeito noseguinte directrio:c:\Program Files\Microchip\MPASM Suite\LKR . Para adi-cionar o cheiro pretendido, clicar com o boto direito do rato em cima de Script Files Add Files....

    4.2 Traduo do cdigo fonte em cdigo mquina

    1. Aps a edio do cdigo fonte emAssemblydo programa passa-se fase de traduo do cdigofonte em cdigo mquina. Para isso clica-se no cone Build All disponvel natoolbar doambiente de desenvolvimento. No caso de o programa no apresentar erros desyntax, o grcode sada que mostra a evoluo da compilao car completo a 100% e de cor verde; caso

    contrrio car vermelho, o que indica a existncia de um ou mais erros.Na ausncia de erros desyntax, criado o cheiro de sada que tem como nome principal onome do projecto com extenso".hex" .

    (a) Evoluo doassembling. (b) Ocorreu um erro.

    Figura 9: Traduo do cdigo fonte em cdigo mquina.

    10

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    27/203

    TP0 - Introduo ao Assembly e MPLAB IDE

    4.3 Programao do PIC16F876 atravs da linha srie

    Aps a traduo bem sucedida do cdigo fonte em cdigo mquina, passa-se fase de programaodo PIC. Para tal, necessrio que, previamente, tenha sido instalado no PIC um pequeno programa(o boot-loader ) que gere a comunicao com o computador de desenvolvimento e que escreve oprograma na memriaFlash.

    O que o boot-loader ?

    O boot-loader um programa que permite re-programar o PIC sem ter de o retirar do circuito ondeest montado e sem ter que recorrer a um programador ( i.e., a um aparelho para programar os PICs ).

    Como funciona?

    O boot-loader funciona em conjunto com um programa que corre no PC, designado porWinPICLoader ( disponvel para DOS / Windows / Linux ) que controla o envio de um cheiro em formatoIntel Hex para o PIC.

    Sempre que o PIC ligado, inicia-se a execuo doboot-loader . Este comea por inquirir o PCsobre o que fazer. Se no obtm resposta dentro de um tempo limite e se existir um programa vlidona memria do PIC, ento oboot-loader inicia a execuo desse programa. No caso em que obtmuma resposta vlida, inicia o processo de transferncia e armazenamento de um novo programa.

    Como re-programar?

    1. Compilar o programa que se pretende transferir para o PIC usando o MPLAB. O compiladorproduz um cheiro em formato Intel Hex ( extenso".hex" ).

    2. Executar o programaWinPIC Loader , clicar em File Open seleccionar o cheiro".hex"respectivo, clicar OK.

    3. Premir o boto dereset da placa PIC. A transferncia e programao iniciam-se de imediato. Aprogresso assinalada na janela WinPIC Loader no campo,Progress:.

    4. Finalmente, para executar o programa, premir novamente o boto dereset da placa PIC.

    Figura 10: WinPIC Loader

    11

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    28/203

    Guia prtico sobre microcontroladores PIC

    4.4 Estrutura base de um programa em Assembly

    list p=16f876 ; - directiva "list", define

    ; o processador a usarradix decimal ; - directiva "radix" especifica

    ; a definio das variveis#include "p16f876.inc" ; - directiva "include" inclui

    ; ficheiro adicional

    ;------------ Definio de constantes -------------------------------

    ;------------ Definio de variveis --------------------------------

    ;------------ Definio de macros -----------------------------------

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

    ORG 0x0000 ; - directiva "ORG" origem do; programa "ORG 0x0000" vector; de reset

    clrf PCLATH ; - instruo "clrf PCLATH" apaga; todos os bits do registo garante

    ; que a memria do programa; iniciada na pgina 0

    goto main ; - instruo "goto main" salta para; o endereo de memria do programa; principal;

    ;------------ Rotina Main -------------------------------------------;

    ORG 0x0005 ; - "0x0005" 1 endereo livre da; memria de programa;

    main ; - label programa principal;

    goto main ; Cdigo assembly do; programa principal;

    ; ************ ROTINAS ***********************************************;;;;

    ; ********************************************************************END ; - directiva "END" fim do programa

    12

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    29/203

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    30/203

    Guia prtico sobre microcontroladores PIC

    ;===================================================================;; Delay ;; Pode gerar delays entre 10 mS e 2,5 S ;; O valor de entrada e passado em W (1..255) ;; ;; Notas: o loop base e de 1 uS (T=200 nS 4 *1/20MHz) ;; ;;===================================================================;Delay

    movwf delay_mult ; Carrega o valor mltiploDel_m10 movlw 50 ; de 10 mS

    movwf delay_k50 ; 50 => 10 mSDel_50 movlw 200 ; 200 => 200 uS

    movwf delay_k200 ; Carrega o valorDel_200 nop ; correspondente a 200 uS

    nopdecfsz delay_k200,f ; Decrementa "delay_k200".

    ; O resultado colocadao em; "delay_k200"

    goto Del_200 ; while( delay_k200 > 0 )decfsz delay_k50,f ;goto Del_50 ; while( delay_k50 > 0 )decfsz delay_mult,f ; Decrementa "delay_mult".

    ; O resultado colocadao; em "delay_mult"

    goto Del_m10 ; while( delay_mult > 0 )return

    Elementos de Apoio

    Manual terico da disciplina.

    DataSheet PIC16F876(DS30292C) Microchip, captulo 3. -I/O Ports, pgina 29.

    DataSheet PIC16F876(DS30292C) Microchip, captulo 13 -Instrution Set Summary, p-gina 135.

    14

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    31/203

    TP1 - Entrada/Sada

    Tema a desenvolver Durao

    Entrada e Sada bsica 2 aulas

    1 Resumo

    Programao e interface dos portos do PIC, atravs da implementao de programas em linguagem Assemblypara leitura e escrita de dados nas linhas de entrada/sada (E/S ) que compem os portos.

    2 Objectivos

    Familiarizao do aluno com a linguagemassemblydo PIC;

    Programao dos registos associados aos portos deE/S ; Leitura e escrita de dados nos portos;

    No nal do trabalho, dever estar compreendido o mecanismo bsico deE/S do PIC.

    3 Descrio

    O PIC16F876 dispe de um total de 22 linhas deE/S de 1 bit. Estas esto organizados em 3 portos,denominados de porto A, porto B e porto C. Cada porto tem associado um par de registos: TRIS e

    PORT (ver descrio mais frente). O porto A agrupa 5 linhas de 1 bit congurveis, como entradaou como sada, identicadas pelas siglas RA0, RA1, RA2, RA3 e RA4. Cada um dos portos B e Cagrupa 8 linhas congurveis como entrada ou como sada identicadas pelas siglas Rx0, Rx1, Rx2,Rx3, Rx4, Rx5, Rx6 e Rx7, em que x pode tomar o valor B ou C.

    Algumas destas 22 linhas tm atribudas diversas funes (que no a de simples linha de en-trada/sada), podendo o programador congurar por software a funo efectivamente desempenhada.De entre as funes disponveis destacam-se as seguintes:

    Entrada analgica, disponvel, por exemplo na linha RA0/AN0 (2);

    Interrupo externa, disponvel em RB0/INT (21);

    Entrada declock externo do Timer 0, disponvel em RA4/T0CKL (6);

    15

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    32/203

    Guia prtico sobre microcontroladores PIC

    Transmisso de dados em comunicao srie, RC6/TX (16);

    Recepo de dados em comunicao srie, RC7/RX (18);

    3.1 Registos TRIS e PORT

    O registo PORT um registo de dados, aqui que a informao presente nas linhas de entrada ousada recolhida ou disponibilizada. Cada porto tem associado um registo de dados prprio, PORTA,PORTB e PORTC.

    O registo TRIS um registo programvel de 1 byte (8 bits) disponvel no banco 1 (memriaRAM), que controla se uma linha em particular uma entrada ou uma sada. Existe um registo TRISpara cada porto. O TRISA controla o estado deE/S das 6 linhas do porto A, enquanto que TRISB

    e TRISC controlam respectivamente o estado deE/S das 8 linhas do porto B e porto C. Uma vezcongurada as direces pretendidas das linhas do porto, por programao do registo TRIS, pode-seefectuar leituras ou escritas no porto usando o registo PORT.

    Utilizao dos registos TRIS e PORT

    Todos os bits contidos nos registos mencionados, correspondem univocamente a uma linha de en-trada/sada de um bit. Por exemplo, o bit 0 do registo PORTA e do registo TRISA, correspondem linha RA0, o bit 1 linha RA1 e assim por diante. Um 1 no bit 0 do registo TRIS congura a linhacomo entrada enquanto um 0 congura a linha como sada. Uma maneira intuitiva de relembrar oconceito, advm do facto de o 1 ser parecido com o I que provm da inicial da palavra inglesa Input e o 0 ser parecido com O que provm deOutput .

    A gura11 mostra um esquema conceptual da congurao atravs do registo TRISB, de umporto. A linha RB0 est congurada como entrada ou como sada? Qual ser o nvel lgico presenteno bit 0 do registo PORTB?

    Observa-se na gura que o bit 0 do registo TRISB est denido a 1, logo a linha RB0 estcongurada como entrada. Quanto ao valor do bit 0 no registo PORTB, temos de considerar dois

    momentos, uma vez que a entrada varia no tempo: ao primeiro momento corresponde o nvel lgico0 e ao segundo o nvel lgico 1.

    Figura 11: Congurao de uma linha emE/S

    16

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    33/203

    TP1 - Entrada e sada bsica

    3.2 Inicializao dos portos

    Quando necessrio usar uma ou mais linhas deE/S de um determinado porto, importante fazer-se asua inicializao logo no inicio da rotinamaindo programa. A inicializao no mais que a con-gurao da direco dos dados presentes nas linhas deE/S , por congurao do registo TRIS.

    importante realar que, se porventura a inicializao das linhas deE/S no for feita, estas pordefeito (aquando doreset do PIC) encontram-se todas como entrada. Assim se uma das funciona-lidades do programa a desenvolver for a recepo de informao digital em todas as linhas de umdeterminado porto ( excepo doporto A ), este no necessita de ser inicializado.

    RA4 a nica linha do porto A que pode ser congurada como entrada digital pelo registo TRISA,para as restantes necessrio tambm a congurao do registo ADCON1 (descrio feita no trabalho

    prtico 9).O trecho de cdigoAssemblyseguinte, exemplica uma inicializao por programao de todos

    os portos do PIC. Este mostra, para cada porto, 3 formas de congurao do registo TRIS:

    1. Transferncia para o registo W do literal em binrio, e consequente escrita em TRIS;

    2. Colocao de todos os bits do registo TRIS a zero;

    3. Read modify write, coloca apenas o bit correspondente a zero.

    ;---------------- I/O - Config -------------------------------------;

    Bank1 ; DATA memory (RAM) Bank1;

    config 1 movlw b00010000 ; RA[7:5 & 3:0] sadasmovwf TRISA ; RA[4] entradas

    ;config 2 clrf TRISB ; RB[7:0]

    ;config 3 bcf TRISC,RC0 ; RC[7:1] entradas

    ; RC[0] sada;

    Bank0 ; DATA memory (RAM) Bank0clrf PORTA ; Apaga todos os bits do PORTAclrf PORTB ; Apaga todos os bits do PORTBclrf PORTC ; Apaga todos os bits do PORTC

    17

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    34/203

    Guia prtico sobre microcontroladores PIC

    4 Trabalho a realizar

    1. Alterao do programa exemploexemplo.asmde modo a que, atravs do boto de presso S2da placa PIC ligado a RA4 (ver esquema da gura12), seja possvel controlar o estado doled ligado ao pino RB0; boto premido led ligado, boto no premido led desligado.

    Figura 12: Diagrama do circuito, led on/off.

    2. Mantendo o circuito, alterar o programa anterior por forma a permitir o controlo temporizadodo led ligado a RB0.Inicialmente oled activado por presso no boto ligado a RA4. Aps se ter deixado depremir o boto, manter durante um tempot o led acesso. A gura13, mostra o comportamentopretendido para a sada, comt=2,5s.

    Figura 13: Diagrama temporal da sada temporizada

    18

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    35/203

    TP1 - Entrada e sada bsica

    3. Construo de um programa, que implemente um contador binrioup/down. O incremento oudecremento deve ser feito com um intervalo de tempo xo (aproximadamente de 0,5 segundos),

    atravs de 4leds, ligados aos portos RB3 a RB0 da placa PIC (ver esquema da gura14).Inicialmente feito o incremento de valores em binrio no PORTB, contudo, se premir conti-nuamente o boto de presso ligado a RA4, dever-se-, visualizar o seu decremento. A gura14mostra tambm a visualizao do valor 5 correspondente ao valor binrio 0101, sendo queo bit mais signicativo corresponde aoled3ligado a RB3.

    Figura 14: Diagrama do circuito para o contador up/down

    Elementos de Apoio

    Manual terico da disciplina.

    DataSheet PIC16F876(DS30292C) Microchip, captulo 3. -I/O Ports, pgina 29.

    DataSheet PIC16F876(DS30292C) Microchip, captulo 11. - Analog-to-Digital Converter (A/D) Module, pgina 111.

    DataSheet PIC16F876(DS30292C) Microchip, captulo 13 -Instrution Set Summary, p-gina 135.

    19

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    36/203

    Guia prtico sobre microcontroladores PIC

    5 Implementao em Assembly do PIC

    5.1 Ponto 1; Trabalho Prtico n 1 Ponto I; Alterao do programa "exemplo.asm" incluso de boto on/off;; Resumo:; Led pisca-pisca (DUTTY CYCLE varivel), com switch on/off.;; 5 V; |; /; \; / RES 10K; ___________ \ SW; | | | __|__; | PIC16F876 |--- RB0 ------| LED |------\/\/\/---- 0V; | | \-----/; |___________|;; figura 1. esquema de ligao PIC.;; ********************************************************************; *; Nome ficheiro: trab1p1.asm *; ltima actualizao 22/Julho /2005 *; *; Autores: Jos Miguel Gaspar *; Olmpia Rodrigues *; *; Orientador: Prof. Jos Lus Azevedo *; *; Universidade de Aveiro *; Seminrio EEI 2004/2005 *; *; ********************************************************************; *; Ficheiro necessrio: 16f876.lkr *; *; ********************************************************************

    list p=16f876 ; - directiva list, define; o processor a usar

    radix decimal ; - directiva radix especifica

    ; definio das variveis#include "p16f876.inc" ; - directiva include inclui; ficheiro adicional

    errorlevel -302 ; Turn off banking message; known tested (good) code

    ;--------------------------------------------------------------------; Constantes;--------------------------------------------------------------------RA0 EQU 0RA1 EQU 1RA2 EQU 2RA3 EQU 3RA4 EQU 4RA5 EQU 5RB0 EQU 0RB1 EQU 1RB2 EQU 2RB3 EQU 3RB4 EQU 4RB5 EQU 5

    20

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    37/203

    TP1 - Entrada e sada bsica

    RB6 EQU 6RB7 EQU 7RC0 EQU 0RC1 EQU 1RC2 EQU 2RC3 EQU 3RC4 EQU 4RC5 EQU 5RC6 EQU 6RC7 EQU 7

    ;----------------------------------------------------------------------; Variveis (REGISTOS DE USO GERAL) Bank0;----------------------------------------------------------------------

    UDATA 0x20delay_mult RES 1 ; Variaveis de controlodelay_k50 RES 1 ; dos loops da rotina Delaydelay_k200 RES 1 ;start_stop RES 1 ; start_stop FLAG

    ;--------------------------------------------------------------------; Macros to select the register Banks;--------------------------------------------------------------------Bank0 MACRO ; Macro to select data RAM Bank 0

    bcf STATUS,RP0bcf STATUS,RP1ENDM

    Bank1 MACRO ; Macro to select data RAM Bank 1bsf STATUS,RP0bcf STATUS,RP1ENDM

    Bank2 MACRO ; Macro to select data RAM Bank 2bcf STATUS,RP0bsf STATUS,RP1ENDM

    Bank3 MACRO ; Macro to select data RAM Bank 3bsf STATUS,RP0bsf STATUS,RP1ENDM

    ; ********************************************************************ORG 0x0000 ; - directiva "ORG" origem do

    ; programa "ORG 0x0000" vector; de reset

    clrf PCLATH ; - instruo "clrf PCLATH" apaga; todos os bits do registo garante; que a memria do programa; iniciada na pgina 0

    goto main ; - instruo "goto main" salta para; o endereo de memria do programa; principal

    ;--------------------------------------------------------------------; Rotina Main;--------------------------------------------------------------------

    ORG 0x0005 ; Program Memory PAGE 0main ; Programa principal.

    Bank1 ; DATA memory (RAM) Bank1

    movlw b11111110 ; RB[0] outputmovwf TRISB ; RB[7:1] inputsmovlw b00010000 ; RA[7:5 & 3:0] outputsmovwf TRISA ; RA[4] input

    Bank0 ; DATA memory (RAM) Bank0clrf PORTB ; Inicializao PORTBclrf PORTA ; Inicializao PORTA

    loop ; while(1) {

    21

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    38/203

    Guia prtico sobre microcontroladores PIC

    btfsc PORTA,RA4 ; switch ON ?goto $-1 ;

    ;bcf PORTB,RB0 ; Set LED in RB0 ON

    ;movlw 20 ;call Delay ; delay( 0,20 seg )

    ;bsf PORTB,RB0 ; Set RB0 OFFmovlw 20 ;call Delay ; delay( 0,20 seg )

    ;goto loop ; }

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

    ; ************************** ROTINAS *********************************; ********************************************************************; ********************************************************************;===================================================================;; Delay ;; Pode gerar delays entre 10 mS e 2,5 S ;; O valor de entrada e passado em W (1..255) ;; ;; Notas: o loop base e de 1 uS (T=200 nS 4 *1/20MHz) ;; ;;===================================================================;Delay

    movwf delay_mult ; Carrega o valor multiploDel_m10 movlw 50 ; de 10 mS

    movwf delay_k50 ; 50 => 10 mSDel_50 movlw 200 ; 200 => 200 uS

    movwf delay_k200 ; Carrega o valorDel_200 nop ; correspondente a 200 uS

    nopdecfsz delay_k200,f ; Decrementa "delay_k200".; O resultado colocadao em; "delay_k200"

    goto Del_200 ; while( delay_k200 > 0 )decfsz delay_k50,f ;goto Del_50 ; while( delay_k50 > 0 )decfsz delay_mult,f ; Decrementa "delay_mult".

    ; O resultado colocadao; em "delay_mult"

    goto Del_m10 ; while( delay_mult > 0 )

    return

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

    END ; directive end of program

    22

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    39/203

    TP1 - Entrada e sada bsica

    5.2 Ponto 2

    ; Trabalho Prtico n 1 Ponto II; Sada temporizada, com visualizao atravs de um led;; Resumo:; Implementao de um programa em assembly que permita o activao; temporizada de um led, aps a presso de um switch, (ver figura 2).;; 5 V; |; /; \; / RES 10K; ___________ \ SW; | | | __|__; | PIC16F876 |--- RB1 ------| LED |------\/\/\/---- 0V; |___________| \-----/;;; figura 1. esquema de ligao PIC.;; ON | OFF; ________________; | |; switch _______| |_____________________________;; ON | OFF; ______________________________________; | |; led _______| | |________; | |; ||;; figura 2. diagrama temporal sada/entrada;; ********************************************************************; *; NomeFicheiro: trab1p2.asm *; ltima actualizao: 22/Julho/2005 *; *; Autores: Jos Miguel Gaspar *; Olmpia Rodrigues *; *

    ; Orientador: Prof. Jos Lus Azevedo *; *; Universidade de Aveiro *; Seminrio EEI 2004/2004 *; *; ********************************************************************; *; Ficheiro necessrio: 16f876.lkr *; *; ********************************************************************

    list p=16f876 ; - directiva list, define; o processor a usar

    radix decimal ; - directiva radix especifica; definio das variveis

    #include "p16f876.inc" ; - directiva include inclui; ficheiro adicional

    errorlevel -302 ; Turn off banking message; known tested (good) cod;--------------------------------------------------------------------; Constantes

    23

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    40/203

    Guia prtico sobre microcontroladores PIC

    ;--------------------------------------------------------------------RA0 EQU 0RA1 EQU 1RA2 EQU 2RA3 EQU 3RA4 EQU 4RA5 EQU 5

    RB0 EQU 0RB1 EQU 1RB2 EQU 2RB3 EQU 3RB4 EQU 4RB5 EQU 5RB6 EQU 6RB7 EQU 7

    RC0 EQU 0RC1 EQU 1

    RC2 EQU 2RC3 EQU 3RC4 EQU 4RC5 EQU 5RC6 EQU 6RC7 EQU 7

    TEMPO_ON EQU 255 ; Gama [1..255] = [10ms..2,5s]

    ;----------------------------------------------------------------------; Variveis (REGISTOS DE USO GERAL) Bank0;----------------------------------------------------------------------

    UDATA 0x20delay_mult RES 1 ; Variaveis de controlodelay_k50 RES 1 ; dos loops da rotina Delaydelay_k200 RES 1 ;;--------------------------------------------------------------------; Macros to select the register Banks;--------------------------------------------------------------------

    Bank0 MACRO ; Macro to select data RAM Bank 0bcf STATUS,RP0bcf STATUS,RP1ENDM

    Bank1 MACRO ; Macro to select data RAM Bank 1bsf STATUS,RP0bcf STATUS,RP1ENDM

    Bank2 MACRO ; Macro to select data RAM Bank 2bcf STATUS,RP0bsf STATUS,RP1ENDM

    Bank3 MACRO ; Macro to select data RAM Bank 3bsf STATUS,RP0bsf STATUS,RP1ENDM

    ; ********************************************************************vector_reset ORG 0x00 ; Processor reset vector

    clrf PCLATH ; Ensure page bits are clearedgoto main ; Go to beginning of program

    ;--------------------------------------------------------------------; Rotina Main;--------------------------------------------------------------------

    24

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    41/203

    TP1 - Entrada e sada bsica

    ORG 0x20 ; Program Memory PAGE 0main ; Programa principal.

    call InitCfg ;; While(1){

    loop btfsc PORTB,RB0 ; Testa se o SW em RB0 goto $-1 ; pressionado ?

    ;bsf PORTB,RB1 ; Set LED em RB1 ON

    ;btfss PORTB,RB0 ; Testa se SW em RA0 deixagoto $-1 ; de ser pressionado ?

    ;movlw TEMPO_ON ;call Delay ; delay( 2,5 seg )bcf PORTB, RB1 ; Set LED em RB1 OFF

    ;goto loop ; }

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

    ; ************************** ROTINAS *********************************; ********************************************************************; ********************************************************************;===================================================================;; InitCfg ;; Configurao inicial dos registros associados ;; ao programa principal, PORTOS I/O ;; ;; Retorna em Bank0 ;; ;;===================================================================;InitCfg;----------------- I/O - InitCfg -----------------------------------;

    Bank1 ; DATA memory (RAM) Bank0movlw b11111101 ; RB[1] outputmovwf TRISB ; RB[7:2 & 0] inputs

    Bank0 ; DATA memory (RAM) Bank0clrf PORTB ; Inicializao PORTB.

    return

    ;===================================================================;; Delay ;; Pode gerar delays entre 10 mS e 2,5 S ;; O valor de entrada e passado em W (1..255) ;; Retorna em Bank0 ;; ;; Notas: o loop base e de 1 uS (T=200 nS 4 *1/20MHz) ;; ;;===================================================================;Delay

    movwf delay_mult ; Carrega o valor multiploDel_m10 movlw 50 ; de 10 mS

    movwf delay_k50 ; 50 => 10 mSDel_50 movlw 200 ; 200 => 200 uS

    movwf delay_k200 ; Carrega o valorDel_200 nop ; correspondente a 200 uS

    nopdecfsz delay_k200,f ; Decrementa "delay_k200".

    ; O resultado colocadao em; "delay_k200"

    goto Del_200 ; while( delay_k200 > 0 )decfsz delay_k50,f ;goto Del_50 ; while( delay_k50 > 0 )

    decfsz delay_mult,f ; Decrementa "delay_mult".; O resultado colocadao; em "delay_mult"

    goto Del_m10 ; while( delay_mult > 0 )

    25

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    42/203

    Guia prtico sobre microcontroladores PIC

    return

    ;********************************************************************END ; directive end of program

    26

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    43/203

    TP1 - Entrada e sada bsica

    5.3 Ponto 3

    ; Trabalho Prtico n 1 - Ponto III; Implementao de um contador binrio up/down;; Resumo:; Inicialmente conta up ao presionar RC2, inverte o sentido; da contagem, se deixar de precionar RC2 volta situao; inicial de conta up;; 5 V; |; /; \; / RES; ___________ \ SW; | | | __|__; | PIC16F876 |--- RB0 -----| LED1 |------\/\/\/---- 0V; | | \----/; | | /----\ RES; | |->-- RB1 -----| LED2 |------\/\/\/---- 0V; | | \----/; | | /----\ RES; | |->-- RB2 -----| LED3 |------\/\/\/---- 0V; | | \----/; | | /----\ RES; | |->-- RB3 -----| LED4 |------\/\/\/---- 0V; |___________| \----/;; figura 1. esquema de ligao PIC.;; ********************************************************************; *; NomeFicheiro: trab1p3.asm *; Data: 3/Junho/2005 *; Verso: 1.0 *; *; Autores: Jos Miguel Gaspar *; Olmpia Rodrigues *; *; Orientador: Prof. Jos Lus Azevedo *; *; Universidade de Aveiro *

    ; Seminrio EEI 2004/2004 *; *; ********************************************************************; *; Ficheiro necessrio: P16F876.INC *; *; ********************************************************************

    list p=16f876 ; - directiva list, define; o processor a usar

    radix decimal ; - directiva radix especifica; definio das variveis

    #include "p16f876.inc" ; - directiva include inclui; ficheiro adicional

    errorlevel -302 ; Turn off banking message; known tested (good) coe

    ;--------------------------------------------------------------------; Constantes;--------------------------------------------------------------------RA0 EQU 0RA1 EQU 1

    27

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    44/203

    Guia prtico sobre microcontroladores PIC

    RA2 EQU 2RA3 EQU 3RA4 EQU 4RA5 EQU 5RB0 EQU 0RB1 EQU 1RB2 EQU 2RB3 EQU 3RB4 EQU 4RB5 EQU 5RB6 EQU 6RB7 EQU 7RC0 EQU 0RC1 EQU 1RC2 EQU 2RC3 EQU 3RC4 EQU 4RC5 EQU 5RC6 EQU 6

    RC7 EQU 7;----------------------------------------------------------------------; Variveis (REGISTOS DE USO GERAL) Bank0;----------------------------------------------------------------------

    UDATA 0x20delay_mult RES 1 ; Variaveis de controlodelay_k50 RES 1 ; dos loops da rotina Delaydelay_k200 RES 1 ;

    ;--------------------------------------------------------------------; Macros to select the register Banks;--------------------------------------------------------------------Bank0 MACRO ; Macro to select data RAM Bank 0

    bcf STATUS,RP0bcf STATUS,RP1ENDM

    Bank1 MACRO ; Macro to select data RAM Bank 1bsf STATUS,RP0bcf STATUS,RP1ENDM

    Bank2 MACRO ; Macro to select data RAM Bank 2bcf STATUS,RP0bsf STATUS,RP1ENDM

    Bank3 MACRO ; Macro to select data RAM Bank 3bsf STATUS,RP0bsf STATUS,RP1ENDM

    ; ********************************************************************ORG 0x0000 ; - directiva "ORG" origem do

    ; programa "ORG 0x0000" vector; de reset

    clrf PCLATH ; - instruo "clrf PCLATH" apaga; todos os bits do registo garante; que a memria do programa; iniciada na pgina 0

    goto main ; - instruo "goto main" salta para; o endereo de memria do programa; principal

    ;--------------------------------------------------------------------; Rotina Main;--------------------------------------------------------------------

    ORG 0x0005 ; Program Memory PAGE 0main ; Programa principal.call InitCfg ;

    incrementa ;

    28

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    45/203

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    46/203

    Guia prtico sobre microcontroladores PIC

    return

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

    END ; directive end of program

    30

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    47/203

    TP2 - Descodicador Hexadecimal / 7Seg, 1 display

    Tema a desenvolver Durao

    Implementao de umalookup table 1 aula

    1 Resumo

    Com este trabalho, pretende-se consolidar os conhecimentos adquiridos nos trabalhos anteriores eestudar o modo de acesso a variveis em memria RAM, por endereamento indirecto.

    2 Objectivos

    Implementao de um descodicador hexadecimal / 7Segmentos por software.

    Utilizao de subrotinas na estrutura do programa.

    Compreenso dos conceitos associados ao acesso a variveis na memria RAM por enderea-mento indirecto.

    3 Descrio

    3.1 Endereamento Indirecto, Registo FSR e INDF

    Figura 15: Acesso memria

    O FSR (File Select Register ). usado no acesso em endereamentoindirecto ou indexado de outros registos, em particular dos registos de usogeral. Se um registo com endereamento entre [0x20-0x7F] (Banco 0 dememria RAM) carregado noFSR , o contedo desse registo pode ser lidoou escrito atravs do registo de endereamento indirecto (INDF ), localizadono topo de cada banco de memria (ver mapa de registos do PIC, Anexo A).Este mtodo pode ser usado no acesso a um grupo de dados localizados emmemria RAM, atravs da leitura ou escrita de dados em INDF, a selecodo prximo elemento do grupo feito atravs do incremento deFSR (vergura16). O endereamento indirecto ou indexado, particularmente til

    na salvaguarda em memria RAM, de um grupo de dados lidos de um dadoporto E/S, e, por exemplo no acesso aarrays ou tabelas.

    31

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    48/203

    Guia prtico sobre microcontroladores PIC

    Endereamento Indirecto - Exemplo

    Uma demonstrao de endereamento indirecto, o trecho de cdigoAssemblyseguinte, em que oobjectivo apagar posies consecutivas de memria RAM, localizadas entre 0x20h e 0x2F. Inicial-mente feita a inicializao deFSR com o primeiro valor do grupo de valores a ser apagado, ou sejaFSR opera como ponteiro para o valor 0 doarray (bloco de valores), sendo incrementado a cadaoperao de escrita. Em cada ciclo "NEXT", est-se na realidade a apagar (clrf INDF ) os contedosdas posies de memria apontadas por FSR, usando para isso o registo INDF, que no um registofsico e que s mostra o contedo do endereo guardado em FSR.

    movlw 0x20 ; inicializa ponteiromovwf FSR ; copia para a RAMmovlw n_val ; n de posies memmovwf i ; contador

    NEXT clrf INDF ; apaga registo INDFincf FSR,F ; incrementa ponteirodecfsz i,f ; contador--goto NEXT ; apaga o prximo

    CONTINUE: ; continua

    Figura 16: Endereamento Indirecto cdigo de demonstrao

    32

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    49/203

    TP2 - Descodicador Hexadecimal / 7Seg, 1 display

    3.2 Seleco do Banco de Memria

    A memria de dados (RAM) encontra-se organizada em bancos distintos (Banco 0, 1, 2 e 3) 4 nototal, sendo que o acesso a cada um deles feito atravs de seleco. A seleco pode ser feita atravsde endereamento directo (ver registo STATUS pgina45) ou indirecto. neste ltimo o bit maissignicativo do registoFSR , usado como bit menos signicativo na seleco do banco de memriaa aceder; os restantes 7 bits so usados na especicao do registo dentro do banco de memriaseleccionado. O bit mais signicativo para seleco do banco de memria, dado pelo bit IRP doregisto deSTATUS . Para mais detalhes ver descrio sobre o registoSTATUS , pgina45do guia.

    Figura 17: Seleco do banco de memria

    4 Trabalho a realizar

    1. Visualizao, numdisplayde 7 segmentos, de um digito codicado em hexadecimal (ver dia-grama do circuito, gura18).

    Para isso necessria a construo de uma rotina que receba um digito em hexadecimal e de-volva o correspondente valor para activao de cada um dos segmentos dodisplay. Este valordever ser depois enviado para o PORTB.Para melhor compreender o conceito, a tabela2 mostra a correspondncia entre os dgitos he-xadecimal de entrada e o valor a enviar para cada um dos 7 segmentos dodisplay. Por exemplo,para visualizar o digito 7 necessrio que o segmento a,b e c estejam activos, isto , mover parao PORTB o valor em binrio b00001110.

    2. Construir nalmente um contador [0..F] crescente/decrescente por presso nos botes S1/S2respectivamente (S1 encontra-se ligado a RB0, S2 encontra-se ligado a RA4).

    33

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    50/203

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    51/203

    TP2 - Descodicador Hexadecimal / 7Seg, 1 display

    5 Implementao em Assembly do PIC

    5.1 Ponto 1; Trabalho Prtico n 2 I; Implementao descodificador hex para 1 display de 7 segmentos;; ********************************************************************; *; Nome ficheiro: trab2.asm *; ltima reviso 3/Junho/2005 *; *; Autores: Jos Miguel Gaspar *; Olmpia Rodrigues *; *; Orientador: Prof. Jos Lus Azevedo *; *; Universidade de Aveiro *; Seminrio EEI 2004/2004 *; *; ********************************************************************; *; Ficheiro necessrio: p16f876.lkr *; *; ********************************************************************

    list p=16f876 ; list directive to defineradix decimal ; processor#include "p16f876.inc" ; processor specific variable

    ; definitionserrorlevel -302 ; Turn off banking message

    ; known tested (good) code

    ;--------------------------------------------------------------------; Constantes;--------------------------------------------------------------------RA0 EQU 0RA1 EQU 1RA2 EQU 2RA3 EQU 3RA4 EQU 4RA5 EQU 5RB0 EQU 0RB1 EQU 1RB2 EQU 2RB3 EQU 3RB4 EQU 4RB5 EQU 5

    RB6 EQU 6RB7 EQU 7RC0 EQU 0RC1 EQU 1RC2 EQU 2RC3 EQU 3RC4 EQU 4RC5 EQU 5RC6 EQU 6RC7 EQU 7

    ;--------------------------------------------------------------------; Displays de 7 segmentos -|gfedcba-|;--------------------------------------------------------------------seg7_0 EQU b01111110 ; Valor 0seg7_1 EQU b00001100 ; Valor 1seg7_2 EQU b10110110 ; Valor 2seg7_3 EQU b10011110 ; Valor 3seg7_4 EQU b11001100 ; Valor 4seg7_5 EQU b11011010 ; Valor 5

    35

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    52/203

    Guia prtico sobre microcontroladores PIC

    seg7_6 EQU b11111000 ; Valor 6seg7_7 EQU b00001110 ; Valor 7seg7_8 EQU b11111110 ; Valor 8seg7_9 EQU b11001110 ; Valor 9seg7_A EQU b11101110 ; Valor Aseg7_B EQU b11111000 ; Valor Bseg7_C EQU b01110010 ; Valor Cseg7_D EQU b10111100 ; Valor Dseg7_E EQU b11110010 ; Valor Eseg7_F EQU b11100010 ; Valor F

    ;--------------------------------------------------------------------; Variveis (REGISTOS DE USO GERAL) Bank0;--------------------------------------------------------------------RAM UDATA 0x20seg70 RES 1 ; Valor 0 endereoseg71 RES 1 ; Valor 1 endereoseg72 RES 1 ; Valor 2 endereoseg73 RES 1 ; Valor 3 endereo

    seg74 RES 1 ; Valor 4 endereoseg75 RES 1 ; Valor 5 endereoseg76 RES 1 ; Valor 6 endereoseg77 RES 1 ; Valor 7 endereoseg78 RES 1 ; Valor 8 endereoseg79 RES 1 ; Valor 9 endereoseg7A RES 1 ; Valor A endereoseg7B RES 1 ; Valor B endereoseg7C RES 1 ; Valor C endereoseg7D RES 1 ; Valor D endereoseg7E RES 1 ; Valor E endereoseg7F RES 1 ; Valor F endereobcd_in RES 1 ; variavel bcd a afixardelay_mult RES 1 ; Variaveis de controlodelay_k50 RES 1 ; dos loops da rotina Delaydelay_k200 EQU 1 ;

    ;--------------------------------------------------------------------; Macros to select the register Banks;--------------------------------------------------------------------

    Bank0 MACRO ; Macro to select data RAM Bank 0bcf STATUS,RP0bcf STATUS,RP1ENDM

    Bank1 MACRO ; Macro to select data RAM Bank 1bsf STATUS,RP0bcf STATUS,RP1ENDM

    Bank2 MACRO ; Macro to select data RAM Bank 2bcf STATUS,RP0bsf STATUS,RP1ENDM

    Bank3 MACRO ; Macro to select data RAM Bank 3bsf STATUS,RP0bsf STATUS,RP1ENDM

    ; ********************************************************************ORG 0x0000 ; Processor reset vectorclrf PCLATH ; Ensure page bits are clearedgoto main ; Go to beginning of program

    ;--------------------------------------------------------------------; Rotina Main;--------------------------------------------------------------------

    ORG 0x0005 ; Program Memory PAGE 0

    36

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    53/203

    TP2 - Descodicador Hexadecimal / 7Seg, 1 display

    main ; Programa principal.call InitCfg ; rotina de configurao

    bsf PORTA,RA1 ; seleciona o display em RA1loop ; while(1) {

    movlw 0x07 ; valor a ser enviado para o; display 7 segmentos

    movwf bcd_in ;call bcd_7seg ; bcd_7seg(bcd_in)

    ;goto loop ; }

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

    ; ************************** ROTINAS *********************************; ********************************************************************; ********************************************************************;===================================================================;

    ; InitCfg ;; Configurao inicial dos registros associados ;; ao programa principal, PORTOS I/O ;; ;; Retorna em Bank0 ;; ;;===================================================================;InitCfg;----------------- Analog 2 Digital - InitCfg ----------------------;

    Bank1 ; DATA memory (RAM) Bank1movlw 0x06 ; W(reg) = 0x06movwf ADCON1 ; ADCON1 (PORTA I/O digital)

    ;----------------- I/O - InitCfg -----------------------------------;movlw b00010000 ; RA[7:5 & 3:0] outputsmovwf TRISA ; RA[4] inputmovlw b00000001 ; RB[7:1] outputsmovwf TRISB ; RB[0] input

    Bank0 ; DATA memory (RAM) Bank0clrf PORTA ; Inicializao PORTA.clrf PORTB ; Inicializao PORTB.clrf bcd_in ; Inicializao BCD_IN.

    ;--------------------------------------------------------------------; Inicializao dos registros associados aos displays 7seg;--------------------------------------------------------------------

    movlw seg7_0 ; Set 7segment valor 0movwf seg70 ; Save valor 0movlw seg7_1 ; Set 7segment valor 1movwf seg71 ; Save valor 1movlw seg7_2 ; Set 7segment valor 2movwf seg72 ; Save valor 2movlw seg7_3 ; Set 7segment valor 3movwf seg73 ; Save valor 3movlw seg7_4 ; Set 7segment valor 4movwf seg74 ; Save valor 4movlw seg7_5 ; Set 7segment valor 5movwf seg75 ; Save valor 5movlw seg7_6 ; Set 7segment valor 6movwf seg76 ; Save valor 6movlw seg7_7 ; Set 7segment valor 7movwf seg77 ; Save valor 7movlw seg7_8 ; Set 7segment valor 8movwf seg78 ; Save valor 8movlw seg7_9 ; Set 7segment valor 9movwf seg79 ; Save valor 9

    movlw seg7_A ; Set 7segment valor Amovwf seg7A ; Save valor Amovlw seg7_B ; Set 7segment valor Bmovwf seg7B ; Save valor B

    37

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    54/203

    Guia prtico sobre microcontroladores PIC

    movlw seg7_C ; Set 7segment valor Cmovwf seg7C ; Save valor Cmovlw seg7_D ; Set 7segment valor Dmovwf seg7D ; Save valor Dmovlw seg7_E ; Set 7segment valor Emovwf seg7E ; Save valor Emovlw seg7_F ; Set 7segment valor Fmovwf seg7F ; Save valor F

    return

    ;===================================================================;; bcd_7seg ;; Input: bcd_in - valor BCD de entrada ;; Output: no devolve nada (void) ;; ;; Resumo: routina => BCD to 7segment display, envia o valor ;; passado em bcd_in para a PORTB por ;; endereamento indirecto por registo. ;

    ; Retorna em Bank0 ;;===================================================================;bcd_7seg

    movlw seg70 ; Incio da tabela de valoresaddwf bcd_in,w ; & do val a mostrar da tabelamovwf FSR ; Set do endereo da tabelamovf INDF,w ; leitura do valor de 7segmovwf PORTB ; envio do valor para o PORTB

    return

    ;===================================================================;; Delay ;; Pode gerar delays entre 10 mS e 2,5 S ;; O valor de entrada e passado em W (1..255) ;; ;; Notas: o loop base e de 1 uS (T=200 nS 4 *1/20MHz) ;; ;; Retorna em Bank0 ;;===================================================================;Delay

    movwf delay_mult ; Carrega o valor multiploDel_m10 movlw 50 ; de 10 mS

    movwf delay_k50 ; 50 => 10 mSDel_50 movlw 200 ; 200 => 200 uS

    movwf delay_k200 ; Carrega o valorDel_200 nop ; correspondente a 200 uS

    nopdecfsz delay_k200,f ; Decrementa "delay_k200".

    ; O resultado colocadao em; "delay_k200"

    goto Del_200 ; while( delay_k200 > 0 )decfsz delay_k50,f ;goto Del_50 ; while( delay_k50 > 0 )decfsz delay_mult,f ; Decrementa "delay_mult".

    ; O resultado colocadao; em "delay_mult"

    goto Del_m10 ; while( delay_mult > 0 )return ;

    ; ********************************************************************END ; directive end of program

    38

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    55/203

    TP2 - Descodicador Hexadecimal / 7Seg, 1 display

    5.2 Ponto 2; Trabalho Prtico n 2 II; Implementao contador crescente para 1 display de 7 segmentos;; ********************************************************************; *; Nome ficheiro: trab2p2.asm *; ltima reviso 3/Junho/2005 *; *; Autores: Jos Miguel Gaspar *; Olmpia Rodrigues *; *; Orientador: Prof. Jos Lus Azevedo *; *; Universidade de Aveiro *; Seminrio EEI 2004/2004 *; *; ********************************************************************; *; Ficheiro necessrio: p16f876.lkr *; *; ********************************************************************

    list p=16f876 ; list directive to defineradix decimal ; processor#include "p16f876.inc" ; processor specific variable

    ; definitionserrorlevel -302 ; Turn off banking message

    ; known tested (good) code

    ;--------------------------------------------------------------------; Constantes;--------------------------------------------------------------------RA0 EQU 0RA1 EQU 1RA2 EQU 2RA3 EQU 3RA4 EQU 4RA5 EQU 5RB0 EQU 0RB1 EQU 1RB2 EQU 2RB3 EQU 3RB4 EQU 4RB5 EQU 5RB6 EQU 6RB7 EQU 7RC0 EQU 0RC1 EQU 1

    RC2 EQU 2RC3 EQU 3RC4 EQU 4RC5 EQU 5RC6 EQU 6RC7 EQU 7

    ;--------------------------------------------------------------------; Displays de 7 segmentos -|gfedcba-|;--------------------------------------------------------------------seg7_0 EQU b01111110 ; Valor 0seg7_1 EQU b00001100 ; Valor 1seg7_2 EQU b10110110 ; Valor 2seg7_3 EQU b10011110 ; Valor 3seg7_4 EQU b11001100 ; Valor 4seg7_5 EQU b11011010 ; Valor 5seg7_6 EQU b11111000 ; Valor 6seg7_7 EQU b00001110 ; Valor 7seg7_8 EQU b11111110 ; Valor 8seg7_9 EQU b11001110 ; Valor 9

    39

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    56/203

    Guia prtico sobre microcontroladores PIC

    seg7_A EQU b11101110 ; Valor Aseg7_B EQU b11111000 ; Valor Bseg7_C EQU b01110010 ; Valor Cseg7_D EQU b10111100 ; Valor Dseg7_E EQU b11110010 ; Valor Eseg7_F EQU b11100010 ; Valor F

    ;--------------------------------------------------------------------; Variveis (REGISTOS DE USO GERAL) Bank0;--------------------------------------------------------------------RAM UDATA 0x20seg70 RES 1 ; Valor 0 endereoseg71 RES 1 ; Valor 1 endereoseg72 RES 1 ; Valor 2 endereoseg73 RES 1 ; Valor 3 endereoseg74 RES 1 ; Valor 4 endereoseg75 RES 1 ; Valor 5 endereoseg76 RES 1 ; Valor 6 endereoseg77 RES 1 ; Valor 7 endereo

    seg78 RES 1 ; Valor 8 endereoseg79 RES 1 ; Valor 9 endereoseg7A RES 1 ; Valor A endereoseg7B RES 1 ; Valor B endereoseg7C RES 1 ; Valor C endereoseg7D RES 1 ; Valor D endereoseg7E RES 1 ; Valor E endereoseg7F RES 1 ; Valor F endereobcd_in RES 1 ; variavel bcd a afixardelay_mult RES 1 ; Variaveis de controlodelay_k50 RES 1 ; dos loops da rotina Delaydelay_k200 EQU 1 ;

    ;--------------------------------------------------------------------; Macros to select the register Banks;--------------------------------------------------------------------Bank0 MACRO ; Macro to select data RAM Bank 0

    bcf STATUS,RP0bcf STATUS,RP1ENDM

    Bank1 MACRO ; Macro to select data RAM Bank 1bsf STATUS,RP0bcf STATUS,RP1ENDM

    Bank2 MACRO ; Macro to select data RAM Bank 2bcf STATUS,RP0bsf STATUS,RP1ENDM

    Bank3 MACRO ; Macro to select data RAM Bank 3bsf STATUS,RP0bsf STATUS,RP1ENDM

    ; ********************************************************************ORG 0x0000 ; Processor reset vectorclrf PCLATH ; Ensure page bits are clearedgoto main ; Go to beginning of program

    ;--------------------------------------------------------------------; Rotina Main;--------------------------------------------------------------------

    ORG 0x0005 ; Program Memory PAGE 0

    main ; Programa principal.call InitCfg ; rotina de configurao

    bsf PORTA,RA1 ; seleciona o display em RA3

    40

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    57/203

    TP2 - Descodicador Hexadecimal / 7Seg, 1 display

    loop ; while(1) {btfss PORTA,RA4 ; Se SW em RB4, for selecionadoincf bcd_in,f ; incrementa bcd_in

    call bcd_7seg ; bcd_7seg(bcd_in)

    movlw 20 ; W(reg) = 20call Delay ; delay( 0,20 seg )

    btfss PORTB,RB0 ; Se SW em RB0, for selecionadodecf bcd_in,f ; decrementa bcd_in

    goto loop ; }

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

    ; ************************** ROTINAS *********************************; ********************************************************************; ********************************************************************;===================================================================;; InitCfg ;; Configurao inicial dos registros associados ;; ao programa principal, PORTOS I/O ;; ;; Retorna em Bank0 ;; ;;===================================================================;InitCfg;----------------- Analog 2 Digital - InitCfg ----------------------;

    Bank1 ; DATA memory (RAM) Bank1movlw 0x06 ; W(reg) = 0x06movwf ADCON1 ; ADCON1 (PORTA I/O digital)

    ;----------------- I/O - InitCfg -----------------------------------;movlw b00010000 ; RA[7:5 & 3:0] outputsmovwf TRISA ; RA[4] inputmovlw b00000001 ; RB[7:1] outputsmovwf TRISB ; RB[0] input

    Bank0 ; DATA memory (RAM) Bank0clrf PORTA ; Inicializao PORTA.clrf PORTB ; Inicializao PORTB.clrf bcd_in ; Inicializao BCD_IN.

    ;--------------------------------------------------------------------; Inicializao dos registros associados aos displays 7seg;--------------------------------------------------------------------

    movlw seg7_0 ; Set 7segment valor 0movwf seg70 ; Save valor 0movlw seg7_1 ; Set 7segment valor 1movwf seg71 ; Save valor 1movlw seg7_2 ; Set 7segment valor 2movwf seg72 ; Save valor 2movlw seg7_3 ; Set 7segment valor 3movwf seg73 ; Save valor 3movlw seg7_4 ; Set 7segment valor 4movwf seg74 ; Save valor 4movlw seg7_5 ; Set 7segment valor 5movwf seg75 ; Save valor 5movlw seg7_6 ; Set 7segment valor 6movwf seg76 ; Save valor 6movlw seg7_7 ; Set 7segment valor 7movwf seg77 ; Save valor 7movlw seg7_8 ; Set 7segment valor 8movwf seg78 ; Save valor 8

    movlw seg7_9 ; Set 7segment valor 9movwf seg79 ; Save valor 9movlw seg7_A ; Set 7segment valor Amovwf seg7A ; Save valor A

    41

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    58/203

    Guia prtico sobre microcontroladores PIC

    movlw seg7_B ; Set 7segment valor Bmovwf seg7B ; Save valor Bmovlw seg7_C ; Set 7segment valor Cmovwf seg7C ; Save valor Cmovlw seg7_D ; Set 7segment valor Dmovwf seg7D ; Save valor Dmovlw seg7_E ; Set 7segment valor Emovwf seg7E ; Save valor Emovlw seg7_F ; Set 7segment valor Fmovwf seg7F ; Save valor F

    return

    ;===================================================================;; bcd_7seg ;; Input: bcd_in - valor BCD de entrada ;; Output: no devolve nada (void) ;; ;; Resumo: routina => BCD to 7segment display, envia o valor ;

    ; passado em bcd_in para a PORTB por ;; endereamento indirecto por registo. ;; Retorna em Bank0 ;;===================================================================;bcd_7seg

    movlw seg70 ; Incio da tabela de valoresaddwf bcd_in,w ; & do val a mostrar da tabelamovwf FSR ; Set do endereo da tabelamovf INDF,w ; leitura do valor de 7segmovwf PORTB ; envio do valor para o PORTB

    return

    ;===================================================================;; Delay ;; Pode gerar delays entre 10 mS e 2,5 S ;; O valor de entrada e passado em W (1..255) ;; ;; Notas: o loop base e de 1 uS (T=200 nS 4 *1/20MHz) ;; ;; Retorna em Bank0 ;;===================================================================;Delay

    movwf delay_mult ; Carrega o valor multiploDel_m10 movlw 50 ; de 10 mS

    movwf delay_k50 ; 50 => 10 mSDel_50 movlw 200 ; 200 => 200 uS

    movwf delay_k200 ; Carrega o valorDel_200 nop ; correspondente a 200 uS

    nopdecfsz delay_k200,f ; Decrementa "delay_k200".

    ; O resultado colocadao em; "delay_k200"

    goto Del_200 ; while( delay_k200 > 0 )decfsz delay_k50,f ;goto Del_50 ; while( delay_k50 > 0 )decfsz delay_mult,f ; Decrementa "delay_mult".

    ; O resultado colocadao; em "delay_mult"

    goto Del_m10 ; while( delay_mult > 0 )return ;

    ; ********************************************************************END ; directive end of program

    42

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    59/203

    TP3 - Descodicador Hexadecimal / 7Seg, 3 Displays

    Tema a desenvolver Durao

    Sistema de visualizao com refrescamento, 2 aulaspor multiplexagem no tempo

    1 Resumo

    Ampliao do trabalho prtico anterior a 3 displays de 7 segmentos.

    2 Objectivos

    Implementao de um sistema de visualizao hexadecimal com 3displays, com a construode uma rotina para refrescamento dos 3displayspor multiplexagem no tempo.

    Aprofundar os conhecimentos adquiridos durante o trabalho prtico 3.

    3 Descrio

    O princpio de funcionamento deste circuito em tudo igual ao circuito do trabalho anterior, o nmerodos displays que vai ser alterado. Sero 3 osdisplaysque tero de ser refrescados no tempo, paraque os valores enviados possam ser visualizados em simultneo.

    Analisando os diagramas dos circuitos (ver pgina19) entende-se que apenas um valor enviado,de cada vez para um sdisplay, (s um interruptor se encontra fechado). Note-se ainda que os todosos segmentos dosdisplaysesto ligados mesma sada (PORTB RB[7..1]) do PIC. Assim e tendoem conta que os dados na sada so diferentes, aquando do envio de informao para cadadisplayao mesmo tempo. Estes devem ser actualizados periodicamente com uma taxa xa (taxa de refres-camento aprox. = 10ms). uma vez que o olho humano no tem a percepo do envio da informaoenviada aos trsdisplaysao mesmo tempo.

    43

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    60/203

    Guia prtico sobre microcontroladores PIC

    (a) (b)

    (c)

    Figura 19: Processo de refrescamento dosdisplays

    4 Trabalho a realizar

    1. Construo de um sistema de visualizao em 3displaysde 7 segmentos, de valores codicadosem hexadecimal. Para isso, sugere-se o reaproveitamento da "bcd_7seg" construda no trabalhoanterior. De modo a que a rotina "bcd_7seg" seja chamada por uma outra rotina, esta controlao envio da informao para cadadisplayem momentos distintos, ao longo do tempo.

    Elementos de Apoio

    Manual terico da disciplina.

    DataSheet PIC16F876(DS30292C) Microchip, captulo 2. -Memory Organization, sec-o 2.5 -Indirect Addressing, INDF and FSR Registerspgina 27.

    DataSheet PIC16F876(DS30292C) Microchip, captulo 3. -I/O Ports, pgina 29.

    DataSheet PIC16F876(DS30292C) Microchip, captulo 13 -Instrution Set Summary, p-gina 135.

    44

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    61/203

    TP3 - Descodicador Hexadecimal / 7Seg, 3 displays

    4.1 Descrio do registo STATUS

    O registo STATUS, fornece informaes sobre o resultado de instrues aritmticas realizadas naALU (Unidade Aritmtica e Lgica do CPU), do banco de memria seleccionado e do estado de reset.

    bit 7 IRP : Usado na seleco do banco de memria em endereamento indirecto.

    1 = Bank 2,3 (100h - 1FFh)0 = Bank 0,1 ( 00h - FFh)

    Como se observa na gura20(a), o banco de memria especicado com o bit IRP e o bit maissignicativo do registo FSR. Mais detalhes sobre o registoFSR , ver pgina31do guia.

    Um endereo dentro do banco seleccionado especicado pelos 7 bits menos signicativos doregisto FSR.

    Uma vez que o registos STATUS e FSR so comuns a todos os bancos de memria RAM, noexiste obstculo na operao, mesmo que o banco de memria RAM seja alterado.

    (a) Seleco com, IRP e FSR bits (b) Seleco com RP1:RP0 bits

    Figura 20: Seleco dos bancos de memria RAM.

    bit 6-5 RP1:RP0 : Usados na seleco do banco de memria em endereamento directo.

    11 = Bank 3 (180h - 1FFh)10 = Bank 2 (100h - 17Fh)01 = Bank 1 ( 80h - FFh)00 = Bank 0 ( 00h - 7Fh)

    Na gura20(b), o banco de memria pretendido especicado com os bits RP1:RP0. Uma formade optimizar este procedimento de alternncia entre bancos atravs do uso deMACROS. Para isso,basta denir inicialmente umamacropara cada banco de memria RAM. No exemplo seguinte temos

    45

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    62/203

    Guia prtico sobre microcontroladores PIC

    umamacropara o Bank1 de memria RAM, a generalizao para outros bancos possvel desde deque, seja respeitada a congurao dos bits RP1:RP0.

    Bank1 MACRO ; Macro to select data RAM Bank 1bsf STATUS,RP0; Set 1 - bit RP0bcf STATUS,RP1; Set 0 - bit RP1ENDM ;

    bit 4 TO : Condio detime-out do watchdog timer , permitida apenas leitura.

    1 = Aps power-on, reset, instruo de CLRWDT, ou com instruo de SLEEP.0 = Ocorrncia de time-out dowatchdog timer .

    bit 3 PD : Condio de power-down (poupana de energia), permitida apenas leitura.

    1 = Aps power-up, ou aps a execuo da instruo de CLRWDT.0 = Pela execuo da instruo de SLEEP.

    bit 2 Z: Flag de Z (zero ag).

    1 = Quando o resultado de operao lgica ou aritmtica zero0 = Quando o resultado de operao lgica ou aritmtica no zero.

    NOTA: Provavelmente uma das ags mais utilizadas, usada na deteco de zero no resultado de umaoperao lgica ou aritmtica.

    bit 1 DC : Flag de Digit Carry.

    1 = Quando o ocorre carry no bit 3 do resultado.0 = Quando no ocorre carry no bit 3 do resultado.

    NOTA: A ag activa, aquando da execuo de uma operao, ADDWF, ADDLW, SUBLW ouSUBWF, causando carry no bit 3 do resultado (operaes de 4 bits).

    bit 0 C : Flag de carry

    1 = Quando o ocorre carry no bit 8 do resultado.0 = Quando no ocorre carry no bit 8 do resultado.

    NOTA: Esta ag activa, quando a operao sobre o registo causa um carry no bit 8 do resultado(operaes de 8 bits).

    46

  • 8/14/2019 Guia de Trabalho Pratico Com Microcontrolador PIC

    63/203

    TP3 - Descodicador Hexadecimal / 7Seg, 3 displays

    5 Implementao em Assembly do PIC

    ; Trabalho Prtico n 3; Implementao descodificador hex para 3 displays de 7 segmentos; taxa mxima;; ********************************************************************; *; NomeFicheiro: trab3.asm *; Data: 3/Junho/2005 *; Verso: 1.0 *; *; Autores: Jos Miguel Gaspar *; Olmpia Rodrigues *; *; Orientador: Prof. Jos Lus Azevedo *; *; Universidade de Aveiro *; Seminrio EEI 2004/2004 *; *; ********************************************************************; *; Ficheiro necessrio: P16F876.INC *; *; ********************************************************************

    list p=16f876 ; list directive to defineradix decimal ; processor#include "p16f876.inc" ; processor specific variable

    ; definitionserrorlevel -302 ; Turn off banking message

    ; known tested (good) code

    ;--------------------------------------------------------------------; Constante