;**************************************************************************************** ; CERCA_ELET.ASM ; ; CERCA ELETRIFICADORA DE PERIMETROS COM ALARME DE ROMPIMENTO/ATERRAMENTO ; COM CONTROLE REMOTO PARA LIGAR E DESLIGAR. ; USA CONTROLE REMOTOS (CHAVEIRINHOS) COM CI HT6P20B (COMERCIAIS QUAISQUER) ; ; PARA DECODIFICAR UTILIZA UM PIC 12F629. ; ; CLAUDIO LÁRIOS INICIO: 01-09-2012 TERMINO:05-09-2012 ;*************************************************************************************** ; ; 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. APRENDE ATÉ ; 40 CONTROLES REMOTOS. ;************************************************************************************** ; 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. ;************************************************************************************** ; ; GRAVAR CONTROLE: APERTE UM BOTÃO DO CONTROLE E MANTENHA APERTADO. ; APERTE TAMBÉM O BOTÃO 'LEARN' NA PLACA (PINO 2 DO PIC 12F629 A MASSA)E ; SOLTE-O EM MENOS DE 2 SEGUNDOS. O LED VERMELHO PISCARÁ 1 ; VEZ, PARA INDICAR SUCESSO. REPITA ISTO 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 VERMELHO PISCARÁ 3 VEZES , INDICANDO O PLENO APAGAMENTO DE TODOS OS CONTROLES ; DA MEMÓRIA. APÓS ISTO, CADA CONTROLE DEVERÁ SER 'REAPRENDIDO' NOVAMENTE PARA OPERAR. ;************************************************************************************** ;======================================================================================= ; DEFINIÇÕES DO USUÁRIO (DESCOMENTE A OPÇÃO ESCOLHIDA E COMENTE AS OUTRAS) ; ; OPÇÕES DE TEMPO DE SIRENE LIGADA ;#DEFINE DISPARA_POR_2MIN ;SIRENE DISPARA POR 2 MIN. AO QUEBRAR/ATERRAR ARAME ;#DEFINE DISPARA_POR_4MIN ;SIRENE DISPARA POR 4 MIN. AO QUEBRAR/ATERRAR ARAME #DEFINE DISPARA_POR_8MIN ;SIRENE DISPARA POR 8 MIN. AO QUEBRAR/ATERRAR ARAME ; OPÇÕES DE MICROCONTROLADOR: #DEFINE PIC629 ;ESCOLHE PIC12F629 ;#DEFINE PIC675 ;ESCOLHE PIC12F675 (OPCIONALMENTE) ;======================================================================================= IFDEF PIC675 INCLUDE "P12F675.INC" LIST P=12f675 , R=DEC ENDIF IFDEF PIC629 INCLUDE "P12F629.INC" LIST P=12f629 , R=DEC ENDIF ERRORLEVEL -302 __CONFIG _CP_OFF & _PWRTE_ON & _WDT_ON & _INTRC_OSC_NOCLKOUT & _BODEN_ON & _MCLRE_OFF #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK0 DE MEMORIA #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK1 ; FLAGS GERAIS #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 FLAGON FLAGS,3 ;FLAG ON/OFF #DEFINE FLAGPWM FLAGS,4 ;FLAG PWM #DEFINE FLAG_PWM_CICLO FLAGS,5 ;FLAG CICLO DO PWM #DEFINE FLAG_VIO FLAGS,6 ;FLAG VIOLAÇÃO DA CERCA #DEFINE FLAG_SENSOR FLAGS,7 ;FLAG SITUAÇÃO INICIAL APÓS LIGAR (TEMPO PARA PRIMEIRO PULSO DE ALTA TENSÃO) #DEFINE FLAG_RESETADO FLAGS1,0 ;FLAG INDICADOR DE RESET INICIAL PARA UMA CONTAGEM DE TEMPO (USO NO APAGAMENTO DA EEPROM) #DEFINE FLAG_RESETADO1 FLAGS1,1 ;FLAG INDICADOR DE RESET INICIAL PARA UMA CONTAGEM DE TEMPO (USO NO TEMPO DE SIRENE LIGADA) ;DEFINIÇÕES DAS PORTAS DO PIC #DEFINE SENSOR GPIO,4 ;PINO 3 IN PULSO (SENSOR DE RETORNO DA ALTA TENSÃO) #DEFINE SIN GPIO,3 ;PINO 4 IN RF #DEFINE LRN GPIO,5 ;PINO 2 IN LEARN BOTTON #DEFINE LED GPIO,5 ;PINO 2 OUT LED (MESMO PINO DO ACIMA) #DEFINE ON GPIO,2 ;PINO 5- SAIDA ON/OFF #DEFINE SIRENE GPIO,1 ;PINO 6- SAIDA PARA RELE QUE ACIONARÁ A SIRENE #DEFINE TRIAC GPIO,0 ;PINO 7- SAIDA DE DISPARO DO TRIAC CBLOCK 0X20 RES3,RES2,RES1,RES0,AUX,WS,TEMP,BITCOUNTER,FLAGS,FLAGS1,W_TEMP,STATUS_TEMP,TS3,TS2,TS1,CT1_HI,CT1_LW LC,CONT,RES3A,RES2A,RES1A,RES0A,R0,R1,R2,TMP1,ADDRESS,TMP,HC,AUX3,P1,P2,Y1,Y2,CT_HI,CT_LW, NUM_PULSO ENDC YTRIS EQU B'111000' ; PORTA: TRI-STATE VALUE GP5 LED/LRN COMO ENTRADA INICIALMENTE TMAX EQU .50 ;TEMPO MAXIMO DO SINAL LOW (RECEPÇÃO DE SINAL RF) QBYTE EQU .28 ;QUANTIDADE DE BYTES A SER RECEBIDO (22 ADRESS+ 2 DADO+ 4 ANTICODE) QPULSOS EQU .3 ; NUMERO MAXIMO DE PULSOS DE ALTA TENSÃO APÓS ATERRAMENTO/VIOLAÇÃO ;********************************************************************************************************** ORG 0X00 GOTO START ;VAI PARA O INICIALIZAÇÃO DO PROGRAMA ;========================================================================================================== ORG 0X04 RETFIE ;========================================================================================================== ; INICIALIZAÇÃO DE PORTAS E FLAGS START: MOVLW 0X07 MOVWF CMCON ;DESLIGA COMPARADORES MOVLW B'000111' ; SETUP TIMER0 PRESCALER OPTION CLRF GPIO ; RESET PORT MOVLW YTRIS ; SETUP PORTA TRIS GPIO CLRF CT_HI ;CLEAR REGISTRADORES CLRF CT_LW CLRF NUM_PULSO BCF ON ;DESLIGA ALARME IFDEF PIC675 BANK1 MOVLW .0 MOVWF ANSEL ;LIBERA PORTAS DO AD (SOMENTE PARA CHIP 12F675 :DESCOMENTAR E MUDAR CABEÇALHO) BANK0 ENDIF CLRF FLAGS ;LIMPA FLAGS INICIAL MOVLW .127 CALL EEREAD ;BUSCA SITUAÇÃO ON/OFF MOVWF AUX DECFSZ AUX,F ;TESTA SE ERA '1' OU '0' GOTO F2 BSF FLAGON ;('1') RELIGAR,SE JÁ ESTAVA LIGADO (QUEDA DE ENERGIA,RESET POR INTERFERENCIA) F2 MOVLW .126 CALL EEREAD ;BUSCA SITUAÇÃO ON/OFF DA SIRENE MOVWF AUX DECFSZ AUX,F ;TESTA SE ERA '1' OU '0' GOTO INICIO BSF SIRENE ;('1') RELIGAR,SE JÁ ESTAVA LIGADO ('RESET' POR INTERFERENCIA/WDT) INICIO: CLRWDT ;LIMPA WDT CLRF RES3 ;LIMPA REGISTRADORES DE RECEPÇÃO DE SINAL DE CONTROLE REMOTO CLRF RES2 CLRF RES1 CLRF RES0 MOVLW QBYTE ;NUMERO DE BIT A RECEBER MOVWF BITCOUNTER ;CONTADOR DE QUANTIDADE DE BITS RECEBIDOS L0 BCF FLAG CLRF HC CLRF LC L1 ;--------------------------------- BCF TRIAC ;REDUNDÂNCIA BTFSS FLAGON BCF ON ;DESLIGA OSCILADOR DE ALTA TENSÃO BTFSC FLAGON BSF ON ;LIGA OSCILADOR DE ALTA TENSÃO BTFSC FLAGON GOTO SKL1 BCF SIRENE BCF FLAG_RESETADO1 BTFSS FLAGON GOTO L1J SKL1 DISPARA_TRIAC CALL UPDATA_TIMERS ; ***** TESTA SE ATINGIU TEMPO DE 1 SEGUNDO ********** BTFSS CT_LW,5 GOTO TS203 BCF ON ;DESLIGA OSCILADOR BSF TRIAC ;DISPARA TRIAC NOP NOP NOP NOP NOP BCF TRIAC ;DESLIGA TRIAC BSF ON ;LIGA OSCILADOR CLRF CT_LW ;ZERA CONTADORES DE TEMPO CLRF CT_HI BTFSC SENSOR ;TESTA SE TEM RETORNO DE ALTA TENSÃO INCF NUM_PULSO,F BTFSS SENSOR CLRF NUM_PULSO MOVFW NUM_PULSO SUBLW QPULSOS BTFSC STATUS,C GOTO TS203 BTFSC FLAG_VIO ;SE SIRENE FOI ACIONADA UMA VEZ, NÃO ACIONA MAIS GOTO TS203 BTFSC SIRENE GOTO SIRENE_LIGADA BSF SIRENE ;DISPARA SIRENE CLRF NUM_PULSO CALL RESETA_TIMER_AUX ;RESETA CONTADOR AUXILIAR PARA CONTAR TEMPO DA SIRENE LIGADA MOVLW .1 ;ESCREVE NA MEMÓRIA A SITUAÇÃO DA 'SIRENE' LIGADA MOVWF TMP MOVLW .126 CALL EEWRITE TS203 BTFSS SIRENE ;SE SIRENE ESTIVER ACIONADA GOTO L1J SIRENE_LIGADA CALL UPDATA_TIMERS BTFSS SENSOR ;TESTA SE FOI ROMPIMENTO DO ARAME OU ATERRAMENTO OCASIONAL GOTO DISP_CURTO ; TESTA TEMPO QUE A SIRENE FICARÁ DISPARADA (ALTERE A GOSTO NO INICIO DO PROGRAMA, NAS DEFINIÇÕES) IFDEF DISPARA_POR_2MIN BTFSS CT1_HI,4 ;TESTA POR 2MIN (5=4MIN/6=8MIN) ENDIF IFDEF DISPARA_POR_4MIN BTFSS CT1_HI,5 ;TESTA POR 2MIN (5=4MIN/6=8MIN) ENDIF IFDEF DISPARA_POR_8MIN BTFSS CT1_HI,6 ;TESTA POR 2MIN (5=4MIN/6=8MIN) ENDIF GOTO L1J LVW BCF SIRENE ;DESLIGA SIRENE BCF FLAG_RESETADO1 CLRF NUM_PULSO MOVLW .0 ;ESCREVE NA MEMÓRIA A SITUAÇÃO DA 'SIRENE' DESLIGADA MOVWF TMP MOVLW .126 CALL EEWRITE BTFSC SENSOR ;SE ARAME FOI QUEBRADO, TOCA UMA UNICA VEZ BSF FLAG_VIO GOTO L1J DISP_CURTO BTFSC CT1_HI,2 ;TESTA POR 30 SEG (2= 30SEG/ 3= 1MIN/ 4= 2MIN/ 5=4MIN/ 6= 8MIN) GOTO LVW L1J BTFSS LRN GOTO TAPAGAMENTO BCF FLAG_RESETADO ;APAGA FLAG DE RESET INICIAL DO TIMER AUXILIAR GOTO SS5 TAPAGAMENTO BCF FLAGON ;DESLIGA CERCA BTFSC FLAG_RESETADO GOTO CONT78 BSF FLAG_RESETADO CALL RESETA_TIMER_AUX CONT78 CALL UPDATA_TIMERS BTFSS CT1_HI,0 ;TESTA POR 8 SEGUNDOS GOTO SS5 CALL APAGAEEPROM ;CHEGOU A 8 SEGUNDOS, APAGAR BANK1 BCF TRISIO,5 ;VIRA SAIDA BANK0 BSF LED ;APAGA LED (UMA PISCADA) MOVLW .10 CALL DELAYM BCF LED ;ACENDE LED MOVLW .10 CALL DELAYM BSF LED ;APAGA LED (UMA PISCADA) MOVLW .10 CALL DELAYM BCF LED ;ACENDE LED MOVLW .10 CALL DELAYM BSF LED ;APAGA LED (UMA PISCADA) MOVLW .10 CALL DELAYM BCF LED ;ACENDE LED MOVLW .10 CALL DELAYM BANK1 BSF TRISIO,5 ;VIRA ENTRADA BANK0 BTFSS LRN ;AGUARDA SOLTAR BOTÃO 'LEARN' GOTO $-1 GOTO INICIO SS5: ;A CLRWDT 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 ;.12 = 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) ;----------------------------------- ;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ÇÃO1 ;OK - BOA RECEPÇÃO AÇÃO1 MOVFW RES2 ;EVITA GRAVAÇÃO COM '000000' XORLW .0 BTFSC STATUS,Z GOTO RESETAC MOVFW RES1 XORLW .0 BTFSC STATUS,Z GOTO RESETAC MOVFW RES0 XORLW .0 BTFSC STATUS,Z GOTO RESETAC ;ERRO DE RECEPÇÁO GOTO AÇÃO RESETAC CLRF RES3A ; APAGA RESULTADOS DE COMPARAÇÃO CLRF RES2A CLRF RES1A CLRF RES0A GOTO INICIO ;------------------------------------- AÇÃO ;I BTFSS LRN ;BOTÃO ESTÁ APERTADO? BSF FLAGGR CALL PPT SUBLW .0 BTFSC STATUS,Z ; É '0'? GOTO APRENDER ;NENHUM CONTROLE FOI GRAVADO MADDRESS MOVFW TMP MOVWF ADDRESS CALL EEREAD MOVFW RES2 MOVWF TMP1 BCF TMP1,7 ;APAGA DADOS BCF TMP1,6 MOVFW TMP1 XORWF TMP,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 MOVFW ADDRESS MOVWF TMP MOVLW .3 SUBWF TMP,F ;ACERTA DE 3 EM 3 A POSIÇÃO DE BUSCA NA MEMÓRIA BTFSS STATUS,Z GOTO MADDRESS 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 0X78 ;LIMITE MAXIMO DA EEPROM ( 40 CONTROLE REMOTOS) 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 BCF TMP,7 ; APAGA OS DADOS PARA USAR UMA UNICA POSIÇÃO DE MEMÓRIA PARA 1CONTROLE DE 2 BOTÕES BCF TMP,6 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 BANK1 BCF TRISIO,5 ;VIRA SAIDA BANK0 BCF LED ;LIGA LED MOVLW .10 ;TEMPO DE ATRASO CALL DELAYM BANK1 BSF TRISIO,5 ;VIRA ENTRADA BANK0 ACIONAR BTFSC FLAGON GOTO DESLIGAR_CERCA BSF FLAGON BCF FLAG_VIO ;REATIVA FLAG DE VIOLAÇÃO BSF SIRENE ;1 TOQUE NA SIRENE MOVLW .1 MOVWF TMP MOVLW .127 ;ENDEREÇO CALL EEWRITE MOVLW .6 CALL DELAYM BCF SIRENE BSF ON GOTO TY3 DESLIGAR_CERCA BCF FLAGON BCF ON BCF FLAG_VIO MOVLW .0 MOVWF TMP MOVLW .127 CALL EEWRITE MOVLW .0 MOVWF TMP MOVLW .126 CALL EEWRITE BSF SIRENE ;3 TOQUES NA SIRENE MOVLW .6 CALL DELAYM BCF SIRENE MOVLW .6 CALL DELAYM BSF SIRENE MOVLW .6 CALL DELAYM BCF SIRENE MOVLW .6 CALL DELAYM BSF SIRENE MOVLW .6 CALL DELAYM BCF SIRENE TY3 CLRF NUM_PULSO MOVLW .20 CALL DELAYM GOTO INICIO ;================================================================ ; SUB-ROTINAS ;================================================================ UPDATA_TIMERS CLRWDT ; RESETA WATCHDOG TIMER BTFSS TMR0,7 ; TESTA SE CHEGOU A 32MS RETLW .0 ; SE NÃO, RETORNA ; **** INCREMENTA CONTADOR DE TEMPO ******* BCF TMR0,7 ; ZERA BIT MAIS SIGNIFICATIVO DO TIMER0 INCF CT_LW,F ; INCREMENTA SKPNZ INCF CT_HI,F INCF CT1_LW,F ; INCREMENTA TIMER AUXILIAR SKPNZ INCF CT1_HI,F RETLW .0 RESETA_TIMER_AUX ;RESETA CONTADOR DE TEMPO CLRF CT1_LW CLRF CT1_HI RETURN 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 clrwdt WRITE_SN_A btfsc EECON1, WR ; Write complete ?\par goto WRITE_SN_A bcf EECON1, WREN ; disable Write\par BANK0 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 clrwdt WRITE_SN_C btfsc EECON1, WR ; Write complete ?\par goto WRITE_SN_C bcf EECON1, WREN ; disable Write\par BANK0 DECFSZ AUX,F GOTO ESPERA clrwdt MOVLW .0 MOVWF TMP MOVLW .127 ;GRAVA SITUAÇÃO DE ALARME DESLIGADO CALL EEWRITE MOVLW .0 MOVWF TMP MOVLW .126 ;GRAVA SITUAÇÃO DE ALARME ACIONADO POR UMA VEZ CALL EEWRITE MOVLW .0 ;GRAVA ZERO NO PONTEIRO DE CONTROLES REMOTOS MOVWF TMP CALL EEWRITE RETLW 0H ESPERA ;DELAY ENTRE APAGAMENTOS MOVLW .8 MOVWF R1 CG1 clrwdt MOVLW .255 MOVWF R2 DECFSZ R2,F GOTO $-1 DECFSZ R1,F GOTO CG1 GOTO RET6 ;======================================================== ORG H'2100' DE .0 ORG H'2100' +.126 DE .0,.0 end