Pesquisar este blog

segunda-feira, 12 de dezembro de 2011

protocolo rc5 part 2

agora nesta segunda parte do tutorial do protocolo rc5
estou colocando o codigo em assembler é um pouco longo são 444 linhas mais fico bem intuitivo
qualquer duvida e so comentar
lembrando que este codigo ainda nào foi otimizado por falta de tempo mais funciona perfeitamente e não roda lento






;***************************DEVICE TEC/ SISTEMAS ELETRONICOS
;DATA 07/07/2011
;PROGRAMADOR: DANILO S CABRAL
;COMPILADOR USADO MPLAB IDE V8.63
;ALGORITIMO CRIADO PARA INTERPRETAÇÃO DOS SINAIS EMITIDOS POR CONTROLE REMOTO
;ULTILIZANDO O PROTOCOLO (RC5) DESENVOLVIDO PELA PHILIPS
;PROTOCOLO ENVIA UMA SEQUENCIA DE 14BITS COM DURAÇÃO DE 25MS
;SENDO CADA BIT COM 1.77MS DE DURAÇÃO
;NESTE ALGORITIMO IREMOS TRABALHAR COM A LOGICA DE SINAIS INVERTIDA
;DEVIDO AO FATO QUE O SENSOR INFRAVERMELHO INVERTE OS SINAIS ISTO E QUANDO O CONTROLE
;ENVIA NL1 O SENSOR RECEBE E ENIA NL0 PARA O MICROCONTROLADOR E VICE VERSA.
;=======================COMPOSIÇÃO DO CODIGO RECEBIDO
;BIT1|BIT2|BIT3|BIT4|BIT5|BIT6|BIT7|BIT8|BIT9|BIT10|BIT11|BIT12|BIT13|BIT4|
;STARTBIT|TOGLE|        ENDEREÇO        |   COMANDO COMPOSTO POR 6 BITS   |
;|             DESCARTE                 |      SINAIS QUE SERA USADO      |
;|          DURAÇÃO  13.6MS             |       DURAÇÃO DE 10.2 MS        |


  LIST P=16F84a           ;define processador
  RADIX     DEC           ;define padrão decimal
  INCLUDE <P16F84a.INC>   ;inclue arquivo com características do 16f628
  __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
  ERRORLEVEL   -302
;______________________________________SEL. BANCO DE MEMORIA
#DEFINE  BANK0 BCF STATUS,RP0
#DEFINE  BANK1 BSF STATUS,RP0
;______________________________________VARIAVÉIS
 CBLOCK   0X0C
          W_TEMP
          STATUS_TEMP
          ADRESS         ;AQUI FICA ARMAZENADO OS 8 BITS INICIAIS    
          COMAND         ;AQUI FICA ARMAZENADO OS 6 BITS REFERENTE A TECLA DO CONTROLE
          GETCH          ;ULTILISADA PARA LIMITAR QUANTIDADE DE BITS
          FLAGCIR        ;VARIAVEL USADA COMO ESPELHO DA VARIAVEL COMAND
          STARTBIT       ;AQUI FICA ARMAZENADOS OS 2 START BITS E O BIT TOOGLE
          FLAGTEC        ;FLAG DE CONTROLE DE TECLAS APERTADA
          FLAGTEC1       ;FLAG DE CONTROLE DE TECLAS APERTADA
          TEMPO0         ;VARIAVEL USADA PARA TEMPORIZAÇÃO
          TEMPO1         ;VARIAVEL USADA PARA TEMPORIZAÇÃO
          TEMPO2         ;VARIAVEL USADA PARA TEMPORIZAÇÃO
          TEMPO3         ;VARIAVEL USADA PARA TEMPORIZAÇÃO
         
 ENDC

;_____________________________________FLAGS CONTROL;
;FLAGS DE RECEBIMENTO IR
#DEFINE  CONTROLE   STARTBIT,0
#DEFINE  _1         STARTBIT,1
#DEFINE  _2         STARTBIT,2
#DEFINE  _3         STARTBIT,3
#DEFINE  _4         STARTBIT,4
#DEFINE  TOOGLE     STARTBIT,5
#DEFINE  START2     STARTBIT,6
#DEFINE  START1     STARTBIT,7
#DEFINE  CINCO      FLAGCIR,5

#DEFINE  ZERO       FLAGCIR,0
#DEFINE  TC1        FLAGTEC,0
#DEFINE  TC2        FLAGTEC,1
#DEFINE  TC3        FLAGTEC,2
#DEFINE  TC4        FLAGTEC,3
#DEFINE  TC5        FLAGTEC,4
#DEFINE  TC6        FLAGTEC,5
#DEFINE  TC7        FLAGTEC,6
#DEFINE  TC8        FLAGTEC,7
#DEFINE  TC9        FLAGTEC1,0
#DEFINE  TC0        FLAGTEC1,1
;_____________________________________CONSTANTES;
;VALORES EQUIVALENTES A TECLAS ACIONADAS NO CONTROLE
#DEFINE TECLA0            B'00111100'
#DEFINE TECLA1       B'00111101'
#DEFINE TECLA2         B'00111110'
#DEFINE TECLA3   B'00111111'
#DEFINE TECLA4   B'00111000'
#DEFINE TECLA5     B'00111001'
#DEFINE TECLA6   B'00111010'
#DEFINE TECLA7   B'00111011'
#DEFINE TECLA8   B'00110100'
#DEFINE TECLA9   B'00110101'
#DEFINE STANDBY           B'11110011'
#DEFINE MUTE             B'11110010'
#DEFINE VOLUME_UP         B'11101111'
#DEFINE VOLUME_DO         B'11101110'

;_____________________________________DEFINIÇÕES
#DEFINE  IR          PORTA,0    ;SENSOR TSOP
#DEFINE  OUT0        PORTA,1    ;ACIONAMENTO DO RELE
#DEFINE  OUT1        PORTA,2    ;ACIONAMENTO DO RELE
#DEFINE  OUT2        PORTB,0    ;ACIONAMENTO DO RELE
#DEFINE  OUT3        PORTB,1    ;ACIONAMENTO DO RELE
#DEFINE  OUT4        PORTB,2    ;ACIONAMENTO DO RELE
#DEFINE  OUT5        PORTB,3    ;ACIONAMENTO DO RELE
#DEFINE  OUT6        PORTB,4    ;ACIONAMENTO DO RELE
#DEFINE  OUT7        PORTB,5    ;ACIONAMENTO DO RELE
#DEFINE  OUT8        PORTB,6    ;ACIONAMENTO DO RELE
#DEFINE  OUT9        PORTB,7    ;ACIONAMENTO DO RELE
;_____________________________________MEMORIA DE PROGRAMA
       ORG      0X00      ;define nicio do trecho a seguir em 000
         GOTO INICIO        ;desvia para o inicio
;_____________________________________ROTINA DE INTERRUPÇÃO
       ORG      0X04
   
       RETFIE             ;volta da interupção
;_____________________________________SUB.ROTINAS
LE_BIT
    BTFSC    IR
    GOTO     BIT1
    GOTO     BIT0
BIT0
 
    BCF      STATUS,C  
    RETURN
BIT1
 
    BSF      STATUS,C  
    RETURN      
   
_10MS
    MOVLW     .10
    MOVWF     TEMPO1
    MOVLW     .250
    MOVWF     TEMPO0
T_0
    NOP
    DECFSZ    TEMPO0,F
    GOTO      T_0
    NOP
    DECFSZ    TEMPO1,F
    GOTO      $-7
    RETURN
_1.7MS                    ;ESPERA 1.725 MS
    MOVLW     .2
    MOVWF     TEMPO1
    MOVLW     .213
    MOVWF     TEMPO0
T_1
    NOP
    DECFSZ    TEMPO0,F
    GOTO      T_1
    NOP
    DECFSZ    TEMPO1,F
    GOTO      $-7
    RETURN
DELAY_MS               ;ESPERA 10.813 MS
    MOVLW     .16
    MOVWF     TEMPO2
RECARGA
    MOVLW     .239
    MOVWF     TEMPO3
T_2
    NOP
    DECFSZ    TEMPO3,F
    GOTO      T_2
    DECFSZ    TEMPO2,F
    GOTO      RECARGA
    RETURN
TIME
    MOVLW     .14
    MOVWF     TEMPO2
RELOAD
    MOVLW     .253
    MOVWF     TEMPO3
T_4
    NOP
    DECFSZ    TEMPO3,F
    GOTO      T_4
    DECFSZ    TEMPO2,F
    GOTO      RELOAD
    RETURN
TEMPO
    MOVLW     .255
    MOVWF     TEMPO2
TTT
    MOVLW     .255
    MOVWF     TEMPO3
T_5
    NOP
    DECFSZ    TEMPO3,F
    GOTO      T_5
    DECFSZ    TEMPO2,F
    GOTO      TTT
    RETURN
;_____________________________________INICIO DO PROGRAMA
INICIO: ; ESTE ENDERECO E' O IMEDIATAMENTE APOS O FIM DA INTERRUPCAO

       
    BANK1                
    MOVLW B'00000001'    
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
    MOVLW B'10001000'    
MOVWF OPTION_REG
    MOVLW B'01010000'        
MOVWF INTCON
    BANK0              
    CLRF    PORTA
    CLRF    PORTB
    CLRF    FLAGTEC
    CLRF    FLAGTEC1
   

;____________________________________ROT. PRINCIPAL
MAIN
 

LOOP0  
    MOVLW       .6
    MOVWF       GETCH
    CLRF        COMAND                
   
LE_0                          ; 10ms sem nehum pulso para
    CALL        _10MS        ; identificar START
    BTFSS       IR         ;
    GOTO        LE_0        ;
;START
    BTFSC      IR            ;//ESPERA NL=1 PARA IDENTIFICAR STARTBIT
    GOTO       $-1           ;ESPERA NNL=1
   
    CALL       DELAY_MS
INICIO_COMANDO
    CALL      LE_BIT    
    RLF       COMAND,F
    CALL      _1.7MS
    DECFSZ    GETCH,F
    GOTO      INICIO_COMANDO
   


;TECLA0
    MOVF     COMAND,W
    XORLW    TECLA0
    BTFSS    STATUS,Z
    GOTO     $+2    
    GOTO     C_0
;TECLA1
    MOVF     COMAND,W
    XORLW    TECLA1
    BTFSS    STATUS,Z
    GOTO     $+2    
    GOTO     C_1
;TECLA2
    MOVF     COMAND,W
    XORLW    TECLA2
    BTFSS    STATUS,Z
    GOTO     $+2    
    GOTO     C_2
;TECLA3
    MOVF     COMAND,W
    XORLW    TECLA3
    BTFSS    STATUS,Z
    GOTO     $+2    
    GOTO     C_3
;TECLA4
    MOVF    COMAND,W
    XORLW    TECLA4
    BTFSS    STATUS,Z
    GOTO     $+2    
    GOTO     C_4
;TECLA5
    MOVF   COMAND,W
    XORLW    TECLA5
    BTFSS    STATUS,Z
    GOTO     $+2    
    GOTO     C_5
;TECLA6
    MOVF    COMAND,W
    XORLW    TECLA6
    BTFSS    STATUS,Z
    GOTO     $+2    
    GOTO     C_6
;TECLA7
    MOVF    COMAND,W
    XORLW    TECLA7
    BTFSS    STATUS,Z
    GOTO     $+2    
    GOTO     C_7
;TECLA8
    MOVF    COMAND,W
    XORLW    TECLA8
    BTFSS    STATUS,Z
    GOTO     $+2    
    GOTO     C_8
;TECLA9
    MOVF    COMAND,W
    XORLW    TECLA9
    BTFSS    STATUS,Z
    GOTO     MAIN
    GOTO     C_9
C_0
    BTFSC   TC1
    GOTO    OFFC0
    GOTO    ONC0
ONC0
    BSF     OUT0
    BSF     TC0
    CALL    TEMPO
    GOTO    MAIN
OFFC0
    BCF     OUT0
    BCF     TC0
    CALL    TEMPO
    GOTO    MAIN
 

C_1
    BTFSC   TC1
    GOTO    OFFC1
    GOTO    ONC1
ONC1
    BSF     OUT1
    BSF     TC1
    CALL    TEMPO
    GOTO    MAIN
OFFC1
    BCF     OUT1
    BCF     TC1
    CALL    TEMPO
    GOTO    MAIN
C_2
    BTFSC   TC2
    GOTO    OFFC2
    GOTO    ONC2
ONC2
    BSF     OUT2
    BSF     TC2
    CALL    TEMPO
    GOTO    MAIN
OFFC2
    BCF     OUT2
    BCF     TC2
    CALL    TEMPO
    GOTO    MAIN
C_3
    BTFSC   TC3
    GOTO    OFFC3
    GOTO    ONC3
ONC3
    BSF     OUT3
    BSF     TC3
    CALL    TEMPO
    GOTO    MAIN
OFFC3
    BCF     OUT3
    BCF     TC3
    CALL    TEMPO
    GOTO    MAIN
C_4
    BTFSC   TC4
    GOTO    OFFC4
    GOTO    ONC4
ONC4
    BSF     OUT4
    BSF     TC4
    CALL    TEMPO
    GOTO    MAIN
OFFC4
    BCF     OUT4
    BCF     TC4
    CALL    TEMPO
    GOTO    MAIN
C_5
    BTFSC   TC5
    GOTO    OFFC5
    GOTO    ONC5
ONC5
    BSF     OUT5
    BSF     TC5
    CALL    TEMPO
    GOTO    MAIN
OFFC5
    BCF     OUT5
    BCF     TC5
    CALL    TEMPO
    GOTO    MAIN
C_6
    BTFSC   TC6
    GOTO    OFFC6
    GOTO    ONC6
ONC6
    BSF     OUT6
    BSF     TC6
    CALL    TEMPO
    GOTO    MAIN
OFFC6
    BCF     OUT6
    BCF     TC6
    CALL    TEMPO
    GOTO    MAIN
C_7
    BTFSC   TC7
    GOTO    OFFC7
    GOTO    ONC7
ONC7
    BSF     OUT7
    BSF     TC7
    CALL    TEMPO
    GOTO    MAIN
OFFC7
    BCF     OUT7
    BCF     TC7
    CALL    TEMPO
    GOTO    MAIN
C_8
    BTFSC   TC8
    GOTO    OFFC8
    GOTO    ONC8
ONC8
    BSF     OUT8
    BSF     TC8
    CALL    TEMPO
    GOTO    MAIN
OFFC8
    BCF     OUT8
    BCF     TC8
    CALL    TEMPO
    GOTO    MAIN
C_9
    BTFSC   TC9
    GOTO    OFFC9
    GOTO    ONC9
ONC9
    BSF     OUT9
    BSF     TC9
    CALL    TEMPO
    GOTO    MAIN
OFFC9
    BCF     OUT9
    BCF     TC9
    CALL    TEMPO
    GOTO    MAIN

ERRO
    MOVLW   B'11111111'
    MOVWF   PORTB
    CALL    TEMPO
    CLRF    PORTB
    CALL    TEMPO
    MOVLW   B'11111111'
    MOVWF   PORTB
    CALL    TEMPO
    CLRF    PORTB
    GOTO    MAIN
    END

3 comentários:

  1. Boa tarde, muito legal este trabalho parabens, pois eu gostaria de saber se tem como programar o inverso, ou seja como posso fazer o transmissor?

    Edilson_ainsf@yahoo.com.br

    ResponderExcluir
  2. cara parabéns pelo seu projeto.Queria que vc me ajudasse com sua experiência.Comprei um controle de marca Yk-001 e quero programar em linguagem C com o C18, mas como faço pra pegar o protocolo ja usei o osciloscopio mas não noção dos tempos que precisa.

    ResponderExcluir
    Respostas
    1. cara muito obrigado no blog tem uma postagem sobre o protocolo rc5 e suas temporização da uma olhada e se tiver duvida de pois posta ela ai pra gente resolver

      Excluir