Guia de Trabalho Pratico Com Microcontrolador PIC
Transcript of Guia de Trabalho Pratico Com Microcontrolador PIC
-
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