/******************************************************************
* 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