كود:
ir remote controlled relays RC5 PHILIPS PROTOCOL
ir module == A0
RELAY == B0
RELAY ==B1
OSC ==12MHZ
CODE:
unsigned short ir_read, j, toggle, address=0, command=0;
void Interrupt(){ //External interrupt occured
//Check if the received signal is RC5 protocol
delay_us(370);
if(PORTA.F0==0){
delay_us(889);
if(PORTA.F0==1){
delay_us(889);
if(PORTA.F0==0){
delay_us(1778); ir_read = 1;
INTCON = 0; //Disabe the external interrupt
}}}
INTF_bit = 0; //Clear Interrupt flag
}
void main() {
OPTION_REG = 0;
TRISA=0x0F;
PORTA=0;
TRISB=0;
PORTB=0;
INTCON = 0x90; //External Interrupt enabled
while(1){
while(!ir_read); //Wait until IR RC5 protocl received
ir_read = 0;
for(j = 0; j < 12; j++){
if(j == 0){
if (PORTA.F0 == 0) toggle = 1;
else toggle = 0;}
else {
if(j < 6){ //Read address bits
if (PORTA.F0 == 0) address|= (1<<( 5 - j)); //Set bit (5-j)
if (PORTA.F0 == 1) address&=~(1<<(5 - j));} //Clear bit (5-j)
else { //Read command bits
if (PORTA.F0 == 0) command|= (1<<( 11 - j));//Set bit (11-j)
else command&=~(1<<(11 - j)); //Clear bit (11-j)
}}
delay_us(1778);}
if (command == 0) {Portb.F0 = ~Portb.F0;Delay_ms(150);}
if (command != 0) {Portb.F1 = ~Portb.F1;Delay_ms(150);}
delay_ms(200);
INTCON = 0x90; //External Interrupt enabled
}
}