;************************************************************************** ; RX_CR.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: 05-08-2012 TERMINO:05-08-2012 ;************************************************************************** ; CONTROLA ATÉ 8 RELES DE SAIDA, COM OPERAÇÃO ON/OFF ; TRABALHA EM CONJUNTO COM O TX DE CÓDIGO ASM: CR27_TX_ASM ; ;*************************************************************************** LIST P=16F628A , R=DEC INCLUDE "P16F628A.INC" ;-------------------------- ERRORLEVEL -302 __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_ON & _MCLRE_ON & _LVP_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 SIN PORTA,0 ;PINO 17 IN RF CBLOCK 0X20 RES1,RES0,RES1A,RES0A,FLAGS,BITCOUNTER,LC,HC,CONT,R0,R1,R2,NOTX,NOTX1,AUX ENDC TMAX EQU .50 ;TEMPO MAXIMO DO SINAL LOW QBYTE EQU .16 ;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 ORG 0X00 GOTO START ORG 0X04 RETFIE START: MOVLW 0X07 MOVWF CMCON ;DESLIGA COMPARADORES MOVLW .0 MOVWF PORTA MOVWF PORTB BANK1 MOVLW B'00000000' ;TUDO SAIDA MOVWF TRISB MOVLW B'00000001' ;ENTRADA RF MOVWF TRISA BANK0 CLRF FLAGS ;APAGA REGISTRADOR DE FLAGS MOVLW VNOTX MOVWF NOTX MOVLW VNOTX1 MOVWF NOTX1 INICIO: 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 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 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 BTFSC FLAG1 ;TESTA SE É A PRIMEIRA OU A SEGUNDA RECEPÇÃO GOTO PULA1 MOVFW RES1 ;SALVA A PRIMEIRA LEITURA PARA COMPARAÇÃO COM UMA SEGUNDA 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 RES1 XORWF RES1A,W BTFSS STATUS,Z GOTO ERROTX MOVFW RES0 XORWF RES0A,W BTFSS STATUS,Z GOTO ERROTX ;ERRO DE RECEPÇÁO GOTO ACIONAR ;OK - BOA RECEPÇÃO ERROTX CLRF RES1A ; APAGA RESULTADOS DE COMPARAÇÃO CLRF RES0A GOTO INICIO ACIONAR MOVLW 0XAA ;CODIGO DO NOSSO TRANSMISSOR XORWF RES0,W BTFSS STATUS,Z GOTO INICIO ;NÃO É O NOSSO TRANSMISSOR, VOLTA AO INICIO COMF RES1,W ;COMPLEMENTA A SAIDA MOVWF PORTB ;PÕEM NA SAIDA MOVLW VNOTX ;RECARGA DO REGISTRADOR DE TX RECEBIDO MOVWF NOTX MOVLW VNOTX ;RECARGA DO REGISTRADOR DE TX RECEBIDO MOVWF NOTX1 GOTO INICIO end