;************************************************************************** ; TX_32.ASM ; ; ; TRANSMISSOR RF PARA CONTROLE REMOTOS 32 CANAIS ; MODO PULSO (ON/OFF) ; ; PARA TRANSMISSÃO UTILIZA UM PIC 16F628A ; BLOG: 'LARIOS.TECNOLOGIA.WS' ; ; CLAUDIO LÁRIOS INICIO: 27-02-2013 TERMINO:06-03-2013 ;************************************************************************** ; APLICAÇÃO: CONTROLAR APLICAÇÕES A DISTANCIA ; TRABALHA EM CONJUNTO COM O RX_32 DE CÓDIGO ASM: RX_32_ASM ; UTILIZE TX + RX NA FREQUENCIA DE 27MHZ (OPCIONALMENTE 49 MHZ OU 433MHZ) ; PROTOCOLO: 1 STARTBIT + 2 BYTE (N. DO APARELHO) + 4 BYTE (BOTÕES) + 4 BYTE 'MODO' ; + 1 BYTE DE CONFERENCIA + TEMPO ENTRE TRANSMISSÕES ;*************************************************************************** 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,7 ;PINO 16 IN RF ;====================================================================================== ;EQUATES SERIAL_NUMBER_H EQU 0XCC ;SERIAL NUMBER DO TX (HIGH) SERIAL_NUMBER_L EQU 0XAA ;SERIAL NUMBER DO TX (LOW) QBYTE EQU .56 ;QUANTIDADE DE BYTES A SER RECEBIDO (11 BYTES) NVEZES_TX EQU .5 ;QUANTIDADE DE VEZES QUE REPETE A TRANSMISSÃO DE UM BOTÃO ;============================================================================================================ ;RAM CBLOCK 0X20 RESX,RES0,RES1,RES2,RES3,RES4,RES5,R5,R6,R7 RES1S,RES2S,RES3S,RES4S,NX ENDC ;============================================================================================================ ORG 0X00 GOTO START ORG 0X04 RETFIE ;=================================================================== ;CONFIGURAÇÕES DE ENTRADA E SAIDAS START: MOVLW 0X07 MOVWF CMCON ;DESLIGA COMPARADORES MOVLW B'01111111' MOVWF PORTA ;INICIA PORTA BANK1 BSF OPTION_REG,7 ;DESLIGA PULL-UP NO PORTB MOVLW B'11111111' ;TUDO ENTRADA MOVWF TRISB MOVLW B'00110000' ;SAIDA PA.7 E PA0..PA3 MOVWF TRISA BANK0 MOVLW NVEZES_TX MOVWF NX ;====================================================== ; LOOP PRINCIPAL ;====================================================== INICIO MOVLW NVEZES_TX ;CARGA DE NÚMERO DE VEZES QUE SE TRANSIMITE UM ACIONAMENTO RÁPIDO MOVWF NX ;============================= MOVLW SERIAL_NUMBER_H ;CÓDIGO DO TX MOVWF RESX MOVLW SERIAL_NUMBER_L ;CÓDIGO DO TX MOVWF RES0 CALL TESTA_TECLADO ;LE INTERRUPTORES ADDLW .0 BTFSC STATUS,Z ;TESTA 'Z' =1 , GOTO INICIO ;NENHUM BOTÃO ACIONADO CALL SALVA_DADOSTX ;SALVA PARA PRÓXIMAS TRANSMISSÕES ;========================================================= ;OBTEM O BYTE CONTROLE DE INTEGRIDADE DA TRANSMISSÃO MOVFW RESX ADDWF RES0,W ADDWF RES1S,W ADDWF RES2S,W ADDWF RES3S,W ADDWF RES4S,W MOVWF RES5 ENVIAR: ;----------------------------------------------------- PAUSA: MOVLW .23 ;23 UNIDADES BASICAS DE BIT MOVWF R6 RTY: CALL DELAY1CK DECFSZ R6,F GOTO RTY ;---------------------------------------------------- CALL STARTBIT ;---------------------------------------------------- MOVLW QBYTE ;QUANTIDADE DE BITS A TRANSMITIR MOVWF R5 VOLT10: BCF STATUS,C RRF RES5,F RRF RES4,F RRF RES3,F RRF RES2,F RRF RES1,F RRF RES0,F RRF RESX,F BTFSC STATUS,C GOTO EB1 CALL BIT0 VV13: DECFSZ R5,F GOTO VOLT10 DECFSZ NX,F GOTO RPT_TX ;QAUNTIDADE DE REPETIÇÕES DA TRANSMISSÃO GOTO INICIO RPT_TX CALL RET_DADOSTX GOTO ENVIAR ;------------------------------------------------- EB1: CALL BIT1 GOTO VV13 ;================================================= ;ROTINAS DELAY1CK: MOVLW .164 ;p/500 useg /.82 PARA 250USEG MOVWF R7 ; DECFSZ R7,F GOTO $-1 RETURN BIT0: BCF OUT CALL DELAY1CK BSF OUT CALL DELAY1CK CALL DELAY1CK BCF OUT RETURN BIT1: BCF OUT CALL DELAY1CK CALL DELAY1CK BSF OUT CALL DELAY1CK BCF OUT RETURN STARTBIT: BSF OUT CALL DELAY1CK BCF OUT RETURN ;====================================================== SALVA_DADOSTX MOVFW RES1 MOVWF RES1S MOVFW RES2 MOVWF RES2S MOVFW RES3 MOVWF RES3S MOVFW RES4 MOVWF RES4S RETURN RET_DADOSTX MOVFW RES1S MOVWF RES1 MOVFW RES2S MOVWF RES2 MOVFW RES3S MOVWF RES3 MOVFW RES4S MOVWF RES4 RETURN ;======================================================================= ;TESTA TECLADO E RETORNA NÚMERO DIGITADO EM 'W' E ATUALIZA RES1 A RES4 TESTA_TECLADO: BSF PORTA,0 MOVFW PORTB MOVWF RES1 BCF PORTA,0 BSF PORTA,1 MOVFW PORTB MOVWF RES2 BCF PORTA,1 BSF PORTA,2 MOVFW PORTB MOVWF RES3 BCF PORTA,2 BSF PORTA,3 MOVFW PORTB MOVWF RES4 BCF PORTA,3 MOVFW RES1 XORLW 0X00 BTFSS STATUS,Z RETLW .1 MOVFW RES2 XORLW 0X00 BTFSS STATUS,Z RETLW .1 MOVFW RES3 XORLW 0X00 BTFSS STATUS,Z RETLW .1 MOVFW RES4 XORLW 0X00 BTFSS STATUS,Z RETLW .1 RETLW .0 ;NENHUMA TECLA APERTADA END