历史上的今天
今天是: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 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< } time=getHtime(); //接收并判定引导码的 4.5ms 高电平 if ((time<71)||(time>89)) //时间判定范围为 4.0~5.0ms,超过此范围则说明为误码,直接退出 { GIFR=(1< } for (i=0; i<4; i++) //循环接收 4 个字节 { for (j=0; j<8; j++) { time=getLtime(); if ((time<6)||(time>14)) //时间判定范围为 340~780us,超过此范围则说明为误码,直接退出 { GIFR=(1< } 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< } } 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< } time=getHtime(); //接收并判定连发引导码的 2.25ms 高电平 if ((time<36)||(time>44)) //时间判定范围为 2.0~2.5ms,超过此范围则说明为误码,直接退出 { step=1; //下次中断执行按键处理程序 GIFR=(1< }else //确定为连发码 { ir_flag=1; step=0; //如果按键仍未松开,下次中断继续执行连发码处理程序 GIFR=(1< } } /****************************************************/ int main(void) { PORTB=0xff; MCUCR=(1< while (1) {;} } attiny13使用内部时钟,电源电压5V时实测1.15MHz左右。编译器为GCC
史海拾趣
|
请问高手:如图,我这样连接的显示电路错没? 老师说RXD不能输出,TXD不能作为74LS164的CLOCK信号, 还有第2个164的A.B不能接上一组164输出的的信号,要我改....我真的郁闷了 请高手指教....速度啊...紧急...… 查看全部问答> |
|
在BOOTLOADER中把NK下载到NOR FLASH中,现在想把写入得数据打印出来该怎么做,可以直接访问FLASH的地址吗,我试了下发现读不出来,(全是0),还是要写了类似驱动的东西… 查看全部问答> |
|
新手,询问pda与远程的数据库(oracle)同步问题,急!!! 原来没有做过嵌入式的开发,现在想在pda下做二次开发,系统是wince的,pda上的数据需要跟远程服务器的数据库做数据同步,远程的数据库为oracle,系统为b/s结构的,pda需要连接到pc机上在做同步,pc机可以连接系统,请教思路或者是有什么资料,万分 ...… 查看全部问答> |
|
常用集成电路引脚识别:各种不同的集成电路引脚有不同的识别标记和不同的识别方法,掌握这些标记及识 别方法,对于使用、选购、维修测试是极为重要的。⒈缺口 在IC的一端有一半圆形或方形的缺口。⒉凹坑 色点或金属片 在IC一角有一凹坑、色 ...… 查看全部问答> |




