Respostas Dos Exercicios
Respostas Dos Exercicios
Respostas Dos Exercicios
Captulo 2: Microcontroladores
1. ROM, OTP (PROM), EEPROM ou Flash ROM
2. Os registradores de uso geral armazenam dados temporrios,
enquanto que os registradores com finalidade especficas so
utilizados em tarefas especficas.
3. E
4. Gerar a base de tempo para que a CPU possa executar as instrues
do programa. Uma instruo ser executada em um ou mais ciclos de
clock.
dos bits de
4. C
5. BSF f,b
6. ADDLW
2. __IDLOCS
H'2536'
f,d, ANDLW
k, ANDWF
f,d, XORLW
k, e XORWF
programa 1, aps o tratamento de cada boto ele tem que ser solto para que
os botes voltem a ser rastreados.
;
*******************************************************************************************************
**************************************
;
PROGRAMA - DOIS LEDS ACIONADOS POR DOIS BOTOES
;
DESENVOLVIDO POR WAGNER DA SILVA ZANCO
;
VERSAO 1.0
;
23/06/2003
;
*******************************************************************************************************
***************************************
;
ARQUIVOS DE DEFINICOES
;
*******************************************************************************************************
**************************************
#INCLUDE <P16F628A.INC>
;ARQUIVO PADRAO MICROCHIP PARA O PIC16F628A
;
*******************************************************************************************************
**************************************
;
BITS DE CONFIGURACAO
;
*******************************************************************************************************
**************************************
__CONFIG
_BOREN_ON&_CP_ON&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_DATA_CP_OFF&_MCLRE_ON&_XT_OSC
;
*******************************************************************************************************
**************************************
;
PAGINACAO DA MEMORIA
;
*******************************************************************************************************
**************************************
;COMANDOS PARA ALTERACAO DE PAGINA DE MEMORIA
#DEFINE
#DEFINE
BANK0
BANK1
BCF STATUS,RP0
BSF STATUS,RP0
;
*******************************************************************************************************
**************************************
;
VARIAVEIS
;
*******************************************************************************************************
**************************************
;ENDEREOS DAS VARIAVEIS UTILIZADAS PELO SISTEMA
CBLOCK
ENDC
0x20
DEBOUNCE
COUNT
;
*******************************************************************************************************
**************************************
;
CONSTANTES
;******************************************************************************************************
***************************************
;CONSTANTES UTILIZADAS PELO SISTEMA
DEB
DEB_CONT
EQU .200
EQU .50
;
*******************************************************************************************************
**************************************
;
ENTRADAS
;
*******************************************************************************************************
**************************************
;PINOS QUE SERAO UTILIZADOS COMO ENTRADA
#DEFINE
BOTAO1
PORTA,1
;0 --> PRESSIONADO
;1 --> LIBERADO
#DEFINE
BOTAO2
PORTA,2
;0 --> PRESSIONADO
;1 --> LIBERADO
;
*******************************************************************************************************
**************************************
;
SAIDAS
;
*******************************************************************************************************
**************************************
;PINOS QUE SERAO UTILIZADOS COMO SAIDA
#DEFINE
LED1
PORTB,0
;0 --> APAGADO
;1 --> ACESO
#DEFINE
LED2
PORTB,1
;0 --> APAGADO
;1 --> ACESO
;
*******************************************************************************************************
**************************************
;
VETOR DE RESET
;
*******************************************************************************************************
**************************************
ORG
0x00
;ENDERECO INICIAL DE PROCESSAMENTO
GOTO
INICIO
;
*******************************************************************************************************
**************************************
;
INTERRUPCAO
;
*******************************************************************************************************
**************************************
;
AS INTERRUPCOES NAO SERAO UTILIZADAS
ORG
RETFIE
0x04
;
*******************************************************************************************************
**************************************
;
INICIO
;
*******************************************************************************************************
**************************************
INICIO
BANK1
MOVLW
MOVWF
MOVLW
MOVWF
B'00000000'
TRISB
MOVLW
MOVWF
B'10000001'
OPTION_REG
MOVLW
MOVWF
B'00000000'
INTCON
BANK0
MOVLW
MOVWF
B'00000111'
CMCON
;
*******************************************************************************************************
**************************************
;
INICIALIZACAO DAS VARIAVEIS
;
*******************************************************************************************************
**************************************
CLRF
PORTA
;LIMPA PORTA
CLRF
PORTB
;LIMPA PORTB
;
*******************************************************************************************************
**************************************
MAIN
MOVLW
MOVWF
MOVLW
MOVWF
DEB
DEBOUNCE
DEB_CONT
COUNT
TESTA_BOTAO1
BTFSC
GOTO
GOTO
BOTAO1
TESTA_BOTAO2
FAZER_DEBOUNCE1
BOTAO2
MAIN
FAZER_DEBOUNCE2
TESTA_BOTAO2
BTFSC
GOTO
GOTO
FAZER_DEBOUNCE1
DECFSZ
GOTO
DEBOUNCE,F
TESTA_BOTAO1
MOVLW
MOVWF
DEB
DEBOUNCE
DECFSZ
GOTO
GOTO
COUNT,F
TESTA_BOTAO1
TRATA_BOTAO1
FAZER_DEBOUNCE2
DECFSZ
GOTO
DEBOUNCE,F
TESTA_BOTAO2
MOVLW
MOVWF
DEB
DEBOUNCE
10
DECFSZ
GOTO
GOTO
COUNT,F
TESTA_BOTAO2
TRATA_BOTAO2
LED1
ACENDE_LED1
;LED1 ACESO?
;NAO, DESVIA
;SIM, CONTINUA
LED1
SOLTAR_BOTAO
;APAGA LED1
; DESVIA
LED1
SOLTAR_BOTAO
;ACENDE LED1
;DESVIA
LED2
ACENDE_LED2
;LED2 ACESO?
;NAO, DESVIA
;SIM, CONTINUA
LED2
SOLTAR_BOTAO
;APAGA LED2
; DESVIA
LED2
;ACENDE LED2
TRATA_BOTAO1
BTFSS
GOTO
APAGA_LED1
BCF
GOTO
ACENDE_LED1
BSF
GOTO
TRATA_BOTAO2
BTFSS
GOTO
APAGA_LED2
BCF
GOTO
ACENDE_LED2
BSF
SOLTAR_BOTAO
BTFSS
GOTO
$-1
BTFSS
GOTO
GOTO
$-1
MAIN
BOTAO1
BOTAO2
;
*******************************************************************************************************
**************************************
END
;FIM DO PROGRAMA
;
*******************************************************************************************************
**************************************
11
;
*******************************************************************************************************
**************************************
;
PROGRAMA - DOIS BOTOES ACIONAM UM LED
;
DESENVOLVIDO POR WAGNER DA SILVA ZANCO
;
VERSAO 1.0
12
;
23/06/2003
;
*******************************************************************************************************
**************************************
;
ARQUIVOS DE DEFINICOES
;
*******************************************************************************************************
**************************************
#INCLUDE <P16F628A.INC>
; ARQUIVO PADRAO MICROCHIP PARA O PIC16F628A
;
*******************************************************************************************************
**************************************
;
BITS DE CONFIGURACAO
;
*******************************************************************************************************
**************************************
__CONFIG
_BOREN_ON&_CP_ON&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_DATA_CP_OFF&_MCLRE_ON&_XT_OSC
;
*******************************************************************************************************
**************************************
;
PAGINACAO DA MEMORIA
;******************************************************************************************************
***************************************
;
COMANDOS PARA ALTERACAO DE PAGINA DE MEMORIA
#DEFINE
#DEFINE
BANK0
BANK1
BCF STATUS,RP0
BSF STATUS,RP0
;
*******************************************************************************************************
**************************************
;
VARIAVEIS
;
*******************************************************************************************************
**************************************
;ENDERECOS DAS VARIAVEIS UTILIZADAS PELO SISTEMA
CBLOCK
0x20
DEBOUNCE
COUNT
ENDC
;
*******************************************************************************************************
**************************************
;
CONSTANTES
;
*******************************************************************************************************
**************************************
;CONSTANTES UTILIZADAS PELO SISTEMA
DEB
DEB_CONT
EQU .200
EQU .50
;
*******************************************************************************************************
**************************************
;
ENTRADAS
;
*******************************************************************************************************
**************************************
13
BOTAO1
PORTA,1
;0 --> PRESSIONADO
;1 --> LIBERADO
#DEFINE
BOTAO2
PORTA,2
;0 --> PRESSIONADO
;1 --> LIBERADO
;
*******************************************************************************************************
**************************************
;
SAIDAS
;
*******************************************************************************************************
**************************************
;PINOS QUE SERAO UTILIZADOS COMO SAIDA
#DEFINE
LED1
PORTB,0
;0 --> APAGADO
;1 --> ACESO
;
*******************************************************************************************************
**************************************
;
VETOR DE RESET
;******************************************************************************************************
***************************************
ORG
0x00
;ENDERECO INICIAL DE PROCESSAMENTO
GOTO
INICIO
;
*******************************************************************************************************
**************************************
;
INTERRUPCAO
;
*******************************************************************************************************
**************************************
;AS INTERRUPCOES NAO SERAO UTILIZADAS
ORG
RETFIE
0x04
;
*******************************************************************************************************
**************************************
;
INICIO
;
*******************************************************************************************************
**************************************
INICIO
BANK1
MOVLW
MOVWF
B'00000110'
TRISA
MOVLW
MOVWF
B'00000000'
TRISB
MOVLW
B'10000000'
14
MOVWF
OPTION_REG
MOVLW
MOVWF
B'00000000'
INTCON
BANK0
MOVLW
MOVWF
B'00000111'
CMCON
;
*******************************************************************************************************
**************************************
;
INICIALIZACAO DAS VARIAVEIS
;
*******************************************************************************************************
**************************************
CLRF
PORTA
;LIMPA PORTA
CLRF
PORTB
;LIMPA PORTB
;
*******************************************************************************************************
**************************************
MAIN
MOVLW
MOVWF
MOVLW
MOVWF
DEB
DEBOUNCE
DEB_CONT
COUNT
TESTA_BOTAO1
BTFSC
GOTO
GOTO
BOTAO1
TESTA_BOTAO2
FAZER_DEBOUNCE1
BOTAO2
MAIN
FAZER_DEBOUNCE2
TESTA_BOTAO2
BTFSC
GOTO
GOTO
FAZER_DEBOUNCE1
DECFSZ
GOTO
DEBOUNCE,F
TESTA_BOTAO1
MOVLW
MOVWF
DEB
DEBOUNCE
DECFSZ
GOTO
GOTO
COUNT,F
;DECREMENTA COUNT, COUNT=0?
TESTA_BOTAO1
;NAO, DESVIA
TRATA_BOTAO
;SIM, DESVIA
FAZER_DEBOUNCE2
DECFSZ
GOTO
DEBOUNCE,F
TESTA_BOTAO2
MOVLW
MOVWF
DEB
DEBOUNCE
15
DECFSZ
GOTO
COUNT,F
;DECREMENTA COUNT, COUNT=0?
TESTA_BOTAO2
;NAO, DESVIA
;SIM, DESVIA
TRATA_BOTAO
BTFSS
GOTO
LED1
ACENDE_LED1
APAGA_LED1
BCF
GOTO
LED1
SOLTAR_BOTAO
;LED1 ACESO?
;NAO, DESVIA
;SIM, CONTINUA
;APAGA LED1
;DESVIA
ACENDE_LED1
BSF
LED1
;ACENDE LED1
SOLTAR_BOTAO
BTFSS
GOTO
BOTAO1
$-1
BTFSS
GOTO
GOTO
BOTAO2
$-1
MAIN
;
*******************************************************************************************************
**************************************
END
;FIM DO PROGRAMA
;
*******************************************************************************************************
**************************************
Captulo 11:
Aplicao
Como
simular
Debugar
uma
16
17
MOVLW.150
MOVWFPR2
BANK0
CLRF T2CON
CLRF TMR2
BANK1
BCF
INTCON,GIE
BANK0
MOVLWB'01001101'
MOVWFT2CON
;
*******************************************************************************************************
**********************************************
estourar
Para permitir que o programa trate a interrupo de estouro de TMR1,
tivemos que:
18
19
20
21
22
*******************************************************************************************************
***************************************
;
PROGRAMA - MULTIVIBRADOR E DOIS LEDS ACIONADOS POR BOTAO
;
DESENVOLVIDO POR WAGNER DA SILVA ZANCO
;
VERSAO 1.0
;
04/04/2004
;
*******************************************************************************************************
***************************************
;
ARQUIVOS DE DEFINICOES
;
*******************************************************************************************************
***************************************
#INCLUDE <P16F628A.INC>
;ARQUIVO PADRAO MICROCHIP PARA PIC16F628A
;
*******************************************************************************************************
***************************************
;
BITS DE CONFIGURACAO
;
*******************************************************************************************************
***************************************
__CONFIG
_BOREN_ON&_CP_ON&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_DATA_CP_OFF&_MCLRE_ON&_XT_OSC
;
*******************************************************************************************************
***************************************
;
PAGINACAO DA MEMORIA
;
*******************************************************************************************************
***************************************
;COMANDOS PARA ALTERACAO DE PAGINA DE MEMORIA
BANK0
MACRO
BCF STATUS,RP0
BCF STATUS,RP1
ENDM
BANK1
MACRO
BSF STATUS,RP0
BCF STATUS,RP1
ENDM
;
*******************************************************************************************************
***************************************
;
VARIAVEIS
;
*******************************************************************************************************
***************************************
;ENDERECOS DAS VARIAVEIS UTILIZADAS PELO SISTEMA
;VARIAVEIS SO RECONHECIDAS NO BANCO 0 DE MEMORIA
CBLOCK
0x20
DEBOUNCE_BT1
ENDC
;
*******************************************************************************************************
***************************************
;VARIAVEIS COM ESPELHO EM TODOS OS BANCOS DE MEMORIA.
;RECONHECIDAS EM QUALQUER BANCO.
23
FLAGS
W_TEMP
STATUS_TEMP
;
*******************************************************************************************************
***************************************
;
CONSTANTES
;
*******************************************************************************************************
***************************************
;CONSTANTES UTILIZADAS PELO SISTEMA.
INIC_TMR0
DEB_BT1
INIC_TMR1H
INIC_TMR1L
EQU .131
EQU .10
EQU H'0B'
EQU H'DD'
;INICIALIZA TIMER 0
;INICIALIZA DEBOUNCE_BT1
;INICIALIZA TMR1H
;INICIALIZA TMR1L
;STATUS DO BOTAO 1
;STATUS DO BOTAO 2
;ACABOU DEBOUNCE, TECLA PRECISA SER TRATADA
;
*******************************************************************************************************
***************************************
;
FLAGS
;
*******************************************************************************************************
***************************************
;REGISTRADOR FLAGS
;
;BIT # |7 |6|5|4 |3|2|1 |0|
;
|X|X|X|X|X|X|X|Y|
STATUS_BT1 --> 1=SOLTO; 0=PRESSIONADO
;
|X|X|X|X|X|X|Y|X|
STATUS_BT2 --> 1=SOLTO; 0=PRESSIONADO
;
|X|X|X|X|X|Y|X|X|
DEBOUNCE_FIM --> 1=ACABOU DEBOUNCE
;
|X|X|X|X|Y|X|X|X|
RESERVADO
;
|X|X|X|Y|X|X|X|X|
RESERVADO
;
|X|X|Y|X|X|X|X|X|
RESERVADO
;
|X|Y|X|X|X|X|X|X|
RESERVADO
;
|Y|X|X|X|X|X|X|X|
RESERVADO
;X = DEFINIDO EM OUTRO LUGAR DA TABELA
;Y = DEFINIDO COMO MOSTRADO (0/1)
;
*******************************************************************************************************
***************************************
;
ENTRADAS
;
*******************************************************************************************************
***************************************
;PINOS QUE SERAO UTILIZADOS COMO ENTRADA
#DEFINE
#DEFINE
BOTAO1 PORTA,1
BOTAO2
PORTA,2
;0 --> PRESSIONADO
;1 --> LIBERADO
;0 --> PRESSIONADO
;1 --> LIBERADO
24
*******************************************************************************************************
***************************************
;
SAIDAS
;
*******************************************************************************************************
***************************************
;PINOS UTILIZADOS COMO SAIDA
#DEFINE
LED1
PORTB,0
;0 --> APAGADO
;1 --> ACESO
#DEFINE
LED2
PORTB,1
;0 --> APAGADO
;1 --> ACESO
#DEFINE
LED3
PORTB,2
;0 --> APAGADO
;1 --> ACESO
#DEFINE
LED4
PORTB,3
;0 --> APAGADO
;1 --> ACESO
;
*******************************************************************************************************
***************************************
;
*******************************************************************************************************
***************************************
;
VETOR DE RESET
;
*******************************************************************************************************
***************************************
ORG 0x00
;ENDERECO INICIAL DE PROCESSAMENTO
GOTO
INICIO
;
*******************************************************************************************************
***************************************
;
INTERRUPCAO
;
*******************************************************************************************************
***************************************
;A INTERRUPCAO DE TIMER 1 SERA UTILIZADA
ORG 0x04
BTFSS
RETFIE
BCF
MOVWF
SWAPF
MOVWF
;
*******************************************************************************************************
***************************************
;
TRATAMENTO DA INTERRUPCAO DE ESTOURO DE TMR1
;
*******************************************************************************************************
***************************************
;ESTA ROTINA FARA OS LEDS 3 E 4 PISCAREM ALTERNADAMENTE
25
MOVLW
MOVWF
MOVLW
MOVWF
H'0B'
TMR1H
H'DD'
TMR1L
BTFSS
GOTO
GOTO
LED3
ACENDE_LED
APAGA_LED
ACENDE_LED
BCF
BSF
GOTO
LED4
LED3
SAI_INT
;APAGA LED4
;ACENDE LED 3
;DESVIA
APAGA_LED
BCF LED3
BSF LED4
GOTO
SAI_INT
;APAGA LED3
;ACENDE LED4
;DESVIA
SAI_INT
SWAPF
MOVWF
SWAPF
SWAPF
RETFIE
STATUS_TEMP,W
STATUS
;RECUPERA STATUS
W_TEMP,F
W_TEMP,W
;RECUPERA W
;RETORNA DA INTERRUPCAO
;
*******************************************************************************************************
***************************************
;
INICIO
;
*******************************************************************************************************
***************************************
INICIO
BANK1
;ALTERA PARA BANCO1
MOVLW
B'00000110'
MOVWF
TRISA
;DEFINE RA1 e RA2 COMO ENTRADA e DEMAIS
;COMO SAIDA
MOVLW
B'00000000'
MOVWF
TRISB
;DEFINE O PORTB COMO SAIDA
<0>
MOVLW
MOVWF
B'10000100'
OPTION_REG
MOVLW
MOVWF
MOVLW
B'11000000'
INTCON
B'00000001'
MOVWF
BANK0
MOVLW
MOVWF
MOVLW
26
PIE1
B'00110001'
T1CON
B'00000111'
MOVWF
CMCON
;
*******************************************************************************************************
***************************************
;
INICIALIZACAO DAS VARIAVEIS
;
*******************************************************************************************************
***************************************
CLRF
PORTA
;LIMPA PORTA
CLRF
PORTB
;LIMPA PORTB
MOVLW
B'00000011'
;INICIALIZA FLAGS
MOVWF
FLAGS
MOVLW
DEB_BT1
;INICIALIZA DEBOUNCE_BT1 COM 10
MOVWF
DEBOUNCE_BT1
MOVLW
INIC_TMR0
;INICIALIZA TIMER 0
MOVWF
TMR0
;COM 131
MOVLW
H'0B'
;INICIA TMR1H COM OBh
MOVWF
TMR1H
MOVLW
H'DD'
;INICIA TMR1L COM DDh
MOVWF
TMR1L
;
*******************************************************************************************************
***************************************
;
ROTINA PRINCIPAL
;
*******************************************************************************************************
***************************************
MAIN
CALL
TESTAR_BT
;CHAMA SUB-ROTINA PARA TESTAR BOTAO
CALL
DEBOUNCE
;CHAMA SUB-ROTINA PARA FAZER DEBOUNCE
CALL
TRATAR_BT
;CHAMA SUB-ROTINA PARA TRATAR BOTAO
CALL
TIMER_4mSEG
;CHAMA SUB-ROTINA DE TEMPO
GOTO
MAIN
;DESVIA
;
*******************************************************************************************************
***************************************
;
SUB-ROTINAS
;******************************************************************************************************
****************************************
TESTAR_BT
BTFSC
GOTO
BCF
RETURN
BSF
BOTAO1
$+3
FLAGS,STATUS_BT1
BTFSC
GOTO
BCF
RETURN
BSF
RETURN
BOTAO2
$+3
FLAGS,STATUS_BT2
FLAGS,STATUS_BT1
FLAGS,STATUS_BT2
;
*******************************************************************************************************
***************************************
;ESTA SUB-ROTINA FAZ O DEBOUNCE, A TECLA PRESSIONADA SO SERA TRATADA QUANDO
;O TEMPO DE DEBOUNCE ACABAR, ESTANDO A TECLA AINDA PRESSIONADA. O TEMPO PROGRAMADO
27
FLAGS,STATUS_BT1
$+2
INICIA_DEB
;BOTAO1 PRESSIONADO?
;NAO, PULA DUAS LINHAS
;SIM, DESVIA
BTFSC
GOTO
FLAGS,STATUS_BT2
;BOTAO2 PRESSIONADO?
INICIA_DEB2
;NAO, DESVIA
;SIM, CONTINUA
INICIA_DEB
DECFSZ
RETURN
BSF
DEBOUNCE_BT1,F
INICIA_DEB2
MOVLW
MOVWF
RETURN
DEB_BT1
DEBOUNCE_BT1
;
*******************************************************************************************************
***************************************
;ESTA SUB-ROTINA TRATA O BOTAO ACIONADO, TOMANDO A DECISAO CORRETA PARA CADA BOTAO.
;
*******************************************************************************************************
***************************************
TRATAR_BT
BTFSS
RETURN
BTFSS
GOTO
BTFSS
GOTO
BCF
RETURN
;TRATAR BOTAO 1.
TRATA_BT1
BTFSS
GOTO
GOTO
LED1
ACENDE_LED1
APAGA_LED1
ACENDE_LED1
BSF
GOTO
LED1
SOLTAR_BOTAO
;ACENDE LED1
;DESVIA
APAGA_LED1
BCF
28
LED1
;APAGA LED1
GOTO
SOLTAR_BOTAO
;DESVIA
;TRATAR BOTAO 2.
TRATA_BT2
BTFSS
GOTO
GOTO
LED2
ACENDE_LED2
APAGA_LED2
ACENDE_LED2
BSF
GOTO
LED2
SOLTAR_BOTAO
;ACENDE LED2
;DESVIA
SOLTAR_BOTAO
;APAGA LED2
;DESVIA
APAGA_LED2
BCF
GOTO
LED2
BOTAO1
$-1
FLAGS,STATUS_BT1
;BOTAO1 SOLTO?
;NAO, AGUARDA SOLTAR BOTAO1
;SIM, RESETA FLAG
BTFSS
GOTO
BSF
BCF
RETURN
BOTAO2
;BOTAO1 SOLTO?
$-1
;NAO, AGUARDA SOLTAR BOTAO2
FLAGS,STATUS_BT2
;SIM, RESETA FLAG
FLAGS,DEBOUNCE_FIM ;DESATIVA FLAG TRATAR BOTAO
;RETORNA
;
*******************************************************************************************************
***************************************
;ESTA SUB-ROTINA FICA AGUARDANDO PASSAR 4mS. TEMPO DE UMA VOLTA COMPLETA NO
PROGRAMA
;
*******************************************************************************************************
***************************************
TIMER_4mSEG
BTFSS
GOTO
BCF
INTCON,T0IF
$-1
INTCON,T0IF
MOVLW
MOVWF
RETURN
INIC_TMR0
TMR0
;TMR0 ESTOUROU?
;NAO, ESPERA ESTOURAR
;SIM, APAGA FAG T0IF
;INICIALIZA TIMER 0
;COM 131
;NAO, RETORNA
;
*******************************************************************************************************
***************************************
END
;FIM DO PROGRAMA
;
*******************************************************************************************************
***************************************
29
30
31
32
33
34
35
;
*******************************************************************************************************
***************************************
;
PROGRAMA - PISCA PISCA COM FREQUENCIA VARIAVEL
;
DESENVOLVIDO POR WAGNER DA SILVA ZANCO
;
VERSAO 1.0
;
28/04/2004
;
*******************************************************************************************************
***************************************
;
ARQUIVOS DE DEFINICOES
;
*******************************************************************************************************
***************************************
#INCLUDE <P16F628A.INC>
;ARQUIVO PADRAO MICROCHIP PARA PIC16F628A
;
*******************************************************************************************************
***************************************
;
BITS DE CONFIGURACAO
;
*******************************************************************************************************
***************************************
__CONFIG
_BOREN_ON&_CP_ON&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_DATA_CP_OFF&_MCLRE_ON&_XT_OSC
;
*******************************************************************************************************
***************************************
;
PAGINACAO DA MEMORIA
;
*******************************************************************************************************
***************************************
;COMANDOS PARA ALTERACAO DE PAGINA DE MEMORIA
BANK0
MACRO
BCF STATUS,RP0
BCF STATUS,RP1
ENDM
BANK1
MACRO
BSF STATUS,RP0
BCF STATUS,RP1
ENDM
;
*******************************************************************************************************
***************************************
;
VARIAVEIS
;
*******************************************************************************************************
***************************************
;ENDERECOS DAS VARIAVEIS UTILIZADAS PELO SISTEMA
;VARIAVEIS SO RECONHECIDAS NO BANCO 0 DE MEMORIA
CBLOCK
0x20
COUNT
;0x20 - AUXILIA NA CONTAGEM DE TEMPO
DEBOUNCE_BT1 ;0x21 - ARMAZENA O TEMPO DE DEBOUNCE
;CADA UNIDADE VALE 4mSEG
CONTADOR
;0x22 - ARMAZENA VALOR QUE APARECERA NO DISPLAY
TEMP
;0x23 - REGISTRADOR TEMPORARIO
TEMP2
;0x24 - REGISTRADOR TEMPORARIO 2
ENDC
;FIM DO BLOCO DE MEMRIA
36
;
*******************************************************************************************************
***************************************
;VARIAVEIS COM ESPELHO EM TODOS OS BANCOS DE MEMORIA. RECONHECIDAS EM QUALQUER
BANCO.
FLAGS
PERIODO
TEMP_ESPERA
;
*******************************************************************************************************
***************************************
;
CONSTANTES
;
*******************************************************************************************************
***************************************
;CONSTANTES UTILIZADAS PELO SISTEMA.
INIC_TMR0 EQU
CONTA
EQU
DEB_BT1 EQU
ENDERECO EQU
.131
.125
.10
.0
;INICIALIZA TMR0
;INICIALIZA COUNT
;INICIALIZA DEBOUNCE_BT1
;ENDERECO DE EEPROM ONDE SERA GRAVADO
;O PERIODO DE PISCAGEM
;BITS DO REGISTRADOR FLAGS
NORMAL_PROG EQU
STATUS_BT1
STATUS_BT2
STATUS_BT3
DEBOUNCE_FIM EQU
MEIO_SEG
EQU
ACENDE_DSP
ESCRITA_EEPROM
.0
EQU
EQU
EQU
.4
.5
EQU
EQU
.1
.2
.3
.6
.7
;MODO NORMAL/PROGRAMACAO
;STATUS DO BOTAO 1
;STATUS DO BOTAO 2
;STATUS DO BOTAO 3
;ACABOU DEBOUNCE
;PASSOU MEIO SEGUNDO
;ACENDE DISPLAY
;ESCRITA NA EEPROM EM ANDAMENTO
;
*******************************************************************************************************
***************************************
;
FLAGS
;
*******************************************************************************************************
***************************************
;REGISTRADOR FLAGS
;BIT #
;
;
;
;
;
;
;
;
37
;
*******************************************************************************************************
***************************************
;PINOS QUE SERAO UTILIZADOS COMO ENTRADA
#DEFINE
BOTAO1
PORTA,1
;0 --> PRESSIONADO
;1--> LIBERADO
#DEFINE
BOTAO2
#DEFINE
BOTAO3
;
*******************************************************************************************************
***************************************
;
SAIDAS
;
*******************************************************************************************************
***************************************
;O PORTB ESTA LIGADO NUM DISPLAY DE SETE SEGMENTOS, SENDO CADA SEGMENTO
;ATIVADO(ACESO) QUANDO NO RESPECTIVO PINO FOR COLOCADO NIVEL LOGICO 1.
;
A
;RB0 - SEGMENTO A
**********
;RB1 - SEGMENTO B
F*
*B
;RB2 - SEGMENTO C
* G
*
;RB3 - SEGMENTO D
**********
;RB4 - SEGMENTO E
E*
*C
;RB5 - SEGMENTO F
* D
*
;RB6 - SEGMENTO G
********** *P
;RB7 - PONTO
;
*******************************************************************************************************
***************************************
;
INICIALIZA A EEPROM
;
*******************************************************************************************************
***************************************
;ESTA DIRETIVA GRAVA NA LOCALIDADE 00H DE EEPROM O VALOR 1.
;A GRAVACAO OCORRE DURANTE A PROGRAMACAO DO CHIP.
ORG 0x2100
DE .1
;
*******************************************************************************************************
***************************************
;
VETOR DE RESET
;
*******************************************************************************************************
***************************************
ORG 0x00
;ENDERECO INICIAL DE PROCESSAMENTO
GOTO
INICIO
;DESVIA
;
*******************************************************************************************************
***************************************
;
INTERRUPCAO
;
*******************************************************************************************************
38
***************************************
;AS INTERRUPCOES NAO SERAO UTILIZADAS
ORG 0x04
;ENDERECO INICAL DA INTERRUPCAO
RETFIE
;RETORNA DA INTERRUPCAO
;
*******************************************************************************************************
***************************************
;
INICIO
;
*******************************************************************************************************
***************************************
INICIO
BANK1
MOVLW
MOVWF
B'00001110'
TRISA
MOVLW
MOVWF
MOVLW
MOVWF
B'00000000'
TRISB
B'10000100'
OPTION_REG
MOVLW
MOVWF
BANK0
MOVLW
MOVWF
B'00000000'
INTCON
B'00000111'
CMCON
;
*******************************************************************************************************
***************************************
;
INICIALIZACAO DAS VARIAVEIS
;
*******************************************************************************************************
***************************************
CLRF
CLRF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
CLRF
PORTA
PORTB
B'00001110'
FLAGS
DEB_BT1
DEBOUNCE_BT1
INIC_TMR0
TMR0
CONTA
COUNT
CONTADOR
;LIMPA PORTA
;LIMPA PORTB
;INICIALIZA FLAGS
;INICIALIZA DEBOUNCE_BT1 COM 10
;INICIALIZA TMR0
;COM 131
;INICIALIZA COUNT COM 125
;LIMPA CONTADOR
;
*******************************************************************************************************
***************************************
;
ROTINA PRINCIPAL
;
*******************************************************************************************************
***************************************
MAIN
;
39
*******************************************************************************************************
***************************************
;ESTA SUB-ROTINA RESGATA DA EEPROM O VALOR DO PERIODO DE PISCAGEM.
RESG_EEPROM
BANK1
MOVLW
MOVWF
BSF
MOVF
BANK0
MOVWF
MOVWF
.0
EEADR
EECON1,RD
EEDATA,W
PERIODO
TEMP2
;
*******************************************************************************************************
***************************************
;
ROTINA_PRINCIPAL
;
*******************************************************************************************************
***************************************
ROTINA_PRINCIPAL
CALL
CALL
CALL
CALL
CALL
CALL
GOTO
TESTAR_BT
;CHAMA SUB-ROTINA PARA TESTAR BOTAO
DEBOUNCE
;CHAMA SUB-ROTINA PARA FAZER DEBOUNCE
TRATAR_BT
;CHAMA SUB-ROTINA PARA TRATAR BOTAO
ATUAL_DSP
;CHAMA SUB-ROTINA PARA ATUALIZAR O DISPLAY
TIMER_4mSEG
;CHAMA SUB-ROTINA DE TEMPO
ESCREVE_EEPROM
;CHAMA SUB-ROTINA DE GRAVACAO NA EEPROM
ROTINA_PRINCIPAL
;DESVIA
;
*******************************************************************************************************
***************************************
;
SUB-ROTINAS
;
*******************************************************************************************************
***************************************
TESTAR_BT
BTFSC
GOTO
BCF
RETURN
BSF
BTFSC
GOTO
BCF
RETURN
BSF
BTFSC
GOTO
BCF
RETURN
BSF
RETURN
BOTAO1
$+3
FLAGS,STATUS_BT1
FLAGS,STATUS_BT1
BOTAO2
$+3
FLAGS,STATUS_BT2
FLAGS,STATUS_BT2
BOTAO3
$+3
FLAGS,STATUS_BT3
FLAGS,STATUS_BT3
;
*******************************************************************************************************
***************************************
;ESTA SUB-ROTINA FAZ O DEBOUNCE, A TECLA PRESSIONADA SO SERA TRATADA QUANDO
;O TEMPO DE DEBOUNCE ACABAR, ESTANDO A TECLA AINDA PRESSIONADA. O TEMPO PROGRAMADO
40
FLAGS,STATUS_BT1
;BOTAO1 PRESSIONADO?
$+2
;NAO, PULA DUAS LINHAS DE CODIGO PARA BAIXO
INICIA_DEB
;SIM, DESVIA
FLAGS,STATUS_BT2
;BOTAO2 PRESSIONADO?
$+2
;NAO, PULA DUAS LINHAS DE CODIGO PARA BAIXO
INICIA_DEB
;SIM, DESVIA
FLAGS,STATUS_BT3
;BOTAO3 PRESSIONADO?
INICIA_DEB2
;NAO, RETORNA
;SIM, CONTINUA
INICIA_DEB
DECFSZ
RETURN
BSF
DEBOUNCE_BT1,F
;ACABOU DEBOUNCE?
;NAO, RETORNA
FLAGS,DEBOUNCE_FIM ;SIM, SETA FLAG FIM DE DEBOUNCE
INICIA_DEB2
MOVLW
MOVWF
RETURN
DEB_BT1
DEBOUNCE_BT1
;
*******************************************************************************************************
***************************************
;ESTA SUB-ROTINA TRATA O BOTAO ACIONADO, TOMANDO A DECISAO CORRETA PARA CADA BOTAO,
LEVANDO
;EM CONTA O MODO DE OPERACAO NO MOMENTO.
;
*******************************************************************************************************
***************************************
TRATAR_BT
BTFSS
RETURN
BTFSC
GOTO
BTFSS
GOTO
BTFSS
GOTO
BTFSS
GOTO
BCF
RETURN
.9
CONTADOR,W
;W RECEBE 9
;W = W xor CONTADOR
41
BTFSC
GOTO
INCF
GOTO
STATUS,Z
SOLTAR_BOTAO
CONTADOR,F
SOLTAR_BOTAO
;CONTADOR = 9?
;SIM, DESVIA
;NAO, INCREMENTA CONTADOR
;DESVIA
TRATA_BT2_NORMAL
MOVLW
XORWF
BTFSC
GOTO
DECF
GOTO
.0
;W RECEBE 0
CONTADOR,W
;W = W xor CONTADOR
STATUS,Z
;CONTADOR = 0?
SOLTAR_BOTAO
;SIM, DESVIA
CONTADOR,F
;NO, DECREMENTA CONTADOR
SOLTAR_BOTAO
;DESVIA
TRATA_BT3_NORMAL
BSF
FLAGS,NORMAL_PROG
BOTAO1
$-1
FLAGS,STATUS_BT1
;BOTAO1 SOLTO?
;NAO, AGUARDA SOLTAR BOTAO1
;SIM, APAGA FLAG
BTFSS
GOTO
BSF
BOTAO2
$-1
FLAGS,STATUS_BT2
;BOTAO2 SOLTO?
;NAO, AGUARDA SOLTAR BOTAO2
;SIM, APAGA FLAG
BTFSS
GOTO
BSF
BCF
RETURN
BOTAO3
$-1
FLAGS,STATUS_BT3
FLAGS,DEBOUNCE_FIM
;BOTAO3 SOLTO?
;NAO, AGUARDA SOLTAR BOTAO3
;SIM, APAGA FLAG
;BOTAO TRATADO, APAGA FLAG FIM DE DEBOUNCE
;RETORNA
FLAGS,STATUS_BT1
TRATA_BT1_PROG
BTFSS
GOTO
FLAGS,STATUS_BT2
TRATA_BT2_PROG
BTFSS
GOTO
BCF
RETURN
FLAGS,STATUS_BT3
TRATA_BT3_PROG
FLAGS,DEBOUNCE_FIM
;BOTAO1 PRESSIONADO?
;SIM, DESVIA
;NAO, CONTINUA
;BOTAO2 PRESSIONADO?
;SIM, DESVIA
;NAO, CONTINUA
;BOTAO3 PRESSIONADO?
;SIM, DESVIA
;BOTAO TRATADO, APAGA FLAG FIM DE DEBOUNCE
;NAO, RETORNA
TRATA_BT1_PROG
MOVLW
XORWF
BTFSC
GOTO
INCF
GOTO
.9
PERIODO,W
STATUS,Z
SOLTAR_BOTAO
PERIODO,F
SOLTAR_BOTAO
;W RECEBE 9
;W = W xor PERIODO
;PERIODO = 9?
;SIM, DESVIA
;NAO, INCREMENTA PERIODO
;DESVIA
TRATA_BT2_PROG
MOVLW
XORWF
42
.1
PERIODO,W
;W RECEBE 1
;W = W xor PERIODO
BTFSC
GOTO
DECF
GOTO
STATUS,Z
SOLTAR_BOTAO
PERIODO,F
SOLTAR_BOTAO
;PERIODO = 1?
;SIM, AGUARDA SOLTAR BOTAO
;NAO, DECREMENTA PERIODO
;DESVIA
TRATA_BT3_PROG
BCF
GOTO
;
*******************************************************************************************************
***************************************
;ESTA SUB-ROTINA ATUALIZA O DISPLAY DE SETE SEGMENTOS
;
*******************************************************************************************************
***************************************
ATUAL_DSP
BTFSS
GOTO
CALL
MOVWF
RETURN
BTFSS
GOTO
MOVF
MOVWF
CALL
MOVWF
RETURN
APAGAR_DSP
CLRF
RETURN
PORTB
;APAGA DISPLAY
;RETORNA
PERIODO,W
TEMP
;W RECEBE PERIODO
;TEMP RECEBE W
PROG_MODO
MOVF
MOVWF
;
*******************************************************************************************************
***************************************
CONV_DISPLAY
MOVF
ADDWF
TEMP,W
PCL,F
43
;
*******************************************************************************************************
***************************************
;ESTA SUB-ROTINA EFETUA CONTAGEM DO TEMPO E SINALIZA QUANDO PASSA 0,5 S
;
*******************************************************************************************************
***************************************
TIMER_4mSEG
BTFSS
GOTO
BCF
MOVLW
MOVWF
DECFSZ
RETURN
MOVLW
MOVWF
INTCON,T0IF
$-1
INTCON,T0IF
INIC_TMR0
TMR0
COUNT,F
CONTA
COUNT
;TMR0 ESTOUROU?
;NAO, ESPERA TMR0 ESTOURAR
;SIM, APAGA FLAG T0IF
;INICIALIZA TIMER 0
;COM 131
;PASSOU 0,5 SEG?
;NAO, RETORNA
;SIM, INICIALIZA COUNT COM 125
;
*******************************************************************************************************
***************************************
;ESTA PARTE DA SUB-ROTINA CHAVEIA O BIT MEIO_SEG CADA VEZ QUE PASSAR 0,5 S
;E ACIONA O FLAG ACENDE_DSP(ACENDE DISPLAY).
BTFSS
GOTO
BCF
GOTO
BSF
DECFSZ
RETURN
MOVF
MOVWF
FLAGS,MEIO_SEG
;FLAG MEIO_SEG ATIVADO?
$+3
;NAO, SALTA TRES LINHAS DE CODIGO PARA BAIXO
FLAGS,MEIO_SEG
;SIM, APAGA FLAG MEIO_SEG
$+2
;SALTA DUAS LINHAS DE CODIGO PARA BAIXO
FLAGS,MEIO_SEG
;SET FLAG MEIO SEGUNDO
TEMP2,F
;DECREMENTA TEMP2, TEMP2=0?
;NAO, RETORNA
PERIODO,W
;SIM, W RECEBE PERIODO
TEMP2
;TEMP2 RECEBE W
BTFSS
GOTO
BCF
RETURN
BSF
RETURN
FLAGS,ACENDE_DSP
;FLAG ACENDER DISPLAY ESTA ACESO?
$+3
;NAO, SALTA TRES LINHAS DE CODIGO PARA BAIXO
FLAGS,ACENDE_DSP
;SIM, DESATIVA FLAG ACERDER DISPLAY
;RETORNA
FLAGS,ACENDE_DSP
;ATIVA FLAG ACERDER DISPLAY
;RETORNA
;
*******************************************************************************************************
***************************************
;
SUB-ROTINA DE ESCRITA NA EEPROM
;
*******************************************************************************************************
***************************************
;A SUB-ROTINA A SEGUIR E UMA PROPOSTA PARA UMA ROTINA DE ESCRITA NA EEPROM.
;O PROGRAMA IRA GRAVAR O DADO ARMAZENADO NO REG PERIODO, NA LOCALIDADE
;00H DA EEPROM E IRA SE COMPORTAR DA SEGUINTE FORMA:
;
1 - SE O CICLO DE ESCRITA TERMINAR ANTES DE 8mS E O DADO GRAVADO
;ESTIVER CORRETO, O PROGRAMA RETORNARA O VALOR 00H EM W (ESCRITA COM SUCESSO),
;INDICANDO QUE A ESCRITA FOI EFETUADA COM SUCESSO.
;
2 - SE O CICLO DE ESCRITA TERMINAR ANTES DE 8mS E O DADO GRAVADO
;ESTIVER INCORRETO, O PROGRAMA TRAVARA, INDICANDO QUE A ESCRITA FOI EFETUADA,
;MAS SEM SUCESSO, EXIBINDO NO DISPLAY UMA MENSAGEM DE ERRO.
;
3 - SE O CICLO DE ESCRITA NAO TERMINAR EM 8mS O PROGRAMA TRAVARA,
;INDICANDO QUE A ESCRITA NAO FOI CONCLUIDA PORQUE O TEMPO SE ESGOTOU, SENDO EXIBIDA
44
UMA
;MENSAGEM DE ERRO.
;******************************************************************************************************
****************************************
ESCREVE_EEPROM
BTFSS
GOTO
GOTO
FLAGS,ESCRITA_EEPROM
VERIF_PERIODO
TERMINA_ESC
;ESCRITA EM ANDAMENTO?
;NAO, DESVIA
;SIM, DESVIA
;
*******************************************************************************************************
***************************************
;VERIFICA SE PERIODO FOI ALTERADO
VERIF_PERIODO
BANK1
MOVLW
MOVWF
BSF
MOVF
XORWF
BANK0
BTFSC
RETURN
.0
EEADR
EECON1,RD
EEDATA,W
PERIODO,W
STATUS,Z
;
*******************************************************************************************************
***************************************
;INICIA O CICLO DE ESCRITA
INICA_ESCRITA
BANK1
MOVLW
MOVWF
MOVF
MOVWF
BSF
BCF
MOVLW
MOVWF
MOVLW
MOVWF
BSF
MOVLW
MOVWF
BSF
BANK0
RETURN
ENDERECO
;ENDERECO ONDE SERA GRAVADO O DADO
EEADR
PERIODO,W
;DADO A SER GRAVADO EM ENDERECO(0x00)
EEDATA
EECON1,WREN
;HABILITA ESCRITA
INTCON,GIE
;DESLIGA CHAVE GERAL DE INTERRUPCAO
0X55
EECON2
;ESCREVE 55h EM EECON2
0XAA
EECON2
;ESCREVE AAh EM EECON2
EECON1,WR
;DA INICIO AO CICLO DE ESCRITA
.2
;INICIALIZA TEMP_ESPERA COM 2
TEMP_ESPERA
FLAGS,ESCRITA_EEPROM
;ATIVA FLAG ESCRITA EM ANDAMENTO
;ATIVA BANCO 0
;RETORNA
;
*******************************************************************************************************
***************************************
;TESTA O BIT WR DUAS VEZES NUM PERIODO DE 8mS.
;SE O CICLO DE ESCRITA NAO TERMINAR APOS ESTE TEMPO SERA GERADO UM CODIGO DE ERRO
TERMINA_ESC
BANK1
BTFSS
GOTO
DECFSZ
EECON1,WR
VERIFICA_DADO
TEMP_ESPERA,F
;ATIVA BANCO 1
;CICLO DE ESCRITA TERMINOU?
;SIM, VERIFICA SE DADO GRAVADO ESTA
;CORRETO
;NAO, TEMPO ESGOTADO?
45
GOTO
$+3
BANK0
GOTO
TEMP_ESG
BANK0
RETURN
TEMP_ESG
BANK1
BCF
BANK0
BCF
MOVLW
MOVWF
NOP
GOTO
;ATIVA BANCO 1
;DESABILITA ESCRITA
;ATIVA BANCO 0
FLAGS,ESCRITA_EEPROM
;DESATIVA FLAG ESCRITA EM ANDAMENTO
B'01001111'
;EXIBE MENSAGEM DE ERRO NO DISPLAY
PORTB
;A MENSAGEM DE ERRO (EXIBE A LETRA E).
;TRAVA O PROGRAMA NESTE PONTO
$-1
EECON1,WREN
;
*******************************************************************************************************
***************************************
;DADO ESCRITO ESTA CORRETO. SE A RESPOSTA FOR SIM, O PORGRAMA IRA TRAVAR.
VERIFICA_DADO
MOVLW
MOVWF
BANK1
MOVF
BSF
SUBWF
BTFSS
GOTO
BCF
BANK0
BCF
RETLW
.2
TEMP_ESPERA
;ATIVA BANXO 1
;W RECEBE DADO ESCRITO
;INICIA CICLO DE LEITURA
;W = EEDATA - W
;DADO ESCRITO E O MESMO QUE FOI LIDO?
;NAO, DESVIA
;DESABILITA ESCRITA
;SIM, ATIVA BANCO 0
FLAGS,ESCRITA_EEPROM
;DESATIVA FLAG ESCRITA EM ANDAMENTO
.0
;RETORNA 0 (CODIGO DE ESCRITA FEITA COM SUCESSO)
EEDATA,W
EECON1,RD
EEDATA,W
STATUS,Z
TRATA_ERRO
EECON1,WREN
;
*******************************************************************************************************
***************************************
;SE O DADO GRAVADO NAO E O MESMO QUE FOI LIDO, SERA GERADO UM CODIGO DE ERRO
;DE DADO INCORRETO QUE IRA TRAVAR O PROGRAMA.
TRATA_ERRO
BANK1
BCF
BANK0
EECON1,WREN
;ATIVA BANCO 1
;DESABILITA ESCRITA
;ATIVA BANCO 0
BCF
MOVLW
MOVWF
NOP
GOTO
FLAGS,ESCRITA_EEPROM
;DESATIVA FLAG ESCRITA EM ANDAMENTO
B'01001111'
;SIM, EXIBE MENSAGEM DE ERRO NO DISPLAY
PORTB
;A MENSAGEM DE ERRO (EXIBE A LETRA E).
;TRAVA O PROGRAMA NESTE PONTO
$-1
;
*******************************************************************************************************
***************************************
END
;FIM DO PROGRAMA
;
*******************************************************************************************************
***************************************
46
47
48
49
segundo (bps).
15. A melhor opo utilizar a alta taxa de transferncia, fazendo o bit
BRGH = 1. O valor a ser escrito no registrador SBRGH deve ser 12. O
erro de baud rate ser de 0,16%. A taxa de transferncia real ser de
19230,77 bps.
16. Quando o dado a ser transmitido for colocado no registrador TXREG.
17. ASCII.
18. Para o registrador RCREG.
19. A idia utilizar o nono bit para diferenciar em uma transmisso um
endereo de um dado. Setando o bit ADDEN junto com o bit RX9, ns
podemos ativar essa funcionalidade. Depois de setados os bits ADDEN
e RX9, qualquer dado que chegar pela USART com o nono bit (RX9D) =
0 ser descartado, ou seja, o dado no ser transferido para o
registrador RCREG, da mesma forma que no ser gerada a
interrupo do mdulo receptor da USART, ainda que esteja habilitada.
Um dado recm-chegado pela USART ser transferido para o
registrador RCREG quando o nono bit (RX9D)=1. Esse nono bit ser
reconhecido pelo receptor como um endereo. No mesmo instante
ser setado o bit RCIF (P1RI<5>), sendo tambm
gerada a
interrupo do mdulo receptor da USART, caso ela esteja habilitada.
20. Sincronizar o transmissor com o receptor para que o dado seja lido no
momento certo. Na transmisso sncrona, o dado estar disponvel
para leitura na borda negativa do sinal de clock.
21. O mestre aquele que gera o sinal de clock na transmisso.
22. Receptor sncrono funcinando como escravo.
50
51