您的位置:首页技术文栏单片机C51
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

C51红外解码程序(2)

[日期:2008-06-11 ] [来源:net东哥单片机学习网 www.picavr.com 整理 作者:佚名] [字体: (投递新闻)
这是一个简单的红外解码程序,是针对9ms起始码和4.5ms结束码的红外信号。晶振用的是11.0592M的。

#i nclude <at89x52.h>
#i nclude <stdio.h>
sfr p0=0x80;
sfr p3=0xb0;
sbit p32=p3^2;
unsigned char dm,i,j,k;
unsigned char data a[4];//定义4个数组,用来存储代码
void ds0_9ms(void)
{
 unsigned char j,k;
   for(j=18;j>0;j--)
     for(k=20;k>0;k--) ;
}
void ds1ms(void)
{
 unsigned char i,j;
 for(i=2;i>0;i--)
   for(j=230;j>0;j--) ;
}
void ds4_5ms(void)
{
 unsigned char i,j;
    for(i=10;i>0;i--)
   for(j=225;j>0;j--) ;
}
void ds2s(void)
{
unsigned char i,j,k;
 for(i=200;i>0;i--)  
  for(j=200;j>0;j--)
     for(k=10;k>0;k--) ;
}
void main()
{
 IT0=1;
 EX0=1;
 EA=1;
 dm=0;
 ds2s();
 p0=0;
while(1);
}
void t0(void) interrupt 0 using 2//外部中断0的函数
  {
    EA=0;
    for(k=0;k<10;k++)
  {
    ds0_9ms();
    if (p32==1) {k=10;break;}
    else if(k==9)
              {
            while(p32==0);
            ds4_5ms();
            for(i=0;i<4;i++)
               {
                 for(j=1;j<=8;j++)
                {
                 while(p32==0);
                 ds0_9ms();
                  if(p32==1)
                   {ds1ms();
                 dm=dm|0x80;
                 if(j<8) dm=dm>>1;
                }
                 else  if(j<8)dm=dm>>1;
                }
             a[i]=dm;
             dm=0;
                }
           for(i=0;i<4;i++)
             {
              p0=a[i];
              ds2s();
             }
          }
  }
 p0=0;
 EA=1;
}
阅读:
录入:JETTA

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
站长推荐