Decodificar HT6P20B

Circuitos eletrônicos, topologias, diagramas elétricos, etc...

Moderadores: 51, Renie, gpenga

Decodificar HT6P20B

Mensagempor BFCardoso » 02 Mai 2007 11:24

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
BFCardoso
Bit
 
Mensagens: 48
Registrado em: 17 Nov 2006 14:25
Localização: Santa Rita do Sapucaí - MG

Mensagempor fabim » 02 Mai 2007 11:32

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
Editado pela última vez por fabim em 02 Mai 2007 11:43, em um total de 1 vez.
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor BFCardoso » 02 Mai 2007 11:35

Valeu Fabim....
Vou adaptar o codigo para poder aplicar no uC motorola.

Ate mais...
BFCardoso
Bit
 
Mensagens: 48
Registrado em: 17 Nov 2006 14:25
Localização: Santa Rita do Sapucaí - MG

Mensagempor xultz » 02 Mai 2007 14:54

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...
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor phophollety » 02 Mai 2007 23:02

Vai usar os controles novos da PPA com esse Ci ou são outros?

Valeu o código.. me ajudou também!
"3 minutes of boring code review means 3 hours less fixing LSD (Little Stupid Detail)" Dr. Mike Smith
"Dê-me um ponto de apoio e uma alavanca e moverei o mundo" Arquimedes
"Quando vejo um Alfa Romeo passar eu tiro o meu chapéu" Henry FORD.
Avatar do usuário
phophollety
Dword
 
Mensagens: 1511
Registrado em: 15 Out 2006 13:00
Localização: Santo André São Paulo, Brasil

Mensagempor BFCardoso » 03 Mai 2007 08:31

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.
BFCardoso
Bit
 
Mensagens: 48
Registrado em: 17 Nov 2006 14:25
Localização: Santa Rita do Sapucaí - MG

Mensagempor xultz » 03 Mai 2007 09:41

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.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor fabim » 03 Mai 2007 12:41

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
Editado pela última vez por fabim em 10 Mai 2007 11:49, em um total de 1 vez.
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor fabim » 04 Mai 2007 09:13

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... :(
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor BFCardoso » 04 Mai 2007 09:32

Fala Fabim!
Mandou bem também heim. Estava animado.
Muito bom parabens...
Valeu.

Ate mais.

BFCardoso
BFCardoso
Bit
 
Mensagens: 48
Registrado em: 17 Nov 2006 14:25
Localização: Santa Rita do Sapucaí - MG

Mensagempor phophollety » 04 Mai 2007 19:23

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)
"3 minutes of boring code review means 3 hours less fixing LSD (Little Stupid Detail)" Dr. Mike Smith
"Dê-me um ponto de apoio e uma alavanca e moverei o mundo" Arquimedes
"Quando vejo um Alfa Romeo passar eu tiro o meu chapéu" Henry FORD.
Avatar do usuário
phophollety
Dword
 
Mensagens: 1511
Registrado em: 15 Out 2006 13:00
Localização: Santo André São Paulo, Brasil

Mensagempor Adauto sampaio » 07 Mai 2007 09:15

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)
É tudo uma questão de sorte; pergunte a qualquer perdedor
Adauto sampaio
Byte
 
Mensagens: 123
Registrado em: 07 Jan 2007 16:02

Mensagempor fabim » 07 Mai 2007 09:58

é so que 12F num tem umas chatisses que o 628 tem.

Eu tenho implementado pra 16F628.

Vou dar uma procurada e posto aqui.

fabim
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor phophollety » 07 Mai 2007 11:10

Legal, ai eu tento readaptar para o F84 =D
"3 minutes of boring code review means 3 hours less fixing LSD (Little Stupid Detail)" Dr. Mike Smith
"Dê-me um ponto de apoio e uma alavanca e moverei o mundo" Arquimedes
"Quando vejo um Alfa Romeo passar eu tiro o meu chapéu" Henry FORD.
Avatar do usuário
phophollety
Dword
 
Mensagens: 1511
Registrado em: 15 Out 2006 13:00
Localização: Santo André São Paulo, Brasil

Mensagempor fabim » 09 Mai 2007 11:57

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
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Próximo

Voltar para Circuitos Diversos

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x