;************************************************************************** ; DIMMER_CR_REM_NEC.ASM (REVISADO) ; ; ; DIMMER COM RECEPTOR INFRAVERMELHO PARA CONTROLE REMOTO PROTOCOLO 'NEC' ; ; PARA DECODIFICAR UTILIZA UM PIC 12F675 (OPCIONALMENTE UM 12F629, DES- ; COMENTANDO/COMENTANDO AS LINHAS CITADAS NO TEXTO). ; ; CLAUDIO LÁRIOS INICIO: 28-06-2013 TERMINO:30-06-2013 ; REVISADO EM: 17-09-13 -> ACRESCENTADO CALIBRAÇÃO DO OSCILADOR ; ; OBJETIVO: CONTROLAR CARGAS AC COM TRIAC TIC246 E MICROCONTROLADOR PIC ; 12F675. TECLAS DO CONTROLE REMOTO DEVEM SER 'APRENDIDOS' ANTES DO USO. ; ULTIMO AJUSTE FICARÁ GRAVADO, E EM CASO DE RESET,OU FALTA DE ENERGIA, ; SERÁ RECARREGADO AUTOMÁTICAMENTE ESTE VALOR. ; PROTOCOLO NEC É USADO PELA LG,SEMP,ELSYS,ETC. . ;************************************************************************** ; ; GRAVAR CONTROLE: ; APERTE O BOTÃO 'LEARN' NA PLACA (PINO 6 DO PIC 12F675 A MASSA) E ; EM SEGUIDA, APERTE BREVEMENTE UMA TECLA QUE DESEJE USAR DO CONTROLE, ; SOLTANDO AMBOS EM MENOS DE 1 SEGUNDOS. O LED 'LEARN'(PINO 7) PISCARÁ 1 ; VEZ, PARA INDICAR 'CODE APRENDIDO'. ; REPITA O PASSO COM MAIS 3 TECLAS. ; APRENDE 4 BOTÕES EM SEQUÊNCIA, SENDO:1º)AUMENTA, 2º)DIMINUE, 3º)DESLIGA ; E 4º) LIGA MÁX. ; CASO DESEJE ALTERAR AS TECLAS GRAVADAS, APAGUE TODAS A MEMÓRIA E VOLTE ; A GRAVAR 4 NOVAS TECLAS QUE DESEJAR. ; AO SE TENTAR GRAVAR TECLAS COM MEMÓRIA CHEIA, IRÁ PRODUZIR VARIAS PIS ; CADAS RÁPIDAS NO LED 'LEARN' PARA INDICAR QUE É PRECISO APAGAR ANTES DE ; GRAVAR. ;============================================================================ ; APAGAR TECLAS DA MEMÓRIA: APERTAR BOTÃO 'LEARN' NA PLACA E ; MANTENHA PRESSIONADO POR MAIS DE 10 SEGUNDOS. O LED 'LEARN' (PINO 7) ; PISCARÁ 3 VEZES , INDICANDO O PLENO APAGAMENTO DA MEMÓRIA. ; APÓS ISTO, 4 TECLAS DO CONTROLE DEVERÁ SER 'REAPRENDIDO' NOVAMENTE ; PARA OPERAR. ; ============================================================================= ; AVISO DE SEGURANÇA: ; OBS. ESTE CIRCUITO TRABALHA COM ALTAS TENSÕES. TODOS OS CUIDADOS DE SEGU- ; RANÇA DEVEM SER TOMADOS. NÃO INDICADO PARA INICIANTES. ; O CHIP DEVE SER GRAVADO EXTERNAMENTE AO CIRCUITO E DEPOIS COLOCADO. ; NÃO TENTE GRAVAR 'IN-CIRCUIT' SOB RISCO DE DANIFICAR SEUS EQUIPAMENTOS ; (PC) E RISCO DE ELETROCUÇÃO. ; O MONTADOR CORRERÁ OS RISCOS POR CONTA PRÓPRIA. ; ESTE DISPOSITIVO É APENAS DIDÁTICO, MONTADO APENAS EM PROTOBOARD, SUJEITO ; A BUGS AINDA NÃO IDENTIFICADOS. ;*************************************************************************** ; CERTIFIQUE QUE O BYTE DE CALIBRAÇÃO DO OSCILADOR ESTEJA PRESERVADO (ENDEREÇO 0X3FF) ; CASO CONTRÁRIO, RECALIBRE USANDO SUGESTÃO DO BLOG. ;=================================================================================================================== ;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 ;=================================================================================================================== IFDEF PIC_675 LIST P=12f675 , R=DEC INCLUDE "P12F675.INC" ENDIF IFDEF PIC_629 LIST P=12f629 , R=DEC INCLUDE "P12F629.INC" ENDIF ;PALAVRA DE CONFIGURAÇÃO ERRORLEVEL -302 __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_ON & _MCLRE_ON ;DEFINIÇÕES #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 FLAG_R FLAGS,2 ;FLAG DE 'LEARN' APRENDER #DEFINE FLAGGR FLAGS,3 ;FLAG DE 'LEARN' APRENDER #DEFINE FLAG_MR1 FLAGS,4 ;FLAG TRAVA #DEFINE FLAG_MR0 FLAGS,5 ;FLAG TRAVA #DEFINE FLAG_AUMENTA FLAGS,6 ;FLAG AUX #DEFINE FLAG_DIMINUE FLAGS,7 ;FLAG AUX ;DEFINIÇÕES DE PORTAS DE SAIDA #DEFINE LED GPIO,0 ;PINO 7 SAIDA LED 'LEARN' #DEFINE SENSOR GPIO,5 ;PINO 2 IN SENSOR ZERO CROSS #DEFINE SIN GPIO,2 ;PINO 5- IN ENTRADA DO RECEPTOR INFRAVERMELHO #DEFINE LRN GPIO,1 ;PINO 6- ENTRADA DO BOTÃO LEARN #DEFINE GATE GPIO,4 ;PINO 3- SAIDA DO TRIAC #DEFINE TRISGATE TRISIO,4 ;PINO 3- SAIDA DO TRIAC ;RAM CBLOCK 0X20 RES3,RES2,RES1,RES0,AUX,C3,C2,C1,C0,WS,TEMP,QB,FLAGS,TL0,TL1,TL2,Z2,Z1,Z0,Y1,Y0 LcdDelayCounter,LcdDelayCounter1,tmpLcdRegister,tmpLcdRegister1,SITUAÇÃO temp,SDATA,AUX2 ,LC,HC ,CONT,X,R0,R1,R2,R3,TMP1,TMP2,TMP3,ADDRESS,TMP REG_DIM,STATUSTEMP,WTEMP ENDC ;EQUATES TMAX EQU .50 ;TEMPO MAXIMO DO SINAL LOW QBYTE EQU .32 ;QUANTIDADE DE BYTES A SER RECEBIDO (8+8+8+8) TGR EQU .6 ;TEMPO DE BOTÃO APERTADO PARA APAGAR GRAVAÇAO ;========================================================================================================= ; RESET ;========================================================================================================= ORG 0X00 GOTO START ;========================================================================================================= ; INTERRUPÇÃO ;========================================================================================================= ORG 0X04 GOTO INT_MUDANÇA_TMR0 ;========================================================================================================= ; INICIO DO PROGRAMA ;========================================================================================================= START: BANK1 CALL 0X3FF MOVWF OSCCAL ;CALIBRA OSCILADOR INTERNO DE 4MHZ (CERTIFIQUE QUE ESTEJA PRECISO) MOVLW B'111110' ; SETUP PORTA MOVWF TRISIO MOVLW B'00000100' ;TIMER0 /32 MOVWF OPTION_REG IFDEF PIC_675 MOVLW .0 MOVWF ANSEL ;LIBERA PORTAS DO AD (SOMENTE 12f675) ENDIF BSF IOC,5 ;INTERRUPÇÃO POR MUDANÇA NO PINO 2 MOVLW B'000010' MOVWF WPU ;LIGA PULLUP EM GP1 BANK0 MOVLW 0X07 MOVWF CMCON ;DESLIGA COMPARADORES CLRF GPIO ; RESET PORT MOVLW .0 MOVWF TMR0 MOVFW GPIO ;LER PARA ZERAR FLAG BCF INTCON,GPIF BCF INTCON,T0IF BSF INTCON,GPIE ;LIGA INTERRUPÇÕES DE MUDANÇA E TMR0 OVERFLOW BSF INTCON,T0IE BSF INTCON,GIE CLRF FLAGS ;APAGA REGISTRADOR DE FLAGS MOVLW TGR MOVWF Z2 CLRF Z1 ;LIMPA REGISTRADORES MOVLW 0X7F CALL EEREAD MOVWF REG_DIM ;PEGA VALOR DA EEPROM ;========================================================================================================= ; ROTINA PRINCIPAL ;========================================================================================================= INICIO: CLRF RES3 CLRF RES2 CLRF RES1 CLRF RES0 MOVLW QBYTE ;PREPARA PARA A RECEPÇÃO COM NUMERO DE BITS A RECEBER MOVWF QB CLRF TMR1H CLRF TMR1L BCF PIR1,TMR1IF BSF T1CON,TMR1ON L1 DECFSZ Y0,F GOTO L7 DECFSZ Y1,F GOTO L7 BTFSS FLAG_R GOTO L7 SALVA_REG_DIM BCF FLAG_R BCF FLAG_AUMENTA BCF FLAG_DIMINUE MOVFW REG_DIM MOVWF TMP MOVLW 0X7F CALL EEWRITE L7 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 CLRF Z0 L1H GOTO SS5 ;========================================================================================================= ; ROTINA PARA APAGAMENTO GERAL DOS CONTROLES ;========================================================================================================= TAPAGAMENTO ;APAGAR TODOS OS CONTROLES DA MEMÓRIA DECFSZ Z0,F GOTO L1H 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 DE SINAIS DO PROTOCOLO 'NEC' ; OBS. RECEPTOR INFRAVERMELHO FORNECE SINAL INVERTIDO ;========================================================================================================= RECEIVE SS5: BTFSS SIN ; SIN ? TESTA SINAL DE ENTRADA DO RECEPTOR DE INFRAVERMELHO GOTO IN_1 ;========================================================================================================= ;SIN=0 BCF FLAG_MR1 BTFSC FLAG_MR0 GOTO L1 BSF FLAG_MR0 BCF T1CON,TMR1ON ;DESLIGA TMR1 BTFSC PIR1,TMR1IF ;TESTA FLAG DO TIMER 1 GOTO RESETA_REC MOVFW TMR1H SUBLW 0X1F BTFSC STATUS,C GOTO CLR_TMR1 BTFSS FLAG_AUMENTA GOTO OUTRO_F GOTO AUMENTA OUTRO_F BTFSC FLAG_DIMINUE GOTO DIMINUE SAI_TAD GOTO RESETA_REC ;RESETA RECEPÇÃO SE PULSO EM '1' MAIOR QUE 8MS ;======================================================================================================== ;ENTRADA SIN=1 IN_1 BCF FLAG_MR0 BTFSC FLAG_MR1 GOTO L1 BSF FLAG_MR1 BCF T1CON,TMR1ON ;DESLIGA TMR1 BTFSC PIR1,TMR1IF ;TESTA FLAG DO TIMER 1 GOTO CLR_TMR1 MOVFW TMR1H SUBLW 0X0F ;TESTA INTERVALO DE 4,5MS BTFSS STATUS,C GOTO CLR_TMR1 ;FOI INTERVALO DE 4,5MS MOVFW TMR1H SUBLW 0X03 ;TESTA POR BIT '1' BTFSC STATUS,C GOTO SEGKW1 BSF STATUS,C GOTO RODA_BYTE SEGKW1 MOVFW TMR1H SUBLW 0X00 ;TESTA POR BIT '0' BTFSC STATUS,C GOTO CLR_TMR1 BCF STATUS,C GOTO RODA_BYTE RESETA_REC MOVLW QBYTE MOVWF QB CLRF RES3 CLRF RES2 CLRF RES1 CLRF RES0 CLR_TMR1 CLRF TMR1L CLRF TMR1H BCF PIR1,TMR1IF BSF T1CON,TMR1ON ;RELIGA TIMER1 GOTO L1 RODA_BYTE RRF RES3,F RRF RES2,F RRF RES1,F RRF RES0,F DECFSZ QB,F GOTO CLR_TMR1 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 XORWF RES3,W ;COMPARA COM RES3 BTFSS STATUS,Z GOTO PROXIMO DECF ADDRESS,F MOVFW 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.... MOVFW ADDRESS MOVWF TMP MOVLW .4 SUBWF TMP,F ;ACERTA DE 4 EM 4 A POSIÇÃO DE BUSCA NA MEMÓRIA BTFSS STATUS,C GOTO APRENDER BTFSS STATUS,Z GOTO MADDRESS ;VOLTA A BUSCA ;========================================================================================================= ; APRENDER CONTROLES NOVOS ;========================================================================================================= 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 0X0F ; LIMITA PARA 4 BOTÕES APENAS BTFSS STATUS,C ; CLRF ADDRESS ;INICIA SOBREGRAVAÇÃO GOTO AVISO_AP_MEM 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 INCF ADDRESS,F MOVFW RES3 MOVWF TMP MOVFW ADDRESS CALL EEWRITE MOVFW ADDRESS MOVWF TMP MOVLW .0 CALL EEWRITE ;GRAVA NOVO ENDEREÇO DE PONTEIRO BCF FLAGGR BSF LED ;LIGA LED MOVLW .10 ;TEMPO DE ATRASO CALL DELAYM BCF LED ;DESLIGA BTFSS LRN ;AGUARDA SOLTAR BOTÃO 'LEARN' GOTO $-1 GOTO ACIONAR ;========================================================================================================== ;AVISO DE MEMÓRIA CHEIA AVISO_AP_MEM BCF FLAGGR MOVLW .10 MOVWF TMP XN1 BSF LED MOVLW .1 CALL DELAYM BCF LED MOVLW .2 CALL DELAYM DECFSZ TMP GOTO XN1 BTFSS LRN ;AGUARDA SOLTAR BOTÃO 'LEARN' GOTO $-1 GOTO INICIO ;========================================================================================================= ; ACIONAR COMANDOS DO DIMMER ;========================================================================================================= ACIONAR MOVFW ADDRESS ; VERIFICA QUAL BOTÃO XORLW .1 BTFSS STATUS,Z GOTO PRT1 BSF FLAG_AUMENTA GOTO AUMENTA PRT1 MOVFW ADDRESS ; VERIFICA QUAL BOTÃO XORLW .5 BTFSS STATUS,Z GOTO PTR2 BSF FLAG_DIMINUE PTR2 MOVFW ADDRESS ; VERIFICA QUAL BOTÃO XORLW .9 BTFSS STATUS,Z GOTO PTR3 MOVLW .0 ;DESLIGA MOVWF REG_DIM GOTO SALVA_REG_DIM PTR3 MOVFW ADDRESS ; VERIFICA QUAL BOTÃO XORLW .13 BTFSS STATUS,Z GOTO REC_T MOVLW 0XC0 ;MÁXIMO BRILHO MOVWF REG_DIM GOTO SALVA_REG_DIM ;================================================================================================= ; ALTERAR CONTADOR DO DIMMER ;================================================================================================= DIMINUE MOVLW .5 SUBWF REG_DIM,F BTFSC STATUS,C GOTO REC_T MOVLW 0X00 MOVWF REG_DIM GOTO REC_T AUMENTA MOVLW .5 ADDWF REG_DIM,F MOVFW REG_DIM SUBLW 0XC0 ;VALOR OBTIDO EXPERIMENTALMENTE PARA O MÁXIMO BTFSC STATUS,C GOTO REC_T MOVLW 0XC0 MOVWF REG_DIM GOTO REC_T REC_T MOVLW 0X3F MOVWF Y1 BSF FLAG_R GOTO SAI_TAD ;========================================================================================================= ; PONTEIRO PARA EEPROM ;========================================================================================================= PPT MOVLW .0 CALL EEREAD ;LE PONTEIRO DA EEPROM RETURN ;========================================================================================================= ; ROTINAS DE DELAY ;========================================================================================================= 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 ;========================================================================================================= ; ESCREVER NA EEPROM INTERNA ;========================================================================================================= EEWRITE ;endereço esta em ADDRESS ;DADOS A ESCREVER ESTA EM TMP(MSB) BCF INTCON,GIE 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 BSF INTCON,GIE CALL AGUARDE ; BSF INTCON,GIE RETURN ;========================================================================================================= ; LER A EEPROM INTERNA ;========================================================================================================= EEREAD ;ENDEREÇO EM 'W' ;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 ;========================================================================================================= ; ROTINA DE APAGAMENTO TOTAL DA EEPROM INTERNA ;========================================================================================================= ;------------------------------------------------------------------------------ APAGAEEPROM BCF INTCON,GIE ;DESLIGA INTERRUPÇÕES 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 ;====================================================== MOVLW .0 MOVWF TMP MOVLW .0 CALL EEWRITE ;COLOCA '0' NA PRIMEIRA POSIÇÃO ;====================================================== BSF INTCON,GIE ;RELIGA INTERRUPÇÕES 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 ;============================================================================= ; INTERRUPÇOES DO TIMER0 E MUDANÇA DE ESTADO DO PINO SENSOR ;============================================================================= INT_MUDANÇA_TMR0 MOVWF WTEMP ;SALVA 'W' SWAPF STATUS,W ;SALVA 'STATUS' MOVWF STATUSTEMP BANK0 BTFSS INTCON,GPIF ;TESTA SE É INTERRUPÇÃO POR MUDANÇA DE ESTADO GOTO TESTA_INT_TMR0 ;NÃO É MOVFW GPIO ;OBRIGATÓRIO BCF INTCON,GPIF ;APAGA FLAG DE MUDANÇA DE ESTADO MOVFW REG_DIM ;RECARGA DE TEMPO DO TIMER0 MOVWF TMR0 BCF INTCON,T0IF ;APAGA FLAG DO TMR0 BSF INTCON,T0IE ;LIGA INTERRUPÇÃO DO TIMER0 GOTO SAI_INT ;SAI DA INTERRUPÇÃO TESTA_INT_TMR0 BCF GATE BANK1 BCF TRISGATE ;SAIDA ATERRADA BANK0 MOVLW .250 ;DELAY PARA O DISPARO DO TRIAC ADDLW .1 BTFSS STATUS,Z GOTO $-2 BANK1 BSF TRISGATE ;ALTA IMPEDANCIA BANK0 BCF INTCON,T0IE ;DESLIGA INTERRUPÇÃO DO TMR0 BCF INTCON,T0IF ;FLAG TIMER0 SAI_INT SWAPF STATUSTEMP,W ;RECUPERA 'STATUS' MOVWF STATUS SWAPF WTEMP,F SWAPF WTEMP,W ;RECUPERA 'W' RETFIE ;============================================================================= ; PRÉ - CARGA DA EEPROM ;============================================================================= ORG 0X2100 DE 0X00 ;============================================================================= ; FIM DO PROGRAMA ;============================================================================= end