Escolar Documentos
Profissional Documentos
Cultura Documentos
Exercicios Prof
Exercicios Prof
EXERCCIOS PROFESSOR
Ricardo Pannain
Programas Exemplo
Programa 1:......................................................................................................................................................2
Diagrama Esquemtico:................................................................................................................................2
Codificao:..................................................................................................................................................2
Programa 2:......................................................................................................................................................4
Diagrama Esquemtico:................................................................................................................................4
Codificao:..................................................................................................................................................4
Programa 3:......................................................................................................................................................6
Diagrama Esquemtico:................................................................................................................................6
Codificao:..................................................................................................................................................6
Programa 4:......................................................................................................................................................8
Diagrama Esquemtico:................................................................................................................................8
Codificao:..................................................................................................................................................9
Programa 5:....................................................................................................................................................12
Diagrama Esquemtico:..............................................................................................................................12
Codificao:................................................................................................................................................12
Programa 6:....................................................................................................................................................15
Diagrama Esquemtico:..............................................................................................................................15
Codificao:................................................................................................................................................15
Programa 7:....................................................................................................................................................19
Diagrama Esquemtico:..............................................................................................................................19
Codificao:................................................................................................................................................19
Programa 8:....................................................................................................................................................23
Diagrama Esquemtico:..............................................................................................................................23
Codificao:................................................................................................................................................23
Programa 9:....................................................................................................................................................25
Diagrama Esquemtico:..............................................................................................................................25
Codificao:................................................................................................................................................25
Programa 10:..................................................................................................................................................28
Diagrama Esquemtico:..............................................................................................................................28
Codificao:................................................................................................................................................28
Programa 11:...................................................................................................................................................32
Diagrama Esquemtico:..............................................................................................................................32
Codificao:................................................................................................................................................32
Programa 12:..................................................................................................................................................38
Diagrama Esquemtico:..............................................................................................................................38
Codificao:................................................................................................................................................38
Ricardo Pannain
Programa 1:
Este programa faz com que um LED, ligado sada RB0, seja aceso, caso uma chave C,
ligada entrada RA2, esteja em 1. Caso contrrio, o diodo se apaga.
Diagrama Esquemtico:
PIC
RA0
RA1
RA2
RA3
RA4
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
Codificao:
Definio do tipo de dispositivo que ser utilizado. Corresponde ao tipo do
microcontrolador no qual iremos gravar o programa
LIST P=16F84
Definio dos comandos de usurio para alterao das pginas de memria (bancos)
#DEFINE BANCO0
#DEFINE BANCO1
Ricardo Pannain
EQU
EQU
EQU
EQU
0x03
0x05
0x06
0x05
MOVWF
BANCO0
CLRF
BTFSS
PORTA, 2
GOTO
GOTO
Apagar
Acender
MOVLW
Loop:
Acender:
BSF
GOTO
Apagar:
BCF
GOTO
END
Ricardo Pannain
PORTB, 0
Loop
PORTB, 0
Loop
Programa 2:
Este programa funciona como um segredo eletrnico. O microcontrolador espera uma
combinao de 5 chaves, ligadas na porta A (RA0 RA5), e, se esta combinao ocorrer,
todos os LEDs ligados porta B (RB0 RB7) se acendem. Caso contrario, eles
permanecem apagados. A combinacao deve ser 1-0-1-0-1.
Diagrama Esquemtico:
L1 L2 L3 L4 L5 L6 L7 L8
PIC
RA0
RA1
RA2
RA3
RA4
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
Codificao:
Definio do tipo de dispositivo que ser utilizado. Corresponde ao tipo do
microcontrolador no qual iremos gravar o programa
LIST P=16F84
Definio dos comandos de usurio para alterao das pginas de memria (bancos)
#DEFINE BANCO0
#DEFINE BANCO1
EQU
EQU
EQU
EQU
EQU
0x03
0x05
0x06
0x05
0x02
Ricardo Pannain
Incio do programa
Inicio:
BANCO1
CLRF
PORTB
MOVLW
B'00011111'
MOVWF
BANCO0
CLRF
PORTA
MOVF
PORTA, W
PORTB
Loop:
MOVWF
GOTO
Fim
ANDLW
XORLW
BTFSS
GOTO
MOVLW
Fim:
END
Ricardo Pannain
Programa 3:
Este programa utiliza um display de 7 segmentos, ligado porta B (RB0 RB7) para
mostrar o valor de uma chave C ligada entrada RA2 da porta A. Se a chave estiver
ligada, o display exibe o nmero 1. Caso contrrio, exibido o nmero 0.
Diagrama Esquemtico:
Gnd
PIC
RA0
RA1
RA2
RA3
RA4
abcdefg.
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
Codificao:
Definio do tipo de dispositivo que ser utilizado. Corresponde ao tipo do
microcontrolador no qual iremos gravar o programa
LIST P=16F84
Definio dos comandos de usurio para alterao das pginas de memria (bancos)
#DEFINE BANCO0
#DEFINE BANCO1
EQU
EQU
EQU
EQU
0x03
0x05
0x06
0x05
Ricardo Pannain
ORG 0
GOTO Inicio
ORG 5
Incio do programa:
Inicio:
BANCO1
CLRF
MOVWF
BANCO0
BTFSS
PORTA, 2
GOTO
GOTO
Zero
Um
MOVLW
B'00111111'
MOVWF
GOTO
PORTB
Loop
MOVLW
B'00000110'
MOVWF
GOTO
PORTB
Loop
MOVLW
PORTB
Loop:
; verifica o estado da chave C (pino RA2). Se o valor
; for 1, a prxima linha pulada, ento o display
; ir exibir o nmero 1. Caso contrrio o display ir
; exibir o nmero 0
; desvia para linha Zero se o valor de RA2 for 0
; desvia para linha Um se o valor de RA2 for 1
Zero:
; como o valor a ser exibido deve ser Zero, o cdigo
; binrio correspondente este valor no display
; colocado no registrador Work (W)
; exibindo o valor Zero no display fsico
; volta para verificao da chave C
Um:
END
Ricardo Pannain
Programa 4:
Este programa faz com que o LED, ligado ao pino RB0 da porta B acenda e apague a
cada segundo. Como o ciclo de clock do microcontrolador muito pequeno, necessrio
introduzir delays para que as transies do LED possam ser visualizadas. Estes delays
funcionam da seguinte maneira: uma rotina, chamada Delay1S, que utiliza a subrotina
Del10, que gera delays de 10 ms a cada chamada. Dentro desta rotina existe uma
varivel auxiliar (TEMPO1), que comea com o valor 100 e vai sendo decrementada.
Cada vez que ela decrementada, a rotina Del10 chamada novamente. Ou seja, sero
100 chamadas rotina Del10, gerando um delay total de 1 segundo.
Diagrama Esquemtico:
L1
PIC
RA0
RA1
RA2
RA3
RA4
Ricardo Pannain
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
Codificao:
Definio do tipo de dispositivo que ser utilizado. Corresponde ao tipo do
microcontrolador no qual iremos gravar o programa
LIST P=16F84
Definio dos comandos de usurio para alterao das pginas de memria (bancos)
#DEFINE BANCO0
#DEFINE BANCO1
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0x03
0x05
0x06
0x05
0x01
0x0B
0x0C
PORTB
MOVLW
B'00000111'
MOVWF
OPTION_REG
Ricardo Pannain
10
BANCO0
CLRF
PORTB
BSF
PORTB, 0
CALL
Delay1S
BCF
PORTB, 0
CALL
Delay1S
GOTO
Loop
Loop:
Delay1S
BANCO0
MOVLW
0x64
MOVWF
TEMPO1
CALL
RETURN
Del10
BCF
INTCON, 2
MOVLW
0xD8
MOVWF
OPTION_REG
Del10
Del10_1
BTFSS
Ricardo Pannain
INTCON, 2
11
GOTO
DECFSZ
GOTO
RETURN
END
Ricardo Pannain
Del10_1
TEMPO1, 1
Del10
12
Programa 5:
Este programa conta as transies (mudanas) de uma chave C, ligada ao pino RA0 da
porta A. A quantidade de transies mostrada por 8 LEDs ligados aos pinos da porta B,
em formato binrio
Diagrama Esquemtico:
L1 L2 L3 L4 L5 L6 L7 L8
PIC
RA0
RA1
RA2
RA3
RA4
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
Codificao:
Definio do tipo de dispositivo que ser utilizado. Corresponde ao tipo do
microcontrolador no qual iremos gravar o programa
LIST P=16F84
Definio dos comandos de usurio para alterao das pginas de memria (bancos)
#DEFINE BANCO0
#DEFINE BANCO1
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0x03
0x05
0x06
0x05
0x01
0x0B
0x0D
13
GOTO Inicio
ORG 5
Incio do programa:
Inicio:
BANCO1
MOVLW
0x01
MOVWF
CLRF
PORTA
PORTB
MOVLW
B'00000111'
MOVWF
OPTION_REG
BANCO0
CLRF
CLRF
PORTB
CONTADOR
BTFSS
PORTA, 0
GOTO
CALL
Loop
Anti_Ruidos
BTFSC
PORTA, 0
GOTO
CALL
Loop2
Anti_Ruidos
Loop:
; testando o estado da chave C. Enquanto ela
; estiver desligada (valor 0), o programa fica
; em loop. Quando ela for ligada, introduzido
; um pequeno delay (rotina Anti_Rudos), para
; evitar interferncias entre o acionamento da
; chave C e o acendimento dos LEDs, e o
; programa passa a esperar que a chave C
; seja desligada
; espera at a chave C ser ligada
; quando a chave C for ligada, chama a rotina
; Anti_Rudos
Loop2:
Ricardo Pannain
14
INCF
CONTADOR, F
MOVF
CONTADOR, W
MOVWF
PORTB
GOTO
Loop
INTCON, 2
Anti_Ruidos
BCF
MOVLW
0xB0
MOVWF
OPTION_REG
BTFSS
INTCON, 2
GOTO
RETURN
Del
Del:
END
Ricardo Pannain
15
Programa 6:
Este programa faz com que um speaker, ligado ao pino RB7 da porta B, d beeps
peridicos a cada segundo. Cada beep dura cerca de 0,5s. Como o ciclo de clock do
microcontrolador muito pequeno, necessrio introduzir delays para que os beeps do
speaker possam ser ouvidos claramente. Estes delays funcionam da seguinte maneira:
duas rotinas, uma chamada Delay1S (delay de 1 segundo) e outra, DelayMS (delay de 0,5
segundos), utilizam a subrotina Del10, que gera delays de 10 ms a cada chamada. Dentro
desta rotina existe uma varivel auxiliar (TEMPO1), que, para a rotina Delay1S, tem o
valor inicial 100 e, para a rotina DelayMS tem o valor inicial de 50. e que vai sendo
decrementada. Cada vez que ela decrementada, a rotina Del10 chamada novamente.
Diagrama Esquemtico:
PIC
RA0
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
RA1
RA2
RA3
RA4
Codificao:
Definio do tipo de dispositivo que ser utilizado. Corresponde ao tipo do
microcontrolador no qual iremos gravar o programa
LIST P=16F84
Definio dos comandos de usurio para alterao das pginas de memria (bancos)
#DEFINE BANCO0
Ricardo Pannain
16
#DEFINE BANCO1
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0x03
0x05
0x06
0x05
0x01
0x0B
0x0C
B'01111111'
MOVWF
MOVLW
PORTB
B'00000111'
MOVWF
OPTION_REG
BANCO0
CLRF
PORTB
BSF
PORTB, 7
CALL
DelayMS
BCF
PORTB, 7
CALL
Delay1S
Loop:
Ricardo Pannain
17
GOTO
Delay1S
BANCO0
MOVLW
Loop
.100
MOVWF
TEMPO1
CALL
RETURN
Del10
DelayMS
BANCO0
MOVLW
.50
MOVWF
TEMPO1
CALL
RETURN
Del10
BCF
INTCON, 2
MOVLW
0xD8
MOVWF
OPTION_REG
Del10
Del10_1
BTFSS
Ricardo Pannain
INTCON, 2
18
GOTO
DECFSZ
GOTO
RETURN
END
Ricardo Pannain
Del10_1
TEMPO1, 1
Del10
19
Programa 7:
Este programa escreve dados na memria EEPROM do microcontrolador. A posio 0
desta memria ir armazenar o valor das chaves ligadas aos pinos RA0 RA4 da porta A
(em binrio). A verificao do valor armazenado na memria pode ser visualizado pelo
programa de gravao do PIC, j que esta memria no apagada at ser subscrita. A
gravao da memria EEPROM leva um certo tempo. Devemos esperar este tempo antes
de continuar a execuo do programa. Temos duas opes: ou esperamos que o bit WR
do registrador EECON1 seja limpado pelo hardware, indicando o fim da escrita, ou
introduzirmos um delay, que espera uma determinada quantidade de tempo antes de
continuar a execuo. Esta implementao utiliza um delay de, aproximadamente, 2,6
segundos, para a espera da gravao da memria EEPROM.
Diagrama Esquemtico:
PIC
RA0
RA1
RA2
RA3
RA4
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
Codificao:
Definio do tipo de dispositivo que ser utilizado. Corresponde ao tipo do
microcontrolador no qual iremos gravar o programa
LIST P=16F84
Definio dos comandos de usurio para alterao das pginas de memria (bancos)
#DEFINE BANCO0
#DEFINE BANCO1
Ricardo Pannain
20
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0x03
0x05
0x06
0x05
0x01
0x0B
0x88
0x89
0x08
0x09
0x0D
5
6
2
1
0
B'00011111'
MOVWF
MOVLW
PORTA
B'00000111'
MOVWF
OPTION_REG
BANCO0
CALL
CALL
GOTO
Dado
Write
Fim
Dado
BANCO0
Ricardo Pannain
21
MOVLW
MOVWF
B'00000000'
EEADDR
MOVF
PORTA, W
MOVWF
EEDATA
RETURN
Write
BANCO1
BSF
EECON1, WREN
MOVLW
0x55
MOVWF
MOVLW
MOVWF
BSF
EECON2
0xAA
EECON2
EECON1, WR
BANCO0
CALL
RETURN
Del10
BCF
INTCON, 2
MOVLW
0xD8
MOVWF
OPTION_REG
Del10
Ricardo Pannain
22
INTCON, 2
GOTO
DECFSZ
GOTO
RETURN
Del10_1
TEMPO1, 1
Del10
GOTO
Fim
Fim:
END
Ricardo Pannain
23
Programa 8:
Este programa l os dados anteriormente gravados na memria EEPROM, na posio 0.
O valor lido representado, em binrio, atravs de LEDs ligados aos pinos da porta B.
Diagrama Esquemtico:
L1 L2 L3 L4 L5 L6 L7 L8
PIC
RA0
RA1
RA2
RA3
RA4
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
Codificao:
Definio do tipo de dispositivo que ser utilizado. Corresponde ao tipo do
microcontrolador no qual iremos gravar o programa
LIST P=16F84
Definio dos comandos de usurio para alterao das pginas de memria (bancos)
#DEFINE BANCO0
#DEFINE BANCO1
Ricardo Pannain
EQU
EQU
0x03
0x05
24
PORTB
RP0
OPTION_REG
INTCON
EQU
EQU
EQU
EQU
0x06
0x05
0x01
0x0B
EECON1
EEDATA
EEADDR
EQU
EQU
EQU
0x88
0x08
0x09
RD
EQU
PORTB
BANCO0
CLRF
EEADDR
CALL
MOVF
Read
EEDATA, W
MOVWF
PORTB
GOTO
Fim
BANCO1
BSF
EECON1, RD
Read
BANCO0
RETURN
Ricardo Pannain
25
Fim:
GOTO
Fim
END
Programa 9:
Este programa similar ao programa 5, mas explora os recursos de WatchDog e modo
Sleep do microcontrolador. A partir deste programa, passaremos a utilizar o arquivo de
definies padro da Microchip para microcontroladores modelo 16F84, onde se encontra
as definies dos nomes e endereos de todos os SFRs (registradores especiais) e uma
srie de outras definies necessrias para a utilizao do microcontrolador 16F84. Como
curiosidade, voc pode consultar este arquivo para visualizar todos os nomes dos SFRs e
constantes que podem ser utilizadas na programao do 16F84.
Diagrama Esquemtico:
L1 L2 L3 L4 L5 L6 L7 L8
PIC
RA0
RA1
RA2
RA3
RA4
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
Codificao:
Definio do tipo de dispositivo que ser utilizado. Corresponde ao tipo do
microcontrolador no qual iremos gravar o programa
LIST P=16F84
Incluso do arquivo de definies da Microchip para o modelo 16F84a
INCLUDE "P16F84A.INC"
Definio dos comandos de usurio para alterao das pginas de memria (bancos)
#DEFINE BANCO0
#DEFINE BANCO1
Ricardo Pannain
26
CONTADOR
EQU
0x0C
0x01
MOVWF
CLRF
PORTA
PORTB
MOVLW
B'00001111'
MOVWF
OPTION_REG
BANCO0
CLRF
CLRF
PORTB
CONTADOR
BTFSS
PORTA, 0
GOTO
SLEEP
Loop
Loop:
Ricardo Pannain
27
PORTA, 0
GOTO
SLEEP
Loop2
INCF
CONTADOR, F
MOVF
CONTADOR, W
MOVWF
PORTB
GOTO
Loop
END
Ricardo Pannain
; fim do programa
28
Programa 10:
Este programa simula os movimentos de um rob. Este rob imaginrio possui dois
dispositivos infravermelhos, que fazem com que ele siga uma trajetria desenhada no
cho, e dois motores, um para cada roda de trao. Quando os sensores detectam a
necessidade de acertar a rota, os motores devem ser manipulados a fim de realizar o
acerto. Por exemplo, se o rob estiver desviando a rota para a esquerda, o rob deve se
mover para a direita at que a rota seja acertada. Para isto, o motor da direita deve ser
revertido (rodar para trs), e o da esquerda deve continuar ligado (rodando para frente).
Quando a rota estiver certa, ambos os motores devem ser ligados para frente, para que o
rob continue andando em frente. Os movimentos possveis so para a esquerda
(reverter o motor da esquerda e manter o motor da direita a frente), para a direita (reverter
o motor da direita e manter o motor da esquerda a frente), para frente (manter os dois
motores a frente), e para trs (reverter os dois motores).
Os sensores sero simulados pelas chaves ligadas aos pinos RA0 e RA1 da porta. Vamos
convencionar que o valor 0 significa que o sensor no detectou desvio na trajetria, e o
valor 1 significa que o sensor detectou um desvio na trajetria. Os LEDs ligados aos pinos
RB0 e RB1 da porta B iro simular as sadas de controle dos dois motores de trao
(direito e esquerdo, respectivamente). Vamos convencionar que o valor 1 significa ligar os
motores frente, e 0 significa reverter os motores.
Diagrama Esquemtico:
L1 L2
PIC
RA0
RA1
RA2
RA3
RA4
Ricardo Pannain
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
29
Codificao:
Definio do tipo de dispositivo que ser utilizado. Corresponde ao tipo do
microcontrolador no qual iremos gravar o programa
LIST P=16F84
Incluso do arquivo de definies da Microchip para o modelo 16F84a
INCLUDE "P16F84A.INC"
Definio dos comandos de usurio para alterao das pginas de memria (bancos)
#DEFINE BANCO0
#DEFINE BANCO1
EQU
0x0C
B'00000011
MOVWF
CLRF
PORTA
PORTB
BANCO0
Loop:
MOVF
PORTA, W
ANDLW
B'00000011'
Ricardo Pannain
MOVWF
AUX
XORLW
B'00000000'
BTFSC
STATUS, Z
GOTO
Para_Frente
MOVF
AUX, W
XORLW
B'00000001'
BTFSC
STATUS, Z
GOTO
Direita
MOVF
AUX, W
XORLW
B'00000010'
BTFSC
STATUS, Z
GOTO
Esquerda
MOVF
AUX, W
XORLW
B'00000011'
BTFSC
STATUS, Z
GOTO
Para_Tras
GOTO
Loop
B'00000011'
Para_Frente:
MOVLW
Ricardo Pannain
31
MOVWF
GOTO
PORTB
Loop
Para_Tras:
MOVLW B'00000000'
MOVWF PORTB
GOTO Loop
; liga os motores
; volta para o loop principal
; os dois motores sero revertidos
; reverte os motores
; volta para o loop principal
Direita:
MOVLW
B'00000010'
MOVWF
GOTO
PORTB
Loop
Esquerda:
MOVLW
MOVWF
GOTO
END
Ricardo Pannain
B'00000001'
PORTB
Loop
32
Programa 11:
Este programa servir para a gerao de nmeros aleatrios. Ir funcionar da seguinte
maneira:
- Devemos gerar nmeros aleatrios de 0 a 6
- Quando a chave C, ligada ao pino RA0 da porta A, estiver em "1", o display (ligado aos
pinos RB0 RB7 da porta B) ir mostrar, sequencialmente, nmeros de 0 a 6, em
intervalos de 0,05 segundos
- Ao passar a chave C para "0", o display mostrar, durante 3 segundos, o nmero
aleatrio obtido
- Passados os 3 segundos, o display se apaga e a sequencia se repete
O nmero representado nos 4 bits menos significativos do registrador Work (W)
transformado em um nmero equivalente no display de 7 segmentos, como se
estivssemos implementando um conversor. O cdigo referente ao nmero no display de
7 segmentos tambm retorna no registrador W.
Diagrama Esquemtico:
Gnd
PIC
RA0
RA1
RA2
RA3
RA4
Ricardo Pannain
abcdefg.
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
33
Codificao:
Definio do tipo de dispositivo que ser utilizado. Corresponde ao tipo do
microcontrolador no qual iremos gravar o programa
LIST P=16F84
Incluso do arquivo de definies da Microchip para o modelo 16F84a
INCLUDE "P16F84A.INC"
Definio dos comandos de usurio para alterao das pginas de memria (bancos)
#DEFINE BANCO0
#DEFINE BANCO1
NUMERO
DELAY_CONT
TEMPORAL
ENDC
Definies do endereo de incio de processamento, ou vetor de reset (0x00), e do vetor
de interrupes (0x05)
ORG 0
GOTO Inicio
ORG 5
Incio do programa:
Tabela
ADDWF
PCL, F
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
B'00111111'
B'00000110'
B'01011011'
B'01001111'
B'01100110'
B'01101101'
B'01111101'
Ricardo Pannain
Delay_20_ms:
BCF
MOVLW
MOVWF
Delay_20_ms_1
CLRWDT
BTFSS
GOTO
RETURN
Delay_Var
BCF
MOVLW
MOVWF
Ricardo Pannain
35
; aproximadamente, 50 ms.
; limpa o registrador WDT para no ocorrer
; um reset
CLRWDT
Intervalo
CLRWDT
BTFSS
GOTO
DECFSZ
GOTO
RETURN
Inicio:
CLRF
BANCO1
CLRF
Ricardo Pannain
PORTB
TRISB
; limpando a porta B
; mudando para o banco de memria 1
; limpando os bits de TRISB. Com isso, todos
36
MOVLW
B'00011111'
MOVWF
MOVLW
TRISA
B'00000111'
MOVWF
OPTION_REG
BANCO0
Loop:
CLRWDT
BTFSS
PORTA, 0
GOTO
MOVF
Loop
TMR0, W
MOVWF
NUMERO
MOVLW
SUBWF
MOVWF
SUBLW
BTFSS
GOTO
INCF
D'6'
NUMERO, W
NUMERO
D'5'
STATUS, C
Divide
NUMERO, F
MOVLW
MOVWF
D'6'
TEMPORAL
Divide:
Dado:
RA0_1:
CLRWDT
BTFSS
PORTA, 0
GOTO
Saida
Ricardo Pannain
37
MOVF
TEMPORAL, W
CALL
Tabela
MOVWF
MOVLW
MOVWF
PORTB
D'1'
DELAY_CONT
CALL
DECFSZ
GOTO
Delay_Var
TEMPORAL, F
RA0_1
GOTO
Dado
CALL
Delay_20_ms
MOVF
NUMERO, W
CALL
Tabela
MOVWF
MOVLW
MOVWF
PORTB
D'60'
DELAY_CONT
CALL
CLRF
GOTO
Delay_Var
PORTB
Loop
Saida:
END
Ricardo Pannain
38
Programa 12:
Este programa ir simular um contador de 2 dgitos (00 a 99). Para sua realizao, sero
utilizados dois displays de 7 segmentos, e dois conversores binrio-7segmentos, que
recebe um nmero binrio de 4 bits e transforma este nmero para a representao do
display.
Para exibir os nmeros nos displays, utilizaremos a porta B, sendo que os 4 bits menos
significativos representaro o nmero a ser exibido no primeiro display (unidade), e os 4
bits mais significativos representaro o nmero a ser exibido no segundo display
(dezena).
Este contador ter duas chaves e um boto (push buttom). A chave ligada entrada RA0
da porta A ir controlar o sentido da contagem (0 = Decrescente e 1 = Crescente). A chave
ligada entrada RA1 da porta A ir controlar a parada do contador (0 = Parar e 1 =
Contar). E, por ltimo, o boto ligado RA2 servir de reset, ou seja, quando
pressionado, ir zerar os displays e recomear a contagem.
Diagrama Esquemtico:
Ricardo Pannain
39
abcdefg.
abcdefg.
4543
D3
D2
D1
D0
LD
BI
PH
4543
D3
D2
D1
D0
LD
BI
PH
a
b
c
d
e
f
g
Gnd
a
b
c
d
e
f
g
Gnd
PIC
RA0
RA1
RA2
+V
RA3
RA4
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
Codificao:
Definio do tipo de dispositivo que ser utilizado. Corresponde ao tipo do
microcontrolador no qual iremos gravar o programa
LIST P=16F84
Incluso do arquivo de definies da Microchip para o modelo 16F84a
INCLUDE "P16F84A.INC"
Definio dos comandos de usurio para alterao das pginas de memria (bancos)
#DEFINE BANCO0
#DEFINE BANCO1
CONTADOR_D1
CONTADOR_D2
Ricardo Pannain
40
CONTADOR_TMP
CONTADOR_DELAY
ENDC
Definies do endereo de incio de processamento, ou vetor de reset (0x00), e do vetor
de interrupes (0x05)
ORG 0
GOTO Inicio
ORG 5
Incio do programa:
Delay
MOVLW
.10
MOVWF
CONTADOR_DELAY
BCF
INTCON, T0IF
MOVLW
0x3C
MOVWF
TMR0
CLRWDT
Intervalo
CLRWDT
BTFSS
Ricardo Pannain
INTCON, T0IF
GOTO
Intervalo
DECFSZ
GOTO
CONTADOR_DELAY, F
Delay_Var
Mostrar_Valor
MOVF
CONTADOR_D2, W
MOVWF
CONTADOR_TMP
SWAPF
CONTADOR_TMP, F
CLRW
IORWF
CONTADOR_D1, W
IORWF
CONTADOR_TMP, W
MOVWF
RETURN
PORTB
CLRF
BANCO1
CLRF
PORTB
MOVLW
B'00011111'
Inicio:
Ricardo Pannain
TRISB
; limpando a porta B
; mudando para o banco de memria 1
; limpando os bits de TRISB. Com isso,
; todos os pinos (RB0 a RB7) sero
; utilizados como sada
; utilizando o registrador Work (W) para
; configurar a porta de entrada A.
42
MOVWF
MOVLW
TRISA
B'0000011'
MOVWF
OPTION_REG
BANCO0
Resetar:
CLRF
CLRF
CLRF
CONTADOR_D1
CONTADOR_D2
CONTADOR_TMP
CALL
Mostrar_Valor
CALL
BTFSC
Delay
PORTA, 2
GOTO
Resetar
BTFSS
PORTA, 1
GOTO
BTFSS
Loop
PORTA, 0
GOTO
Decrescente
Loop:
Crescente:
INCF
MOVLW
CONTADOR_D1, F
.10
SUBWF
CONTADOR_D1, W
BTFSS
STATUS, Z
Ricardo Pannain
43
GOTO
CLRF
INCF
MOVLW
Desviar_C
CONTADOR_D1
CONTADOR_D2, F
.10
SUBWF
CONTADOR_D2, W
BTFSC
STATUS, Z
CLRF
CONTADOR_D2
Desviar_C:
CALL
GOTO
Decrescente:
DECF
MOVLW
Mostrar_Valor
Loop
CONTADOR_D1, F
0xFF
SUBWF
BTFSS
CONTADOR_D1, W
STATUS, Z
GOTO
MOVLW
Desviar_D
.9
MOVWF
DECF
MOVLW
CONTADOR_D1
CONTADOR_D2, F
0xFF
SUBWF
BTFSS
CONTADOR_D2, W
STATUS, Z
GOTO
MOVLW
Desviar_D
.9
MOVWF
CONTADOR_D2
Desviar_D:
CALL
GOTO
Ricardo Pannain
Mostrar_Valor
Loop
; continua a contagem
; o display1 volta para o valor 0
; o display2 incrementado
; move o valor 10 para o registrador
; Work (W)
; subtrai o valor atual do display2 do
; valor de W (no caso, 10)
; verifica se a operao anterior
; resultou em zero. Caso sim, o
; display2 tambm deve ser atualizado,
; voltando para o valor 0
; o display2 volta para o valor 0
; exibe o valor atual dos contadores de
; cada display
; volta para o loop principal
; decrementa o valor atual do display1
; move o valor 0xFF (255 em decimal)
; para o registrador Work (W)
; subtrai o valor atual do display1 de W
; verifica se a operao anterior
; resultou em zero. Caso sim, o
; display1 deve ser atualizado, voltando
; para o valor 9, e o display2 deve ser
; decrementado. Caso contrrio, a
; contagem continua normalmente
; continua a contagem
; move o valor 9 para o registrador
; Work (W)
; atualiza o contador do display1
; decrementa o display2
; move o valor 0xFF (255 em decimal)
; para o registrador Work (W)
; subtrai o valor atual do display2 de W
; verifica se a operao anterior
; resultou em zero. Caso sim, o
; display2 tambm deve ser atualizado,
; voltando para o valor 9
; continua a contagem
; move o valor 9 para o registrador
; Work (W)
; o display2 volta para o valor 9
; exibe o valor atual dos contadores de
; cada display
; volta para o loop principal
44
END
Ricardo Pannain
; fim do programa
45