Página 1 de 4
Decodificar HT6P20B

Enviado:
02 Mai 2007 11:24
por BFCardoso
Olá galera...
Estou querendo decodificar o CI HT6P20B (é um CI da Holtek usado em controle remoto). O problema que para decodificar eu preciso entender a codificação.
Alguém pode me ajudar a fazer essa decodificação?
O datasheet segue a baixo.
Obrigado!
BFCardoso
http://pdf1.alldatasheet.com/datasheet- ... T6P20.html

Enviado:
02 Mai 2007 11:32
por fabim
- Código: Selecionar todos
RECEIVE: ;SINCRONISMO
MOVLW .8 ; 4 MHZ / .16 ;8 MHZ ;.4
MOVWF CNTH
MOVLW .200
MOVWF CNTL
BTFSS RFin
GOTO FIM_RC ; fim RC é pra sair da rotina pois não é 6P20
DECFSZ CNTL,F
GOTO $-3
DECFSZ CNTH,F
GOTO $-7
SINCRONISMO_OK
MOVLW 018H ;(24D)
MOVWF NBITS
CLRF BYTE1
CLRF BYTE2
CLRF BYTE3
MOVLW .8 ; 4 MHZ / .16 ;8 MHZ ;.5
MOVWF CNTH
MOVLW .200
MOVWF CNTL
BTFSC RFin ;Espera entrada ficar 1
GOTO LERBITBASE ;
DECFSZ CNTL,F
GOTO $-3
DECFSZ CNTH,F
GOTO $-7
GOTO FIM_RC
LERBITBASE
MOVLW 0x7F ; 4 MHZ / 0X3D ;8 MHZ
MOVWF BTEMPO
BTFSS RFin ;[2]
GOTO CALC_TBASE ;[0]
INCFSZ BTEMPO,F ;[1]
GOTO $-3 ;[2]
GOTO FIM_RC
CALC_TBASE
MOVLW 0x7F ; 4 MHZ / 0X3D ;8 MHZ
SUBWF BTEMPO,F ;Recupera Base de Tempo Bit Inteiro
AGUARDAR_LW
CLRC
RRF BTEMPO,W ;
MOVWF CNTL ;
MOVF BTEMPO,W ;
MOVWF CNTH ;
RLF CNTH,W
MOVWF AUX2 ;AUX2=1/2 Te
BCF STATUS,C ;
RRF BYTE3,F ;
RRF BYTE2,F ;
RRF BYTE1,F ;
BTFSS RFin ; [2]
GOTO RECEBENDO_BITS ; [0]
DECFSZ AUX2,F ; [1]
GOTO $-3 ; [2]
GOTO FIM_RC
RECEBENDO_BITS
GOTO DL1
D_DL1
BTFSC RFin
GOTO FIM_RC
GOTO DL2
D_DL2
BCF BYTE3,7
BTFSS RFin
BSF BYTE3,7
GOTO DL3
D_DL3
BTFSS RFin
GOTO FIM_RC
DECFSZ NBITS,F
GOTO AGUARDAR_LW
GOTO RECEBEU_OK
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DL1:
DECFSZ CNTL,F ;[1]
GOTO $+2 ;[2]
GOTO $+2
GOTO $-3 ;[2]
CLRC
RRF CNTH,W ;
MOVWF CNTL ;Meio bit
GOTO D_DL1
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DL2
MOVFW CNTH
MOVWF AUX
DECFSZ AUX,F ;[1]
GOTO $+2 ;[2]
GOTO D_DL2
GOTO $-3 ;[2]
;***************************************************************
DL3
MOVFW CNTH
MOVWF AUX
DECFSZ AUX,F ;[1]
GOTO $+2 ;[2]
GOTO D_DL3
GOTO $-3 ;[2]
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
; ATÉ AQUI:
; Recebeu todos os 24 bits em Byte1,Byte2,Byte3
; Byte1=LSB
; Byte3=MSB
; Os botões do controle estarão nos bit's 6,7 do
; byte3
melhor que isso, so se eu dar mamadeira na sua boca.
A rotina funciona entre 3.4 e 4.5mhz.
Para saber quais as variaveis usadas, só bizoiar.
Melhor forma de usar este programa é com interrupção em borda de subida no RB0.
Abraços
Fabim

Enviado:
02 Mai 2007 11:35
por BFCardoso
Valeu Fabim....
Vou adaptar o codigo para poder aplicar no uC motorola.
Ate mais...

Enviado:
02 Mai 2007 14:54
por xultz
O 6P20 é muito simples. O problema é esse maldito datasheet que esses chineses escreveram.
Os bits são modulados em PWM. Cada tempo de bit você divide em três partes iguais: se duas partes ficarem alta e uma baixa, é um bit (não lembro se 1 ou 0), se uma parte ficar alte e duas baixas, é outro bit. Ele faz isso 24 vezes, porque a palavra dele tem 24 bits. O que teu firmware tem que fazer é interromper na subida, cronometrar o tempo que leva para descer, e o tempo para subir de novo. Se for maior que a metade do bit inteiro, é um valor, se for menos que a metade, é outro valor. Faz isso com os 24 bits.
No 6P20B os últimos dois bits representam o estado das duas entradas de botão. Nos outros eu não lembro...

Enviado:
02 Mai 2007 23:02
por phophollety
Vai usar os controles novos da PPA com esse Ci ou são outros?
Valeu o código.. me ajudou também!

Enviado:
03 Mai 2007 08:31
por BFCardoso
Olá Xultz...
Obrigado pela dica, agora tive como ter certeza do que entendi no Data Sheet.
A dúvida que me restou é a seguinte:
--> Se o Ci não tem endreços fixos, como ele decodifica? Será que dependendo do que eu coloco na entrada (D0 e D1) ele envia sempre um mesmo endereço dependendo do Ci, ou, ele realmente fica variando os bits A0-A19 todas as vezes?
Phophollety na verdade vou usar os controles da PPA. Já tenho o controle que vou usar mas agora o nome dele me fugiu da cabeça. Assim que lembrar lhe escrevo o nome.
Obrigado a todos.
BFCardoso.

Enviado:
03 Mai 2007 09:41
por xultz
O código dele é grava na fábrica, no momento da fabricação do chip, um por um, todos diferentes. Fora os últimos bits que são referentes às entradas de botões.

Enviado:
03 Mai 2007 12:41
por fabim
bom.. vou quebrar o galho do povão..
Este fonte esta parado a tanto tempo, que meu cliente nem vai vasculhar este forum tambem..
E se ele ver o fonte que eu vendi pra ele, eu digo que o XULTZ invadiu minha maquina pra filar tudo sobreo UC.. hehe
Bom gente este fonte é para 12F629.
Funciona com cristal de 4mhz externo ou interno mesmo, eu sofri pacas pra pegar o geitão de ler o bit base e calcular pra saber se é o 6P20..
mais este fonte em asm fala por si proprio..
Abraços.
Fabim.
- Código: Selecionar todos
LIST P=12F629, R=HEX
#INCLUDE <P12F629.INC>
ERRORLEVEL -302
__CONFIG _CP_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_OFF & _INTRC_OSC_NOCLKOUT
; criado POR FABIO RICARDO DA SILVA
; PRO ENERGY SISTEMAS LTDA
; 06/06/2003 - 14:58 HRS
; LEITURA DE CÓDIGO/ APRENDISAGEM (GRAVAÇÃO E2PROM )
; ENCODER HT6P20B COM R/OSC DE 1,4 A 2,2 M-OHMS
; bt learn com pull up de 10K
;
;I/O defininições para PIC12F629
; +--------------------------------------------+
;VDD -(01)-|VDD VSS-|-(08)- GND
;N/U -(02)-|GP5/T1CKI/OSC1/CLKIN GP0/CIN+/ICSPDAT|-(07)- LED-LEARN
;OUT1 -(03)-|GP4/T1G-/OSC2/CLKOUT GP1/CIN-/ICSPCLK|-(06)- LEARN
;Reset -(04)-|GP3/MCLR-/VPP GP2/TOCKI/INT/COUT|-(05)- RFin
; +--------------------------------------------+
;%%%%%%%%%%%%%%%%%%%% PAGINAÇÃO DE BANCOS DE MEMÓRIA %%%%%%%%%%%%%%%%%%%%%%%%%%%%
#DEFINE BANK0 BCF STATUS, RP0
#DEFINE BANK1 BSF STATUS, RP0
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;***********************************************
;************ PROGRAMA INICIAL ***************
;***********************************************
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% PAGINAÇÃO DE VARIAVEIS %%%%%%%%%%%%%%%%%%%%%%%%%%
CBLOCK 0X20
CNTL ;SINC DECODER LOW
CNTH ;SINC DECODER HIG
BTEMPO ;CONTADOR DE TEMPO
AUX2 ;CONTADOR TEMPO
AUX ;CONTADOR TEMPO
BYTE1 ;LSB DADOS
BYTE2
BYTE3 ;MSB DADOS
TEMP ; VARIAVEL DO TEMPO DE ESPERA PARA APRENDIZAGEM
DADO ; PARA LEITURA E GRAVAÇÃO DA EEPROM
AUXILIAR ; ENDEREÇO PARA LEITURA E GRAVAÇÃO
NBITS ;VARIAVEL DO N° DE BITS A SEREM LIDOS
MAX ;VARIAVEL DO N° MÁXIMO DE CONTROLES A GRAVAR NA MEMORIA
FLAGS ;SINALIZAÇÕES DE LÓGICA DO SISTEMA
PDel0 ; VÁRIAVEL DELAY
PDel1 ;VARIAVEL DELAY
VAR ;VARIAVEL DE TEMPORISAÇÃO DE GRAVAÇÃO OU APAGAR
W_TEMP ; WORKS TEMPORÁRIO PARA INTERRUPÇÃO
STATUS_TEMP ; STATUS TEMPORÁRIO PARA INTERRUPÇÃO
ENDC
;%%%%%%%%%%%%%%%%%%%%%%% CONSTANTES DO SISTEMA ENTRADAS E SAIDAS %%%%%%%%%%%%%%%
#DEFINE LED GPIO,0 ; LED INDICATIVO DE ROTINA DE GRAVAÇÃO
#DEFINE LEARN GPIO,1 ; BOTÃO PARA APRENDISADO OU APAGAR MEMORIA
; R DE 10K PULL-UP E CHAVE PULL-DOWN
#DEFINE RFin GPIO,2 ; ENTRADA DO SINAL DIGITAL ( PINO 7 RECEPTOR )
#DEFINE OUT1 GPIO,4 ; SAÍDA DO RELÊ
;###############################################################################
#DEFINE CHAVE INTCON, GIE ; CHAVE GERAL DE INTERRUPÇÃO
#DEFINE APRENDER FLAGS, 1 ;FLAG PARA INFORMAR SE É PARA APRENDER
#DEFINE B0_FLAG FLAGS, 2 ;FLAG DE CONTROLE DA SAIDA DO RELÊ
#DEFINE TEMPO INTCON, T0IE ; flag para ligar a interrupção TMR0
#DEFINE FOI_TEMPO INTCON, T0IF ; FLAG DE ESTOURO POR TMR0
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
INICIAL EQU 0X01 ; ENDEREÇO INICIAL DE LEITURA E COMPARAÇÃO DA EEPROM
POS_MEM EQU 0X00 ; ENDEREÇO QUE INDICA A ULTIMA CASA GRAVADA NA EEPROM
;&&&&&&&&&&&&&&&&&&INICIALIZAÇÃO DA EEPROM &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
ORG H'2100'+POS_MEM
DE 0X00
;%%%%%%%%%%%%%%%%%%% INICIO DE MEMÓRIA DE PROGRAMA %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ORG 0X00
GOTO INICIO
;%%%%%%%%%%%%%%%%%%% VETOR DE INTERRUPÇÃO %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ORG 0X04
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
; ROTINA DE LEITURA DE CÓDIGO DO RECEPTOR DE RF. QUANDO CHAMADA, FAZ A LEITURA DO ENCODER
; E COMPARAÇÃO COM EEPROM, LIGANDO OU DESLIGANDO O RELÊ.E SE O FLAG APRENDER ESTIVER LIGADO
;ELE CAI NA ROTINA DE MEMORIZAÇÃO DO CÓDIGO.
;*********************************************
BANK0 ; HOUVE INTERRUPÇÃO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
BCF CHAVE ; DESLIGA chave global de interrupção
BTFSS FOI_TEMPO ; FOI ESTOURO DE TMR0 ?
GOTO RECEIVE ; NÃO ENTÃO É INT RB0
TIMER
BCF FOI_TEMPO ; SIM, !!! LIMPA FLAG TEMPO
CLRF TMR0 ; LIMPA VARIAVEL TMR0
BCF TEMPO ; DESLIGA CHAVE DE INTERRUPÇÃO TMR0
DECFSZ TEMP,F ; DECREMENTA VARIAVEL DE TEMPO = 6.535s
GOTO ESPERANDO ; VAI PARA ESPERAR NOVA INTERRUPÇÃO
GOTO SAI_LEARN ; VAI PARA SAIR DA APRENDISAGEM
ESPERANDO
;BCF FOI_TEMPO
BSF TEMPO ; LIGA CHAVE DE INTERRUPÇÃO DE TMR0
BSF CHAVE ; LIGA CHAVE GERAL DE INTERRUPÇÃO
NOP ; NÃO FAZ NADA
GOTO $-1 ; LOOPING ESPERANDO INT TMR0 OU RB0
SAI_LEARN
BTFSS LEARN ; O BOTÃO LEARN ESTA APERTADO
GOTO APAGA_TUDO ; sim APAGA TODA A MEMORIA
CLRF VAR ; não sai int
BCF LED ; APAGA LED DE SINALIZAÇÃO DE ESTADO DE PROGRAMAÇÃO
BCF APRENDER ; LIMPA FLAG QUE INFORMA QUE É PARA APRENDER
BCF TEMPO ; DESLIGA CHAVE DE TMR0
BCF FOI_TEMPO
BSF CHAVE ; LIGA CHAVE GERAL DE INTERRUPÇÃO
GOTO PP ; VAI PARA LOOPING PRINCIPAL
;*********************************************
RECEIVE: ;SINCRONISMO
MOVLW .8 ; 4 MHZ / .16 ;8 MHZ ;.4
MOVWF CNTH
MOVLW .200
MOVWF CNTL
BTFSS RFin ; <<XXXXXXX estava com logica invertida. aff
GOTO FIM_RC
DECFSZ CNTL,F
GOTO $-3
DECFSZ CNTH,F
GOTO $-7
SINCRONISMO_OK
MOVLW 018H ;(24D)
MOVWF NBITS
CLRF BYTE1
CLRF BYTE2
CLRF BYTE3
MOVLW .8 ; 4 MHZ / .16 ;8 MHZ ;.5
MOVWF CNTH
MOVLW .200
MOVWF CNTL
BTFSC RFin ;Espera entrada ficar 1
GOTO LERBITBASE ;
DECFSZ CNTL,F
GOTO $-3
DECFSZ CNTH,F
GOTO $-7
GOTO FIM_RC
LERBITBASE
MOVLW 0x7F ; 4 MHZ / 0X3D ;8 MHZ
MOVWF BTEMPO
BTFSS RFin ;[2]
GOTO CALC_TBASE ;[0]
INCFSZ BTEMPO,F ;[1]
GOTO $-3 ;[2]
GOTO FIM_RC
CALC_TBASE
MOVLW 0x7F ; 4 MHZ / 0X3D ;8 MHZ
SUBWF BTEMPO,F ;Recupera Base de Tempo Bit Inteiro
AGUARDAR_LW
CLRC
RRF BTEMPO,W ;
MOVWF CNTL ;
MOVF BTEMPO,W ;
MOVWF CNTH ;
RLF CNTH,W
MOVWF AUX2 ;AUX2=1/2 Te
BCF STATUS,C ;
RRF BYTE3,F ;
RRF BYTE2,F ;
RRF BYTE1,F ;
BTFSS RFin ; [2]
GOTO RECEBENDO_BITS ; [0]
DECFSZ AUX2,F ; [1]
GOTO $-3 ; [2]
GOTO FIM_RC
RECEBENDO_BITS
GOTO DL1
D_DL1
BTFSC RFin
GOTO FIM_RC
GOTO DL2
D_DL2
BCF BYTE3,7
BTFSS RFin
BSF BYTE3,7
GOTO DL3
D_DL3
BTFSS RFin
GOTO FIM_RC
DECFSZ NBITS,F
GOTO AGUARDAR_LW
GOTO RECEBEU_OK
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DL1:
DECFSZ CNTL,F ;[1]
GOTO $+2 ;[2]
GOTO $+2
GOTO $-3 ;[2]
CLRC
RRF CNTH,W ;
MOVWF CNTL ;Meio bit
GOTO D_DL1
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DL2
MOVFW CNTH
MOVWF AUX
DECFSZ AUX,F ;[1]
GOTO $+2 ;[2]
GOTO D_DL2
GOTO $-3 ;[2]
;***************************************************************
DL3
MOVFW CNTH
MOVWF AUX
DECFSZ AUX,F ;[1]
GOTO $+2 ;[2]
GOTO D_DL3
GOTO $-3 ;[2]
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
; ATÉ AQUI:
; Recebeu todos os 24 bits em Byte1,Byte2,Byte3
; Byte1=LSB
; Byte3=MSB
; Os botões do controle estarão nos bit's 6,7 do
; byte3
RECEBEU_OK:
BTFSS APRENDER ; É PARA APRENDER ?
GOTO COMPARA ; N- COMPARA APENAS E TOMA A DECISÃO
GOTO APRENDE ; S- GRAVA NA EEPROM
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;NÃO RECEBEU NADA
;FOI ERRO DE LEITURA
;APENAS UM RUIDO
;OU O CODIGO NÃO É DO HT6P20B
FIM_RC:
BTFSS APRENDER
GOTO $+2
GOTO ESPERANDO
BSF CHAVE
GOTO PP
;$$$$$$$$$$$$$$ configurações dos sfr's do sistema $$$$$$$$$$$$$$$$$$$$$$$$$$$
INICIO
configuracoes:
BANK1 ; banco 1
MOVLW B'00001110' ;S = SAIDA / E= ENTRADA
MOVWF TRISIO ;GPIO/0-S/1-E/2-E/3-E/4-S/5-S
MOVLW B'11000111'
MOVWF OPTION_REG ; desliga pull ups, INTERRUPÇÃO RB0 SUBIDA , PRESCALER 1/256
MOVLW B'10000000'
MOVWF OSCCAL ;oscilador interno de 4 mhz -- ofset de 1/2 clock aprox 4mhz
BANK0 ; banco 0
MOVLW B'10010000'
MOVWF INTCON ; chave global de interrupção ligada
MOVLW B'00000111'
MOVWF CMCON ; desliga comparadores do porta
CLRF GPIO ; coloca GPIO toda a 0
CLRF BYTE1 ; limpeza de variáveis
CLRF BYTE2
CLRF BYTE3
CLRF VAR
CLRF FLAGS
;$$$$$$$$$$$$$$$$$$$$$$$ looping principal $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
PP:
BTFSS LEARN
GOTO PP1
GOTO $-2
PP1
BCF CHAVE
MOVLW .100
MOVWF TEMP
BSF APRENDER
BSF LED
BSF TEMPO
BSF CHAVE
NOP
GOTO $-1
APAGA_TUDO
BCF CHAVE
BCF APRENDER
BCF LED
CALL PDelay
BSF LED
CALL PDelay
BCF LED
CLRF VAR
MOVLW .90
MOVWF MAX
MOVLW 0X00
MOVWF AUXILIAR
MOVLW 0X00
MOVWF DADO
CALL GRAVA_E2PROM
APAGANDO
INCF AUXILIAR, F
MOVLW 0XFF
MOVWF DADO
CALL GRAVA_E2PROM
DECFSZ MAX, F
GOTO APAGANDO
BSF LED
CALL PDelay
BCF LED
CALL PDelay
BSF INTCON, GIE
GOTO PP
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;ROTINA DE APRENDIZADO DO CÓDIGO DO CONTROLE GRAVAÇÃO NA EEPROM
APRENDE:
MOVLW 0X00
MOVWF AUXILIAR
CALL LE_E2PROM
MOVF DADO,W
MOVWF AUXILIAR
INCF AUXILIAR, F
MOVF BYTE1, W
MOVWF DADO
CALL GRAVA_E2PROM
INCF AUXILIAR, F
MOVF BYTE2, W
MOVWF DADO
CALL GRAVA_E2PROM
INCF AUXILIAR, F
MOVF BYTE3, W
MOVWF DADO
CALL GRAVA_E2PROM
MOVF AUXILIAR, W
MOVWF DADO
MOVLW 0X00
MOVWF AUXILIAR
CALL GRAVA_E2PROM
BCF APRENDER
BCF LED
CALL PDelay
BSF INTCON, GIE
GOTO PP
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
; ROTINA DE COMPARAÇÃO DO CÓDIGO RECEBIDO E COMPARAÇÃO COM A EEPROM
COMPARA:
CLRF AUXILIAR
CLRF MAX
MOVLW 0X01
MOVWF AUXILIAR
MOVLW .90
MOVWF MAX
LENDO_E2PROM
CALL LE_E2PROM
MOVF DADO, W
BCF STATUS, Z
XORWF BYTE1, W
BTFSS STATUS, Z
GOTO OUTRO
GOTO COMP
OUTRO
INCF AUXILIAR, F
DECFSZ MAX, F
GOTO LENDO_E2PROM
BSF INTCON, GIE
GOTO PP
COMP
INCF AUXILIAR, F
CALL LE_E2PROM
MOVF DADO, W
CLRZ
XORWF BYTE2, W
BTFSS STATUS, Z
GOTO OUTRO
INCF AUXILIAR, F
CALL LE_E2PROM
MOVF DADO, W
CLRZ
XORWF BYTE3, W
BTFSS STATUS, Z
GOTO OUTRO
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;ROTINA DE EXECUÇÃO DOS BOTÕES CASO A COMPARAÇÃO COM EEPROM FOI OK
MAIN_LOOP
BSF OUT1
CALL PDelay
BCF OUT1
BSF CHAVE
GOTO PP
;B1_BT
; BTFSC B0_FLAG;
; GOTO BAIXO_1
; GOTO ALTO_1
;BAIXO_1;
; BCF B0_FLAG
; BSF OUT1
; GOTO FINAL
;ALTO_1
; BSF B0_FLAG
; BCF OUT1
; GOTO FINAL
;FINAL
; CALL PDelay
; BSF CHAVE
; GOTO PP
;#####################################################################
;#####################################################################
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;ROTINA DE GRAVAÇÃO DA EEPROM - CHAMADA COM ENDEREÇO EM AUXILIAR E DADO EM DADO
GRAVA_E2PROM
MOVF AUXILIAR, W
BANK1
MOVWF EEADR
BANK0
MOVF DADO, W
BANK1
CLRF EEDATA
MOVWF EEDATA
BSF EECON1,WREN
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
BCF EECON1,WREN
BTFSC EECON1,WRERR
GOTO $-9 ; GRAVA_E2PROM+4
BTFSC EECON1,WR
GOTO $-3
BANK0
RETURN
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;ROTINA DE LEITURA DA EEPROM - CHAMADA COM ENDEREÇO EM AUXILIAR E RETORNA COM DADO
;EN DADO
LE_E2PROM
CLRF DADO
MOVF AUXILIAR, W
BANK1
MOVWF EEADR
BSF EECON1, RD
NOP
NOP
MOVF EEDATA, W
BANK0
MOVWF DADO
RETURN
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;ROTINA DE DELAY DE 500 MS
PDelay movlw .239
movwf PDel0
PLoop1 movlw .232
movwf PDel1
PLoop2 NOP
PDelL1 goto PDelL2
PDelL2 goto PDelL3
PDelL3 NOP
decfsz PDel1, 1
goto PLoop2
decfsz PDel0, 1
goto PLoop1
PDelL4 goto PDelL5
PDelL5 goto PDelL6
PDelL6 goto PDelL7
PDelL7 NOP
return
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
END
e depositem 2500 na minha conta cada um tá.. hehe

Enviado:
04 Mai 2007 09:13
por fabim
esqueci de um detalhe.
O botão learne.
Se vc dar um toquinho no botão.
ele fica entre 6 e 8 segundos esperando um codigo 6P20 valido se dentro destes segundos este aparecer ele grava na e2prom e sai, caso não no final o led apaga e ele sai do estado de captura e gravação.
Se vc mantiver o botão precionado +/- 6 segundos, todos os controles que estão na eeprom são apagados.
Para vc´s utilizarem o codigo a vontade devem implementar mais funções no label "MAIN_LOOP ".
Abração
Fabim
A DISPONHA...


Enviado:
04 Mai 2007 09:32
por BFCardoso
Fala Fabim!
Mandou bem também heim. Estava animado.
Muito bom parabens...
Valeu.
Ate mais.
BFCardoso

Enviado:
04 Mai 2007 19:23
por phophollety
Se estaba bom agora ficou melhor ainda!!!!
Vou tentar rodar o código no F84 =D (todo mundo olha torto quando eu digo que uso F84 eheeh)

Enviado:
07 Mai 2007 09:15
por Adauto sampaio
Bom, e eu tentei no 628A nesse fim de semana, mas não tá gravando. Quando aperto o botão, ele acende o led de learn, aí eu coloco o HT pra funcionar (aperto o botão de um controle remoto de alarme que tenho aqui em casa), o led apaga, mas não aciona a saída quando aperto o botão novamente. Vale lembrar que estou ligando diretamente o HT com o PIC.
Vo martelá mais um tantinho e depois posto os resultados aqui.
Abraços!!!
phophollety escreveu:Se estaba bom agora ficou melhor ainda!!!!
Vou tentar rodar o código no F84 =D (todo mundo olha torto quando eu digo que uso F84 eheeh)

Enviado:
07 Mai 2007 09:58
por fabim
é so que 12F num tem umas chatisses que o 628 tem.
Eu tenho implementado pra 16F628.
Vou dar uma procurada e posto aqui.
fabim

Enviado:
07 Mai 2007 11:10
por phophollety
Legal, ai eu tento readaptar para o F84 =D

Enviado:
09 Mai 2007 11:57
por fabim
conforme eu tinha prometido.
Só não me lembro se esse é o que eu fiz inteiramene funcional.
Aqualquer coisa quem montar e testar me diga quais os problemas que eu conserto e posto novamente.
é que eu não tenho nenhum HCS e nem 6P20, que dirá receptor..
- Código: Selecionar todos
LIST P=16F628A, R=HEX
INCLUDE <P16F628A.INC>
ERRORLEVEL -302
__CONFIG _CP_OFF & _LVP_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_OFF & _XT_OSC
; CRIADO POR FABIO RICARDO DA SILVA
; PRO ENERGY SISTEMAS LTDA
; 25/05/2005 - HRS 10:50
; PARA ENCODER'S HCS UNIVERSAL
; HT6P20 QUALQUER RESISTOR AUTO SINC
; FREQUENCIA DE CLOCK 8 MHZ EXTERNO
;I/O definições para PIC16F628A
; +----------------------------------+
;Led learn -(01)-|RA2/AN2/VREF U AN1/RA1|-(18)- NC
;botãolearn -(02)-|RA3/AN3/CMP1 AN0/RA0|-(17)- NC
;NC -(03)-|RA4/TOCKI/CNP2 OSC1/CLHIN/RA7|-(16)- NC
;Reset -(04)-|RA5/MCLR/VPP OSC2/CLHOUT/RA6|-(15)- NC
;GND -(05)-|Vss Vdd|-(14)- +5V
;Entrada RF -(06)-|RB0/INT T1OSI/PGC/RB7|-(13)- DATA
;Rele 01 -(07)-|RB1/RX/DT T1OSO/T1CKI/PGC/RB6|-(12)- CLOCK
;Rele 02 -(08)-|RB2/TX/CK RB5|-(11)- NC
;Rele 03 -(09)-|RB3/CCP1 PGM/RB4|-(10)- Rele 04
; +----------------------------------+
;%%%%%%%%%%%%%%%%%%%% PAGINAÇÃO DE BANCOS DE MEMÓRIA %%%%%%%%%%%%%%%%%%%%%%%%%%%%
#DEFINE BANK0 BCF STATUS, RP0
#DEFINE BANK1 BSF STATUS, RP0
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;***********************************************
;************ PROGRAMA INICIAL ***************
;***********************************************
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% PAGINAÇÃO DE VARIAVEIS %%%%%%%%%%%%%%%%%%%%%%%%%%
CBLOCK 0X20
;HT6P20
CNTL
CNTH
BYTE1
BYTE2
BYTE3
DADO
TEMP
AUXILIAR
BTEMPO
AUX2
NBITS
AUX
ENDERECO
MAX
FLAGS
PDel0
PDel1
VAR
;HCS
FLAGS_HCS
contador_p1_hc
contador_bits
contador_time_out
contador_calibracao_l
contador_calibracao_h
TMP
BTS
ENDC
;%%%%%%%%%%%%%%%%%%%%%%% CONSTANTES DO SISTEMA ENTRADAS E SAIDAS %%%%%%%%%%%%%%%
#define LED PORTA,2 ; // i learn Led OUT
#define LEARN PORTA,3 ; // o Learn button IN
#define RFin PORTB,0 ; RA1 // i radio signal input
#define OUT0 PORTB,1 ;
#define OUT1 PORTB,2 ;
#define OUT2 PORTB,3 ;
#define OUT3 PORTB,4 ;
;###############################################################################
#DEFINE RECEBIDO_OK FLAGS, 0
#DEFINE APRENDER FLAGS, 1
#DEFINE preambulo_ok FLAGS_HCS, 0
#DEFINE HCS_FUNCOES FLAGS_HCS, 1
#define S0 TEMP, 5
#define S1 TEMP, 6
#define S2 TEMP, 7
#define S3 TEMP, 4
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
INICIAL EQU 0X01 ; ENDEREÇO INICIAL DE LEITURA E COMPARAÇÃO DA EEPROM
POS_MEM EQU 0X00
;&&&&&&&&&&&&&&&&&&INICIALIZAÇÃO DA EEPROM &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
ORG H'2100'+POS_MEM
DE 0X00
;%%%%%%%%%%%%%%%%%%% INICIO DE MEMÓRIA DE PROGRAMA %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ORG 0X00
GOTO INICIO
;%%%%%%%%%%%%%%%%%%% VETOR DE INTERRUPÇÃO %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ORG 0X04
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
; ROTINA DE LEITURA DE CÓDIGO DO RECEPTOR DE RF QUANDO CHAMADA ELE VOLTA
; CON CARRYER EM 1 SE CODIGO LIDO OK E CARRYER 0 SE CODIGO NÃO LIDO
BANK0
leitura_codigo_HCXXX:
BCF INTCON, INTF
BCF INTCON, GIE
CLRF BYTE1
CLRF BYTE2
CLRF BYTE3
GOTO detecta_preambulo
REDETECTA
BTFSS preambulo_ok
GOTO CODIGO_INCORRETO
;*********************************************************
MOVLW .64
MOVWF contador_bits
alc06:
CLRF contador_p1_hc
alc00:
NOP
NOP
NOP
NOP
NOP
BTFSS RFin
GOTO alc01
INCFSZ contador_p1_hc, F
GOTO alc00
GOTO CODIGO_INCORRETO
alc01:
MOVLW .208
SUBWF contador_p1_hc, W
BTFSC STATUS, C
GOTO CODIGO_INCORRETO
MOVLW .112
SUBWF contador_p1_hc, W
BTFSC STATUS, C
GOTO alc02
MOVLW .104
SUBWF contador_p1_hc, W
BTFSC STATUS, C
GOTO CODIGO_INCORRETO
MOVLW .56
SUBWF contador_p1_hc, W
BTFSS STATUS, C
BSF STATUS, C
GOTO alc03
alc02:
BCF STATUS, C
alc03:
RRF BYTE3, F ;L
RRF BYTE2, F ;L
RRF BYTE1, F ;L
DECFSZ contador_bits, F
GOTO alc04
BSF HCS_FUNCOES
BTFSS APRENDER
GOTO COMPARA
GOTO APRENDE
alc04:
CLRF contador_p1_hc
alc05:
NOP
NOP
NOP
NOP
NOP
NOP
BTFSC RFin
GOTO alc06
INCFSZ contador_p1_hc, F
GOTO alc05
GOTO CODIGO_INCORRETO
CODIGO_INCORRETO:
BCF INTCON, INTF
BSF INTCON, GIE
GOTO PP
; faz a detecção do preambulo e salta se tudo ok
detecta_preambulo:
BCF preambulo_ok
BTFSS RFin
GOTO header_invalido
CLRF contador_time_out
MOVLW .80
MOVWF contador_time_out
dp00:
BTFSS RFin
GOTO dp01
INCFSZ contador_time_out, F
GOTO dp00
GOTO HT6P20
dp01:
CLRF contador_calibracao_h
CLRF contador_calibracao_l
dp03:
BTFSC RFin
GOTO dp04
INCFSZ contador_calibracao_l, F
GOTO dp03
INCFSZ contador_calibracao_h, F
GOTO dp03
GOTO header_invalido
dp04:
MOVLW 0X07
CLRC
SUBWF contador_calibracao_h, W
BTFSC STATUS, C
GOTO header_invalido
MOVLW 0X05
CLRC
SUBWF contador_calibracao_h, W
BTFSS STATUS, C
GOTO header_invalido
BSF preambulo_ok
GOTO REDETECTA
header_invalido:
GOTO REDETECTA
;########################################################################
; SE PREAMBULO DO HCS NOK ENTÃO CAI AQUI NO 6P20
HT6P20
CLRF TMP
MOVLW .60
MOVWF TMP
HT6P20B_2
BTFSS RFin
GOTO RECEIVE
DECFSZ TMP, F
GOTO HT6P20B_2
GOTO CODIGO_INCORRETO
RECEIVE: ;SINCRONISMO
MOVLW .16
MOVWF CNTH
MOVLW .200
MOVWF CNTL
BTFSC RFin
GOTO FIM_RC
DECFSZ CNTL,F
GOTO $-3
DECFSZ CNTH,F
GOTO $-7
SINCRONISMO_OK
MOVLW 018H ;(24D)
MOVWF NBITS
CLRF BYTE1
CLRF BYTE2
CLRF BYTE3
BCF LED
MOVLW .16
MOVWF CNTH
MOVLW .200
MOVWF CNTL
BTFSC RFin
GOTO LERBITBASE
DECFSZ CNTL,F
GOTO $-3
DECFSZ CNTH,F
GOTO $-7
GOTO FIM_RC
LERBITBASE
MOVLW 0X3D
MOVWF BTEMPO
BTFSS RFin ;[2]
GOTO CALC_TBASE ;[0]
INCFSZ BTEMPO,F ;[1]
GOTO $-3 ;[2]
GOTO FIM_RC
CALC_TBASE
MOVLW 0X3D
SUBWF BTEMPO, F
AGUARDAR_LW
CLRC
RRF BTEMPO,W
MOVWF CNTL
MOVF BTEMPO,W
MOVWF CNTH
RLF CNTH,W
MOVWF AUX2 ;AUX2=1/2 Te
BCF STATUS,C
RRF BYTE3,F
RRF BYTE2,F
RRF BYTE1,F
BTFSS RFin ; [2]
GOTO RECEBENDO_BITS ; [0]
DECFSZ AUX2,F ; [1]
GOTO $-3 ; [2]
GOTO FIM_RC
RECEBENDO_BITS
CALL DL1
BTFSC RFin
GOTO FIM_RC
CALL DL2
BCF BYTE3,7
BTFSS RFin
BSF BYTE3,7
CALL DL2
BTFSS RFin
GOTO FIM_RC
DECFSZ NBITS,F
GOTO AGUARDAR_LW
GOTO RECEBEU_OK
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DL1:
DECFSZ CNTL,F ;[1]
GOTO $+2 ;[2]
GOTO $+2
GOTO $-3 ;[2]
CLRC
RRF CNTH,W ;
MOVWF CNTL ;Meio bit
RETURN
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DL2
MOVFW CNTH
MOVWF AUX
DECFSZ AUX,F ;[1]
GOTO $+2 ;[2]
RETURN
GOTO $-3 ;[2]
;***************************************************************
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
; ATÉ AQUI:
; Recebeu todos os 24 bits em Byte1,Byte2,Byte3
; Byte1=LSB
; Byte3=MSB
; Os botões do controle estarão nos bit's 6,7 do
; byte3
RECEBEU_OK:
BCF INTCON, INTF ; limpa flag de interrupção do PORTB
BTFSS APRENDER ; É PARA APRENDER ?
GOTO COMPARA ; NÃO ENTÃO COMPARA
GOTO APRENDE ; SIM ENTÃO GRAVA NA MEMÓRIA
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;NÃO RECEBEU NADA
FIM_RC:
BCF INTCON, INTF
BSF INTCON, GIE
CALL PDelay
GOTO PP
;$$$$$$$$$$$$$$ configurações dos sfr's do sistema $$$$$$$$$$$$$$$$$$$$$$$$$$$
INICIO
configuracoes:
BANK1
MOVLW B'00000001' ; portb 0 como entrada
MOVWF TRISB
MOVLW B'00001000' ; porta 3 saida
MOVWF TRISA
MOVLW B'10010000' ; int con gie DESLIgado
MOVWF INTCON
MOVLW B'11000111' ; desliga pull ups / preescaler trm0 16 65,535 ms
MOVWF OPTION_REG
;BSF PCON, OSCF ; oscilador interno de 4mhz
BANK0
MOVLW B'00000111' ; desliga comparadores do porta
MOVWF CMCON
CLRF BYTE1 ; limpeza de variáveis
CLRF BYTE2
CLRF BYTE3
CLRF PORTA
CLRF PORTB
CLRF FLAGS_HCS
;$$$$$$$$$$$$$$$$$$$$$$$ looping principal $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
PP:
BTFSS LEARN
GOTO PP1
GOTO $-2
PP1
BSF APRENDER
BSF LED
MOVLW .10
MOVWF VAR
CALL PDelay
DECFSZ VAR, F
GOTO $-2
BTFSS LEARN
GOTO APAGA_TUDO
BCF APRENDER
BCF LED
CLRF VAR
GOTO PP
APAGA_TUDO
BCF INTCON, GIE
BCF APRENDER
BCF LED
CALL PDelay
BSF LED
CALL PDelay
BCF LED
CLRF VAR
MOVLW .90
MOVWF MAX
MOVLW 0X00
MOVWF AUXILIAR
MOVLW 0X00
MOVWF DADO
CALL GRAVA_E2PROM
APAGANDO
INCF AUXILIAR, F
MOVLW 0XFF
MOVWF DADO
CALL GRAVA_E2PROM
DECFSZ MAX, F
GOTO APAGANDO
BSF LED
CALL PDelay
BCF LED
CALL PDelay
BSF INTCON, GIE
GOTO PP
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;ROTINA DE APRENDIZADO DO CÓDIGO DO CONTROLE GRAVAÇÃO NA EEPROM
APRENDE:
BTFSS HCS_FUNCOES
GOTO $+5
MOVLW B'00001111'
ANDWF BYTE3,F
BCF HCS_FUNCOES
GOTO $+3
MOVLW B'00111111'
ANDWF BYTE3, F
NOP
MOVLW 0X00
MOVWF AUXILIAR
CALL LE_E2PROM
MOVF DADO,W
MOVWF AUXILIAR
INCF AUXILIAR, F
MOVF BYTE1, W
MOVWF DADO
CALL GRAVA_E2PROM
INCF AUXILIAR, F
MOVF BYTE2, W
MOVWF DADO
CALL GRAVA_E2PROM
INCF AUXILIAR, F
MOVF BYTE3, W
MOVWF DADO
CALL GRAVA_E2PROM
MOVF AUXILIAR, W
MOVWF DADO
MOVLW 0X00
MOVWF AUXILIAR
CALL GRAVA_E2PROM
BCF APRENDER
BCF LED
CALL PDelay
;BANK1
BSF INTCON, GIE
;BANK0
GOTO PP
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
; ROTINA DE COMPARAÇÃO DO CÓDIGO RECEBIDO E COMPARAÇÃO COM A EEPROM
COMPARA:
BTFSS HCS_FUNCOES
GOTO $+5
MOVF BYTE3, W
MOVWF TEMP
MOVLW B'00001111'
GOTO $+4
MOVF BYTE3, W
MOVWF TEMP
MOVLW B'00111111'
ANDWF BYTE3, F
CLRF AUXILIAR
CLRF MAX
MOVLW 0X01
MOVWF AUXILIAR
MOVLW .90
MOVWF MAX
LENDO_E2PROM
CALL LE_E2PROM
MOVF DADO, W
BCF STATUS, Z
XORWF BYTE1, W
BTFSS STATUS, Z
GOTO OUTRO
GOTO COMP
OUTRO
INCF AUXILIAR, F
DECFSZ MAX, F
GOTO LENDO_E2PROM
; BANK1
BSF INTCON, GIE
;BANK0
GOTO PP
COMP
INCF AUXILIAR, F
CALL LE_E2PROM
MOVF DADO, W
CLRZ
XORWF BYTE2, W
BTFSS STATUS, Z
GOTO OUTRO
INCF AUXILIAR, F
CALL LE_E2PROM
MOVF DADO, W
CLRZ
XORWF BYTE3, W
BTFSS STATUS, Z
GOTO OUTRO
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;ROTINA DE EXECUÇÃO DOS BOTÕES CASO A COMPARAÇÃO COM EEPROM FOI OK
BTFSS HCS_FUNCOES
GOTO $+2
GOTO EXECUTA_BOTAO
NOP
MOVLW B'11000000'
ANDWF TEMP, F
MOVLW B'11000000'
XORWF TEMP, W
BTFSS STATUS, Z ; os dois botões apertados
GOTO $+5
BSF OUT2
CALL PDelay
BCF OUT2
GOTO FINAL
BTFSS TEMP, 7 ; botão 1 apertado
GOTO $+5
BSF OUT0
CALL PDelay
BCF OUT0
GOTO $+4
BSF OUT1 ; então botão 2 apertado
CALL PDelay
BCF OUT1
FINAL
CALL PDelay
; BANK1
BSF INTCON, GIE
; BANK0
GOTO PP
;###########################################################################
;ROTINA DE EXECUÇÃO DOS BOTÕES HCS
EXECUTA_BOTAO
BCF HCS_FUNCOES
BT2
BTFSS S2 ;STATUS, Z
GOTO BT1
BSF OUT2
CALL PDelay
BCF OUT2
GOTO CODIGO_INCORRETO
BT1
BTFSS S1 ;STATUS, Z
GOTO BT0
BSF OUT1
CALL PDelay
BCF OUT1
GOTO CODIGO_INCORRETO
BT0
BTFSS S0 ;STATUS, Z
GOTO BT3
BSF OUT0
CALL PDelay
BCF OUT0
GOTO CODIGO_INCORRETO
BT3
BTFSS S3
GOTO $+4
BSF OUT3
CALL PDelay
BCF OUT3
GOTO CODIGO_INCORRETO
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;ROTINA DE GRAVAÇÃO DA EEPROM - CHAMADA COM ENDEREÇO EM AUXILIAR E DADO EM DADO
GRAVA_E2PROM
MOVF AUXILIAR, W
BANK1
MOVWF EEADR
BANK0
MOVF DADO, W
BANK1
CLRF EEDATA
MOVWF EEDATA
BSF EECON1,WREN
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
BCF EECON1,WREN
BTFSC EECON1,WRERR
GOTO $-9 ; GRAVA_E2PROM+4
BTFSC EECON1,WR
GOTO $-3
BANK0
RETURN
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;ROTINA DE LEITURA DA EEPROM - CHAMADA COM ENDEREÇO EM AUXILIAR E RETORNA COM DADO
;EN DADO
LE_E2PROM
CLRF DADO
MOVF AUXILIAR, W
BANK1
MOVWF EEADR
BSF EECON1, RD
NOP
NOP
NOP
NOP
NOP
MOVF EEDATA, W
BANK0
MOVWF DADO
RETURN
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;ROTINA DE DELAY DE 500 MS
PDelay movlw .239
movwf PDel0
PLoop1 movlw .232
movwf PDel1
PLoop2 NOP
PDelL1 goto PDelL2
PDelL2 goto PDelL3
PDelL3 NOP
decfsz PDel1, 1
goto PLoop2
decfsz PDel0, 1
goto PLoop1
PDelL4 goto PDelL5
PDelL5 goto PDelL6
PDelL6 goto PDelL7
PDelL7 NOP
return
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
; FINITO, THE END, O FIN,FINZOVISZK ACABOU ESSA NARQUIA
END
abraços
fabim