/********************************************************************** * Phillips RC5 Decoding * * Author: Ajay Bhargav * Email: contact@rickeyworld.info * Website: www.8051projects.net * * 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 * * Having a Doubts? Please post at * www.8051projects.net/forum.html * **********************************************************************/ 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