Vous êtes sur la page 1sur 38

Chave Liga Desliga

(Um toque Liga outro Desliga)

Roteiro

Materiais

Pinos do PIC

Fluxograma

E/S com PIC

Circuito no protoboard

Melhoramentos

Sugesto de Atividades

Materiais

Gravador
PIC 16F628A
1 Led
Resistores: 1 x 1K e 1 x 10k
2 Suportes para Pilhas AA
4 Pilhas AA
Push buttom
Protoboard e Fios

Pinos do PIC
Pinos do Port A

Pinos do Port B

Fluxograma
INICIO
NO
O boto
Foi pressionado?

SIM
O LED
Est ligado?
SIM
Apaga

NO
Acende

Entrada e Sada

Em geral os sistemas computacionais precisam


comunicar-se com o mundo externo, no contexto de
computadores essas comunicaes so conhecidas
como operaes de E/S (Entrada/Sada).
Sada: Toda vez que o sistema precisar afetar de
alguma forma o mundo externo, essa operao ser
considerada sada. Ex: ligar um led, rotacionar um
motor.
Entrada: Toda vez que o sistema precisar responder
a um estimulo vindo do mundo externo isso ser
considerado entrada. Ex: Um boto foi pressionado, o
sistema acende um led.

Fazendo E/S com o PIC

+
+
+

O controlador PIC tem 2


Portas para Entrada e
Sada uma conhecida
por Port A e a outra Port
B.
Usaremos
neste
exemplo, usaremos port
B, bit 0 (Pino 6 do CI)
como entrada, onde ser
ligado um boto. E port
A bit 6 (Pino 15 do CI)
como sada onde ser
ligado um led.

1K
10K

Fazendo E/S com o PIC

O Port A do PIC tem o endereo 05H e o Port B


endereo 06H, Cada um destes endereos tem os seu
bits ligados aos pinos externos do PIC, de acordo
com a tabela a seguir:
BIT PORTA

Pino

BIT PORTB

Pino

17

18

10

11

15

12

16

13

Configurando E/S

As configuraes de E/S para cada Port so feitas usando


os registradores TRISA e TRISB onde TRISA configura o
PortA e TRISB o PortB, os endereos so 85H e 86H
respectivamente.
Para configurar algum pino de Port B como sada
devemos desligar o bit correspondente em TRISB. Ou
seja se queremos que o pino 6 de PortB seja sada
(output) configuramos o Bit 6 de TRISB como 0. Para
configurar como entrada configuramos o bit 6 como 1;
fcil lembrar desta regra 0 para 0utput e 1 para
1nput

Configurando E/S
18

1
05H PORT A

17

16

15

5
6

85H TRISA
86H TRISB

14
13

12

11

10

06H PORT B

Configurando E/S
18

1
05H PORT A
2

17

16

15

INPUT

OUTPUT

6
7

85H TRISA
86H TRISB
0

14
13
12

11

10

06H PORT B

Configurando E/S
1

05H PORT A

18

17

16
1

15

85H TRISA
LED

14

6
7

86H TRISB
0

13
12

11

10

06H PORT B

Configurando E/S
05H PORT A

18
3

16

17

15

85H TRISA
LED

14

6
7

BSF 06h,0

8
9

13

86H TRISB
0

12
1

11
06H PORT B

10

Memria de dados do PIC


0

511

0h

1FFh
0 127
0h 7Fh
Banco 0

128 255
80h Ffh
Banco 1

256-383
100h-17Fh
Banco 2

06h: PortB
05h: PortA
03h: STATUS

86h: TRISB
85h: TRISA
83h: STATUS

103h: STATUS

IRP RP1
RP0RP0
RP1
RP0 TO PD DC
3h: STATUS

384-511
180h-1FFh
Banco 3

183h: STATUS

8BITS

Memria de dados do PIC


0

511

0h

1FFh
00127
127
0h

7Fh
0h 7Fh
Banco
Banco00
1
06h: PortB
05h: PortA
03h: STATUS

7
AO LIGAR

IRP

128 255
80h Ffh
Banco 1

256-383
100h-17Fh
Banco 2

86h: TRISB
85h: TRISA
83h: STATUS

103h: STATUS

0 0

TO PD DC
3h: STATUS

384-511
180h-1FFh
Banco 3

183h: STATUS

8BITS

Memria de dados do PIC


0

511

0h

1FFh
0 127
0h 7Fh
Banco 0

128
128
128255
255
255
80h

Ffh
80h
80hFfh
Ffh
Banco
Banco
Banco111

256-383
100h-17Fh
Banco 2

06h: PortB
05h: PortA
03h: STATUS

86h: TRISB
85h: TRISA
83h: STATUS

103h: STATUS

BSF 03h,5

IRP

0 1

TO PD DC
3h: STATUS

384-511
180h-1FFh
Banco 3

183h: STATUS

8BITS

Memria de dados do PIC


0

511

0h

1FFh
256-383
256-383
100h-17Fh
100h-17Fh
Banco
Banco22

0 127
0h 7Fh
Banco 0

128 255
80h Ffh
Banco 1

06h: PortB
05h: PortA
03h: STATUS

86h: TRISB
85h: TRISA
83h: STATUS

BCF 03h,5
BSF 03h,6

IRP

1 0

384-511
180h-1FFh
Banco 3

103h: STATUS

TO PD DC
3h: STATUS

183h: STATUS

8BITS

Memria de dados do PIC


0

511

0h

1FFh
0 127
0h 7Fh
Banco 0

128 255
80h Ffh
Banco 1

256-383
100h-17Fh
Banco 2

06h: PortB
05h: PortA
03h: STATUS

86h: TRISB
85h: TRISA
83h: STATUS

103h: STATUS

BSF 03h,5
BSF 03h,6

IRP

1 1

TO PD DC
3h: STATUS

384-511
384-511
180h-1FFh
180h-1FFh
Banco
Banco33

183h: STATUS

8BITS

Configurao

Cdigo: Configurao
CONFIGURACAO
BSF 03H,5 ; Seleciona banco 1 (seta RP0)
BCF 85H,6 ; Reseta RA6 (RA6 como saida)
BSF 86H,0 ; Seta RB0 (RB0 como entrada)
BCF 03H,5 ; Seleciona banco 0 (reseta RP0)

Fluxograma
INICIO
CONFIGURAO
LOOP
NO
O boto
Foi pressionado?

SIM
O LED
Est ligado?
SIM
Apaga

NO
Acende

Teste se o Boto foi pressionado


(Testando um Bit)

Se o teste for Verdadeiro salta a prxima


instruo.

Para Testar se um bit est ligado:

Para testar se um bit est desligado:

BTFSS Endereo, bit


BTFSZ Endereo, bit

EX: (Testa se o bit 6 de Port A est ligado )


BTFSS 05h,6
GOTO DESLIGADO
GOTO LIGADO

Instrues BCF e BSF

As instrues BCF (Bit Clear File) e BSF (Bit


Set File) so usadas para desligar e ligar bits
especficos de um registrador.
Ex

BCF 06H,0 ; desliga o bit 0 de 6H

BSF 06H,0 ; Liga o bit 0 de 6H

A sintaxe destes comandos

BCF Endereo, Bit

BSF Endereo, Bit

Fluxograma
INICIO
CONFIGURACAO
BSF 03H,5 ; Seleciona banco 1 (seta RP0)
BCF 85H,6 ; Reseta RA6 (RA6 como saida)
BSF 86H,0 ; Seta RB0 (RB0 como entrada)
BCF 03H,5 ; Seleciona banco 0 (reseta RP0)

LOOP
NO
BTFSS 6H,0
GOTO LOOP

SIM
BTFSS 5H,6
GOTO ACENDE

SIM
APAGA
BCF 5H,6
GOTO LOOP

NO ACENDE

BSF 5H,6
GOTO LOOP

Cdigo (ex2-0.asm)
INICIO
Cdigo: ex2-0.asm

CONFIGURACAO
BSF 03H,5 ; Seleciona banco 1 (seta RP0)
BCF 85H,6 ; Reseta RA6 (RA6 como saida)
BSF 86H,0 ; Seta RB0 (RB0 como entrada)
BCF 03H,5 ; Seleciona banco 0 (reseta RP0)

LOOP
NO
BTFSS 6H,0
GOTO LOOP

SIM
BTFSS 5H,6
GOTO ACENDE

SIM
APAGA
BCF 5H,6
GOTO LOOP

NO ACENDE

BSF 5H,6
GOTO LOOP

__CONFIG 0x3D18
ORG 0x00
INICIO
CONFIGURACAO
BSF 03H,5 ; Seleciona banco 1 (seta RP0)
BCF 85H,6 ; Reseta RA6 (RA6 como saida)
BSF 86H,0 ; Seta RB0 (RB0 como entrada)
BCF 03H,5 ; Seleciona banco 0 (reseta RP0)
CLRF 05H
LOOP
BTFSS 6H,0 ; Pula se boto Pressionado
GOTO LOOP
BTFSS 5H,6 ; Pula se Luz acessa
GOTO ACENDE
GOTO APAGA
ACENDE
BSF 5H,6
GOTO LOOP
APAGA
BCF 5H,6
GOTO LOOP
END

Processo de Montagem

Cdigo
Cdigo

executvel: ex1-0.hex
executvel: ex1-0.hex

$ gpasm -p16f628a ex2-0.asm


ex2-0.asm
ex2-0.asm

Montagem

:020000040000FA
:020000040000FA
:100000008316051586118512051D0028861D0928F1
:100000008316051586118512051D0028861D0928F1
:0A0010000B2886150028861500282D
:0A0010000B2886150028861500282D
:02400E00182D6B
:02400E00182D6B
:00000001FF
:00000001FF

Simulao
$ gpsim ex2-0.cod

Escolha Realtime with GUI


(simulao em tempo real)

Inicie a simulao
Verifique a Breadboad
Clique no pino correspondente a RB0 para que ele fique vermelho (1), Verifique o que o
pino RA6 fica piscando. Clique novamente em RB0 e verifique que RA6 parou de piscar,
mas pode tanto estar ligado como desligado. Na aplicao real, enquanto o boto estiver
pressionado o led estar sendo aceso e apagado 1 milho de vezes por segundo. Desta
forma o Led ficar aceso ou apagado dependendo do tempo que o boto ficar pressionado.
Observe que no isso que queremos.
Ento como resolver esse problema? Resp: Proximo slide

Resposta: Interrupo

Interrupes

A interrupo um recurso importante nos sistemas


computacionais, com ela possvel avisar a CPU a
ocorrncia de algum evento externo que precisa de
tratamento imediato. A rotina que vai cuidar dessa
interrupo conhecida como tratador de
interrupo e deve ficar posicionada em uma rea da
memria conhecida como vetor de interrupo. No
controlador PIC16F628A, quando ocorre uma
interrupo o PC desviado para o endereo 0x04
da memria de programa, este endereo
conhecido como vetor de interrupo e nele que
deve est o tratador de interrupo.

Tipos de Interrupo

O PIC dispe 10 Tipos de interrupes:

Interrupo externa:

Mudana de nvel na porta RB0

Mudana de Estado

Mudana de valor em um dos pinos (RB4,RB5,RB6,RB7)

3 Timers (TDVI)

2 Comunicao Serial

1 de comparador

1 de Final de Escrita em ROM

1 de CPP

O que uma interrupo?

Quando uma interrupo ocorre, o fluxo normal de


execuo desviado e o contador de programa passa a
apontar para o vetor de interrupo 0x04. A sequencia de
instruo que estiver neste endereo ser executada.
Para retornar ao ponto de parada do programa usa-se a
instruo RETFIE
Momento da interrupo

ORG 0X04
Tratamento da
interrupo

LOOP DO
PROGRAMA
PRINCIPAL

Desligar a Flag
Correspondente
RETFIE

Configurando as interrupes

As interrupes so habilitadas e configuradas


usando o SFR INTCON (endereo 0BH)
Abaixo o esquema dos bits do Registrador
INTCON

Acesso: Se pode ser escrito e lido (RW) ou


somente escrito
POR: Valor assumido na inicializao
INTCON (0Bh,8Bh,10Bh,18Bh)
Bit

INTE RBIE T0IF INTF

Funo

GIE PEIE

Acesso

RW

RW

RW

RW

RW

RW

RW

POR

T0IE

RBIF

SFR INTCON
(interrupt controler)

GIE (INTCON,7) : Set (=1) para habilitar interrupes;


PEIE (INTCON,6) : Set (=1) para habilitar interrupes perifricas (USART,
Comparador, CPP);
T0IE (INTCON,5): Set (=1) para habilitar interrupo do timer 0;
INTE (INTCON,4): Set (=1) para habilitar a interrupo externa (mudana de
nvel em RB0);
RBIE (INTCON,3): Set (=1) para habilitar interrupes de mudana de
estado (RB4,RB5,RB6,RB7);
T0IF (INTCON,2): FLAG, Se igual a 1, ocorreu interrupo do timer 0;
INTF (INTCON,1): FLAG, Se igual a 1, houve mudana de nvel em RB0.
RBIF (INTCON,0): FLAG, Se igual a 1, ocorreu interrupo de mudana de
estado. Relativo a RB4,RB5,RB6,RB7;
INTCON (0Bh,8Bh,10Bh,18Bh)
Bit

Funo

GIE

PEIE

T0IE

INTE

RBIE

T0IF

INTF

RBIF

Acesso

RW

RW

RW

RW

RW

RW

RW

RW

POR

Passos para configurar interrupes

Ex: Configurar interrupo em RB0

Cdigo
Cdigo

BSF 0BH, 7; GIE=1


BSF 0BH, 7; GIE=1
BSF 0BH, 4; INTE=1
BSF 0BH, 4; INTE=1

Cdigo (ex2-0.asm)
INICIO
Cdigo: ex2-0.asm

CONFIGURACAO
BSF 03H,5 ; Seleciona banco 1 (seta RP0)
BCF 85H,6 ; Reseta RA6 (RA6 como saida)
BSF 86H,0 ; Seta RB0 (RB0 como entrada)
BCF 03H,5 ; Seleciona banco 0 (reseta RP0)

LOOP
NO
BTFSS 6H,0
GOTO LOOP

SIM
BTFSS 5H,6
GOTO ACENDE

SIM
APAGA
BCF 5H,6
GOTO LOOP

NO ACENDE

BSF 5H,6
GOTO LOOP

__CONFIG 0x3D18
ORG 0x00
INICIO
CONFIGURACAO
BSF 03H,5 ; Seleciona banco 1 (seta RP0)
BCF 85H,6 ; Reseta RA6 (RA6 como saida)
BSF 86H,0 ; Seta RB0 (RB0 como entrada)
BCF 03H,5 ; Seleciona banco 0 (reseta RP0)
CLRF 05H
LOOP
BTFSS 6H,0 ; Pula se boto Pressionado
GOTO LOOP
BTFSS 5H,6 ; Pula se Luz acessa
GOTO ACENDE
GOTO APAGA
ACENDE
BSF 5H,6
GOTO LOOP
APAGA
BCF 5H,6
GOTO LOOP
END

Programando interrupes

Em ex2-0.asm possvel trocar a checagem continua por


interrupo em RB0

Cdigo: ex2-1.asm

INICIO
CONFIGURAO

Lao
Principal

LOOP
INICIO

BTFSS 5H,6

Tratador
de
interrupo
NO
BSF 5H,6

SIM
BCF 5H,6

BCF 0Bh,1
REFIE

__CONFIG 0x2D18
ORG 0x00
GOTO CONFIGURACAO
ORG 0x04
BTFSS 5H,6 ; Pula se Luz acessa
GOTO ACENDE
GOTO APAGA
ACENDE
BSF 5H,6
; Acende Led
GOTO SAIINT
APAGA
BCF 5H,6
;Apaga o Led
SAIINT
BCF 0Bh,1
; Desliga a Flag INTF
RETFIE
CONFIGURACAO
BSF 0BH, 7; GIE=1 (Habilita int geral)
BSF 0BH, 4; INTE=1 (habilita int externa)
BSF 03H,5 ; Seleciona banco 1 (seta RP0)
BCF 85H,6 ; Reseta RA6 (RA6 como saida)
BSF 86H,0 ; Seta RB0 (RB0 como entrada)
BCF 03H,5 ; Seleciona banco 0 (reseta RP0)
LOOP
GOTO LOOP
END

Economizando energia

Economizando energia
INICIO

Lao
Principal

CONFIGURAO
LOOP
SLEEP

A instruo SLEEP
Provoca uma parada
do sistema e s volta
Em caso de interrupo

INICIO

BTFSS 5H,6

Tratador
de
interrupo
NO
BSF 5H,6

SIM
BCF 5H,6

BCF 0Bh,1
REFIE

Cdigo: ex2-2.asm
__CONFIG 0x2D18
ORG 0x00
GOTO CONFIGURACAO
ORG 0x04
BTFSS 5H,6 ; Pula se Luz acessa
GOTO ACENDE
GOTO APAGA
ACENDE
BSF 5H,6
GOTO SAIINT
APAGA
BCF 5H,6
SAIINT
BCF 0Bh,1
RETFIE
CONFIGURACAO
BSF 0BH, 7; GIE=1 (Habilita int geral)
BSF 0BH, 4; INTE=1 (habilita int externa)
BSF 03H,5 ; Seleciona banco 1 (seta RP0)
BCF 85H,6 ; Reseta RA3 (RA3 como saida)
BSF 86H,0 ; Seta RB0 (RB0 como entrada)
BCF 03H,5 ; Seleciona banco 0 (reseta RP0)
LOOP
SLEEP
; Poe o sistema em standby
GOTO LOOP
END

Processo de gravao
Linha de comando para
Montagem no Live CD.
Arquivos gerados:
ex2-2.lst, ex2-2.cod, ex2-2.hex
Cdigo
$ gpasm -p16f628a ex2-2.asm
ex2-2.asm

Montagem
Porta Serial

executvel: ex2-2.hex
:020000040000FA
:020000000C28CA
:08000800051F07280928051750
:100010000A2805138B1009008B170B16831605137E
:0800200006148312630012288C
:02400E00182D6B
:00000001FF

$ picprog --device=pic16f628a --erase --burn --pic-serial-port=/dev/ttyS0 --input-hexfile ex1.hex

Arquivo
HEX
Linha de comando para
Gravao no Live CD.
O gravador deve est
Conectado na porta serial

Atividades Sugeridas
1) Modifique o programa de forma que fique mais precisa
a atividade de acender e apagar do boto. (inserir
verificao para se o boto foi solto)
2) Modifique o programa para que com um toque acenda
um led verde (em RA3), com outro toque acenda o
vermelho (em RA2) e apague o verde.
2) Depois voc poder modificar o programa para que
com um toque acenda o verde, um segundo toque
acenda o vermelho e o terceiro toque apague os dois.

Vous aimerez peut-être aussi