www.pudn.com > IRswitch(1).zip > rc5decode.asm, change:2007-09-18,size:4324b


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