Ir ao conteúdo

Decodificação do ht6p20b com pic18f452


primao2013

Posts recomendados

Postado

sou novo por aQUI .Estou com uma dificuladade imensa de decodificar o tal ht6p20b com pic pic18f452 não consigo encontrar materio didatico o datasheet dele muito mal escrito. Gostaria se vocês me ajuda-se a decodificar eu já encontrei varios exemplo mais tudo em assembly so que eu so progrmo em c e uso mikroc pro for pic. gostaria um exemplo em c

desde já agradeço a todos .

Postado

aqui vai um exemplo dis pessoal que funciona

Flags de Code Learning


#define SincOk FCode,0 ; 1 = sincronismo detectado
#define CodOk FCode,1 ; 1 = código OK
#define Check FCode,2 ; 1 = verificação Ok
#define Frame FCode,3 ; 0 = primeiro frame
#define NBlank FCode,4 ; 1 = memória preenchida
#define TBtn FCode,5 ; 1 = temporiza botão
#define Over FCode,6 ; 1 = fim de temporização
;
;
; Definição das variáveis do sistema
;
CBLOCK 0x20
; Sistema
W_ ; usada para salvar contexto
STATUS_ ; usada para salvar contexto
DCnt1 ; usada nas rotinas de atraso
DCnt2 ; usads nas rotinas de atraso
EEAddr ; endereço da EEPROM
EEData ; dado da EEPROM
FCtrl ; flags de controle
FTemp ; flags de temporização
; Code Learning
CLow1 ; sincronismo 0
CLow2 ; sincronismo 0
CHigh ; sincronismo 1
Dado1 ; dados recebidos
Dado2 ; dados recebidos
Dado3 ; dados recebidos
Dado4 ; função dos botões
Dado1_ ; dados para check
Dado2_ ; dados para check
Dado3_ ; dados para check
CBits ; números de bits recebidos
CPulse ; pulso 0 ou 1
FCode ; flags de code learning
CBtn ; temporizador de botão
CPrg ; temporizador de programação
NBtn ; número do botão
FBtn ; função do botão
MAddr ; endereço de memória
ENDC
;
; Constantes
; Interrupção: Fosc/4->[1:256]->TMR0(1:250) = 64 ms
;
EECtrl EQU 0x10 ; endereço dos bits de controle
MxCod EQU 0x04 ; número máximo de controles
KCBtn EQU 0x07 ; CBtn (7 x 64 ms = 448 ms)
;


;
ChkEE
clrf MAddr ; endereço inicial da memória
ChkEE1
movf MAddr,W ; testa o endereço
call TstBlank
btfsc NBlank ; endereço livre?
return ; não, retorna
incf MAddr,F ; sim, próximo endereço
movf MAddr,W
xorlw MxCod ; compara
btfsc STATUS,Z ; MAddr = MxCod?
return ; sim, retorna
goto ChkEE1 ; não, continua
;
; EEAddr = 4 * MAddr
;
GetEEAddr
movwf EEAddr ; salva MAddr
bcf STATUS,C
rlf EEAddr,F ; multiplica por 4
rlf EEAddr,F
return
;
TstBlank
call GetEEAddr ; obtem o endereço da EEPROM
bcf NBlank
call EERead ; verefica se a memória esta zerada
movlw 0x00 ; testa byte 1
xorwf EEData,W
btfss STATUS,Z
bsf NBlank ; memória não zerada
incf EEAddr,F
call EERead
movlw 0x00 ; testa byte 2
xorwf EEData,W
btfss STATUS,Z
bsf NBlank ; memória não zerada
incf EEAddr,F
call EERead
movlw 0x00 ; testa byte 3
xorwf EEData,W
btfss STATUS,Z
bsf NBlank ; memória não zerada
incf EEAddr,F
call EERead
movlw 0x00 ; testa byte 4
xorwf EEData,W
btfss STATUS,Z
bsf NBlank ; memória não zerada
return
;
MemCod
call GetEEAddr ; obtem o endereço da EEPROM
movf Dado1,W ; memoriza o código
andlw 0xFC ; mascara D0 e D1
movwf EEData
call EEWrite ; salva byte 1
incf EEAddr,F
movf Dado2,W
movwf EEData
call EEWrite ; salva byte 2
incf EEAddr,F
movf Dado3,W
movwf EEData
call EEWrite ; salva byte 3
incf EEAddr,F
movf Dado4,W
movwf EEData
call EEWrite ; salva byte 4
return
;
ApgCod
call GetEEAddr ; obtem o endereço da EEPROM
call EEWrite ; apaga byte 1
incf EEAddr,F
call EEWrite ; apaga byte 2
incf EEAddr,F
call EEWrite ; apaga byte 3
incf EEAddr,F
call EEWrite ; apaga byte 4
return
;
DetSinc
bcf SincOk
clrf CLow1
clrf CLow2
clrf CHigh
NBaixo
clrwdt
btfsc RxIn ; Loop de 6us
goto NAlto
incfsz CLow1,F
goto NBaixo
incfsz CLow2,F
goto NBaixo
decf CLow1,F
goto SaiDetSinc
NAlto
clrwdt
btfss RxIn ; Loop de 6us
goto TstCont
incfsz CHigh,F
goto NAlto
decf CHigh,F
goto SaiDetSinc
TstCont
clrwdt
movf CLow1,W ; CLow2=5, CLow1=254 até Clow2=8,CLow1=252
sublw 0xFE ; 254
btfsc STATUS,C
goto Tc00
movlw 0x05 ; 5
subwf CLow2,W
btfss STATUS,C
goto SaiDetSinc
goto Tc01
Tc00
movlw 0x06 ; 6
subwf CLow2,W
btfss STATUS,C
goto SaiDetSinc
Tc01
movf CHigh,W
sublw 0x43 ; 67 loops
btfsc STATUS,C
goto SaiDetSinc
movf CHigh,W
sublw 0x64 ; 100 loops
btfss STATUS,C
goto SaiDetSinc
bsf SincOk
SaiDetSinc
Return
;
LerCod
bcf CodOk
clrf Dado1
clrf Dado2
clrf Dado3
movlw 0x18 ; 24 bits
movwf CBits
Lc06
movlw 0x82 ; 130 loops = 650us
movwf CPulse
Lc00
clrwdt ; loop 5us
nop
decfsz CPulse,F
goto Lc00
btfss RxIn
goto Lc01
bcf STATUS,C
rlf Dado1,F
rlf Dado2,F
rlf Dado3,F
goto Lc02
Lc01
bsf STATUS,C
rlf Dado1,F
rlf Dado2,F
rlf Dado3,F
Lc02
decfsz CBits,F
goto Lc03
btfsc Frame ; primeiro frame
goto Lc30
bsf Frame
movf Dado1,W
movwf Dado1_
movf Dado2,W
movwf Dado2_
movf Dado3,W
movwf Dado3_
goto SaiLerCod
Lc03
movlw 0x64 ; 100 loops = 500us
movwf CPulse
Lc04
clrwdt ; loop 5us
nop
decfsz CPulse,F
goto Lc04
Lc05
btfsc RxIn
goto Lc05
goto Lc06
Lc30
bcf Frame ; compara dois frames
movf Dado1,W
xorwf Dado1_,W
btfss STATUS,Z
goto Lc31
movf Dado2,W
xorwf Dado2_,W
btfss STATUS,Z
goto Lc31
movf Dado3,W
xorwf Dado3_,W
btfss STATUS,Z
goto Lc31
bsf Check
goto SaiLerCod
Lc31
bcf Check
SaiLerCod
return
;
Compara
bcf CodOk ; sinaliza código errado
clrf MAddr ; endereço inicial da memória
LCompara
clrwdt
movf MAddr,W ; obtem o endereço da EEPROM
call GetEEAddr
call EERead
movf Dado1,W ; compara byte 1
andlw 0xFC ; mascara D0 e D1
xorwf EEData,W
btfss STATUS,Z ; são iguais?
goto NextAdr ; não, próximo endereço
incf EEAddr,F ; sim, próximo byte
call EERead
movf Dado2,W ; compara byte 2
xorwf EEData,W
btfss STATUS,Z ; são iguais?
goto NextAdr ; não, próximo endereço
incf EEAddr,F ; sim, próximo byte
call EERead
movf Dado3,W ; compara byte 3
xorwf EEData,W
btfss STATUS,Z ; são iguais?
goto NextAdr ; não, próximo endereço
bsf CodOk ; sim, código ok
incf EEAddr,F ; obtem funções dos botões
call EERead
movf EEData,W
movwf Dado4 ; salva funções dos botões
return ; retorna
NextAdr
incf MAddr,F ; incrementa endereço
movf MAddr,W ; compara
xorlw MxCod
btfsc STATUS,C ; MAddr = MxCod?
return ; sim, retorna
goto LCompara ; não, continua
;
EERead
bcf STATUS,RP0 ; bank 0
movf EEAddr,W ; endereço para leitura
bsf STATUS,RP0 ; bank 1
movwf EEADR
bsf EECON1,RD ; inicia leitura
movf EEDATA,W
bcf STATUS,RP0 ; bank 0
movwf EEData ; salva dado lido
return
EEWrite
bcf STATUS,RP0 ; bank 0
movf EEAddr,W ; endereço para escrita
bsf STATUS,RP0 ; bank 1
movwf EEADR
bcf STATUS,RP0 ; bank 0
movf EEData,W ; dado para escrita
bsf STATUS,RP0 ; bank 1
movwf EEDATA
bcf INTCON,GIE ; desabilita interrupções
bsf EECON1,WREN ; habilita escrita
movlw 0x55
movwf EECON2 ; escreve 55h
movlw 0xAA
movwf EECON2 ; escreve AAh
bsf EECON1,WR ; inicia ciclo de escrita
EEWrChk
clrwdt
btfsc EECON1,WR ; testa ciclo de escrita completo
goto EEWrChk
bsf INTCON,GIE ; habilita interrupções
bcf STATUS,RP0 ; bank 0
bcf PIR1,EEIF ; limpa EEIF

aqui tem outro exemplo eu queria interder o funcionamento do ht6p20b queria saber se e preciso guadar 24 bits? quais bits eu tenho que guardar como eu faço para identificar e gavar o ht6p20b.

////////////////////////////////////////////////////////////////////////////////////////


;**************************************************************************
; RX_GEN_HT6P20BV3P1.ASM
;
;
; RECEPTOR RF PARA CONTROLE REMOTOS (CHAVEIRINHOS) COM CI HT6P20B
;
; PARA DECODIFICAR UTILIZA UM PIC 12F629 (OPCIONALMENTE UM 12F675, DES-
; COMENTANDO/COMENTANDO AS LINHAS CITADAS NO TEXTO).
;
; CLAUDIO LÁRIOS INICIO: 27-07-2012 TERMINO:28-06-2012
; REVISADO : 05-8-2012
; (ELIMINADO 'BUG' QUE TRAVAVA SOB INTERFERENCIA FORTE NA ENTRADA 'RFIN')
; REVISADO 04-01-2013
; (ELIMINADO BUG DE FALSA RECEPÇÃO COM CÓDIGO 'FFFFFF'C/ INTERFERÊNCIAS
; ELIMINADO BUG DE MAU FUNCIONAMENTO COM CÓDIGOS DE CONTROLES SEQUENCIAIS)
;**************************************************************************
;
; GRAVAR CONTROLE: APERTE UM BOTÃO DO CONTROLE E MANTENHA APERTADO.
; APERTE TAMBÉM O BOTÃO 'LEARN' NA PLACA (PINO 4 DO PIC 12F629 A MASSA)E
; SOLTE-O EM MENOS DE 1 SEGUNDOS. O LED 'LEARN'(PINO 2) PISCARÁ 1
; VEZ, PARA INDICAR 'CODE APRENDIDO'. REPITA ISTO COM O OUTRO BOTÃO DO CONTROLE
; E COM TODOS OS CONTROLES REMOTOS QUE FOR UTILIZAR, UM POR VEZ.
; APAGAR TODOS OS CONTROLES DA MEMÓRIA: APERTAR BOTÃO 'LEARN' NA PLACA E
; MANTENHA PRESSIONADO POR MAIS DE 10 SEGUNDOS. O LED 'LEARN' (PINO 2) PISCARÁ
; 3 VEZES , INDICANDO O PLENO APAGAMENTO DE TODOS OS SENSORES DA MEMÓRIA.
; APÓS ISTO, CADA CONTROLE DEVERÁ SER 'REAPRENDIDO' NOVAMENTE PARA OPERAR.
;***************************************************************************
; DESCOMENTAR/COMENTAR CONFORME MODELO ESCOLHIDO
; LIST P=12f675 , R=DEC
LIST P=12f629 , R=DEC
; INCLUDE "P12F675.INC"
INCLUDE "P12F629.INC"
;--------------------------
ERRORLEVEL -302
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_ON & _MCLRE_OFF


#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK0 DE MEMORIA
#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK1
#DEFINE FLAG FLAGS,0 ;FLAG DE SITUAÇÃO
#DEFINE FLAG1 FLAGS,1 ;FLAG DE NOVA LEITURA
#DEFINE FLAGGR FLAGS,2 ;FLAG DE 'LEARN' APRENDER
#DEFINE SIN GPIO,0 ;PINO 7 IN RF
#DEFINE LRN GPIO,3 ;PINO 4 IN LEARN BOTTON
#DEFINE LED GPIO,5 ;PINO 2 SAIDA LED 'LEARN'
#DEFINE LED2 GPIO,2 ;PINO 5- SAIDA DO LED2
#DEFINE LED1 GPIO,1 ;PINO 6- SAIDA DO LED1

CBLOCK 0X20
RES3,RES2,RES1,RES0,AUX,C3,C2,C1,C0,WS,TEMP,BITCOUNTER,FLAGS,TL0,TL1,TL2,Z2,Z1
LcdDelayCounter,LcdDelayCounter1,tmpLcdRegister,tmpLcdRegister1,SITUAÇÃO
temp,SDATA,AUX2 ,LC,HC ,CONT,RES3A,RES2A,RES1A,RES0A,X,R0,R1,R2,TMP1,TMP_SALVO,TMP2,TMP3,ADDRESS,TMP
ENDC

WRCFG EQU B'00000000' ; PORTB: EEPROM WRITE TRI-STATE VALUE
YTRISA EQU B'001001' ; PORTA: TRI-STATE VALUE
TMAX EQU .50 ;TEMPO MAXIMO DO SINAL LOW
QBYTE EQU .28 ;QUANTIDADE DE BYTES A SER RECEBIDO (22 ADRESS+ 2 DADO+ 4 ANTICODE)
TGR EQU .255 ;TEMPO DE BOTÃO APERTADO PARA APAGAR GRAVAÇAO



ORG 0X00
GOTO START
ORG 0X04
RETFIE

START:
MOVLW 0X07
MOVWF CMCON ;DESLIGA COMPARADORES
CLRF GPIO ; RESET PORT
MOVLW YTRISA ; SETUP PORTA
TRIS GPIO

;DESCOMENTAR ABAIXO PARA 12F675
; BANK1
; MOVLW .0
; MOVWF ANSEL ;LIBERA PORTAS DO AD (somente 12f675)
; BANK0
CLRF FLAGS ;APAGA REGISTRADOR DE FLAGS
MOVLW TGR
MOVWF Z2
CLRF Z1 ;LIMPA REGISTRADORES
INICIO:

CLRF RES3
CLRF RES2
CLRF RES1
CLRF RES0
MOVLW QBYTE ;PREPARA PARA A RECEPÇÃO COM NUMERO DE BITS A RECEBER
MOVWF BITCOUNTER

L0
BCF FLAG ;LIMPA FLAG E REGISTRADORES DE RECEPÇÃO
CLRF HC
CLRF LC
L1
;---------------------------------

BTFSS LRN ;TESTA BOTÃO 'LEARN' APERTADO
GOTO TAPAGAMENTO ;APERTADO, COMEÇA A CONTAR TEMPO MAX. DE APAGAMENTO
MOVLW TGR
MOVWF Z2 ;RECARGA DO TEMPO DE APAGAMENTO
CLRF Z1 ;LIMPA REGISTRADORES
L1H
GOTO SS5

TAPAGAMENTO ;APAGAR TODOS OS CONTROLES DA MEMÓRIA
DECFSZ Z1,F
GOTO L1H
DECFSZ Z2,F
GOTO L1H
CALL APAGAEEPROM ;ATINGIU TEMPO MAXIMO: APAGAR MEMÓRIA

BSF LED ;ACENDE LED (UMA PISCADA)
MOVLW .10
CALL DELAYM
BCF LED ;APAGA LED
MOVLW .10
CALL DELAYM
BSF LED ;ACENDE LED (UMA PISCADA)
MOVLW .10
CALL DELAYM
BCF LED ;APAGA LED
MOVLW .10
CALL DELAYM
BSF LED ;ACENDE LED (UMA PISCADA)
MOVLW .10
CALL DELAYM
BCF LED ;APAGA LED
MOVLW .10
CALL DELAYM

BTFSS LRN ;AGUARDA SOLTAR BOTÃO 'LEARN'
GOTO $-1
GOTO INICIO

;===================ROTINA DE RECEPÇÃO==========================
SS5:
;A

BTFSS FLAG ;TESTA FLAG DE HUM/ZERO RECEBIDO
GOTO L2 ;FLAG=0
;--------------------------------
;B
BTFSS SIN ;SIN ? TESTA SINAL DE ENTRADA DO RECEPTOR DE RF
GOTO M0 ; SIN=0
;----------------------------------
L2
;C
BTFSS SIN ;SIN ?
GOTO LA1 ;SIN=0
;-------------------------------------
;E
BSF FLAG ;SIN=1
INCF HC,F
BTFSC STATUS,Z
DECF HC,F
GOTO LA2 ;VAI CONTAR TEMPO DE 50 MICRO SEGUNDOS
;---------------------------------------------------------
LA1
;D
INCF LC,F ;INCREMENTA REGISTRADOR DE LOW SIGNAL NA ENTRADA RF
BTFSC STATUS,Z
DECF LC,F
LA2

MOVLW .11 ;.11 = 50 MICROSEG (ACERTA TEMPO ENTRE LEITURAS DA ENTRADA DE RF)
MOVWF CONT
DECFSZ CONT,F
GOTO $-1
GOTO L1




M0
;----------------------------------
;F
MOVFW LC ;TESTA SE NÃO PASSOU DO LIMITE MAXIMO DE TEMPO EM LOW NA ENTRADA DE RF
SUBLW TMAX
BTFSS STATUS,C
GOTO INICIO ;C=0 (-) - LC>TMAX (REJEITAR DADO - PAUSA INICIAL)
;F'

;-----------------------------------

;G
MOVFW HC ;OBTEM O VALOR DE 'CARRY'(HUM OU ZERO)
SUBWF LC,W

RRF RES3,F ;DESLOCA O BIT NOS REGISTRADORES DE RESULTADO
RRF RES2,F
RRF RES1,F
RRF RES0,F
;-------------------------------------
;H

DECFSZ BITCOUNTER,F ;DECREMENTA O CONTADOR DE BITS A SER RECEBIDO
GOTO L0 ;LE PROXIMO BIT

MOVLW .4 ;DESPREZA OS BITS DE 'ANTICODE' 1010
MOVWF BITCOUNTER
ACERTA
BCF STATUS,C
RRF RES3,F
RRF RES2,F
RRF RES1,F
RRF RES0,F ;RESULTADO FICA SOMENTE EM RES2 A RES0,DESPREZA RES3
DECFSZ BITCOUNTER,F
GOTO ACERTA



BTFSC FLAG1 ;TESTA SE É A PRIMEIRA OU A SEGUNDA RECEPÇÃO
GOTO PULA1
MOVFW RES2 ;SALVA A PRIMEIRA LEITURA PARA COMPARAÇÃO COM UMA SEGUNDA
MOVWF RES2A
MOVFW RES1
MOVWF RES1A
MOVFW RES0
MOVWF RES0A
BSF FLAG1 ;SETA FLAG DE PRIMEIRA RECEPÇÃO

GOTO INICIO
PULA1
BCF FLAG1 ;SEGUNDA RECEPÇÃO, COMPARA COM A PRIMEIRA
MOVFW RES2
XORWF RES2A,W
BTFSS STATUS,Z
GOTO RESETAC
MOVFW RES1
XORWF RES1A,W
BTFSS STATUS,Z
GOTO RESETAC
MOVFW RES0
XORWF RES0A,W
BTFSS STATUS,Z
GOTO RESETAC ;ERRO DE RECEPÇÁO
GOTO AÇÃO ;OK - BOA RECEPÇÃO

RESETAC
CLRF RES3A ; APAGA RESULTADOS DE COMPARAÇÃO
CLRF RES2A
CLRF RES1A
CLRF RES0A
GOTO INICIO




;-------------------------------------
AÇÃO
;===========================================================
;ROTINA PARA ELIMINAR RECEPÇÃO 'FFFFFF' (MEMÓRIA VIRGEM)
MOVFW RES2
XORLW 0XFF
BTFSS STATUS,Z
GOTO R_CONT
MOVFW RES1
XORLW 0XFF
BTFSS STATUS,Z
GOTO R_CONT
MOVFW RES0
XORLW 0XFF
BTFSS STATUS,Z
GOTO R_CONT
GOTO RESETAC ;RECEBEU 'FFFFFF' = ERRO

R_CONT
;========================================================
;I
BTFSS LRN ;BOTÃO ESTÁ APERTADO?
BSF FLAGGR
CALL PPT
MOVWF TMP_SALVO ; M1
SUBLW .0
BTFSC STATUS,Z ; É '0'?
GOTO APRENDER ;NENHUM CONTROLE FOI GRAVADO
MADDRESS
MOVFW TMP_SALVO
MOVWF ADDRESS
CALL EEREAD
XORWF RES2,W ;COMPARA COM RES2
BTFSS STATUS,Z
GOTO PROXIMO
DECF ADDRESS,F
MOVFW ADDRESS
CALL EEREAD
XORWF RES1,W ;COMPARA COM RES1
BTFSS STATUS,Z
GOTO PROXIMO
DECF ADDRESS,F
MOVFW ADDRESS
CALL EEREAD
XORWF RES0,W ;COMPARA COM RES0
BTFSC STATUS,Z
GOTO ACIONAR ;ENCONTRADO CONTROLE NA MEMÓRIA
PROXIMO ;VAI PARA O PROXIMO ENDEREÇO DE MEMÓRIA PROCURAR....


MOVLW .3
SUBWF TMP_SALVO,F ;ACERTA DE 3 EM 3 A POSIÇÃO DE BUSCA NA MEMÓRIA

BTFSS STATUS,C
GOTO APRENDER

BTFSS STATUS,Z
GOTO MADDRESS ;VOLTA A BUSCA


APRENDER
BTFSS FLAGGR ;TESTA SE BOTÃO 'LEARN' ESTÁ PRESSIONADO
GOTO INICIO ;NÃO ESTÁ.
CALL PPT ;ESTÁ, PEGA PONTEIRO
MOVWF ADDRESS ;PEGA O ENDEREÇO APONTADO
SUBLW 0X7E ;LIMITE MAXIMO DA EEPROM (128-1 /3= 42 BOTÕES OU 24 CONTROLES)
BTFSS STATUS,C
CLRF ADDRESS ;INICIA SOBREGRAVAÇÃO
INCF ADDRESS,F ;SOMA 1
MOVFW RES0
MOVWF TMP ;COLOCA EM 'TMP'
MOVFW ADDRESS ;DA O POSIÇÃO DE MEMORIA A SER GRAVADO
CALL EEWRITE ;ROTINA DE ESCRITA NA EEPROM
INCF ADDRESS,F ;PROXIMA POSIÇÃO DE ESCRITA NA EEPROM
MOVFW RES1
MOVWF TMP
MOVFW ADDRESS
CALL EEWRITE
INCF ADDRESS,F
MOVFW RES2
MOVWF TMP
MOVFW ADDRESS
CALL EEWRITE
MOVFW ADDRESS
MOVWF TMP
MOVLW .0
CALL EEWRITE ;GRAVA NOVO ENDEREÇO DE PONTEIRO
BCF FLAGGR
BTFSS LRN
GOTO $-1
MOVLW .10 ;TEMPO DE ATRASO
CALL DELAYM

BSF LED ;LIGA LED
MOVLW .10 ;TEMPO DE ATRASO
CALL DELAYM
BCF LED ;DESLIGA

ACIONAR

BTFSC RES2,7 ;TESTA QUAIS BOTÕES FORAM ACIONADOS NA TRANSMISSÃO
BSF LED1 ;ATIVA LED1
BTFSS RES2,7
BCF LED1 ;APAGA LED1

BTFSC RES2,6
BSF LED2 ;ATIVA LED2
BTFSS RES2,6
BCF LED2 ;APAGA LED2


MOVLW .20
CALL DELAYM ;TEMPO QUE SE MANTEM ACESOS
BCF LED1
BCF LED2
GOTO INICIO




;--------------------------------------------------------------
DELAYM
MOVWF R0
XC
CALL AGUARDE
DECFSZ R0,F
GOTO XC
RETURN

;****************************************************
;PEGA PONTEIRO NA EEPROM - ULTIMO ENDEREÇO
PPT
MOVLW .0
CALL EEREAD ;LE PONTEIRO DA EEPROM
RETURN

AGUARDE ;ROTINA DE ATRASO ENTRE OPERAÇÕES DE EEPROM

MOVLW .64
MOVWF R1
CG2
CLRWDT
MOVLW .255
MOVWF R2

DECFSZ R2,F
GOTO $-1
DECFSZ R1,F
GOTO CG2
RETURN


EEWRITE

; ******* EEPROM WRITE ENABLE ******************
;endereço esta em ADDRESS
;DADOS A ESCREVER ESTA EM TMP(MSB)


BANK1
movwf EEADR
BANK0
MOVFW TMP ;PEGA PRIMEIRO DADO
BANK1
movwf EEDATA
bcf EECON1, EEIF
bsf EECON1, WREN ; enable Write\par
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1, WR
WRITE_SN_A clrwdt
btfsc EECON1, WR ; Write complete ?\par
goto WRITE_SN_A
bcf EECON1, WREN ; disable Write\par
BANK0

clrwdt

ESPERA1 ;DELAY ENTRE APAGAMENTOS
CALL AGUARDE
RETURN



EEREAD
;endereço esta em ADDRESS
;DADOS LIDOS SERÃO ESCRITOS EM TMP0

clrwdt
; MOVFW ADDRESS

BANK1
movwf EEADR
bsf EECON1, RD ; do a read\par
clrwdt
btfsc EECON1, RD ; Read done ?\par
goto $-1
movf EEDATA,W
BANK0
MOVWF TMP ;RECUPERA PRIMEIRO NUMERO DA EEPROM
clrwdt

RETURN
;------------------------------------------------------------------------------
APAGAEEPROM ;OK TESTADA E APROVADA
; ROTINA PARA APAGAR TODAS AS POSIÇOES DA EEPROM DO 16F628



MOVLW 0X80 ;TOTAL DE 128 + 1 BYTES DE EEPROM
MOVWF AUX
RET6
CLRWDT
MOVFW AUX
MOVLW .1 ;ACERTA ENDEREÇO TIRANDO 1
SUBWF AUX,W
BANK1
movwf EEADR
MOVLW 0XFF
movwf EEDATA
bcf EECON1, EEIF
bsf EECON1, WREN ; enable Write\par
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1, WR
WRITE_SN_C clrwdt
btfsc EECON1, WR ; Write complete ?\par
goto WRITE_SN_C
bcf EECON1, WREN ; disable Write\par
BANK0
DECFSZ AUX,F
GOTO ESPERA
clrwdt
RETLW 0H
ESPERA ;DELAY ENTRE APAGAMENTOS
MOVLW .8
MOVWF R1
CG1
MOVLW .255
MOVWF R2

DECFSZ R2,F
GOTO $-1
DECFSZ R1,F
GOTO CG1
GOTO RET6

ORG H'2100'
DE .0

end
;

Postado

Estes exemplos e principalmente o último,foi programado em ASM justamente para ser gravado em Pics pequenos e uso com baterias pequenas.

Provavelmente não vai encontrar em C pois o código vai ficar maior,teria que começar do Zero realmenete ou alguem ja tentou fazer algo em C ou alguem vai ter que programar para voce,ja que não compreendeu a decofificação.

Postado

então emigo eu gostaria de entendeu como se decodifica esse bendito ht6p20b tem já tentei de tudo mais não encontro material didatico do funcionamento se eu pode eexemplo toda vez ele apertado o botão gera 24 bits exemplo 0b010100100011010110101010 eu queria saber e preciso guardar esses 24 bits dentro do eeprom do pic , tive lendo algumas coisa te achar um perido chamado piloto depois vem os dados .

Postado

bom pessoal diz amigo vou precisar que alguem faço um codigo em c se alguem mais tem que ser bem explicado ai nois negocia um preço pela progeto beleza....

Postado

Qual vai ser a utilização final?

Em vez de voce ficar que nem um louco tentando desvendar a decodificação em C,porque voce não usa o código ja testado e pronto em ASM??

Não é preciso entender ASM para utilizar o código todo,é muito fácil alguem colcar as rotinas que precisa no código ASM postado,pois as rotinas e temporizações não serão alteradas.

Postado

olá eu só querio aprender a decodificar esse bendito ht6p20b não quero so copia igual amigo eu quero aprender se for so para copiar eu não aprendo nada. se alguem tem um exemplo em c por favor ajuda repito o datasheet e muito ruim não é didatico por isso preciso de exemplo.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!