RECEPTOR DE CONTROLE REMOTO GENERICO PARA HT6P20B COM PIC 12F629/675

Decodificar transmissores de controle remoto que usam o ci HT6P20B não é algo muito dificil de se fazer. Para ajudar os que desejam implementar aplicações com este circuito integrado, segue esta sugestão.

Adquirindo um controle remoto comercial (qualquer um usado em alarmes, portões, etc que use o HT6P20B) , carregando o código hex no microcontrolador PIC 12F629, e colocando na mesma placa do receptor de controle remoto genérico já publicado, você terá a opção de fazer experiências interessantes ou ainda , agregar a uma aplicação que deseje fazer ou usar. O programa permite a captura dos 24 bits enviados pelo transmissor (chaveirinho) e testa se já existe este endereço gravado na EEprom. Se tiver, testará os bit 6 e 7 da ultima palavra transmitida, que contem a chave apertada. Conforme o botão apertado, acenderá o Led1 ou Led2, por um período de 0,5 segundo e apaga de novo. Se manter o botão apertado, irá continuar aceso. Caso o endereço não esteja gravado na EEprom, necessitará ser ‘aprendido’ apertando o botão ‘learn’ na placa e acionando um dos botões do controle remoto. Após piscar uma vez o ‘ led learn’ na placa, terá sido bem sucedido a operação de aprendizado.
O HT6P20B já vem de fabrica programado com o ‘serial number’ que é recebido , com mais 2 bits que correspondem aos 2 botões (S1 e S2) nos pinos 1 e 2 do HT6P20B.
Mais informações, veja o datasheet do HT6P20B.
Para gravar o código hex no chip, poderá usar o SIMPLES PROGRAMADOR DE PIC e um software programador como o ‘WINPIC2000′, que é uma mão na roda para todos os hobistas.

Para obter uma versão em ‘C’, veja o artigo “RECEPTOR GENERICO FLEX – UM PROGRAMA PARA VARIAS OPÇÕES DE CIRCUITOS INTEGRADOS – COM PIC 12F675/629″> ‘RECEPTOR GENERICO FLEX – UM PROGRAMA PARA VARIAS OPÇÕES DE CIRCUITOS INTEGRADOS – COM PIC 12F675/629’ deste blog.

Segue abaixo o arquivo ASM:

RX_GEN_HT6P20_V3P1_ASM

Segue abaixo o arquivo HEX a ser gravado no chip PIC 12F629:

RX_GEN_HT6P20_V3P1_HEX

A versão acima está dando um bug ao programar 42 botões de controle, sendo operacional com menos. Segue abaixo pasta com arquivos de uma versão corrigida e melhorada. Foi alterado o modo de programar e ao atingir 42 botões aprendidos, o led ‘learn’ piscará para indicar memória cheia:

RX_GEN_HT6P20_V3P2_ASM

Clique aqui para ver o esquema da placa genérica.

Clique aqui para ver a sugestão da placa de circuito impresso.

clique aqui para ver a montagem dos componentes na placa visto pelo lado cobreado e lista de materiais.

Segue abaixo versão ASM/HEX que quando mantém o botão apertado, o led se mantém aceso, sem piscar:

RX_GEN_HT6P_V4P1_ASM

RX_GEN_HT6P_V4P1_HEX

Segue abaixo versão idêntica ao acima, mas com opção de inverter a saída no código Asm:

RX_GEN_HT6P20B_V41_INVERTIDO_ASM

RX_GEN_HT6P20B_V41_INVERT_HEX

Segue versão para 3 leds com aprimoramentos:

RX_GEN_HT6P_V5P1_ASM

RX_GEN_HT6P_V5P1_HEX

Segue arquivo ASM (versão 6) com opção de usar o pino 3 como entrada para uma chave seletora para modo ‘PULSO/RETENÇÃO’:

RX_GEN_629_V6P1_ASM

Segue arquivo HEX (versão 6):

RX_GEN_629_V6P1_HEX

Segue esquema de ligação (versão 6):

Na versão 7, com opção de usar mais um led (led3) no pino 3, podendo ser alterado o programa para modo ‘PULSO’ ou ‘RETENÇÃO’, por comentar e descomentar na ‘opção de usuário’ do arquivo ASM e recompilar. Para facilitar, segue uma pasta com arquivos compilados para modo PULSO e outra para modo RETENÇÃO, atualizada em 15/10/2017:

RX_GEN_HT6P20_V7_PULSO_

RX_GEN_HT6P20_V7_RET_

Segue vídeo caseiro do funcionamento da versão 7 em modo retenção:

Segue arquivo ASM para versão acima, mas com inversão das saídas no modo Pulso (alterável no linha de código como opção).

RX_GEN_HT6P_V7P1_INVERTIDO_ASM

Segue arquivo HEX para versão acima:

RX_GEN_HT6P_V7P1_INVERTIDO_HEX

Segue esquema para versão 7 abaixo:

Segue arquivo ASM para versão 8 (apenas didática, apresentando como podemos piscar os led’s na saída por um número de vezes, alterar qual saída fará isto, piscar mais de um led junto, alterar tempo aceso dos led’s , alterar tempo apagado, etc.

RX_GEN_629_V8BP1_ASM

Segue o arquivo ASM para versão 9 (idem versão 6, mas com aprendizado individual de controles, para poder usar um controle
com uma ou mais placa):

RX_GEN_629_V9AP1_ASM

Segue o arquivo HEX para a versão 9:

RX_GEN_629_V9AP1_HEX

Os arquivos abaixo permitem operação mista, entre retenção e pulso.
Acionando o botão 1 apenas, obtemos acendimento do led1 e se soltar, apaga. O mesmo com o botão 2 e led2 (modo pulso).
Mas se apertar os dois juntos, acende o led 3. Soltando-os e apertando-os de novo, apaga (retenção no led 3)
Obs. Necessita de pull up no pino 3 para funcionar. Veja esquema abaixo da V10.

Segue o arquivo ASM para a versão 10:

RX_GEN_629_V10P1_ASM

Segue o arquivo Hex para versão 10:

RX_GEN_629_V10P1_HEX

Segue o esquema para versão 10:

Esquema v10

Segue pasta zipada com versão 11 (14/07/2015) com 3 canais, programável no arquivo “C” (Compilador CCS C) por comentar/descomentar as linhas, para funcionar em modo retenção ou pulso, saída normal ou invertida, de forma individual para cada canal. Rotina de recepção alterada para testar cada parte do bit recebido (em teste):

RX_GEN_675_V11

Veja também o artigo:‘RECEPTOR DE 3 CANAIS PARA USO COM CONTROLE REMOTO (CI HT6P20B) E PULSO/RETENÇÃO INDIVIDUAL- COM PIC 12F675’

Segue abaixo uma versão de 1 canal, modo pulso, feito em “C” no compilador MPLAB-IDE XC8:

RX_HT6P20B_PULSO_XC8

Segue abaixo uma versão de 1 canal, modo retenção, feito em “C” no compilador MPLAB-IDE XC8:

RX_HT6P_XC8_RET

Links:
datasheet 12f629

Curiosidades:
controle remoto e o efeito estufa
ataques cibernéticos
Comportamento anti-colisão dos peixes
Jóqueis-robos para camelos

Outros assuntos:
Como acabar com a tática do silêncio
Os milagres são possíveis – 3 objeções
Como enfrentar o bullying sem ter de partir para a briga (animação)
Como criar filhos responsáveis
Como administrar o seu dinheiro
Ensine valores morais a seus filhos
Ensine seus filhos bons principios com atividades de colorir
Como posso ter ânimo para exercitar
Como posso controlar meu peso?
Entrevista com um bioquímico
Adolescentes- O que fazer se estou sofrendo bullying?
Como evitar ferir com palavras?
Como tratar seu cônjuge com respeito?

Até o próximo artigo!!!

248 comments on “RECEPTOR DE CONTROLE REMOTO GENERICO PARA HT6P20B COM PIC 12F629/675

  1. lario fiz os procedimentos conforme sua orientação,continua sem compilar vou baixar uma outra versão do mplab pode ser que seja isto.pois outros arquivos eu compilo normal e este nem o arquivo original não quer compilar.rsrsrrs

  2. hem lario o hex da versão 6 está ok eu apenas não conseguir foi mudar de pic. quando compilo aprensenta
    erro 115, dai nao consigo decifrar o que o meu amigo compilador está querendo me dizer.rsrrs

    1. Olá José! Verifique, por favor, se não está havendo um ‘label’ repetido. Ao mudar de pic, de 629 para 675, e vice-versa, certifique de comentar um e descomentar o outro, senão não funciona.
      ;ESCOLHA APENAS UM MODELO MICROCONTROLADOR
      ;(DESCOMENTE A OPÇÃO DESEJADA E COMENTE AS OUTRAS, NUNCA AS 2 OPÇÕES)

      #DEFINE PIC_629 ;ESCOLHE MICROCONTROLADOR PIC12F629 ;para 629
      ;#DEFINE PIC_675 ;ESCOLHE MICROCONTROLADOR PIC12F675

      ou

      ;ESCOLHA APENAS UM MODELO MICROCONTROLADOR
      ;(DESCOMENTE A OPÇÃO DESEJADA E COMENTE AS OUTRAS, NUNCA AS 2 OPÇÕES)

      ;#DEFINE PIC_629 ;ESCOLHE MICROCONTROLADOR PIC12F629
      #DEFINE PIC_675 ;ESCOLHE MICROCONTROLADOR PIC12F675 ;para 675
      Claudio

  3. olá claudio depois que recebir meu chaveirinho ht6p
    montei varios projetos contido neste site,so estou um pouco intrigado é que nao conseguir compilar a versão 6 deste receptor RX_GEN_629_V6P1_ASM será que voce poderia me dar uma ajudinha quero usar o pic 12f675,nem mesmo o 629 não compila.fico no aguardo abraço

  4. Eu quero parabenizar Claudio Larios, pelo que tem feito para o leitor, mais não estou conseguindo copilar pelo arquivo que postou, eu uso picburne.
    tem como você me passar o arquivo copilado do receptor(12f629) para controles 6p20 por e-mail,
    obrigado pela atenção.
    Rodrigo

    1. Olá Rodrigo! Obrigado por seu comentário encorajador. Você poderá baixar o arquivo desejado deste blog, com extensão de texto (_hex) e salva-lo com extensão .hex. Se tiver problemas, mesmo assim, use o WinPic800 (gratuito) para abrir o arquivo _hex fornecido. Escolha o microcontrolador igual ao usado no _hex, senão dará mensagem de erro de microcontrolador (por tamanho do arquivo). Note que na hora que você for ‘abrir’ o arquivo no WinPic800, deverá mudar o filtro do ‘tipo’ de *.hex para *.* . Após abrir, salve-o como arquivo *.hex, em uma pasta de sua preferencia e com o nome desejado. Com este arquivo terá que abrir.
      Claudio

  5. Olá Larios!! Estão muito bons os projetos postados… muito legal mesmo essa iniciativa. Olha só, to precisando de um receptor muito parecido com esse, só que gostaria que só tivesse uma saída… ou seja, que ele aprendesse, por exemplo, os três botões de controle e, independentemente do botão pressionado, fosse enviado um PULSO na saída existente… pesquisei muitas vezes nas várias opções aqui disponíveis, mas não encontrei uma que tivesse essa característica… Tem como verificar isso pra mim??? Abraço e parabéns pelo trabalho.

    1. Olá Waymovie!
      Infelizmente, não dá para fazer todas as combinações possÍveis de receptores. Mas poderá usar o ASM da versão ‘RX_GEN_HT6P_V4P1_ASM’ e altera-la para o modo que deseja.
      Faça o seguinte:

      Nas parte de ‘DEFINES’, escolha para uma única saída por fazer o seguinte:
      DE:
      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

      para

      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 ;<——————-deixe iguais
      #DEFINE LED1 GPIO,2 ;PINO 5- SAIDA DO LED2 ;<——————- estes dois (poderia ser o outro pino também, nos dois)

      Escolha o modelo do microcontrolador por comentar/descomentar as linhas no programa em:

      ; DESCOMENTAR/COMENTAR CONFORME MODELO ESCOLHIDO
      ; LIST P=12f675 , R=DEC
      LIST P=12f629 , R=DEC
      ; INCLUDE "P12F675.INC"
      INCLUDE "P12F629.INC"

      e também:

      ;DESCOMENTAR ABAIXO PARA 12F675
      ; BANK1
      ; MOVLW .0
      ; MOVWF ANSEL ;LIBERA PORTAS DO AD (somente 12f675)
      ; BANK0

      Em seguida, recomplie e use o Hex gerado para gravar o pic.

      Claudio

        1. Putz, Larios… Dessa vez não funcionou. Fiz conforme tu disse, recompilei usando o 12F629 e funciona somente um botao do controle… o outro botao é da uma piscadinha bem de leve, mas com o multimetro nem consegui medir a tensão, de tão fraquinha…. Confirma se a alteração que tem que fazer é só essa… Tentei com a versão RX_GEN_HT6P20_V3P1_ASM, mas tb não rolou. Aguardo

          1. Olá Waymovie!
            Não fique estressado com isto. Tenha certeza que é uma coisa simples. O segredo está em não desistir.
            Pode ‘colar’ o seu arquivo asm no comentário para dar uma olhada?
            Claudio

          2. Opa…. consegui o arquivo… ta aí. Abç..

            ;**************************************************************************
            ; RX_GEN_HT6P20B_V4P1.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)

            ; VERSÃO4: MANTÉM LEDS ACESOS ENQUANTO BOTÃO FICAR PRESSIONADO (NÃO PISCA)
            ;**************************************************************************
            ;
            ; 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 ;<——————-deixe iguais
            #DEFINE LED1 GPIO,2 ;PINO 5- SAIDA DO LED2 ;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?7
            BSF FLAGGR
            CALL PPT
            MOVWF TMP_SALVO ;SALVA TMP
            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 T_DESL_LED ;RECARGA DO TEMPORIZADOR DE DESLIGAMENTO
            MOVWF Y2
            MOVLW .255
            MOVWF Y1

            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

          3. Olá Waymovie! Olhando por cima, já percebi que o asm está incompleto, faltando toda a parte de inicialização. Talvez na hora que você arrastou e colou, perdeu parte do arquivo.
            Pegue o ASM original da versão 4 e salve com outro nome. Altere conforme te expliquei e recompile.
            Cláudio

          4. Buenas!! Larios… fiz o procedimento bem na manha, e ainda apresentou problema… funciona o aprendizado e apagamento dos controles normalmente, funciona somente um botao (fica aceso enquanto o botao é pressionado) e o outro botao, quando pressionado, apresenta inumeras piscadinhas bem fraquinhas… segue o o novo asm que foi gerado no teste:

            ;**************************************************************************
            ; RX_GEN_HT6P20B_V4P1.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)

            ; VERSÃO4: MANTÉM LEDS ACESOS ENQUANTO BOTÃO FICAR PRESSIONADO (NÃO PISCA)
            ;**************************************************************************
            ;
            ; 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,2 ;PINO 5- SAIDA DO LED2

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

            T_DESL_LED EQU .20 ;TEMPO MÁXIMO QUE LEDS FICAM ACESOS APÓS CESSAR TRANSMISSÃO

            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

            DECFSZ Y1,F ;CONTADOR DE TEMPO DE DESLIGAMENTO DE SAIDAS
            GOTO J0
            DECFSZ Y2,F ;CONTADOR DE TEMPO DE DESLIGAMENTO DE SAIDAS
            GOTO J0
            BCF LED1 ;APAGA LEDS
            BCF LED2
            INCF Y1,F
            INCF Y2,F
            J0

            MOVLW .11 ;.11 = 80 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?7
            BSF FLAGGR
            CALL PPT
            MOVWF TMP_SALVO ;SALVA TMP
            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 T_DESL_LED ;RECARGA DO TEMPORIZADOR DE DESLIGAMENTO
            MOVWF Y2
            MOVLW .255
            MOVWF Y1

            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

          5. Olá Waymovie!
            Você está indo bem.
            Analizando melhor o programa, necessitaremos alterar a seguinte porção:

            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 T_DESL_LED ;RECARGA DO TEMPORIZADOR DE DESLIGAMENTO
            MOVWF Y2
            MOVLW .255
            MOVWF Y1

            GOTO INICIO

            TROQUE POR ESTA PORÇÃO DE CÓDIGO:

            ACIONAR

            BTFSC RES2,7 ;TESTA QUAIS BOTÕES FORAM ACIONADOS NA TRANSMISSÃO
            GOTO LIGAR
            BTFSC RES2,6
            GOTO LIGAR
            BCF LED2 ;APAGA LED2
            BCF LED1; APAGAR LED1
            GOTO PUL_APAG
            LIGAR:
            BSF LED1 ;ATIVA LED1
            BSF LED2 ;ATIVA LED2
            PUL_APAG:
            MOVLW T_DESL_LED ;RECARGA DO TEMPORIZADOR DE DESLIGAMENTO
            MOVWF Y2
            MOVLW .255
            MOVWF Y1

            GOTO INICIO

Comments are closed.

Back To Top