;********************************************************************************************* ; RX_31_89s52.ASM ; ; ; RECEPTOR DE CONTROLE REMOTO C/ 31 CANAIS ON/OFF. ; PARA DECODIFICAR UTILIZA UM ATMEL AT89S52 DE 40 PINOS. ; ; AUTOR: CLAUDIO LÁRIOS INICIO: 07-03-2013 TERMINO:10-03-2013 ; BLOG 'LARIOS.TECNOLOGIA.WS' ;********************************************************************************************* ; ; USE CRISTAL 12 MHZ ;********************************************************************************************* ;***************************************************************************************** ; REGISTRADORES E REDEFINIÇÕES IND EQU R0 ; INDIRECT ADDRESS REGISTER RTCC EQU TH0 ; REAL TIME COUNTER CLOCK STATUS EQU PSW ; STATUS REGISTER PORTA EQU P3 ; PORT A DE P3,0 A P3,5 E 3.7 (INCOMPLETA) PORTB EQU P1 ; PORT B P1 DE P1,0 A P1,7 (COMPLETA) ; REGISTRADORES E CONTADORES ; ENDEREÇO 20H RESERVADO PARA MACROS PIC FLAGS EQU 20H RES5 EQU 21H ; USER FLAG REGISTER RES4 EQU 22H ; ADDRESS REGISTER RES3 EQU 23H ; REGISTRADORES DE RECEPÇÃO DE BITS TRANSMITIDOS RES2 EQU 24H RES1 EQU 25H RES0 EQU 26H RESX EQU 2BH ;DADOS DE ENTRADA E SAIDA NO I2C MEMORY BITCOUNTER EQU 2EH Z2 EQU 32H Z1 EQU 33H LC EQU 3BH HC EQU 3CH CONT EQU 3DH CONT1 EQU 27H CNT1 EQU 28H CNT EQU 29H TEMP EQU 2AH TMP EQU 49H ;DEFINIÇÕES DA PORTAS E FLAGS ;=============================================================================== FLAG EQU FLAGS.0 ;FLAG DE SITUAÇÃO SIN EQU P0.7 ;PINO 32 IN RF ;VARIAVÉIS DE TEMPO E CARGA DE CONTADORES ;============================================================================== TMAX EQU 40D ;TEMPO MAXIMO DO SINAL LOW QBYTE EQU 56D ;QUANTIDADE DE BYTES A SER RECEBIDO TGR EQU 5D ;40D ;TEMPO PARA DESLIGAR APÓS UM TOQUE NOS BOTÕES SERIAL_H EQU 0CCH ;SERIAL H SERIAL_L EQU 0AAH ;SERIAL L ;------------------------------------------------------------------------------ ORG 00H AJMP RESETA ORG 30H RESETA: START: MOV P0,#80H ; PORT0 MOV P1,#0H ; PORT1 MOV P2,#0H ; PORT2 MOV P3,#0H ; PORT3 MOV FLAGS,#0H ; FLAGS; RESET FLAGS MOV Z2,#TGR ;CARGA DO TEMPO DO BOTÃO 'LEARN' APERTADO PARA APAGAR TODOS CONTROLES MOV Z1,#0H ;LIMPA REGISTRADORES INICIO: MOV BITCOUNTER,#QBYTE ;PREPARA PARA A RECEPÇÃO COM NUMERO DE BITS A RECEBER L0: CLR FLAG ;LIMPA FLAG E REGISTRADORES DE RECEPÇÃO MOV HC,#0H ;APAGA REGISTRADORES DE UNS E ZEROS MOV LC,#0H L1: L1HS: L1H: DJNZ Z1,SS5 ;QUANDO A CONTAGEM DESTE REGISTRADORES (Z1,Z2) CHEGAM AO FIM OCORRE O APAGAMENTO DJNZ Z2,SS5 MOV P0,#80H MOV P1,#0H MOV P2,#0H MOV P3,#0H MOV Z2,#TGR ;CARGA DO TEMPO MOV Z1,#0H ;LIMPA REGISTRADORES LJMP INICIO ;INICIA ROTINA DE RECEPÇÃO DE SINAL DO HT6P20B ;========================================================== SS5: ;A JNB FLAG , L2 ;TESTA FLAG DE HUM RECEBIDO ;FLAG=0 VAI PARA L2 ;-------------------------------- ;B SETB SIN ;LEVANTA PARA TESTE FLAG=1 JNB SIN, MO ;SIN ? TESTA SINAL DE ENTRADA DO RECEPTOR DE RF SIN=0 VAI PARA 'MO' ;SE SIN=1 VAI PARA 'L2' ;---------------------------------- L2: ;C SETB SIN ;LEVANTA PARA TESTE JNB SIN, LA1 ;SIN=0 VAI INCREMENTAR LC EM 'LA1' ;SIN=1 VAI INCREMENTAR HC E SETAR FLAG ;------------------------------------- ;E SETB FLAG ;SIN=1 INC HC MOV A,HC JNZ LA2 DEC HC LJMP LA2 ;VAI PARA 'LA2' CONTAR TEMPO DE 50 MICRO SEGUNDOS ;--------------------------------------------------------- LA1: ;SIN=0 ;D INC LC ;INCREMENTA REGISTRADOR DE LOW SIGNAL NA ENTRADA RF MOV A,LC JNZ LA2 DEC LC LA2: MOV CONT,#24D ; 24D = 50 MICROSEG (ACERTA TEMPO ENTRE LEITURAS DA ENTRADA DE RF) DJNZ CONT,$ LJMP L1 ;================================================================================================ MO: ;F ;OK LC>TMAX C=0 (VAI PARA O INICIO) CLR C ;TESTA SE NÃO PASSOU DO LIMITE MAXIMO DE TEMPO EM LOW NA ENTRADA DE RF MOV A,LC SUBB A,#TMAX JC NK LJMP INICIO ;LC>TMAX (REJEITAR DADO - SEM TRANSMISSÃO ) ;=============================================================================================== NK: ;OK C=1 SE LC>HC ;G MOV A,HC ;OBTEM O VALOR DE 'CARRY'(HUM OU ZERO) CLR C SUBB A,LC MOV A,RES5 ;DESLOCA O BIT NOS REGISTRADORES DE RESULTADO RRC A MOV RES5,A MOV A,RES4 RRC A MOV RES4,A MOV A,RES3 RRC A MOV RES3,A MOV A,RES2 RRC A MOV RES2,A MOV A,RES1 RRC A MOV RES1,A MOV A,RES0 RRC A MOV RES0,A MOV A,RESX RRC A MOV RESX,A AJMP SEG44 XLO: AJMP L0 ;AUXILIAR DE JUMP ;LE PROXIMO BIT ;------------------------------------- SEG44: ;H DJNZ BITCOUNTER,XLO ;DECREMENTA O CONTADOR DE BITS A SER RECEBIDO MOV A,RESX CJNE A,#SERIAL_H,ERRO1 MOV A,RES0 CJNE A,#SERIAL_L,ERRO1 MOV A,RES4 ADD A,RES3 ADD A,RES2 ADD A,RES1 ADD A,RES0 ADD A,RESX CJNE A,RES5,ERRO1 MOV A,RES1 ORL A,#80H ;MANTEM LEVANTADA SIN (RF IN) MOV P0,A MOV P1,RES2 MOV P2,RES3 MOV P3,RES4 MOV Z2,#TGR ;CARGA DO TEMPO DO BOTÃO SOLTO MOV Z1,#0H ;LIMPA REGISTRADORES ERRO1: LJMP INICIO ;ERRO DE RECEPÇÃO ;****************************************************************** ; ; ROTINAS DE DELAY ; ;****************************************************************** DELAYM: MOV R0,A XC: ACALL AGUARDE DJNZ R0,XC RET ;**************************************************** AGUARDE: ;ROTINA DE ATRASO MOV R1,#64D CG2: MOV R2,#255D DJNZ R2,$ DJNZ R1,CG2 RET ;****************************************************** END