Nome do arquivo: * Jn controle ; Data: 27/07/2011 * ; Versão do arquivo: 1.0.0 * *; , Autor: Josê Nei Assis * , Autorizado Free!!! ;;;;;;;;;;;;;;;;;;;;;;;;;;;;Manual de Instruções;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Ao ser energizado um LED acende por alguns segundos sinalizando que o sistema está em funcionamento. ; Existe um botão localizado na placa que ao ser pressionado aguarda um sinal do ;controle remoto para realizar o aprendizado. Esse mesmo botão se pressionado e segurado ;realiza o apagamento da memória versão / mantendo os leds acesos enquanto botão estiver pressionado sem pisca!!! ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LIST P=16F84A, R=HEX #INCLUDE ERRORLEVEL -302 __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;%%%%%%%%%%%%%%%%%%%% PAGINAÇÃO DE BANCOS DE MEMÓRIA %%%%%%%%%%%%%%%%%%%%%%%%%%%% BANK0 MACRO BCF STATUS,RP0 BCF STATUS,RP1 ENDM BANK1 MACRO BSF STATUS,RP0 BCF STATUS,RP1 ENDM ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ;*********************************************** ;************ PROGRAMA INICIAL *************** ;*********************************************** ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% PAGINAÇÃO DE VARIAVEIS %%%%%%%%%%%%%%%%%%%%%%%%%% CBLOCK 0X0C CNTL ;SINC DECODER LOW CNTH ;SINC DECODER HIG BTEMPO ;CONTADOR DE TEMPO AUX2 ;CONTADOR TEMPO AUX ;CONTADOR TEMPO BYTE1 ;LSB DADOS BYTE2 BYTE3 ;MSB DADOS TEMP ; VARIAVEL DO TEMPO DE ESPERA PARA APRENDIZAGEM DADO ; PARA LEITURA E GRAVAÇÃO DA EEPROM AUXILIAR ; ENDEREÇO PARA LEITURA E GRAVAÇÃO NBITS ;VARIAVEL DO N° DE BITS A SEREM LIDOS MAX ;VARIAVEL DO N° MÁXIMO DE CONTROLES A GRAVAR NA MEMORIA FLAGS ;SINALIZAÇÕES DE LÓGICA DO SISTEMA PDel0 ; VÁRIAVEL DELAY PDel1 ;VARIAVEL DELAY VAR ;VARIAVEL DE TEMPORISAÇÃO DE GRAVAÇÃO OU APAGAR W_TEMP ; WORKS TEMPORÁRIO PARA INTERRUPÇÃO STATUS_TEMP ; STATUS TEMPORÁRIO PARA INTERRUPÇÃO TEMP2 ;Variável temporária cont1 ;Variável que controla se o botão está segurado cont2 ;Variável que controla se o botão está segurado ENDC ;%%%%%%%%%%%%%%%%%%%%%%% CONSTANTES DO SISTEMA ENTRADAS E SAIDAS %%%%%%%%%%%%%%% #DEFINE LED PORTB,2 ; LED INDICATIVO DE ROTINA DE GRAVAÇÃO #DEFINE BOTÃO PORTB,1 ; BOTÃO PARA APRENDIZADO OU APAGAR MEMORIA ; R DE 10K PULL-UP E CHAVE PULL-DOWN #DEFINE RFin PORTB,0 ; ENTRADA DO SINAL DIGITAL ( PINO 7 RECEPTOR ) #DEFINE RELE1 PORTA,0 ; SAÍDA PARA o RELÉ1 #DEFINE RELE2 PORTA,1 ; SAÍDA PARA o RELÉ2 #DEFINE RELE3 PORTA,2 ; SAÍDA PARA o RELÉ3 ;############################################################################### #DEFINE CHAVE INTCON, GIE ; CHAVE GERAL DE INTERRUPÇÃO #DEFINE APRENDER FLAGS, 1 ;FLAG PARA INFORMAR SE É PARA APRENDER #DEFINE TEMPO INTCON, T0IE ; flag para ligar a interrupção TMR0 #DEFINE FOI_TEMPO INTCON, T0IF ; FLAG DE ESTOURO POR TMR0 #DEFINE SINAL INTCON, INTF ; FLAG DE ESTOURO POR TMR0 ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ INICIAL EQU 0X01 ; ENDEREÇO INICIAL DE LEITURA E COMPARAÇÃO DA EEPROM POS_MEM EQU 0X00 ; ENDEREÇO QUE INDICA A ULTIMA CASA GRAVADA NA EEPROM ;&&&&&&&&&&&&&&&&&&INICIALIZAÇÃO DA EEPROM &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ORG H'2100'+POS_MEM DE 0X00 ;%%%%%%%%%%%%%%%%%%% INICIO DE MEMÓRIA DE PROGRAMA %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ORG 0X00 GOTO INICIO ;%%%%%%%%%%%%%%%%%%% VETOR DE INTERRUPÇÃO %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ORG 0X04 BANK0 ; HOUVE INTERRUPÇÃO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! BCF FOI_TEMPO ; SIM, !!! LIMPA FLAG TEMPO CLRF TMR0 ; LIMPA VARIAVEL TMR0 DECFSZ TEMP,F ; DECREMENTA VARIAVEL DE TEMPO = 6.535s retfie BCF TEMPO BTFSS BOTÃO ; O BOTÃO de aprendizado ainda permanece pressionado? GOTO APAGA_TUDO ; sim APAGA TODA A MEMORIA SAI_INT ; não sai interrupção clrf VAR bcf LED ; APAGA LED DE SINALIZAÇÃO DE ESTADO DE PROGRAMAÇÃO bcf APRENDER ; LIMPA FLAG QUE INFORMA QUE É PARA APRENDER bcf TEMPO ; DESLIGA CHAVE DE TMR0 bcf FOI_TEMPO retfie ;********************************************* ;$$$$$$$$$$$$$$ configurações dos sfr's do sistema $$$$$$$$$$$$$$$$$$$$$$$$$$$ INICIO configuracoes: CLRF PORTA CLRF PORTB BANK1 CLRF TRISA MOVLW B'00000011' MOVWF TRISB MOVLW B'10000111' MOVWF OPTION_REG ; desliga pull ups, INTERRUPÇÃO RB0 borda de descida , PRESCALER 1/256 BANK0 CLRF BYTE1 ; limpeza de variáveis CLRF BYTE2 CLRF BYTE3 CLRF VAR CLRF FLAGS bsf LED ;Aguarda 3s com o LED aceso movlw .6 movwf TEMP2 call PDelay decfsz TEMP2 goto $-2 bcf LED bsf CHAVE ;Habilitação geral das interrupções ;$$$$$$$$$$$$$$$$$$$$$$$ looping principal $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ PRINCIPAL ;Aguarda mudança borda de descida em RB0, o que indica presença de sinal btfsc SINAL ;Sinal? goto RECEIVE ;Sim ;Não ;Decrementa variáveis de controle dos relés decfsz cont1 goto $+6 decfsz cont2 goto $+4 bcf RELE1 bcf RELE2 bcf RELE3 btfss BOTÃO ;Botão de aprendizagem foi pressionado? GOTO APRENDIZAGEM ;sim ;não goto PRINCIPAL ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; APRENDIZAGEM BTFSC APRENDER ;Entrou nessa subrotina anteriormente? goto PRINCIPAL ;SIM ;NÃO MOVLW .100 MOVWF TEMP CLRF TMR0 BCF FOI_TEMPO BSF APRENDER ;FLAG que informa que é para aprender BSF LED BSF TEMPO ;Habilita a interrupção do TIMER0 NOP GOTO PRINCIPAL ;Irá aguardar a presença de sinal ou o estouro do TIMER0 ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; ROTINA DE LEITURA DE CÓDIGO DO RECEPTOR DE RF. QUANDO CHAMADA, FAZ A LEITURA DO ENCODER ; E COMPARAÇÃO COM EEPROM, LIGANDO OU DESLIGANDO O RELÉ.E SE O FLAG APRENDER ESTIVER LIGADO ; ELE CAI NA ROTINA DE MEMORIZAÇÃO DO CÓDIGO. ;********************************************* RECEIVE: ;SINCRONISMO bcf TEMPO ; DESLIGA CHAVE DE TMR0 bcf INTCON,INTF MOVLW .8 ; 4 MHZ / .16 ;8 MHZ MOVWF CNTH MOVLW .200 MOVWF CNTL BTFSc RFin GOTO FIM_RC DECFSZ CNTL,F GOTO $-3 DECFSZ CNTH,F GOTO $-7 SINCRONISMO_OK MOVLW 018H ;(24D) MOVWF NBITS CLRF BYTE1 CLRF BYTE2 CLRF BYTE3 MOVLW .8 ; 4 MHZ / .16 ;8 MHZ MOVWF CNTH MOVLW .200 MOVWF CNTL BTFSC RFin ;Espera entrada ficar 1 GOTO LERBITBASE DECFSZ CNTL,F GOTO $-3 DECFSZ CNTH,F GOTO $-7 GOTO FIM_RC LERBITBASE MOVLW 0x7F ; 4 MHZ / 0X3D ;8 MHZ MOVWF BTEMPO BTFSS RFin ;[2] GOTO CALC_TBASE ;[0] INCFSZ BTEMPO,F ;[1] GOTO $-3 ;[2] GOTO FIM_RC CALC_TBASE MOVLW 0x7F ; 4 MHZ / 0X3D ;8 MHZ SUBWF BTEMPO,F ;Recupera Base de Tempo Bit Inteiro AGUARDAR_LW CLRC RRF BTEMPO,W ; MOVWF CNTL ; MOVF BTEMPO,W ; MOVWF CNTH ; RLF CNTH,W MOVWF AUX2 ;AUX2=1/2 Te BCF STATUS,C ; RRF BYTE3,F ; RRF BYTE2,F ; RRF BYTE1,F ; BTFSS RFin ; [2] GOTO RECEBENDO_BITS ; [0] DECFSZ AUX2,F ; [1] GOTO $-3 ; [2] GOTO FIM_RC RECEBENDO_BITS GOTO DL1 D_DL1 BTFSC RFin GOTO FIM_RC GOTO DL2 D_DL2 BCF BYTE3,7 BTFSS RFin BSF BYTE3,7 GOTO DL3 D_DL3 BTFSS RFin GOTO FIM_RC DECFSZ NBITS,F GOTO AGUARDAR_LW GOTO RECEBEU_OK ;||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| DL1: DECFSZ CNTL,F ;[1] GOTO $+2 ;[2] GOTO $+2 GOTO $-3 ;[2] CLRC RRF CNTH,W ; MOVWF CNTL ;Meio bit GOTO D_DL1 ;||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| DL2 MOVFW CNTH MOVWF AUX DECFSZ AUX,F ;[1] GOTO $+2 ;[2] GOTO D_DL2 GOTO $-3 ;[2] ;*************************************************************** DL3 MOVFW CNTH MOVWF AUX DECFSZ AUX,F ;[1] GOTO $+2 ;[2] GOTO D_DL3 GOTO $-3 ;[2] ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; ATÉ AQUI: ; Recebeu todos os 24 bits em Byte1,Byte2,Byte3 ; Byte1=LSB ; Byte3=MSB ; Os botões do controle estarão nos bit's 6,7 do ; byte3 RECEBEU_OK: BTFSS APRENDER ; É PARA APRENDER ? GOTO COMPARA ; N- COMPARA APENAS E TOMA A DECISÃO GOTO APRENDE ; S- GRAVA NA EEPROM ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;NÃO RECEBEU NADA ;FOI ERRO DE LEITURA ;APENAS UM RUIDO ;OU O CODIGO NÃO É DO HT6P20B FIM_RC: btfsc APRENDER bsf TEMPO ; LIGA CHAVE DE INTERRUPÇÃO DE TMR0 goto PRINCIPAL ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; APAGA_TUDO BCF CHAVE BCF APRENDER BCF LED CALL PDelay BSF LED CALL PDelay BCF LED CLRF VAR MOVLW .90 MOVWF MAX MOVLW 0X00 MOVWF AUXILIAR MOVLW 0X00 MOVWF DADO CALL GRAVA_E2PROM APAGANDO INCF AUXILIAR, F MOVLW 0XFF MOVWF DADO CALL GRAVA_E2PROM DECFSZ MAX, F GOTO APAGANDO BSF LED CALL PDelay BCF LED CALL PDelay GOTO SAI_INT ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;ROTINA DE APRENDIZADO DO CÓDIGO DO CONTROLE GRAVAÇÃO NA EEPROM APRENDE: MOVLW 0X00 MOVWF AUXILIAR CALL LE_E2PROM MOVF DADO,W MOVWF AUXILIAR INCF AUXILIAR, F MOVF BYTE1, W MOVWF DADO CALL GRAVA_E2PROM INCF AUXILIAR, F MOVF BYTE2, W MOVWF DADO CALL GRAVA_E2PROM INCF AUXILIAR, F MOVF BYTE3, W MOVWF DADO CALL GRAVA_E2PROM MOVF AUXILIAR, W MOVWF DADO MOVLW 0X00 MOVWF AUXILIAR CALL GRAVA_E2PROM BCF APRENDER BCF LED CALL PDelay GOTO PRINCIPAL ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; ROTINA DE COMPARAÇÃO DO CÓDIGO RECEBIDO E COMPARAÇÃO COM A EEPROM COMPARA: CLRF AUXILIAR CLRF MAX MOVLW 0X01 MOVWF AUXILIAR MOVLW .90 MOVWF MAX LENDO_E2PROM CALL LE_E2PROM MOVF DADO, W BCF STATUS, Z XORWF BYTE1, W BTFSS STATUS, Z GOTO OUTRO GOTO COMP OUTRO INCF AUXILIAR, F DECFSZ MAX, F GOTO LENDO_E2PROM GOTO PRINCIPAL COMP INCF AUXILIAR, F CALL LE_E2PROM MOVF DADO, W CLRZ XORWF BYTE2, W BTFSS STATUS, Z GOTO OUTRO INCF AUXILIAR, F CALL LE_E2PROM MOVF DADO, W CLRZ XORWF BYTE3, W BTFSS STATUS, Z GOTO OUTRO ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;ROTINA DE EXECUÇÃO DOS BOTÕES CASO A COMPARAÇÃO COM EEPROM FOI OK movlw b'11000000' andwf BYTE3 movlw b'10000000' xorwf BYTE3,w btfsc STATUS,Z ;O Botão pressionado foi o 1? (10) goto botao1 ;sim ;não movlw b'01000000' xorwf BYTE3,w btfsc STATUS,Z ;00? goto botao2 ;sim ;não movlw b'11000000' xorwf BYTE3,w btfsc STATUS,Z ;00? goto botao3 ;sim ;não GOTO PRINCIPAL botao1 clrf cont1 movlw .30 movwf cont2 BSF RELE1 goto PRINCIPAL botao2 clrf cont1 movlw .30 movwf cont2 BSF RELE2 goto PRINCIPAL botao3 clrf cont1 movlw .30 movwf cont2 BSF RELE3 goto PRINCIPAL ;############################################################################## ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;ROTINA DE GRAVAÇÃO DA EEPROM - CHAMADA COM ENDEREÇO EM AUXILIAR E DADO EM DADO GRAVA_E2PROM MOVF AUXILIAR, W MOVWF EEADR MOVF DADO, W CLRF EEDATA MOVWF EEDATA BANK1 BCF EECON1,WRERR BSF EECON1,WREN MOVLW 0X55 MOVWF EECON2 MOVLW 0XAA MOVWF EECON2 BSF EECON1,WR BCF EECON1,WREN BTFSC EECON1,WRERR GOTO $-9 ; GRAVA_E2PROM+4 BTFSC EECON1,WR GOTO $-3 BANK0 RETURN ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;ROTINA DE LEITURA DA EEPROM - CHAMADA COM ENDEREÇO EM AUXILIAR E RETORNA COM DADO ;EM DADO LE_E2PROM CLRF DADO MOVF AUXILIAR, W MOVWF EEADR BANK1 BSF EECON1, RD NOP NOP BANK0 MOVF EEDATA, W MOVWF DADO RETURN ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ;ROTINA DE DELAY DE 500 MS PDelay movlw .239 movwf PDel0 PLoop1 movlw .232 movwf PDel1 PLoop2 NOP PDelL1 goto PDelL2 PDelL2 goto PDelL3 PDelL3 NOP decfsz PDel1, 1 goto PLoop2 decfsz PDel0, 1 goto PLoop1 PDelL4 goto PDelL5 PDelL5 goto PDelL6 PDelL6 goto PDelL7 PDelL7 NOP return ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 END