;*********************************************************************************************************** ; CR_RX_8C_PROG_ASM ; ; ; RECEPTOR RF PARA CONTROLE REMOTOS ON/OFF 8 CANAIS ; ; PARA RECEPÇÃO UTILIZA UM PIC 16F628A ; BLOG: 'LARIOS.TECNOLOGIA.WS' ; ; CLAUDIO LÁRIOS INICIO: 29-09-2013 TERMINO:30-09-2013 ;*********************************************************************************************************** ; CONTROLA ATÉ 8 RELES DE SAIDA, COM OPERAÇÃO ON/OFF (PULSO) ; TRABALHA EM CONJUNTO COM O TX DE CÓDIGO ASM: TX_CR_8CPROG_ASM ; A CHAVE DIP TEM QUE SER CONFIGURADA IGUAL TAMBÉM NO TX. ;*********************************************************************************************************** SERIAL_NUMBER EQU 0XAA ;ESCOLHA AQUI O NUMERO DO RECEPTOR (TEM QUE SER IGUAL DO TX) ;=========================================================================================================== LIST P=16F628A , R=DEC INCLUDE "P16F628A.INC" ;-------------------------- ERRORLEVEL -302 ;ELIMINA MENSAGEM DE ERRO ;PALAVRA DE CONFIGURAÇÃO __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_ON & _MCLRE_ON & _LVP_OFF ;DEFINES #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 SIN PORTA,0 ;PINO 17 IN RF (RECEBE SINAL DO RECEPTOR DE RADIO FREQUENCIA) ;RAM CBLOCK 0X20 RES3,RES2,RES1,RES0,FLAGS,BITCOUNTER,LC,HC,CONT,R0,R1,R2,NOTX,NOTX1,AUX ENDC ;EQUATES TMAX EQU .50 ;TEMPO MAXIMO DO SINAL LOW QBYTE EQU .32 ;QUANTIDADE DE BYTES A SER RECEBIDO VNOTX1 EQU .1 ;HIGH TEMPO MAXIMO SEM TRANSMISSÃO PARA ZERAR SAIDAS VNOTX EQU .50 ;LOW TEMPO MAXIMO SEM TRANSMISSÃO PARA ZERAR SAIDAS ;================================================================================================================= ; INICIO DO PROGRAMA ;================================================================================================================= ORG 0X00 GOTO START ORG 0X04 RETFIE ;================================================================================================================= ; INICIALIZAÇÕES DE PORTAS E REGISTRADORES ;================================================================================================================= START: MOVLW 0X07 MOVWF CMCON ;DESLIGA COMPARADORES MOVLW .0 MOVWF PORTA MOVWF PORTB BANK1 MOVLW B'00000000' ;TUDO SAIDA MOVWF TRISB MOVLW B'11111111' ;ENTRADA RF MOVWF TRISA BANK0 CLRF FLAGS ;APAGA REGISTRADOR DE FLAGS MOVLW VNOTX MOVWF NOTX MOVLW VNOTX1 MOVWF NOTX1 ;================================================================================================================= ; LOOP PRINCIPAL ;================================================================================================================= INICIO: CLRF RES3 CLRF RES2 CLRF RES1 CLRF RES0 MOVLW QBYTE ;PREPARA PARA A RECEPÇÃO COM NUMERO DE BITS A RECEBER MOVWF BITCOUNTER ;================================================================================================================= ; RECEPÇÃO DE SINAL DE TX ;================================================================================================================= L0 BCF FLAG ;LIMPA FLAG E REGISTRADORES DE RECEPÇÃO CLRF HC CLRF LC L1 L1H SS5: BTFSS FLAG ;TESTA FLAG DE HUM/ZERO RECEBIDO GOTO L2 ;FLAG=0 BTFSS SIN ;SIN ? TESTA SINAL DE ENTRADA DO RECEPTOR DE RF GOTO M0 ; SIN=0 L2 BTFSS SIN ;SIN ? GOTO LA1 ;SIN=0 BSF FLAG ;SIN=1 INCF HC,F BTFSC STATUS,Z DECF HC,F GOTO LA2 ;VAI CONTAR TEMPO DE 50 MICRO SEGUNDOS LA1 INCF LC,F ;INCREMENTA REGISTRADOR DE LOW SIGNAL NA ENTRADA RF BTFSC STATUS,Z DECF LC,F LA2 MOVLW .11 ;.11 = 50 MICROSEG (ACERTA TEMPO ENTRE LEITURAS DA ENTRADA DE RF) MOVWF CONT DECFSZ CONT,F GOTO $-1 DECFSZ NOTX,F GOTO SEG_RECP MOVLW VNOTX MOVWF NOTX DECFSZ NOTX1,F GOTO SEG_RECP CLRF PORTB ;DESLIGA TODAS AS SAIDAS, SE NÃO HOUVER SINAL RF SEG_RECP GOTO L1 M0 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) MOVFW HC ;OBTEM O VALOR DE 'CARRY'(HUM OU ZERO) SUBWF LC,W RRF RES3,F RRF RES2,F RRF RES1,F ;DESLOCA O BIT NOS REGISTRADORES DE RESULTADO RRF RES0,F DECFSZ BITCOUNTER,F ;DECREMENTA O CONTADOR DE BITS A SER RECEBIDO GOTO L0 ;LE PROXIMO BIT ;=========================================================================================================== ; TESTA A INTEGRIDADE DA TRANSMISSÃO SOMANDO RES0 A RES2 E COMPARANDO COM RES3 ;=========================================================================================================== MOVFW RES0 ADDWF RES1,W ADDWF RES2,W XORWF RES3,W BTFSS STATUS,Z GOTO INICIO ;ERRO DE INTEGRIDADE NA RECEPÇÃO ;=========================================================================================================== ; TRANSMISSÃO INTEGRA - VERIFICAR SE É O NOSSO TX ;=========================================================================================================== MOVLW SERIAL_NUMBER ;CODIGO DO NOSSO TRANSMISSOR XORWF RES0,W BTFSS STATUS,Z GOTO INICIO ;NÃO É O NOSSO TRANSMISSOR, VOLTA AO INICIO MOVFW PORTA ANDLW B'11011110' XORWF RES1,W BTFSS STATUS,Z GOTO INICIO ;É O NOSSO TRANSMISSOR, MAS É PARA OUTRO RECEPTOR DO GRUPO, ENTÃO VOLTA AO INICIO COMF RES2,W ;COMPLEMENTA A SAIDA MOVWF PORTB ;PÕEM NA SAIDA MOVLW VNOTX ;RECARGA DO REGISTRADOR DE TX RECEBIDO PARA MANTER SAÍDA ACIONADA PELO TEMPO QUE HOUVER TX. MOVWF NOTX MOVLW VNOTX ;RECARGA DO REGISTRADOR DE TX RECEBIDO MOVWF NOTX1 GOTO INICIO ;=========================================================================================================== ; FIM DO PROGRAMA ;=========================================================================================================== end