Interfacing of IR Sensor to 8051


/******************************************************************
 *         Description: This software is for Phillips RC-5 remote
 *                decoding. Pin used for reception is P3.3 while
 *                you can use any pin as per your requiremnet.
 *                This program is written for 8051 MCU running
 *                at 11.0592MHz.
 *         Usage: After the decoding the Address is stored in the
 *                ADDR variable and command is stored in the CMD.
 *                The flip bit is also stored to check whether the
 *                button is pressed once or not.
 *         Addon: Small sample program to control 8 switches with         
 *                TV remote. 1 for Swith 1, 2 for switch 2,...
 *                and power button to swith off all switches at  once***************************************************************

VAR1   equ r7                  ;Temporary Variable
TEMP   equ 10H                               ;Temp variable
COUNT            equ 11H                               ;Count
ADDR   equ 12H                               ;Device address
CMD    equ 13H                       ;Command
FLIP      bit 00H                                ;Flip bit
TOG     bit 01H                    ;Temp bit for flip
IR         equ P3.3                  ;IR Receiver connected to this pin
SW1     equ P1.0                  ;Switch 1 connected here
SW2     equ P1.1                  ;Switch 2 connected here
SW3     equ P1.2                  ;Switch 3 connected here
SW4     equ P1.3                  ;Switch 4 connected here
SW5     equ P1.4                  ;Switch 5 connected here
SW6     equ P1.5                  ;Switch 6 connected here
SW7     equ P1.6                  ;Switch 7 connected here
SW8     equ P1.7                  ;Switch 8 connected here
SWport            equ P1                     ;Port at which switches are connected
           
            org 00H                                   ;Start of prog
            mov SWport,#00H ;switch all relays off!
            mov sp,#50H               ;Stack pointer initialization
            clr TOG                                    ;Clear temp bit
           
main:
            jb IR,$                          ;Wait for first bit
            mov VAR1,#255           ;3.024mS delay
            djnz VAR1,$
            mov VAR1,#255
            djnz VAR1,$
            mov VAR1,#255
            djnz VAR1,$
            mov VAR1,#255
            djnz VAR1,$
            mov VAR1,#255
            djnz VAR1,$
            mov VAR1,#100
            djnz VAR1,$
            mov c,IR                      ;Read Flip bit
            mov FLIP,c
            clr A
            mov COUNT,#5                   ;Count for address
fadd:
            mov VAR1,#255                  ;1.728mS delay for each bit
            djnz VAR1,$
            mov VAR1,#255
            djnz VAR1,$
            mov VAR1,#255
            djnz VAR1,$
            mov VAR1,#4
            djnz VAR1,$
            mov c,IR
            rlc a
            djnz COUNT,fadd
            mov ADDR,A               ;Save the address
            clr a
            mov COUNT,#6                   ;Count for Command
fcmd:
            mov VAR1,#255                  ;1.728mS Delay for each bit
            djnz VAR1,$
            mov VAR1,#255
            djnz VAR1,$
            mov VAR1,#255
            djnz VAR1,$
            mov VAR1,#4
            djnz VAR1,$
            mov c,IR
            rlc a
            djnz COUNT,fcmd
            mov TEMP,CMD        ;Save the old command
            mov CMD,a                 ;Save the new command
            mov a,ADDR                ;Cheack for valid address
            cjne a,#00,nvalid
            mov a,TEMP
            cjne a,CMD,valid        ;Check for valid command
nvalid:
            ljmp main
valid:                                       ;Key press check
            clr a
            mov c,FLIP
            rlc a
            mov TEMP,a
            clr a
            mov c,TOG
            rlc a
            cjne a,TEMP,valid1
            sjmp nvalid
valid1:
            mov c,FLIP
            mov TOG,c
            mov a,CMD
            clr c
            cjne a,#1,skip1                        ;Check for SW1
            jb SW1,isset1
            setb SW1
            ljmp main
isset1:
            clr SW1
            ljmp main
skip1:
            cjne a,#2,skip2                        ;Check for SW2
            jb SW2,isset2
            setb SW2
            ljmp main
isset2:
            clr SW2
            ljmp main
skip2:
            cjne a,#3,skip3                        ;Check for SW3
            jb SW3,isset3
            setb SW3
            ljmp main
isset3:
            clr SW3
            ljmp main
skip3:
            cjne a,#4,skip4                        ;Check for SW4
            jb SW4,isset4
            setb SW4
            ljmp main
isset4:
            clr SW4
            ljmp main
skip4:
            cjne a,#5,skip5                        ;Check for SW5
            jb SW5,isset5
            setb SW5
            ljmp main
isset5:
            clr SW5
            ljmp main
skip5:
            cjne a,#6,skip6                        ;Check for SW6
            jb SW6,isset6
            setb SW6
            ljmp main
isset6:
            clr SW6
            ljmp main
skip6:
            cjne a,#7,skip7                        ;Check for SW7
            jb SW7,isset7
            setb SW7
            ljmp main
isset7:
            clr SW7
            ljmp main
skip7:
            cjne a,#8,skip8                        ;Check for SW8
            jb SW8,isset8
            setb SW8
            ljmp main
isset8:
            clr SW8
            ljmp main
skip8:
            cjne a,#0CH,exit          ;Check for all switches
            mov SWport,#00H
            ljmp main
exit:
            ljmp main
            END                             ;End of program