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
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?
ResponderExcluirEdilson_ainsf@yahoo.com.br
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.
ResponderExcluircara 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