;************************************************************************** ; RX_3C_PR_HT6P_INV.ASM ; ; ; RECEPTOR RF PARA CONTROLE REMOTOS (CHAVEIRINHOS) COM CI HT6P20B ; DE 3 BOTÕES. ; ACIONA 3 CANAIS INDEPENDENTES, PROGRAMAVÉIS INDIVIDUALMENTE, EM ; MODO 'PULSO' OU 'RETENÇÃO', POR COLOCAR/RETIRAR JUMPERS. ; OBS. SEMPRE RESETAR AO MUDAR A CONFIGURAÇÃO DOS JUMPERS. ; ; PARA DECODIFICAR UTILIZA UM PIC 12F675 (OPCIONALMENTE UM 12F629, DES- ; COMENTANDO/COMENTANDO AS LINHAS CITADAS NO TEXTO). ; ; CLAUDIO LÁRIOS INICIO: 17-05-2013 TERMINO:18-05-2013 ; PARA USO DIDÁTICO APENAS. ; 3 SAIDAS DE CONTROLE: SAIDA 1 (PINO 6) ,SAIDA 2 (PINO 5) E SAIDA 3 ; ( PINO 3). ; ATENÇÃO: ANTES DE COMPILAR, ESCOLHAS SUAS DEFINIÇÕES ABAIXO (DEFINIÇÕES ; DE USUARIO) ;************************************************************************** ; USO DESTE RECEPTOR: ; GRAVAR CONTROLE: APERTE QUALQUER 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'. OS OUTROS BOTÕES JÁ SERÃO APRENDIDOS. ; 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. ;*************************************************************************** ; ;=================================================================================================================== ;DEFINIÇÕES DO USUARIO (DESCOMENTE A OPÇÃO DESEJADA E COMENTE AS OUTRAS) ;#DEFINE PIC_629 ;ESCOLHE MICROCONTROLADOR PIC12F629 #DEFINE PIC_675 ;ESCOLHE MICROCONTROLADOR PIC12F675 ;=================================================================================================================== ;DESCOMENTE PARA INVERTER A SAIDA ; #DEFINE INV_SAIDA_1 ;INVERTE A SAIDA 1 (PINO 6) #DEFINE INV_SAIDA_2 ;INVERTE A SAIDA 2 (PINO 5) #DEFINE INV_SAIDA_3 ;INVERTE A SAIDA 3 (PINO 3) ;=================================================================================================================== IFDEF PIC_675 LIST P=12f675 , R=DEC INCLUDE "P12F675.INC" ENDIF IFDEF PIC_629 LIST P=12f629 , R=DEC INCLUDE "P12F629.INC" ENDIF ;-------------------------- 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 FLAGLED1 FLAGS,3 ;FLAG DE SITUAÇÃO #DEFINE FLAGLED2 FLAGS,4 ;FLAG DE SITUAÇÃO #DEFINE FLAGLED3 FLAGS,5 ;FLAG DE SITUAÇÃO #DEFINE FLAGJ1 FLAGS1,0 ;FLAG DE SITUAÇÃO DO JUMPER 1 #DEFINE FLAGJ2 FLAGS1,1 ;FLAG DE SITUAÇÃO DO JUMPER 2 #DEFINE FLAGJ3 FLAGS1,2 ;FLAG DE SITUAÇÃO DO JUMPER 3 #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 SAIDA_2 GPIO,2 ;PINO 5- SAIDA DO LED2 #DEFINE SAIDA_1 GPIO,1 ;PINO 6- SAIDA DO LED1 #DEFINE SAIDA_3 GPIO,4 ;PINO 3- SAIDA DO LED3 CBLOCK 0X20 RES3,RES2,RES1,RES0,AUX,C3,C2,C1,C0,WS,TEMP,BITCOUNTER,FLAGS,FLAGS1,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,R3,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 INIT_TRISA EQU B'011111' ;TRIS_STATE INICIAL PARA TESTE DE JUMPER COLOCADOS 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: BANK1 CALL 0X3FF ;CALIBRA OSCILADOR INTERNO MOVWF OSCCAL MOVLW 0XFF MOVWF WPU ;LIGA PULL-UPS INDIVIDUAL MOVLW INIT_TRISA ; SETUP INICIAL TRISIO MOVLW TRISIO IFDEF PIC_675 MOVLW .0 MOVWF ANSEL ;LIBERA PORTAS DO AD (SOMENTE 12f675) ENDIF BANK0 MOVLW 0X07 MOVWF CMCON ;DESLIGA COMPARADORES CLRF OPTION_REG ;LIGA PULLUPS CLRF FLAGS ;APAGA REGISTRADOR DE FLAGS CLRF FLAGS1 BTFSS SAIDA_1 ;VERIFICA O ESTADO DOS JUMPERS EM J1,J2 E J3 BCF FLAGJ1 BTFSC SAIDA_1 BSF FLAGJ1 BTFSS SAIDA_2 BCF FLAGJ2 BTFSC SAIDA_2 BSF FLAGJ2 BTFSS SAIDA_3 BCF FLAGJ3 BTFSC SAIDA_3 BSF FLAGJ3 MOVLW YTRISA BANK1 MOVWF TRISIO ;VOLTA AO MODO NORMAL BANK0 CLRF GPIO ; RESET PORT IFDEF INV_SAIDA_1 BSF SAIDA_1 ENDIF IFDEF INV_SAIDA_2 BSF SAIDA_2 ENDIF IFDEF INV_SAIDA_3 BSF SAIDA_3 ENDIF 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 MOVLW .3 ;PISCA 3 VEZES MOVWF AUX2 BSF LED ;ACENDE LED (UMA PISCADA) MOVLW .10 CALL DELAYM BCF LED ;APAGA LED MOVLW .10 CALL DELAYM DECFSZ AUX2,F GOTO $-7 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 BTFSC FLAGJ1 GOTO YR6 IFDEF INV_SAIDA_1 BSF SAIDA_1 ;LIGA ELSE BCF SAIDA_1 ;APAGA LEDS SE ='0' ENDIF YR6 BTFSC FLAGJ2 GOTO YR7 IFDEF INV_SAIDA_2 BSF SAIDA_2 ELSE BCF SAIDA_2 ENDIF YR7 BTFSC FLAGJ3 GOTO YR8 IFDEF INV_SAIDA_3 BSF SAIDA_3 ELSE BCF SAIDA_3 ENDIF YR8 BCF FLAGLED3 BCF FLAGLED2 BCF FLAGLED1 INCF Y1,F INCF Y2,F J0 MOVLW .9 ;.9 = 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 MOVFW RES2 MOVWF RES3 ;SALVA RES2 EM RES3 MOVLW B'00111111' ANDWF RES2,F ;APAGA BOTÕES MOVFW RES2 ;ELIMINA CODIGO 0X000000 XORLW .0 BTFSC STATUS,Z GOTO RESETAC ;ERRO DE RECEPÇÁO MOVFW RES1 XORLW .0 BTFSC STATUS,Z GOTO RESETAC ;ERRO DE RECEPÇÁO MOVFW RES0 XORLW .0 BTFSC 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 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 ;================================================================================== MOVFW RES3 ;RECUPERA OS BOTÕES MOVWF RES2 ;================================================================================== BTFSS FLAGJ3 ;TESTA FLAG DE JUMPER 3 COLOCADO GOTO J3_MODO_PULSO ;VAI MODO PULSO (JUMPER COLOCADO) BTFSS RES2,7 ; MODO RETENÇÃO- TESTA SE OS DOIS BOTÕES ESTÃO ACIONADOS GOTO TESTA_JUMPER2 ; VAI TESTAR INDIVIDUALMENTE CADA BOTÃO BCF FLAGLED2 BTFSS RES2,6 GOTO TESTA_JUMPER1 ; VAI TESTAR INDIVIDUALMENTE CADA BOTÃO BTFSC FLAGLED3 GOTO KCONT BTFSS SAIDA_3 ;MUDA O ESTADO DA SAIDA 3 GOTO HG1 BCF SAIDA_3 ;DESLIGA SAIDA 3 GOTO KSET3 ;NÃO TESTA MAIS NADA HG1 BSF SAIDA_3 ;LIGA SAIDA 3 KSET3 BSF FLAGLED3 GOTO KCONT ;-------------------------- TESTA_JUMPER2 ;KJ5 BTFSS FLAGJ2 ;TESTA FLAG DE JUMPER 2 COLOCADO GOTO J2_MODO_PULSO BTFSS RES2,6 ;TESTA QUAIS BOTÕES FORAM ACIONADOS NA TRANSMISSÃO GOTO TESTA_JUMPER1 BCF FLAGLED3 BCF FLAGLED1 BTFSC FLAGLED2 GOTO KCONT BTFSS SAIDA_2 GOTO HG2A ;NÃO TESTA MAIS NADA BCF SAIDA_2 ;DESLIGA SAIDA 2 GOTO KSET2 HG2A BSF SAIDA_2 ;LIGA SAIDA 2 KSET2 BSF FLAGLED2 GOTO KCONT ;NÃO TESTA MAIS NADA ;============================================================= TESTA_JUMPER1 KJ6 BTFSS FLAGJ1 ;TESTA FLAG DE JUMPER 1 COLOCADO GOTO J1_MODO_PULSO BTFSS RES2,7 ;TESTA QUAIS BOTÕES FORAM ACIONADOS NA TRANSMISSÃO GOTO KCONT BCF FLAGLED3 BTFSC FLAGLED1 GOTO KCONT BTFSS SAIDA_1 GOTO HG3 BCF SAIDA_1 ;DESLIGA SAIDA 1 GOTO KSET1 ;NÃO TESTA MAIS NADA HG3 BSF SAIDA_1 ;LIGA SAIDA 1 KSET1 BSF FLAGLED1 GOTO KCONT ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;MODO PULSO ;ACIONA UMA UNICA SAIDA (BOTÃO N.1= SAIDA1 ;BOTÃO N.2 =SAIDA2 ;BOTÃO N.3 =SAIDA3) J3_MODO_PULSO BTFSS RES2,7 ; SE OS DOIS BOTÕES ESTIVEREM ACIONADOS GOTO TESTA_JUMPER2 BTFSS RES2,6 GOTO TESTA_JUMPER2 IFDEF INV_SAIDA_3 BCF SAIDA_3 ELSE BSF SAIDA_3 ;LIGA LED3 ENDIF BTFSC FLAGJ2 GOTO YR4 IFDEF INV_SAIDA_2 BSF SAIDA_2 ELSE BCF SAIDA_2 ;DESLIGA LED3 ENDIF YR4 BTFSC FLAGJ1 GOTO KCONT IFDEF INV_SAIDA_1 BSF SAIDA_1 ;LIGA ELSE BCF SAIDA_1 ;DESLIGA LED1 ENDIF GOTO KCONT ; PULA OS OUTROS TESTES SJ5 J2_MODO_PULSO BTFSS RES2,6 ;TESTA QUAIS BOTÕES FORAM ACIONADOS NA TRANSMISSÃO GOTO TESTA_JUMPER1 IFDEF INV_SAIDA_2 BCF SAIDA_2 ELSE BSF SAIDA_2 ;LIGA LED2 ENDIF BTFSC FLAGJ1 GOTO YR3 IFDEF INV_SAIDA_1 BSF SAIDA_1 ELSE BCF SAIDA_1 ;DESLIGA LED1 ENDIF YR3 BTFSC FLAGJ3 GOTO KCONT IFDEF INV_SAIDA_3 BSF SAIDA_3 ELSE BCF SAIDA_3 ;LIGA LED3 ENDIF GOTO KCONT J1_MODO_PULSO SJ7 BTFSS RES2,7 ;TESTA QUAIS BOTÕES FORAM ACIONADOS NA TRANSMISSÃO GOTO KCONT IFDEF INV_SAIDA_1 BCF SAIDA_1 ELSE BSF SAIDA_1 ;LIGA LED3 ENDIF BTFSC FLAGJ2 GOTO YR5 IFDEF INV_SAIDA_2 BSF SAIDA_2 ELSE BCF SAIDA_2 ;LIGA LED3 ENDIF YR5 BTFSC FLAGJ3 GOTO KCONT IFDEF INV_SAIDA_3 BSF SAIDA_3 ELSE BCF SAIDA_3 ;LIGA LED3 ENDIF KCONT SJ6 MOVLW T_DESL_LED ;RECARGA DO TEMPORIZADOR DE DESLIGAMENTO MOVWF Y2 MOVLW .255 MOVWF Y1 GOTO INICIO ;**************************************************** ;PEGA PONTEIRO NA EEPROM - ULTIMO ENDEREÇO PPT MOVLW .0 CALL EEREAD ;LE PONTEIRO DA EEPROM RETURN ;-------------------------------------------------------------- DELAYM ; DELAY= 50 milisegundos X 'W' MOVWF R0 XC CALL AGUARDE DECFSZ R0,F GOTO XC RETURN AGUARDE ; ROTINA DE ATRASO ENTRE OPERAÇÕES DE EEPROM (50 MSEG) MOVLW .50 MOVWF R2 CALL DELAY_1MS ;ROTINA DE 1 MILISEGUNDOS DECFSZ R2,F GOTO $-2 RETURN DELAY_1MS MOVLW .199 MOVWF R1 CLRWDT NOP DECFSZ R1,F GOTO $-3 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 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