Here is a IR remote code I used way back for a Remote Robot using a Sony remote control.
Hope it helps
Code:
define LOADER_USED 1
DEFINE OSC 20
start:
ADCON1 = 7
'angleVar VAR BYTE ' set up constants with the minimum and maximum pulsewidths
'SERVO1 CON 450
'SERVO2 CON 1000 ' set up a constant with the time between pulses:
refreshPeriod CON 20
A VAR BYTE ' set an initial pulsewidth:
'angleVar = minAngle
TRISB = 0
TRISA = %00000100
P_VAL VAR WORD
IR_DEV VAR BYTE
IR_BUT VAR BYTE
HEADER VAR WORD
BITCNT VAR BYTE
PACKET VAR WORD
DIRINF VAR BYTE
SEROUT2 PORTC.6,32,["START " , 10,13]
main:
GOSUB IRIN
SELECT CASE IR_BUT
CASE $10
GOSUB LEFT
CASE $11
GOSUB RIGHT
CASE $12
GOSUB FWD
CASE $13
GOSUB RE
CASE $14
GOSUB ST
CASE ELSE
END SELECT
GoTo main
'Recieve a signel from a Sony remote control
' and return with a 7 bit button code
' IR_BUT and a 5 bit device code IR_DEV in the variable IR_DEV
' if no header then IR_DEV and IR_BUT hold 255
IRIN: IR_DEV = 255:IR_BUT = 255
PULSIN PORTA.2,0,HEADER 'Measure header
IF HEADER < 1000 THEN RETURN
IF HEADER > 1350 THEN RETURN ' VERIFY GOOD HEADER IF BAD RETURN
FOR BITCNT = 0 TO 11
PULSIN PORTA.2,0,P_VAL
IF p_VAL >= 450 THEN
PACKET.0[BITCNT] = 1
ELSE
PACKET.0[BITCNT] = 0
ENDIF
NEXT
'Split the 7 bit button code and the 5 bit device code
IR_BUT = PACKET & %01111111
IR_DEV = (PACKET>>7) & %00011111
SEROUT2 PORTC.6,32,["BUTTON =", HEX IR_BUT, 10,13]
RETURN
FWD:
FOR A = 1 TO 20
Low PORTB.7
Low PORTB.6
' pulse the pin
PulsOut PORTB.7, 450
PulsOut PORTB.6, 1000
' pause for as long as needed:
Pause refreshPeriod
NEXT A
RETURN
RE:
FOR A = 1 TO 20
Low PORTB.7
Low PORTB.6
' pulse the pin
PulsOut PORTB.7, 1000
PulsOut PORTB.6, 450
' pause for as long as needed:
Pause refreshPeriod
NEXT A
RETURN
ST:
Low PORTB.7
Low PORTB.6
'PAUSE 1000
RETURN
LEFT:
FOR A = 1 TO 20
Low PORTB.7
Low PORTB.6
' pulse the pin
PulsOut PORTB.7, 1000
PulsOut PORTB.6, 1000
' pause for as long as needed:
Pause refreshPeriod
NEXT A
RETURN
RIGHT:
FOR A = 1 TO 20
Low PORTB.7
Low PORTB.6
' pulse the pin
PulsOut PORTB.7, 450
PulsOut PORTB.6, 450
' pause for as long as needed:
Pause refreshPeriod
NEXT A
RETURN
Bookmarks