chave liga desliga (um toque liga outro desliga) · materiais gravador pic 16f628a 1 led...
TRANSCRIPT
Chave Liga Desliga(Um toque Liga outro Desliga)
Roteiro
● Materiais● Pinos do PIC● Fluxograma● E/S com PIC● Circuito no protoboard● Melhoramentos● Sugestão 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 B
Pinos do Port A
Fluxograma
O botãoFoi pressionado?
INICIO
O LEDEstá ligado?
SIM
NÃO
SIM
NÃO
Acende
Apaga
Entrada e Saída
● Em geral os sistemas computacionais precisam comunicar-se com o mundo externo, no contexto de computadores essas comunicações são conhecidas como operações de E/S (Entrada/Saída).
● Saída: Toda vez que o sistema precisar “afetar” de alguma forma o mundo externo, essa operação será considerada saída. 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 botão foi pressionado, o sistema acende um led.
Fazendo E/S com o PIC
● O controlador PIC tem 2 Portas para Entrada e Saída 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 botão. E port A bit 6 (Pino 15 do CI) como saída onde será ligado um led.
+
+
+
+
1K
10K
Fazendo E/S com o PIC
● O Port A do PIC tem o endereço 05H e o Port B endereço 06H, Cada um destes endereços tem os seu bits “ligados” aos pinos externos do PIC, de acordo com a tabela a seguir:
BIT PORTA Pino
0 17
1 18
2 1
3 2
4 3
5 4
6 15
7 16
BIT PORTB Pino
0 6
1 7
2 8
3 9
4 10
5 11
6 12
7 13
Configurando E/S
● As configurações de E/S para cada Port são feitas usando os registradores TRISA e TRISB onde TRISA configura o PortA e TRISB o PortB, os endereços são 85H e 86H respectivamente.
● Para configurar algum pino de Port B como saída devemos desligar o bit correspondente em TRISB. Ou seja se queremos que o pino 6 de PortB seja saída (output) configuramos o Bit 6 de TRISB como 0. Para configurar como entrada configuramos o bit 6 como 1;
● É fácil lembrar desta regra 0 para 0utput e 1 para 1nput
Configurando E/S
9
8
7
6
10
11
12
13
4
3
2
1
15
16
17
18
5 14- +85H TRISA
86H TRISB
06H PORT B
05H PORT A
Configurando E/S
0
1
9
8
7
6
10
11
12
13
4
3
2
1
15
16
17
18
5 14- +85H TRISA
86H TRISB
06H PORT B
05H PORT AINPUT
OUTPUT
Configurando E/S
0
1
9
8
7
6
10
11
12
13
4
3
2
1
15
16
17
18
5 14- +85H TRISA
86H TRISB
06H PORT B
05H PORT A
LED
Configurando E/S
0
1
9
8
7
6
10
11
12
13
4
3
2
1
15
16
17
18
5 14- +85H TRISA
86H TRISB
06H PORT B
05H PORT A
LED
-
+
BSF 06h,010 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
7 6 5 4 3 2 1 I0
Memória de dados do PIC
0 5110h 1FFh
256-383100h-17Fh
Banco 2
384-511180h-1FFh
Banco 3
06h: PortB
05h: PortA
86h: TRISB
85h: TRISA
128 – 25580h – FfhBanco 1
8BITS
03h: STATUS
0 – 1270h – 7FhBanco 0
83h: STATUS 103h: STATUS 183h: STATUS
IRP RP0
3h: STATUS
IRP RP1 RP0
7 6 5 4 3 2 1 0
TO PD DC C ZRP1RP1 RP0RP0
Memória de dados do PIC
0 5110h 1FFh
256-383100h-17Fh
Banco 2
384-511180h-1FFh
Banco 3
06h: PortB
05h: PortA
86h: TRISB
85h: TRISA
128 – 25580h – FfhBanco 1
8BITS
03h: STATUS
0 – 1270h – 7FhBanco 1
83h: STATUS 103h: STATUS 183h: STATUS
3h: STATUS
IRP 0 0
7 6 5 4 3 2 1 0
TO PD DC C ZAO LIGAR
0 – 1270h – 7FhBanco 0
0 – 1270h – 7FhBanco 0
Memória de dados do PIC
0 5110h 1FFh
256-383100h-17Fh
Banco 2
384-511180h-1FFh
Banco 3
06h: PortB
05h: PortA
86h: TRISB
85h: TRISA
128 – 25580h – FfhBanco 1
8BITS
03h: STATUS
0 – 1270h – 7FhBanco 0
83h: STATUS 103h: STATUS 183h: STATUS
3h: STATUS
IRP 0 1
7 6 5 4 3 2 1 0
TO PD DC C ZBSF 03h,5
128 – 25580h – FfhBanco 1
128 – 25580h – FfhBanco 1
Memória de dados do PIC
0 5110h 1FFh
256-383100h-17Fh
Banco 2
384-511180h-1FFh
Banco 3
06h: PortB
05h: PortA
86h: TRISB
85h: TRISA
128 – 25580h – FfhBanco 1
8BITS
03h: STATUS
0 – 1270h – 7FhBanco 0
83h: STATUS 103h: STATUS 183h: STATUS
3h: STATUS
IRP 1 0
7 6 5 4 3 2 1 0
TO PD DC C ZBCF 03h,5BSF 03h,6
256-383100h-17Fh
Banco 2
256-383100h-17Fh
Banco 2
Memória de dados do PIC
0 5110h 1FFh
256-383100h-17Fh
Banco 2
384-511180h-1FFh
Banco 3
06h: PortB
05h: PortA
86h: TRISB
85h: TRISA
128 – 25580h – FfhBanco 1
8BITS
03h: STATUS
0 – 1270h – 7FhBanco 0
83h: STATUS 103h: STATUS 183h: STATUS
3h: STATUS
IRP 1 1
7 6 5 4 3 2 1 0
TO PD DC C ZBSF 03h,5BSF 03h,6
384-511180h-1FFh
Banco 3
384-511180h-1FFh
Banco 3
Configuração
Código: Configuração
CONFIGURACAOBSF 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
O botãoFoi pressionado?
O LEDEstá ligado?
SIM
NÃO
SIM
NÃO
Acende
Apaga
CONFIGURAÇÃO
INICIO
LOOP
Teste se o Botão foi pressionado(Testando um Bit)
● Se o teste for Verdadeiro salta a próxima instrução.● Para Testar se um bit está ligado:
– BTFSS Endereço, bit● Para testar se um bit está desligado:
– BTFSZ Endereço, bit
● EX: (Testa se o bit 6 de Port A está ligado )
BTFSS 05h,6GOTO DESLIGADOGOTO LIGADO
Instruções BCF e BSF
● As instruções BCF (Bit Clear File) e BSF (Bit Set File) são usadas para desligar e ligar bits específicos 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 Endereço, Bit● BSF Endereço, Bit
Fluxograma
BTFSS 6H,0GOTO LOOP
BTFSS 5H,6 GOTO ACENDE
SIM
NÃO
SIM
NÃO
ACENDEBSF 5H,6GOTO LOOP
APAGABCF 5H,6GOTO LOOP
CONFIGURACAOBSF 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)
INICIO
LOOP
Código (ex2-0.asm)
Código: ex2-0.asm
__CONFIG 0x3D18ORG 0x00INICIOCONFIGURACAO
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
LOOPBTFSS 6H,0 ; Pula se botão PressionadoGOTO LOOP BTFSS 5H,6 ; Pula se Luz acessaGOTO ACENDEGOTO APAGA
ACENDEBSF 5H,6GOTO LOOP
APAGABCF 5H,6GOTO LOOP
END
BTFSS 6H,0GOTO LOOP
BTFSS 5H,6 GOTO ACENDE
SIM
NÃO
SIM
NÃO
ACENDEBSF 5H,6GOTO LOOP
APAGABCF 5H,6GOTO LOOP
CONFIGURACAOBSF 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)
INICIO
LOOP
executável: ex1-0.hexexecutável: ex1-0.hexCódigo
Código
ex2-0.asmex2-0.asm
:020000040000FA:100000008316051586118512051D0028861D0928F1:0A0010000B2886150028861500282D:02400E00182D6B:00000001FF
:020000040000FA:100000008316051586118512051D0028861D0928F1:0A0010000B2886150028861500282D:02400E00182D6B:00000001FF
Montagem
Processo de Montagem
$ gpasm -p16f628a ex2-0.asm
Simulação
$ gpsim ex2-0.cod
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 aplicação real, enquanto o botão estiver pressionado o led estará sendo aceso e apagado 1 milhão de vezes por segundo. Desta forma o Led ficará aceso ou apagado dependendo do tempo que o botão ficar pressionado.Observe que não é isso que queremos. Então como resolver esse problema? Resp: Proximo slide
Inicie a simulaçãoVerifique a Breadboad
Escolha Realtime with GUI(simulação em tempo real)
Resposta: Interrupção
Interrupções
● A interrupção é um recurso importante nos sistemas computacionais, com ela é possível avisar a CPU a ocorrência de algum evento externo que precisa de tratamento imediato. A rotina que vai cuidar dessa interrupção é conhecida como tratador de interrupção e deve ficar posicionada em uma área da memória conhecida como vetor de interrupção. No controlador PIC16F628A, quando ocorre uma interrupção o PC é desviado para o endereço 0x04 da memória de programa, este endereço é conhecido como vetor de interrupção e é nele que deve está o tratador de interrupção.
Tipos de Interrupção
● O PIC dispõe 10 Tipos de interrupções:● Interrupção externa:
– Mudança de nível na porta RB0● Mudança de Estado
– Mudança de valor em um dos pinos (RB4,RB5,RB6,RB7)● 3 Timers (TDVI)● 2 Comunicação Serial● 1 de comparador● 1 de Final de Escrita em ROM● 1 de CPP
O que é uma interrupção?
● Quando uma interrupção ocorre, o fluxo normal de execução é desviado e o contador de programa passa a apontar para o vetor de interrupção 0x04. A sequencia de instrução que estiver neste endereço será executada. Para retornar ao ponto de parada do programa usa-se a instrução RETFIE
LOOP DOPROGRAMAPRINCIPAL
ORG 0X04Momento da interrupção
Tratamento dainterrupção
Desligar a FlagCorrespondente
RETFIE
Configurando as interrupções
● As interrupções são habilitadas e configuradas usando o SFR INTCON (endereço 0BH)
● Abaixo o esquema dos bits do Registrador INTCON● Acesso: Se pode ser escrito e lido (RW) ou
somente escrito● POR: Valor assumido na inicialização
INTCON (0Bh,8Bh,10Bh,18Bh)
Bit 7 6 5 4 3 2 1 0
Função GIE PEIE T0IE INTE RBIE T0IF INTF RBIF
Acesso RW RW R RW RW RW RW RW
POR 0 0 0 0 0 0 0 X
SFR INTCON(interrupt controler)
● GIE (INTCON,7) : Set (=1) para habilitar interrupções;● PEIE (INTCON,6) : Set (=1) para habilitar interrupções periféricas (USART,
Comparador, CPP);● T0IE (INTCON,5): Set (=1) para habilitar interrupção do timer 0;● INTE (INTCON,4): Set (=1) para habilitar a interrupção externa (mudança de
nível em RB0);● RBIE (INTCON,3): Set (=1) para habilitar interrupções de mudança de
estado (RB4,RB5,RB6,RB7);● T0IF (INTCON,2): FLAG, Se igual a 1, ocorreu interrupção do timer 0;● INTF (INTCON,1): FLAG, Se igual a 1, houve mudança de nível em RB0.● RBIF (INTCON,0): FLAG, Se igual a 1, ocorreu interrupção de mudança de
estado. Relativo a RB4,RB5,RB6,RB7;
INTCON (0Bh,8Bh,10Bh,18Bh)
Bit 7 6 5 4 3 2 1 0
Função GIE PEIE T0IE INTE RBIE T0IF INTF RBIF
Acesso RW RW RW RW RW RW RW RW
POR 0 0 0 0 0 0 0 X
Passos para configurar interrupções
● Ex: Configurar interrupção em RB0
CódigoCódigo
BSF 0BH, 7; GIE=1BSF 0BH, 4; INTE=1
BSF 0BH, 7; GIE=1BSF 0BH, 4; INTE=1
Código (ex2-0.asm)
Código: ex2-0.asm
__CONFIG 0x3D18ORG 0x00INICIOCONFIGURACAO
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
LOOPBTFSS 6H,0 ; Pula se botão PressionadoGOTO LOOP BTFSS 5H,6 ; Pula se Luz acessaGOTO ACENDEGOTO APAGA
ACENDEBSF 5H,6GOTO LOOP
APAGABCF 5H,6GOTO LOOP
END
BTFSS 6H,0GOTO LOOP
BTFSS 5H,6 GOTO ACENDE
SIM
NÃO
SIM
NÃO
ACENDEBSF 5H,6GOTO LOOP
APAGABCF 5H,6GOTO LOOP
CONFIGURACAOBSF 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)
INICIO
LOOP
Programando interrupções● Em ex2-0.asm é possível trocar a checagem continua por
interrupção em RB0
INICIO
BTFSS 5H,6
SIM
NÃOBSF 5H,6
BCF 5H,6
LOOP
CONFIGURAÇÃO
Código: ex2-1.asm
__CONFIG 0x2D18ORG 0x00GOTO CONFIGURACAOORG 0x04
BTFSS 5H,6 ; Pula se Luz acessaGOTO ACENDEGOTO APAGA
ACENDEBSF 5H,6 ; Acende LedGOTO SAIINT
APAGABCF 5H,6 ;Apaga o Led
SAIINTBCF 0Bh,1 ; Desliga a Flag INTFRETFIE
CONFIGURACAOBSF 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)
LOOPGOTO LOOP
END
INICIO
BCF 0Bh,1
REFIE
Laço Principal
Tratadorde interrupção
Código: ex2-2.asm
Economizando energia● Economizando energia
INICIO
BTFSS 5H,6
SIM
NÃOBSF 5H,6
BCF 5H,6
LOOP
CONFIGURAÇÃO__CONFIG 0x2D18ORG 0x00GOTO CONFIGURACAOORG 0x04
BTFSS 5H,6 ; Pula se Luz acessaGOTO ACENDEGOTO APAGA
ACENDEBSF 5H,6GOTO SAIINT
APAGABCF 5H,6
SAIINTBCF 0Bh,1RETFIE
CONFIGURACAOBSF 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)
LOOPSLEEP ; Poe o sistema em standbyGOTO LOOP
END
INICIO
BCF 0Bh,1
REFIE
Laço Principal
Tratadorde interrupção
SLEEP
A instrução SLEEPProvoca uma parada do sistema e só volta
Em caso de interrupção
executável: ex2-2.hexCódigo
ex2-2.asm
:020000040000FA:020000000C28CA:08000800051F07280928051750:100010000A2805138B1009008B170B16831605137E:0800200006148312630012288C:02400E00182D6B:00000001FF
Processo de gravação
$ gpasm -p16f628a ex2-2.asm
$ picprog --device=pic16f628a --erase --burn --pic-serial-port=/dev/ttyS0 --input-hexfile ex1.hex
Linha de comando para Montagem no Live CD.
Arquivos gerados:ex2-2.lst, ex2-2.cod, ex2-2.hex
Linha de comando para Gravação no Live CD.O gravador deve está
Conectado na porta serial
Porta Serial
Arquivo HEX
Montagem
Atividades Sugeridas
1) Modifique o programa de forma que fique mais precisa a atividade de acender e apagar do botão. (inserir verificação para se o botão 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.