历史上的今天
返回首页

历史上的今天

今天是:2024年10月30日(星期三)

正在发生

2019年10月30日 | 基于attiny13的NEC红外线遥控信号解码程序

2019-10-30 来源:51hei

最近参考了网上的51红外线遥控遥控信号解码程序,编写了基于attiny13的NEC红外线遥控信号解码程序,拿出来给大家共勉,欢迎大家批评指正。程序如下:


#include

#include


#define uchar unsigned char

#define star()  TCCR0B=(1<#define stop()  TCCR0B=0                     //停止定时器  

#define ir_in PB1    //int0引脚定义


volatile uchar ir_flag=0;

volatile uchar ir_da[4];

/****************************************************/

uchar getHtime(void)           

{

  TCNT0=0; 

  star();                        //开始计时

  while (PINB&(1<  {

   if (TCNT0>250) break;         //高电平时间太长不合法,退出等待

  }

   stop(); //停止计时     

  

  return TCNT0;

}

/****************************************************/

uchar getLtime(void)           

{

  TCNT0=0; 

  star();                        //开始计时

  while ((PINB&(1<  {

   if (TCNT0>250) break;         //高电平时间太长不合法,退出等待

  }

   stop(); //停止计时     

  

  return TCNT0;

}

/****************************************************/

ISR(INT0_vect)  //外部中断

{

  static uchar step=1;   //用于区分按键码和连续码以执行不同的中断程序

  uchar i,j;

  uchar byt=0;

  uchar time;

if (step)        //刚按下遥控器的按键,执行下面的程序段

{

  time=getLtime(); //接收并判定引导码的 9ms 低电平,

  if((time<152)||(time>171)) //时间判定范围为 8.5~9.5ms,超过此范围则说明为误码,直接退出

    {

GIFR=(1<    return; //结束外部中断程序 

}

  time=getHtime();   //接收并判定引导码的 4.5ms 高电平

   if ((time<71)||(time>89))       //时间判定范围为 4.0~5.0ms,超过此范围则说明为误码,直接退出

   {

  GIFR=(1<    return; //结束外部中断程序   

   }

  for (i=0; i<4; i++)       //循环接收 4 个字节

   {   

    for (j=0; j<8; j++)

    {

    time=getLtime();

if ((time<6)||(time>14))    //时间判定范围为 340~780us,超过此范围则说明为误码,直接退出  

    {

  GIFR=(1<    return; //结束外部中断程序   

    }

    time=getHtime(); 

    if ((time>5)&&(time<15))  byt>>=1;  //时间判定范围为 340~780us,在此范围内说明该 bit 值为 0 

        else if ((time>25)&&(time<35))  //时间判定范围为 1460~1900us,在此范围内说明该 bit 值为 1

    {

    byt>>=1;

    byt|=0x80;

                }

              else 

                {

    GIFR=(1<                return; //结束外部中断程序 

    }  

}

ir_da[i]=byt;

  }

  ir_flag=1; 

   step=0;    //如果按键未松开,下次中断执行连发码处理程序

  GIFR=(1<}


else   //如果是连发码执行下面的程序段

  {

  time=getLtime(); //接收并判定连发码引导码的 9ms 低电平

  if((time<152)||(time>171)) //时间判定范围为 8.5~9.5ms,超过此范围则说明为误码,直接退出

    {

step=1;     //下次中断执行按键处理程序

GIFR=(1<    return; //结束外部中断程序 

}

  time=getHtime();   //接收并判定连发引导码的 2.25ms 高电平

   if ((time<36)||(time>44))       //时间判定范围为 2.0~2.5ms,超过此范围则说明为误码,直接退出

   {

    step=1;     //下次中断执行按键处理程序

  GIFR=(1<    return; //结束外部中断程序   

   }else     //确定为连发码

    {

ir_flag=1; 

    step=0;    //如果按键仍未松开,下次中断继续执行连发码处理程序

    GIFR=(1<}

  }

}

/****************************************************/

int main(void)

{

  PORTB=0xff;  

   MCUCR=(1<  GIMSK=(1<  sei();                 //开全局中断

  while (1)

  {;}

}

attiny13使用内部时钟,电源电压5V时实测1.15MHz左右。编译器为GCC


推荐阅读

史海拾趣

Cicoil公司的发展小趣事

随着计算机技术的飞速发展,处理器成为了电子设备的核心部件。Cicoil公司看到了这一趋势,开始与处理器制造商展开合作。他们为处理器提供高质量的连接电缆,确保处理器能够稳定、高效地运行。这一合作使得Cicoil公司的电缆产品进一步深入到计算机领域,也为其带来了更多的商业机会。

Entegris公司的发展小趣事

2019年1月底,Entegris与Versum Materials宣布合并。合并后的公司由Entegris占据五席董事,而Versum占四席。Versum是一家主要生产半导体的化学、气体及输送系统的公司,两家公司的前三大客户均为台积电、英特尔、三星电子。合并后,新公司在半导体材料市场的影响力显著增强,同时也面临着来自德国默克等竞争对手的挑战。

福斯特半导体(Foster)公司的发展小趣事

在半导体材料领域,对纯度的要求越来越高。Entegris通过不断的技术创新,提升材料的纯度,以满足晶圆厂对材料的高要求。同时,随着制程工艺的步骤增多,控制污染的环节也随之增加,Entegris在微尘控制方面也面临着巨大的挑战。

ALCOA公司的发展小趣事

随着技术的不断进步和市场的扩大,ALCOA公司的业务逐渐扩展到铝土矿开采、氧化铝精炼和原铝生产等领域。这种垂直整合的模式使得公司能够更好地控制原材料的质量和供应,提高了生产效率,也降低了成本。到了20世纪中期,ALCOA已经成为全球最大的铝业公司之一,几乎垄断了全球的铝市场。

DB Lectro Inc公司的发展小趣事

为了进一步扩大市场份额,DB Lectro Inc积极寻求与国际知名企业的合作。通过与多家国际公司的技术交流和合作,公司成功地将自身的气体检测技术应用于更多领域,如天然气开采、食品饮料生产等。同时,公司还积极参与国际展览和交流活动,展示了其先进的技术和产品,赢得了国际市场的广泛认可。

Horizon Electronics Enterprises Group公司的发展小趣事

随着工业互联网和智能制造技术的快速发展,Horizon紧跟时代步伐,积极推进数字化转型和智能制造升级。公司引入先进的自动化生产线和智能管理系统,实现生产过程的智能化和精细化管理。通过数字化转型,Horizon不仅提高了生产效率和产品质量,还降低了运营成本和市场风险。同时,公司还积极探索智能制造的新模式和新应用,为电子行业的未来发展贡献智慧和力量。

问答坊 | AI 解惑

AT89C2051与74LS164....紧急...

请问高手:如图,我这样连接的显示电路错没? 老师说RXD不能输出,TXD不能作为74LS164的CLOCK信号,  还有第2个164的A.B不能接上一组164输出的的信号,要我改....我真的郁闷了 请高手指教....速度啊...紧急...…

查看全部问答>

关于读取FLASH数据的问题

在BOOTLOADER中把NK下载到NOR FLASH中,现在想把写入得数据打印出来该怎么做,可以直接访问FLASH的地址吗,我试了下发现读不出来,(全是0),还是要写了类似驱动的东西…

查看全部问答>

如何读prolific usb转串口转过来的串口

也是用createfile读吗   和普通的com特性一样吗 …

查看全部问答>

新手,询问pda与远程的数据库(oracle)同步问题,急!!!

原来没有做过嵌入式的开发,现在想在pda下做二次开发,系统是wince的,pda上的数据需要跟远程服务器的数据库做数据同步,远程的数据库为oracle,系统为b/s结构的,pda需要连接到pc机上在做同步,pc机可以连接系统,请教思路或者是有什么资料,万分 ...…

查看全部问答>

液晶显示模块

哪位高人帮我指点一下L046R4这个四位八段的液晶显示屏怎么用C语言编程,它好像没有时钟,下边是它的PDF资料,急求。谢谢! [ 本帖最后由 烟雨 于 2011-4-18 10:29 编辑 ]…

查看全部问答>

常用集成电路引脚识别

常用集成电路引脚识别:各种不同的集成电路引脚有不同的识别标记和不同的识别方法,掌握这些标记及识 别方法,对于使用、选购、维修测试是极为重要的。⒈缺口 在IC的一端有一半圆形或方形的缺口。⒉凹坑 色点或金属片 在IC一角有一凹坑、色 ...…

查看全部问答>

闲置物品兑换--TI POS机套件~~~

不错的芯币交换活动,支持一下~~~ 一直闲置着这套TI POS机套件 1500芯币不包邮转给有需要的朋友~~~ …

查看全部问答>