欢迎来到天天文库
浏览记录
ID:55700394
大小:96.00 KB
页数:12页
时间:2020-05-25
《红外接收发制作.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、红外接收原理图:#include#include#include#defineuintunsignedint#defineucharunsignedcharsbitir=P3^2;//红外端口sbitP2_0=P2^0;//LED1端口sbitP2_1=P2^1;//LED2端口sbitP2_2=P2^2;//LED3端口sbitP2_3=P2^3;//LED4端口sbitP2_4=P2^4;//LED5端口sbitP2_5=P2^5;//LED6端口sbitP2_6=P
2、2^6;//LED7端口sbitP2_7=P2^7;//LED8端口ucharkey_code=0;//遥控键值ucharnew_code=0;//有无新按键uintbuf_key_code=0;//键值暂存ucharkey_bit_count=0;//键编码脉冲计数uintcount=0;//定时中断次数计数uintbuf_count=0;//定时中断计数暂存ucharcommon_code_count=0;//前导码脉冲计数ucharir_status=0;//脉冲接收器所处的状态,0:无信号,1:系统码接收区,2:数据编码
3、接收区///延时子程序10usvoiddelay_10us(unsignedchary){ unsignedcharx; for(x=y;x>0;x--);}/////初始化voidinit(void){ ir=1; //红外端口写1 EA=1; //开总中断 TMOD=0x02; //定时器0,模式2,8位自动装载模式 TH0=0Xd1; //定时50us TL0=0Xd1; IT0=1; //INT1下降沿触发 ET0=1; //允许定时器中断 EX0=1
4、; //允许外部中断}/***********************************************定时器中断***********************************************////定时器中断voidtime0()interrupt1{ count++; //定时器中断次数累加}/********************************************** 外部中断,红外解码程序*************************************
5、*********////外部中断voidint1()interrupt0{ TR0=1; //开定时器中断 //如果信号合法,则放入buf_count,count清0,对下一个脉冲信号计时 if(count>12&&count<270) { buf_count=count; count=0; } delay_10us(10); //延时100us以消除下降沿跳变抖动 //INT1引脚稳定为低电平,则表法确实是信号,count重新计时,因上面延时了50us,故要补
6、偿1次TO中断 if(ir==0) { count=2; } //若收到的信号合法,则再进行信号分析 if(buf_count>12&&buf_count<270) { //如果之前未收到引导码 if(ir_status==0) { //判断是否引导码13.5ms if(buf_count>210&&buf_count<270) { ir_status=1;
7、 //系统标记 buf_count=0; // } } ///收到引导码 elseif(ir_status==1) { //若收完26个脉冲 if(common_code_count>=25) { ir_status=2; //
8、数据解码标记 common_code_count=0; //系统码计算清零 buf_count=0; //中断计数暂存清0 }
此文档下载收益归作者所有