Escolar Documentos
Profissional Documentos
Cultura Documentos
Guia o Aluno
Guia o Aluno
Microcontroladores PIC
Guia de Trabalhos Prticos do Aluno
Resumo
A elaborao deste guia insere-se no mbito do seminrio da Licenciatura em Ensino de Electrnica e Informtica. A motivao do trabalho vm ao encontro da lacuna documental existente sobre
microcontroladores no mbito da disciplina de Sistemas Digitais do ensino secundrio, por forma
minimizar a falta de recursos foram desenvolvidos dois guias de trabalhos prticos sobre microcontroladores, um para cada, aluno e professor.
Para o efeito escolheu-se um microcontrolador da famlia 16F87X da Microchip, para a realizao
dos diversos trabalhos prticos
iii
Agradecimentos
O nosso agradecimento vai para todos aqueles que connosco colaboraram para que este guia fosse
uma realidade. Em especial aos colegas da sala 317 que em muito contriburam durante todo o seminrio.
Contedo
Resumo
iii
Contedo
viii
Lista de Figuras
Lista de Tabelas
xi
Introduo
Enquadramento geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1
Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Objectivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Descrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Trabalho a Realizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1
4.2
10
4.3
11
4.4
12
3.1
4
TP1 - Entrada/Sada
13
15
Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
Objectivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
Descrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
3.1
16
3.2
17
Trabalho a realizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
21
Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
Objectivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
Descrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
3.1
21
3.2
23
Trabalho a realizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
25
Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
Objectivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
Descrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
Trabalho a realizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
4.1
27
29
Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
Objectivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
Descrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
3.1
30
Rotina Delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
vi
ndice de Contedos
4
Trabalho a realizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
35
Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
Objectivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
Descrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
3.1
Timer 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
3.2
Registo OPTION_REG
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
3.3
Registo INTCON
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
Trabalho a realizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
41
Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
Objectivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
Descrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
3.1
42
Trabalho a realizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
45
Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
Objectivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
Descrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
3.1
46
Trabalho a realizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
51
Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
Objectivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
Descrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
3.1
52
vii
3.2
52
3.3
Operao de transmisso . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
3.4
Operao de recepo . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
3.5
Registo TXSTA
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
3.6
Registo RCSTA
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
Trabalho a realizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
59
Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
Objectivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
Descrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
3.1
Entrada Analgica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
3.2
60
3.3
61
3.4
62
3.5
Registo ADCON0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
3.6
Registo ADCON1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
Trabalho a realizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
Apendix A
67
Apendix B
69
viii
Lista de Figuras
1
10
10
WinPIC Loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
11
16
12
18
13
18
14
19
15
Acesso memria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
16
22
17
23
18
24
19
26
20
27
21
30
22
32
ix
33
24
33
25
34
26
34
27
35
28
36
29
41
30
42
31
43
32
46
33
48
34
52
35
53
36
54
37
57
38
60
39
60
40
61
41
65
42
65
43
67
Lista de Tabelas
1
HEX 7 segmentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
42
43
52
xi
Introduo
Enquadramento geral
Os trabalhos prticos apresentados neste guia foram organizados de modo a que o aluno adquira, numa
perspectiva evolutiva, conceitos fundamentais associados programao de microcontroladores.
Cada um dos trabalhos d nfase ao desenvolvimento de uma temtica especfica, podendo cada
um deles ser realizado independentemente um dos outros. Contudo, para um aluno sem experincia prvia que utilize a programao de microcontroladores aconselhvel que os trabalhos sejam
realizados pela ordem em que so apresentados, resultando esta recomendao em dois aspectos fundamentais: a) os trabalhos esto organizados com um grau de dificuldade crescente, sendo importante
que os conceitos a abordados, sejam compreendidos, antes de se passar aos seguintes; b) o cdigo
realizado num dado trabalho possa ser reaproveitado em trabalhos posteriores.
1.1
Trabalho
Durao
Descrio
1 aula
3 aulas
1 aula
2 aulas
2 aulas
1 aula
2 aulas
3 aulas
2 aulas
4 aulas
Introduo
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 o layout e funcionamento da placa.
Contudo para que o aluno/professor se se enquadrem com o hardware apresenta-se nas pginas seguintes o esquema elctrico do circuito bem como a disposio dos componentes na placa de circuito
impresso.
Tema a desenvolver
Durao
1 aula
Resumo
Pretende-se mostrar com este trabalho os passos necessrios criao de um projecto no ambiente de
desenvolvimento MPLAB IDE (programa de software destinado a desenvolver aplicaes para microcontroladores da Microchip) e traduo para cdigo mquina do cdigo fonte associado, recorrendo
a um pequeno exemplo em linguagem Assembly. Mostra-se ainda, o processo de programao do
PIC16F876 atravs da linha srie.
Objectivos
Criao de um projecto no ambiente de desenvolvimento MPLAB IDE.
Conhecer o processo de traduo de cdigo fonte para cdigo mquina.
Conhecer o processo de programao do microcontrolador atravs do WinPIC Loader.
Introduo programao em linguagem Assembly.
3
3.1
Descrio
Ambiente de desenvolvimento MPLAB IDE
Trabalho a Realizar
4.1
1. Uma vez aberto o programa MPLAB IDE, na rea de trabalho, selecciona-se no menu principal
Project New.
2. Quando a dialog box New Project surgir introduz-se no campo Project Name exemplo, e
no campo Project Directory c:\aulas\exemplo (ver figura 6).
4.2
1. Aps a edio do cdigo fonte em Assembly do programa passa-se fase de traduo do cdigo
fonte em cdigo mquina. Para isso clica-se no cone Build All
disponvel na toolbar do
10
Aps a traduo bem sucedida do cdigo fonte em cdigo mquina, passa-se fase de programao
do 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 o
programa na memria Flash.
O que o boot-loader?
O boot-loader um programa que permite re-programar o PIC sem ter de o retirar do circuito onde
est 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 por WinPIC
Loader ( disponvel para DOS / Windows / Linux ) que controla o envio de um ficheiro em formato
Intel Hex para o PIC.
Sempre que o PIC ligado, inicia-se a execuo do boot-loader. Este comea por inquirir o PC
sobre o que fazer. Se no obtm resposta dentro de um tempo limite e se existir um programa vlido
na memria do PIC, ento o boot-loader inicia a execuo desse programa. No caso em que obtm
uma 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 compilador
produz um ficheiro em formato Intel Hex ( extenso ".hex").
2. Executar o programa WinPIC Loader, clicar em File Open seleccionar o ficheiro ".hex"
respectivo, clicar OK.
3. Premir o boto de reset da placa PIC. A transferncia e programao iniciam-se de imediato. A
progresso assinalada na janela WinPIC Loader no campo, Progress:.
4. Finalmente, para executar o programa, premir novamente o boto de reset da placa PIC.
11
p=16f876
radix
decimal
#include "p16f876.inc"
;====================================================================
;
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
O objectivo do programa manter o led (ligado ao bit 0 do PORTB, RB0), acesso durante um tempo
t1 e apagado durante um tempo t2.
Para efectuar a contagem de tempo utiliza-se a rotina Delay (ver cdigo Assembly pgina, 14).
Esta rotina permite a parametrizao na gama [1..255] a que corresponde uma contagem de tempo
na gama [0,1s..2,5s]. O registo W utilizado para a passagem do parmetro da entrada para a rotina.
O trecho de cdigo abaixo indicado, representa o cdigo da rotina main do programa. Inicialmente
feita a configurao do PORTB do PIC como sada, para que seja possvel a activao/desactivao
do led (RB0). De seguida o programa entra num ciclo infinito forando a sada RB0 ao estado ON
durante 0,5s e ao estado OFF durante 1s.
A primeira instruo (bsf PORTB,RB0) coloca na sada (RB0) o nvel lgico 1 (5 volts). A
seguinte instruo (movlw 50) coloca no registo W o valor do parmetro de entrada da rotina Delay, invocada de seguida, o que vai fazer com que o led esteja acesso durante 0,5s. A instruo
(bcf PORTB,RB0) coloca na sada (RB0) o nvel lgico 0 (0 volts). A rotina Delay novamente
invocada tendo agora como valor de entrada 100, o que vai fazer com que o led esteja apagado durante
um tempo t2. Este ciclo repete-se sempre.
main
Bank1
movlw
movwf
Bank0
b11111110
TRISB
bsf
PORTB,RB0
movlw
call
50
Delay
bcf
PORTB,RB0
movlw
call
100
Delay
goto
loop
loop
13
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
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, pgina 135.
14
TP1 - Entrada/Sada
Tema a desenvolver
Durao
2 aulas
Resumo
Objectivos
Familiarizao do aluno com a linguagem assembly do PIC;
Programao dos registos associados aos portos de E/S;
Leitura e escrita de dados nos portos;
No final do trabalho, dever estar compreendido o mecanismo bsico de E/S do PIC.
Descrio
O PIC16F876 dispe de um total de 22 linhas de E/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 configurveis, como entrada
ou como sada, identificadas pelas siglas RA0, RA1, RA2, RA3 e RA4. Cada um dos portos B e C
agrupa 8 linhas configurveis como entrada ou como sada identificadas 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 entrada/sada), podendo o programador configurar 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 de clock externo do Timer 0, disponvel em RA4/T0CKL (6);
15
3.1
O registo PORT um registo de dados, aqui que a informao presente nas linhas de entrada ou
sada 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 (memria
RAM), que controla se uma linha em particular uma entrada ou uma sada. Existe um registo TRIS
para cada porto. O TRISA controla o estado de E/S das 6 linhas do porto A, enquanto que TRISB
e TRISC controlam respectivamente o estado de E/S das 8 linhas do porto B e porto C. Uma vez
configurada as direces pretendidas das linhas do porto, por programao do registo TRIS, pode-se
efectuar leituras ou escritas no porto usando o registo PORT.
16
Quando necessrio usar uma ou mais linhas de E/S de um determinado porto, importante fazer-se a
sua inicializao logo no inicio da rotina main do programa. A inicializao no mais que a configurao da direco dos dados presentes nas linhas de E/S, por configurao do registo TRIS.
importante realar que, se porventura a inicializao das linhas de E/S no for feita, estas por
defeito (aquando do reset do PIC) encontram-se todas como entrada. Assim se uma das funcionalidades do programa a desenvolver for a recepo de informao digital em todas as linhas de um
determinado porto ( excepo do porto A), este no necessita de ser inicializado.
RA4 a nica linha do porto A que pode ser configurada como entrada digital pelo registo TRISA,
para as restantes necessrio tambm a configurao do registo ADCON1 (descrio feita no trabalho
prtico 9).
O trecho de cdigo Assembly seguinte, exemplifica uma inicializao por programao de todos
os portos do PIC. Este mostra, para cada porto, 3 formas de configurao 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
config 1
movlw
movwf
b00010000
TRISA
config 2
clrf
TRISB
config 3
bcf
TRISC,RC0
Bank0
clrf
clrf
clrf
PORTA
PORTB
PORTC
17
;
;
;
;
;
;
;
;
;
;
;
;
;
;
sadas
entradas
RB[7:0]
RC[7:1]
RC[0]
DATA memory
Apaga todos
Apaga todos
Apaga todos
entradas
sada
(RAM) Bank0
os bits do PORTA
os bits do PORTB
os bits do PORTC
Trabalho a realizar
1. Alterao do programa exemplo exemplo.asm de modo a que, atravs do boto de presso S2
da placa PIC ligado a RA4 (ver esquema da figura 12), seja possvel controlar o estado do led
ligado ao pino RB0; boto premido led ligado, boto no premido led desligado.
18
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, pgina 135.
19
NOTAS:
20
Tema a desenvolver
Durao
1 aula
Resumo
Com este trabalho, pretende-se consolidar os conhecimentos adquiridos nos trabalhos anteriores e
estudar o modo de acesso a variveis em memria RAM, por endereamento indirecto.
Objectivos
Implementao de um descodificador hexadecimal / 7Segmentos por software.
Utilizao de subrotinas na estrutura do programa.
Compreenso dos conceitos associados ao acesso a variveis na memria RAM por endereamento indirecto.
3
3.1
Descrio
Endereamento Indirecto, Registo FSR e INDF
O FSR (File Select Register). usado no acesso em endereamento
indirecto ou indexado de outros registos, em particular dos registos de uso
geral. Se um registo com endereamento entre [0x20-0x7F] (Banco 0 de
memria RAM) carregado no FSR, o contedo desse registo pode ser lido
ou escrito atravs do registo de endereamento indirecto (INDF), localizado
no 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 em
memria RAM, atravs da leitura ou escrita de dados em INDF, a seleco
do prximo elemento do grupo feito atravs do incremento de FSR (ver
figura 16). O endereamento indirecto ou indexado, particularmente til
na salvaguarda em memria RAM, de um grupo de dados lidos de um dado
21
NEXT
movlw
movwf
movlw
movwf
clrf
incf
decfsz
goto
0x20
FSR
n_val
i
INDF
FSR,F
i,f
NEXT
;
;
;
;
;
;
;
;
inicializa ponteiro
copia para a RAM
n de posies mem
contador
apaga registo INDF
incrementa ponteiro
contador-apaga o prximo
CONTINUE
:
; continua
22
Trabalho a realizar
1. Visualizao, num display de 7 segmentos, de um digito codificado em hexadecimal (ver diagrama do circuito, figura 18).
Para isso necessria a construo de uma rotina que receba um digito em hexadecimal e devolva o correspondente valor para activao de cada um dos segmentos do display. Este valor
dever ser depois enviado para o PORTB.
Para melhor compreender o conceito, a tabela 2 mostra a correspondncia entre os dgitos hexadecimal de entrada e o valor a enviar para cada um dos 7 segmentos do display. Por exemplo,
para visualizar o digito 7 necessrio que o segmento a,b e c estejam activos, isto , mover para
o PORTB o valor em binrio b00001110.
2. Construir finalmente um contador [0..F] crescente/decrescente por presso nos botes S1/S2
respectivamente (S1 encontra-se ligado a RB0, S2 encontra-se ligado a RA4).
23
RB6 f
RB5 e
RB4 d
RB3 c
RB2 b
RB1 a
Elementos de Apoio
Manual terico da disciplina.
DataSheet PIC16F876(DS30292C) Microchip, captulo 2. - Memory Organization, seco 2.5 - Indirect Addressing, INDF and FSR Registers pgina 27.
DataSheet PIC16F876(DS30292C) Microchip, captulo 3. - I/O Ports, pgina 29.
DataSheet PIC16F876(DS30292C) Microchip, captulo 13 - Instrution Set Summary, pgina 135.
24
Durao
2 aulas
Resumo
Objectivos
Implementao de um sistema de visualizao hexadecimal com 3 displays, com a construo
de uma rotina para refrescamento dos 3 displays por multiplexagem no tempo.
Aprofundar os conhecimentos adquiridos durante o trabalho prtico 3.
Descrio
O princpio de funcionamento deste circuito em tudo igual ao circuito do trabalho anterior, o nmero
dos displays que vai ser alterado. Sero 3 os displays que tero de ser refrescados no tempo, para
que os valores enviados possam ser visualizados em simultneo.
Analisando os diagramas dos circuitos (ver pgina 19) entende-se que apenas um valor enviado,
de cada vez para um s display, (s um interruptor se encontra fechado). Note-se ainda que os todos
os segmentos dos displays esto ligados mesma sada (PORTB RB[7..1]) do PIC. Assim e tendo
em conta que os dados na sada so diferentes, aquando do envio de informao para cada display
ao mesmo tempo. Estes devem ser actualizados periodicamente com uma taxa fixa (taxa de refrescamento aprox. = 10ms). uma vez que o olho humano no tem a percepo do envio da informao
enviada aos trs displays ao mesmo tempo.
25
(a)
(b)
(c)
Trabalho a realizar
1. Construo de um sistema de visualizao em 3 displays de 7 segmentos, de valores codificados
em hexadecimal. Para isso, sugere-se o reaproveitamento da "bcd_7seg" construda no trabalho
anterior. De modo a que a rotina "bcd_7seg" seja chamada por uma outra rotina, esta controla
o envio da informao para cada display em momentos distintos, ao longo do tempo.
Elementos de Apoio
Manual terico da disciplina.
DataSheet PIC16F876(DS30292C) Microchip, captulo 2. - Memory Organization, seco 2.5 - Indirect Addressing, INDF and FSR Registers pgina 27.
DataSheet PIC16F876(DS30292C) Microchip, captulo 3. - I/O Ports, pgina 29.
DataSheet PIC16F876(DS30292C) Microchip, captulo 13 - Instrution Set Summary, pgina 135.
26
Como se observa na figura 20(a), o banco de memria especificado com o bit IRP e o bit mais
significativo do registo FSR. Mais detalhes sobre o registo FSR, ver pgina 21 do guia.
Um endereo dentro do banco seleccionado especificado pelos 7 bits menos significativos do
registo FSR.
Uma vez que o registos STATUS e FSR so comuns a todos os bancos de memria RAM, no
existe obstculo na operao, mesmo que o banco de memria RAM seja alterado.
Na figura 20(b), o banco de memria pretendido especificado com os bits RP1:RP0. Uma forma
de optimizar este procedimento de alternncia entre bancos atravs do uso de MACROS. Para isso,
basta definir inicialmente uma macro para cada banco de memria RAM. No exemplo seguinte temos
27
bit 4
MACRO
bsf
bcf
ENDM
bit 3
bit 2
NOTA: Provavelmente uma das flags mais utilizadas, usada na deteco de zero no resultado de uma
operao lgica ou aritmtica.
bit 1
NOTA: A flag activa, aquando da execuo de uma operao, ADDWF, ADDLW, SUBLW ou
SUBWF, 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 flag activa, quando a operao sobre o registo causa um carry no bit 8 do resultado
(operaes de 8 bits).
28
Tema a desenvolver
Durao
2 aulas
Resumo
Objectivos
Manipulao da rotina Delay para contagem de tempo;
Envio de informao para dois displays a partir de um registo de 8 bits;
Construo de uma rotina de decremento de uma varivel em BCD.
Descrio
O tempo de execuo de uma instruo normal de 1 ciclo de relgio (200 ns), com a excepo das
instrues de salto condicional, decfsz, incfsz, btfss, btfsc, (apenas quando executada a instruo de
salto) e as de salto incondicional, goto, que levam 2 ciclos de relgio (400 ns). Assim e de forma
precisa, pode-se o contar tempo recorrendo contagem de instrues de um determinado trecho de
cdigo, exemplo:
delay
loop
movlw
movwf
nop
nop
decfsz
goto
; n de ciclos de instrues
;--------------------------;
1
;
+ 1
;
+ (1 x 100)
;
+ (1 x 100)
;
+ (1 x 100)
;
+ (2 x 99) + 1
;--------------------------; Total
501
100
timer
timer,f
loop
return
O tempo que o processador leva a executar cada um dos primeiros 99 ciclos de loop de 1s,
uma vez que, a instruo nop demora 1 ciclo de relgio, decfsz 1 ciclo de relgio e goto 2 ciclos de
relgio. O ltimo ciclo de loop demora menos 200ns, dado que a instruo goto no executada.
Logo o tempo total de aproximadamente 100s (mais exactamente 99,8s).
29
Rotina Delay
30
31
Trabalho a realizar
1. Implementao de um programa que permita a visualizao (com refrescamento a cada 10ms)
em dois displays de 7 segmentos, de um valor presente em uma varivel (registo de uso geral),
inicializada com o valor 0x60. A visualizao deve ser feita utilizando as rotinas "display" e
"bcd_7seg" desenvolvidas nos trabalhos anteriores. A figura 22 mostra o esquema de ligao
pretendido, bem como a estratgia a usar na codificao dos bits a enviar para cada display de
7 segmentos.
32
33
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, pgina 135.
34
Tema a desenvolver
Durao
1 aula
Resumo
Objectivos
Introduo programao do timer 0, compreenso dos conceitos associados configurao;
Modificar o programa desenvolvido em TP4, implementado o refrescamento dos displays por
timers;
Descrio
Em muitos programas escritos para microcon-
pulsos digitais aplicados sua entrada. Se o sinal de relgio usado de uma frequncia conhecida,
estamos perante um registo timer, uma vez que o tempo de durao da contagem igual ao valor
apurado multiplicado pelo perodo de relgio.
A figura 27 mostra um registo contador/timer de 8 bits, com entrada no bit menos significativo
(LSB) direita. O valor binrio guardado no registo incrementa a cada pulso aplicado. Trs pulsos
35
3.1
Timer 0
Especificao do timer 0
O temporizador / contador de 8 bits, TIMER 0 pode contar at 0xFF (255);
Permite leitura e escrita;
Pr-divisor de 8 bits programvel;
Seleco de clock interno (FOSC/4) ou externo;
Activao por overflow do bit 2 INTCON TOIF, na passagem de 0xFF para 0x00;
Seleco de flanco ascendente ou descendente do clock externo;
Pode gerar interrupes de fim de contagem, bit 2 INTCON TOIF, desde que o bit 7
INTCON GIE, esteja activo.
36
btfss
goto
bcf
movlw
movwf
incf
andlw
movwf
goto
InitCfg ------------------------------------;
; DATA memory (RAM) Bank1
OPTION_REG
; clear OPTION_REG
OPTION_REG,PS2
;
OPTION_REG,PS1
; TMR0 prescaler rate
OPTION_REG,PS0
; 1:256
;
; DATA memory (RAM) Bank0
60
;
TMR0
; Set Hardware timer0 Value
;
switch
; switch take val => 1/0
;
INTCON,T0IF
; while(TOIF == 0) {}
$-1
;
INTCON,T0IF
; "reset flag" T0IF = 0;
60
;
TMR0
; Set Hardware timer0 Value
;
switch,w
;
0x01
; Toogle
switch
;
;
loop
; repeat again
37
Registo OPTION_REG
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2-0
Taxa do TMR0
Taxa do WDT
000
001
010
011
100
101
110
111
1:2
1:4
1:8
1:16
1:32
1:64
1:128
1:256
1:1
1:2
1:4
1:8
1:16
1:32
1:64
1:128
38
Registo INTCON
O INTCON contm vrios bits que inibem e desinibem as respectivas fontes de interrupo:
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
39
Trabalho a realizar
1. Voltar ao trabalho trabalho prtico 4 (ponto 3, relgio de 60s com boto START), substituir a
contagem de tempo efectuada pela rotina Delay no refrescamento dos displays de 7 segmentos,
pelo timer 0.
Perguntas:
(a) Notou alguma diferena no funcionamento do programa, com a incluso do timer 0?
Elementos de Apoio
Manual terico da disciplina.
DataSheet PIC16F876(DS30292C) Microchip, captulo 3. - I/O Ports, pgina 29.
DataSheet PIC16F876(DS30292C) Microchip, captulo 5. - Timer 0 Module, pgina 47.
DataSheet PIC16F876(DS30292C) Microchip, captulo 13 - Instrution Set Summary, pgina 135.
40
Tema a desenvolver
Durao
2 aulas
Resumo
Construo de uma mquina de estados que implemente um semforo para automveis e pees.
Objectivos
Aprofundar os conhecimentos sobre timers.
Implementao de uma mquina de estados por software.
Descrio
41
A figura 30 um exemplo de um diagrama de estados, que mostra a interaco entre os vrios estados
propostos no trabalho prtico, este exemplifica a maneira como so efectuadas as transies entre
estados ao longo do tempo. De notar que os tempos t1 a t5 representam os tempos em que os estados
esto em execuo. A tabela 3 descreve a activao (ON) dos leds durante a execuo dos estados.
Estados
vermelho_auto
amarelo_auto
verde_auto
vermelho_pees
on
on
S0
S1
on
verde_pees
on
S2
on
on
S3
on
on
S4
on
intermitente
S5
on
on
Tabela 3: Descrio do estado dos leds
42
Trabalho a realizar
1. Dispondo de 5 leds ( 2 vermelhos, 2 verdes e 1 amarelo ), implementar na placa branca dois
semforos, um para automveis e outro para pees, ligados respectivamente em RB1, RB2,
RB3 e RB4,RB5 (ver figura 31 ).
t(segundos)
boto
presso
S0
S1
S2
activo
1,5
1
S3
S4
S5
1,5
Tabela 4: Tempo minmo entre estados
43
Elementos de Apoio
Manual terico da disciplina.
DataSheet PIC16F876(DS30292C) Microchip, captulo 3. - I/O Ports, pgina 29.
DataSheet PIC16F876(DS30292C) Microchip, captulo 5. - Timer 0 Module, pgina 47.
DataSheet PIC16F876(DS30292C) Microchip, captulo 13 - Instrution Set Summary, pgina 135.
44
Tema a desenvolver
Durao
3 aulas
Resumo
Pretende-se com este trabalho prtico, introduzir o conceito da transferncia de informao I/O por
interrupo, ilustrado-o com uma soluo do trabalho 1 (led controlado por boto de presso) por
interrupo.
No final do trabalho, utilizaremos o exemplo desenvolvido nos trabalhos 4 e 5 (relgio de 60s),
para gerar interrupes atravs do timer 0 e da linha INT0/RB0 do PIC.
Objectivos
Compreenso da rotina de atendimento interrupo RSI ( Rotina de Servio de atendimento
Interrupo ) descrita em exemplo;
Construo de rotinas de atendimento interrupo.
Gerao de interrupes atravs da linha de interrupo RB0/INT do PIC.
Gerao de interrupes atravs da flag de overflow TOIF do timer 0 do PIC, para refrescamento
dos displays de 7 segmentos, e decremento da varivel contadora do relgio.
Descrio
O PIC16F876 tem a possibilidade de contar com um sistema de interrupes. Este sistema, consiste
num mecanismo atravs do qual um acontecimento interno ou externo, (assncrono relativamente ao
programa), pode interromper a execuo, do programa em curso. automaticamente produzido um
salto para a rotina de atendimento (RSI), onde executado o cdigo que processa o evento gerador da
interrupo, uma vez terminada a RSI, a execuo do programa interrompido retomada.
Existem 13 fontes de interrupo no PIC16F876, vejamos algumas:
External RB0/INT pin, INTF.
TMR0 timer overflow, T0IF.
PORTB<7:4> interrupt-on-change, RBIF.
45
3.1
Nos trechos de cdigo assembly seguintes, mostra-se em primeiro lugar o programa principal, inicialmente com a configurao dos registos TRISB e INTCON, cuja descrio pode ser encontrada nas
pginas 16 e 39 respectivamente. De seguida o programa entra num ciclo infinito forando a sada
RB0 ao estado ON durante 0,5s e ao estado OFF durante 1s.
46
0x0000
PCLATH
main
0x0004
interrupt_start
;
;
;
;
;
;-------------------------------------------------------------------;
Rotina Main
;-------------------------------------------------------------------ORG
0x0005
main
;Aqui comea o programa principal
;----------------- I/O - InitCfg -----------------------------------;
Bank1
; DATA memory (RAM) Bank1
movlw b00000010 ; RB1
output
movwf TRISB
; RB[7:2 & 0]
inputs
;----------------- Interrupts enable bits --------------------------;
Bank0
; DATA memory (RAM) Bank0
bsf
INTCON,GIE
; Global Int. Enable bit
bsf
INTCON,INTE ; External Int. enable bit
;-------------------------------------------------------------------;
clrf
PORTB
; Inicializao PORTB.
clrf
start_stop
;
while_1
; while(1) {
btfsc start_stop,0 ; while (start_stop == 1) {}
goto
$-1
;
bsf
movlw
call
bcf
movlw
call
PORTB,RB1
25
Delay
PORTB,RB1
25
Delay
;
;
;
;
;
;
goto
while_1
; }
47
Set RB1 ON
delay( 0,25 seg )
Set RB1 OFF
delay( 0,25 seg )
Trabalho a realizar
1. Modificar o programa (contador de 60s, verso II ) implementado em TP5, este deve agora
implementar o START / STOP do relgio de 60 segundos, em qualquer altura da contagem
decrescente. O diagrama do circuito pretendido, mostrado na figura 33.
48
Elementos de Apoio
Manual terico da disciplina.
DataSheet PIC16F876(DS30292C) Microchip, captulo 3. - I/O Ports, pgina 29.
DataSheet PIC16F876(DS30292C) Microchip, captulo 5. - Timer 0 Module, pgina 47.
DataSheet PIC16F876(DS30292C) Microchip, captulo 12. - Special Features Of Tje Cpu,
seco 12.10 - Interrupts, pgina 129.
DataSheet PIC16F876(DS30292C) Microchip, captulo 13 - Instrution Set Summary, pgina 135.
49
NOTAS:
50
Tema a desenvolver
Durao
2 aulas
Resumo
Neste trabalho prtico, ser explorada a USART (Universal Synchronous Asynchronous Receiver
Transmitter) do PIC16F876, no modo assncrono full duplex, na comunicao srie entre o PIC e o
computador do laboratrio, atravs de um programa que implementa um terminal srie.
Objectivos
Compreenso dos passos de programao da USART, para recepo e transmisso de dados.
Elaborao de rotinas para transmisso e recepo de um carcter.
Elaborao de uma rotina para transmisso de um array de caracteres (strings).
Descrio
A USART, uma das duas portas de comunicao integradas no PIC16F876. Este circuito permite
a configurao para comunicao sncrono ou assncrono, embora neste trabalho apenas estejamos
interessados no modo de comunicao assncrona.
Na comunicao com a USART cada bloco de dados composto por 8 bits (contudo pode ser
utilizado um bit adicional para implementar um esquema de deteco de erros, de comunicao por
verificao de paridade).
O funcionamento da USART, definido atravs da programao de dois registos de controlo,
TXSTA (registo de controlo/estado de transmisso) e RCSTA (registo de controlo/estado de recepo),
mais detalhes ver pginas 55 e 56 respectivamente.
51
definido em modo entrada valor 1. Usando, RC6 e RC7 como porto para a USART, o bit SPEN do
registo RCSTA, deve ser activado a 1.
3.2
A taxa de transmisso da USART, controlada pelo BRG (Baud Rate Generator). Esta definida pelo
valor a colocar no registo SPBRG, este registo controla o perodo do sinal de sada de um free run
timer de 8 bits. Em modo assncrono, o bit BRGH no registo TXSTA, usado para controlar a taxa
de transmisso entre low speed e high speed, usar high speed na maioria dos casos vantajoso, uma
vez que reduz a taxa de erro.
As taxas de transmisso disponveis, para o PIC com uma FOSC de 20MHz esto descritas na
tabela 5.
9600
129
19200
64
28800
42
33600
36
57600
20
115200
10
52
Operao de transmisso
no registo TXREG que so carregados os dados a transmitir, estes so depois enviados de forma
automtica para o registo interno TSR e posteriormente transmitidos pelo porto TX. A transmisso de
dados activada pelo bit TXEN do registo TXSTA. O bit menos significativo (LSB, Least Significant
Bit), transferido em primeiro lugar.
Uma vez transmitido o contedo do registo TXREG para TSR, o TXIF (bit indicador do estado do
buffer em PIR1) sinaliza que o registo de transmisso da USART est vazio, tomando o valor 1. Os
dados podem ser continuamente transmitidos, se primeiro fr detectada a sinalizao de TXIF, e de
seguida fr efectuada uma escrita no registo TXREG. O TXIF no pode ser apagado por programao:
automticamente forado a 0 quando os dados so movidos para TXREG;
1. Inicializar o registo SPBRG com a taxa de transferncia apropriada (ver tabela 5);
2. Activao da porta srie em modo assncrono, pondo a 0 o bit SYNC do registo TXSTA e a
1 o bit SPEN do registo RCSTA;
3. Por forma activar a transmisso o bit TXEN (registo TXSTA) activo a 1. Nessa altura o
registo TXREG est em condies de ser escrito e o bit TXIF do registo PIR1 vem a 1;
4. Enviar os dados para o TXREG e comear a transmisso.
53
Operao de recepo
Os dados recebidos pela porta RX so recolhidos no registo RSR, atravs do circuito de recolha de
dados (Data Recovery). Os dados so recolhidos pelo registo RSR, de acordo com a taxa de transmisso especificada pelo registo SPBRG e pelo bit BRGH do registo TXSTA (ver pgina 55).
Aquando da deteco do stop bit, o contedo do registo RSR transferido para o registo RCREG.
O bit RCIF do registo PIR1, toma o valor 1 quando os dados so escritos no registo RCREG, (sinalizando a recepo de nova informao). Os dados podem ser continuamente recebidos, se primeiro
fr detectada a sinalizao e de seguida efectuar-se uma leitura do registo RCREG. O RCIF no pode
ser apagado por programao, este 0 quando os dados so lidos de RCREG.
54
Registo TXSTA
bit 7
bit 6
bit 5
bit 4
bit 3
No Implementado: leitura a 0.
bit 2
bit 1
bit 0
55
Registo RCSTA
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
56
Trabalho a realizar
1. Implementar um programa em assembly que permita a transmisso de 1 carcter, para o programa terminal do computador anfitrio (host computer terminal).
2. Implementar um programa em assembly que permita a recepo de 1 carcter, e posterior transmisso (atravs da rotina criada anteriormente) para o host computer terminal.
3. Implementar um programa em assembly que permita o envio de um array de caracteres, para o
host computer terminal. Inicialmente o programa deve enviar para o terminal a string "Digite ->
(p,i,e,x)?", e consoante o carcter seleccionado (premido), ser enviada para o terminal a string
correspondente:
(a) Quando recebido o carcter p enviada a mensagem "PIC - Ola, Mundo";
(b) Se recebido o carcter i ou e sero enviadas as strings respectivas s mensagens ora em
Ingls ora em Espanhol.
(c) Quando recebido o carcter x, ser enviada a mensagem "PIC - BYE BYE user". No
entanto se um outro carcter for recebido, dever ser enviada para o terminal a mensagem
seguinte "Caracter Invalido".
Elementos de Apoio
Manual terico da disciplina.
DataSheet PIC16F876(DS30292C) Microchip, captulo 10. - Addressable Universal synchronous Asyncronous Receiver Transmiter (USART), pgina 95.
DataSheet PIC16F876(DS30292C) Microchip, captulo 13 - Instrution Set Summary, pgina 135.
57
NOTAS:
58
Tema a desenvolver
Durao
4 aulas
Resumo
Objectivos
Introduo ao estudo do conversor A/D (ADC) do PIC.
Implementao de um voltmetro digital bsico.
Medio de distncias atravs de um sensor de infravermelhos.
Descrio
No processamento de sinais-analgicos h, muitas vezes, vantagem em os converter para sinais digitais, de modo a que possam se processados por um microprocessador. Os elemento que efectua a
converso de um sinal analgico num digital (um valor numa determinada voltagem) designado por
"conversor analgico digital" ADC.
O PIC16F876 dispe de uma ADC de 10 bits, o que significa que o resultado pode ser representado com uma resoluo de 1/1024 gama mxima. possvel distinguir valores com cerca de 5mV de
resoluo aproximadamente (5/1024 = 0.004883), supondo que a gama mxima de valores a medir
de 5V, ou seja toda a gama entre 0V..5V.
3.1
Entrada Analgica
No PIC16F876, podemos seleccionar como entrada analgica, por programao 1 dos 5 canais disponveis (entradas RA0 - RA5, excepto RA4). O registo ADCON1 configura as linhas RA0 - RA5
(execpo RA4) do PIC como entradas analgicas/digitais ou referncia; a entrada seleccionada deve
59
3.2
O par de registos ADRESH e ADRESL de 8 bits cada, forma o local onde so colocados os 10 bits do
resultado da converso, estes registos formam assim em conjunto um registo de 16 bits.
A ADC, implementa duas formas no modo como formata o resultado de 10 bits nos registos
ADRESH e ADRESL, justificado este ora esquerda ou direita (restantes bits extra so carregados
a 0), ver figura 39. A seleco do formato feita pelo bit ADFM do registro ADCON1, os bits , .
60
O condensador de amostragem (CHOLD) do mdulo conversor A/D, carregado pela tenso aplicada
entrada analgica. A tenso de CHOLD convertida para valores digitais atravs do conversor A/D.
Uma vez que o condensador no carrega instantaneamente, necessrio aguardar um certo tempo,
designado por tempo de HOLD, aps a seleco da entrada analgica pretendida nos bits CHS0-3 do
ADCON0 (ver pgina 63).
Uma vez que este tempo no implementado por hardware, da responsabilidade do programador
implementar no programa um tempo de espera de aproximadamente 20s, entre a seleco da entrada
analgica e o inicio da converso A/D. Durante este tempo, o CHOLD est desligado da entrada
analgica.
A converso A/D iniciada quando o bit GO do registo ADCON0 activado a 1. Quando a
converso acaba o bit GO reposto a 0 por hardware. Existem duas maneiras de detectar o fim de
converso da ADC, a primeira atravs de polling ao bit GO at este ser 0, a segunda mais elegante,
atravs de uma interrupo global. No caso de usar interrupes, o bit ADIE do registo PIE, assim
como o bit do GIE do registo INTCON, devem estar activos a 1. Quando o fim de converso for
detectado, o bit ADIF do registo PIR1 activo 1 e a interrupo global ocorre.
A figura 61 mostra o circuito no qual o condensador CHOLD carregado por VA.
CHOLD carregado quando o interruptor (SS) fechado. O dodo foi colocado por proteco no
sentido de evitar situaes de tenso superiores a VDD ou inferiores a VSS na entrada analgica.
Legenda:
61
3.4
62
Registo ADCON0
bit 7-6
bit 5-3
bit 2
A/D
completada).
bit 1
No Implementado: leitura a 0.
bit 0
63
Registo ADCON1
bit 7
bit 6
ADCON0
<ADCS1:ADCS0>
00
01
10
11
00
01
10
11
Clock de converso
Fosc/2
Fosc/8
Fosc/32
Frc (clock derivado do oscilador RC, interno da ADC)
Fosc/4
Fosc/16
Fosc/64
Frc (clock derivado do oscilador RC, interno da ADC)
bit 5-4
No Implementado: leitura a 0.
bit 3-0
RA5
RA3
RA2
RA1
RA0
A
A
D
D
D
D
D
A
A
A
A
D
D
D
D
A
Vref+
A
Vref+
A
Vref+
D
Vref+
A
Vref+
Vref+
Vref+
Vref+
D
Vref+
A
A
A
A
D
A
D
VrefA
A
VrefVrefVrefD
Vref-
A
A
A
A
A
A
D
A
A
A
A
A
A
D
D
A
A
A
A
A
A
D
A
A
A
A
A
A
A
A
64
Trabalho a realizar
1. Construo de um voltmetro digital simples. Este voltmetro faz a leitura de uma tenso elctrica entre 0V e 5V apresentando o resultado da converso A/D, nos displays de 7 segmentos.
O valor convertido afixado com um casa decimal (0.0 a 5.0V).
De modo a implementar esta funcionalidade, deve-se programar a ADC com os seguintes parmetros: entrada analgica RA0, seleco do clock do conversor A/D = FOSC/32, resoluo
de 8 bits na sada. NOTA: Uma vez que a escala de valores retornados da ADC [0..255], deve
implementar uma mudana de escala para valores entre [0..50].
Implementao de uma rotina de hexadecimal + decimal, de modo a poder afixar nos displays
de 7 segmentos o valor convertido.
Figura 41: Diagrama do circuito do voltmetro digital, visualizao com displays 7 segmentos
2. Finda a parte 1 do trabalho prtico, o passo seguinte alterar o programa anterior, de modo a
que seja possvel o envio dos valores de tenso atravs da porta srie, para o PC.
65
66
Apendix A
Figura 43: Mapa de memria RAM, registos do PIC e registos de uso geral
67
68
Apendix B
;
Ttulo :
;
MPLAB IDE programa de demonstrao
;
;
Resumo:
;
Led pisca-pisca (DUTTY CYCLE varivel)
;
;
___________
; |
|
; | PIC16F876 |
; |
|
; |
|
/-----\
RES
; |
|->-- RB0 ------| LED |------\/\/\/---- 0V
; |
|
\-----/
; |___________|
;
;
figura 1. esquema de ligao PIC.
;
;
ON (T1)|
OFF (T2) | ON (T1)
;
_______
_______
;
|
|
|
|
;
led
_______|
|_____________|
|__________________
;
;
;
figura 2. diagrama temporal da sada.
;
;********************************************************************
;
*
;
Nome ficheiro: exemplo.asm
*
;
ltima alterao: 24/Junho/2005
*
;
*
;
Autor:
Prof. Jos Lus Azevedo
*
;
*
;
Modificado por: Jos Miguel Oliveira Gaspar
*
;
Olmpia Rodrigues
*
;
*
;
Universidade de Aveiro
*
;
Seminrio EEI 2004/2005
*
;
*
;********************************************************************
;
*
69
p=16f876
radix
decimal
#include "p16f876.inc"
errorlevel -302
70
Apendix B
;
Macros to select the register Banks
;-------------------------------------------------------------------Bank0
MACRO
; Macro to select data RAM Bank 0
bcf STATUS,RP0
bcf STATUS,RP1
ENDM
Bank1
MACRO
bsf STATUS,RP0
bcf STATUS,RP1
ENDM
Bank2
MACRO
bcf
bsf
ENDM
Bank3
MACRO
bsf
bsf
ENDM
;********************************************************************
Reset_vector
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 0
main
; Programa principal.
Bank1
; DATA memory (RAM) Bank1
movlw b11111110 ; RB[0]
output
movwf TRISB
; RB[7:1]
inputs
;
Bank0
; DATA memory (RAM) Bank0
clrf
PORTB
; Inicializao PORTB.
loop
; while(1) {
bsf
PORTB,RB0
; Set (ON) LED in RB0 ON
movlw
call
T1
Delay
; W(reg) = 50
; delay( 0,5 seg )
71
PORTB,RB0
T2
Delay
loop
;
;
;
;
;********************************************************************
;********************************************************************
END
72
Apendix B
; Trabalho n 1
; Implementao de um led pisca-pisca, em RB1
; com boto on/off por INTERRUPO
;
; Objectivos:
; Introduo s Interrupes EXEMPLO
;
; Observaes:
;
;********************************************************************
;
*
;
Nome ficheiro: trab1Int.asm
*
;
Data: 1/Junho/2005
*
;
Verso: 1.0
*
;
*
;
Autores:
Jos Miguel Gaspar
*
;
Olmpia Rodrigues
*
;
Orientador: Prof. Jos Lus Azevedo
*
;
*
;
Universidade de Aveiro
*
;
Seminrio EEI 2004/2005
*
;
*
;********************************************************************
;
*
;
Ficheiro necessrio:
P16F876.LKR
*
;
*
;********************************************************************
list
radix
p=16f876
decimal
#include "p16f876.inc"
;
;
;
;
errorlevel -302
;-----------------------------------------------------------------------------;
Constantes
;-----------------------------------------------------------------------------RA0
RA1
RA2
RA3
RA4
RA5
EQU
EQU
EQU
EQU
EQU
EQU
0
1
2
3
4
5
RB0
RB1
EQU
EQU
0
1
73
EQU
EQU
EQU
EQU
EQU
EQU
2
3
4
5
6
7
RC0
RC1
RC2
RC3
RC4
RC5
RC6
RC7
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0
1
2
3
4
5
6
7
;---------------------------------------------------------------------;
Variveis (REGISTOS DE USO GERAL)
;---------------------------------------------------------------------variaveis
UDATA 0x20
delay_mult
RES
1
; Variaveis de controlo dos loops
delay_k50
RES
1
; da rotina Delay
delay_k200
RES
1
;
start_stop
RES
w_save
status_save
pclath_save
RES
RES
RES
1
1
1
; SAVE W
; SAVE STATUS REG
; SAVE PCLATH REG
;-------------------------------------------------------------------;
Macros to select the register Banks
;-------------------------------------------------------------------Bank0
MACRO
bcf
bcf
ENDM
Bank1
MACRO
bsf
bcf
ENDM
Bank2
MACRO
bcf
bsf
ENDM
74
Apendix B
Bank3
MACRO
bsf
bsf
ENDM
;********************************************************************
ORG
clrf
goto
ORG
goto
0x0000
PCLATH
main
0x0004
interrupt_start
PORTB,RB1
25
Delay
; Set RB1 ON
;
; delay( 0,25 seg )
bcf
movlw
call
PORTB,RB1
25
Delay
goto
while_1
; }
;********************************************************************
75
76
Apendix B
;********************************************************************
;********************************************************************
interrupt_start
movwf w_save
; salvaguarda do W reg.
swapf STATUS,W
;
clrf
STATUS
; DATA memory (RAM) Bank0
movwf status_save ; salvaguarda do STATUS reg.
movf
PCLATH,W
;
movwf pclath_save ; salvaguarda do PCLATH reg.
clrf
PCLATH
; pgina 0, de memria de
; programa
bcf
INTCON,INTF ; reset, do bit INTF
incf
start_stop,w ;
andlw 0x01
;
movwf start_stop
; toggle do start_stop (0/1)
;
interrupt_end
movf
pclath_save,w; restauro do PCLATH reg.
movwf PCLATH
;
swapf status_save,w; restauro da DATA memory (RAM)
; Bank? inicial
movwf STATUS
;
swapf w_save,f
; restauro do W reg.
swapf w_save,w
;
retfie
END
77