;***************************************************************************************************************** ; CR_TX_8C_PROG.ASM ; ; VERSÃO COM PROGRAMAÇÃO EXTERNA DE ENDEREÇO DE APARELHO ; TRANSMISSOR RF PARA CONTROLE REMOTOS ON/OFF 8 CANAIS ; ; PARA TRANSMISSÃO UTILIZA UM PIC 16F628A ; BLOG: 'LARIOS.TECNOLOGIA.WS' ; ; CLAUDIO LÁRIOS INICIO: 29-09-2013 TERMINO:30-09-2013 ;**************************************************************************************************************** ; APLICAÇÃO: CONTROLAR BRINQUEDOS OU APLICAÇÕES A DISTANCIA ; TRABALHA EM CONJUNTO COM O RX DE CÓDIGO ASM: CR27_RX_ASM ; UTILIZE TX + RX NA FREQUENCIA DE 27MHZ (OPCIONALMENTE 49 MHZ) ; PROTOCOLO: 1 STARTBIT + 1 BYTE (N. DO APARELHO) + 1 BYTE (DIP SWITCH)+ 1 BYTE (BOTÕES) + 1 BYTE (CONFERENCIA) ;***************************************************************************************************************** ; UTILIZA UMA CHAVE DIP PARA ESCOLHER ENTRE 32 RECEPTORES DIFERENTES QUE PODERÃO SER COMANDADOS POR ESTE TX. ; SE O RECEPTOR FOR AJUSTADO COM A MESMA CONFIGURAÇÃO DA CHAVE DIP DO TX (E MESMO SERIAL NUMBER), RESPONDERÁ AO COMANDO. ; ESCOLHA ABAIXO O SERIAL NUMBER (NÚMERO DO APARELHO) DESTE TX. SERIAL_NUMBER EQU 0XAA ;TEM QUE SER O MESMO NO RECEPTOR ;================================================================================================================= 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 OUT PORTA,0 ;PINO 17 IN RF CBLOCK 0X20 RES3,RES2,RES1,RES0,R6,R5,R7 ENDC QBYTE EQU .32 ;QUANTIDADE DE BYTES A SER TRANSMITIDO ORG 0X00 GOTO START ORG 0X04 RETFIE START: MOVLW 0X07 MOVWF CMCON ;DESLIGA COMPARADORES MOVLW .0 MOVWF PORTA MOVWF PORTB BANK1 CLRF OPTION_REG ;HABILITA PULL-UPS DO PORTB MOVLW B'11111111' ;TUDO ENTRADA MOVWF TRISB MOVLW B'11111110' ;SAIDA PA.0 PULSOS DE RF MOVWF TRISA BANK0 INICIO: ;==================================================================================================== ; LOOP PRINCIPAL ;==================================================================================================== MOVFW PORTB ;PEGA INFORMAÇÃO DAS TECLAS XORLW 0XFF BTFSC STATUS,Z GOTO INICIO ;NENHUMA TECLA APERTA, ENTÃO VOLTA AO LOOP PRINCIPAL ;==================================================================================================== ; UMA TECLA FOI APERTADA ;==================================================================================================== MOVLW SERIAL_NUMBER ;CÓDIGO DO TX MOVWF RES0 MOVFW PORTA ;PEGA INFORMAÇÃO DA CHAVE DIP DE ENDEREÇO ANDLW B'11011110' ;FILTRA OS BITS CORRETOS MOVWF RES1 MOVFW PORTB ;PEGA INFORMAÇÃO DOS INTERRUPTORES DE COMANDO MOVWF RES2 ;==================================================================================================== ; CALCULA VALOR DE CONFERENCIA (RES3= RES0+RES1+RES2) ;==================================================================================================== ADDWF RES1,W ADDWF RES0,W MOVWF RES3 ;==================================================================================================== ; ENVIA SEQUENCIA DE BITS PARA O TRANSMISSOR DE RF ;==================================================================================================== ENVIAR: ;==================================================================================================== ; INICIA COM PAUSA ENTRE TRANSMISSÃO ;==================================================================================================== PAUSA: MOVLW .23 ;23 UNIDADES BASICAS DE BIT MOVWF R6 RTY: CALL DELAY1CK DECFSZ R6,F GOTO RTY ;==================================================================================================== ; ENVIA BIT DE START (SINCRONISMO) ;==================================================================================================== CALL STARTBIT ;==================================================================================================== ; ENVIA OS BYTES RES0 A RES3 ;==================================================================================================== MOVLW QBYTE ;QUANTIDADE DE BITS A TRANSMITIR MOVWF R5 VOLT10: BCF STATUS,C ;DESLOCA RRF RES3,F RRF RES2,F RRF RES1,F RRF RES0,F BTFSC STATUS,C GOTO EB1 CALL BIT0 VV13: DECFSZ R5,F GOTO VOLT10 GOTO INICIO EB1: CALL BIT1 GOTO VV13 ;==================================================================================================== ; ROTINA DE DELAY ;==================================================================================================== DELAY1CK: MOVLW .120 MOVWF R7 ;158D PARA 330 MICROSEG. DE LAMBDA DECFSZ R7,F GOTO $-1 RETURN ;==================================================================================================== ; ENVIA BIT '0' DO PROTOCOLO ;==================================================================================================== BIT0: BCF OUT CALL DELAY1CK BSF OUT CALL DELAY1CK CALL DELAY1CK BCF OUT RETURN ;==================================================================================================== ; ENVIA O BIT '1' DO PROTOCOLO ;==================================================================================================== BIT1: BCF OUT CALL DELAY1CK CALL DELAY1CK BSF OUT CALL DELAY1CK BCF OUT RETURN ;==================================================================================================== ; GERA O 'START BIT' ;==================================================================================================== STARTBIT: BSF OUT CALL DELAY1CK BCF OUT RETURN ;==================================================================================================== ; FIM DO PROGRAMA ;==================================================================================================== END