Engineer7,
You need to use a Sony control!
I use Sony IR protocol with sucess, and my rotine decode all key, then you only need to test the value and to do something...
Code:
@ DEVICE pic16F628a, INTRC_OSC_NOCLKOUT ' System Clock Options
@ DEVICE pic16F628a, WDT_OFF ' Watchdog Timer
@ DEVICE pic16F628a, PWRT_OFF ' Power-On Timer
@ DEVICE pic16F628a, BOD_OFF ' Brown-Out Detect
@ DEVICE pic16F628a, MCLR_ON ' Master Clear Options (External)
@ DEVICE pic16F628a, LVP_OFF ' Low-Voltage Programming
@ DEVICE pic16F628a, CPD_OFF ' Data Memory Code Protect
@ DEVICE pic16F628a, PROTECT_OFF ' Program Code Protection
DEFINE OSC 4
'Definição das variáveis e declarações
INCLUDE "bs1defs.bas" 'inclui arquivo p/ compatibilizar com BS1
'p/entender as variáveis b0...b3, w0...w6 e bit0...bit13
CMCON = 7 'DEFINE PORTA COMO DIGITAL (COMPARADORES ANALÓGICOS:OFF)
symbol ir = PORTB.7 'entrada do sinal de IR
SYMBOL LED = PORTB.4
SYMBOL RELE = PORTB.0
TRISB = %10000000
'------------------------------------------------------------------
'rotina principal
LOOP:
pulsin ir,0,w0 'aguarda start bit
if w0 < 200 then LOOP 'start bit é > 200
pause 20 'pula primeiro envio
pulsin ir,0,b0 'aguarda 2º start bit
pulsin ir,0,b1
pulsin ir,0,b2 'lê cada bit do código IR.
pulsin ir,0,b3
pulsin ir,0,b4
pulsin ir,0,b5
pulsin ir,0,b6
pulsin ir,0,b7
bit0=b1/96 'extrai LSB
bit1=b2/96
bit2=b3/96
bit3=b4/96
bit4=b5/96
bit5=b6/96
bit6=b7/96 'extrai MSB
bit7=0
if b0=21 then COMANDO
GOTO LOOP
COMANDO:
B0 = 0
RELE = 1
LED = 1
PAUSE 500
RELE = 0
LED = 0
GOTO LOOP
'----------------------------------------------------------------
end
Bookmarks