新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > PIC单片机红外遥控编码与解码的问题分享

PIC单片机红外遥控编码与解码的问题分享

作者:时间:2011-05-28来源:网络收藏

#pragma interrupt_level 1
interrupt adint(void)
{
if(TMR1IF==1)
{
TMR1IF=0;
TMR1H=0b11111100;
TMR1L=0b00010111;
rfbit=rfbit+1;//发送指针加一
send( );
}
}
//////////////////////////////////////////
send( )
{
if(rfgobit==0)
{
switch(rfbit)
{
case 1 :
RC5=0;
break;
case 6 :
RC5=1;
break;
case 7 :
RC5=0;
rfgobit=1;//制发送完标制
rfbit=0;
break;
default :
break;
}
}
if(rfgobit==1)
{
zbit=dispcount[i]0b00000001;
switch(rfbit)
{
case 1:
RC5=1;
break;
case 2 :
if(zbit==0)
{
RC5=0;
rfbit=0;
rf( );
}
break;
case 3 :
if(zbit==1)
{
RC5=0;
rfbit=0;
rf( );
}
break;
default :
break;
}
}
}
//////////////////////////////////////////////
rf( )
{
k=k+1;
if(k==8)
{
i=i+1;
k=0;
if(i==6)
{
i=1;
rfgobit=0;
TMR1H=0;
TMR1L=0;
RC5=1;
dispcount[1]=0xaa;
dispcount[2]=0xbb;
dispcount[3]=0xcc;
dispcount[4]=0xdd;
dispcount[5]=0xee;
}
return;
}
dispcount[i]=dispcount[i]>>1;
}
//////////////////////////////////////
main( )
{
di( );
TRISC=0b11011111;
TRISA=0b111111;
TRISB=0b11111111;
i=1;
k=0;
TMR1H=0b11111100;
TMR1L=0b00010111;
T1CON=1;
TMR1IE=1;
RC5=1;
PEIE=1;
ei( );
dispcount[1]=0xaa;
dispcount[2]=0xbb;
dispcount[3]=0xcc;
dispcount[4]=0xdd;
dispcount[5]=0xee;
while( 1 )
{
;
}
}
这两个程序只是一个演示例程

本文引用地址:http://www.eepw.com.cn/article/172729.htm

在实际运用中可变通的把这种发送与接受用于两机之间的通讯(好处是移植性好,抗干扰好且一发一收只要两根线或一根线)另外如要产生载波(38KHZ)的话可用其输出口去调制38KHZ发生源(比如555电路,PWM)来得到,或干脆用软件来实现(不过难度较大;不如用带38KHZ的来做)


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭