微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 红外遥控系统原理及单片机软件解码程序

红外遥控系统原理及单片机软件解码程序

时间:11-23 来源:互联网 点击:

  1. -----------*/
  2. voidInt0()interrupt0
  3. {
  4. unsignedchari,j;
  5. EX0=0;//关闭外部中断0
  6. IR_Flag=0;//执行中断程序时,LED灯亮
  7. i=10;//0.793ms延时,运行10次
  8. while(--i)
  9. {
  10. //定时0.793ms,延时0.793ms*10=7.93ms
  11. TH0=0xfc;
  12. TL0=0xe7;
  13. TR0=1;
  14. while(!TF0);
  15. TF0=0;
  16. TR0=0;
  17. //这7.93ms期间只要IR_Out变高电平,就非合法的红外信号,跳出
  18. if(IR_Out)
  19. {
  20. EX0=1;//准许中断
  21. return;
  22. }
  23. }
  24. //程序进行到这里,表明是合法的红外信号(利用9ms判断)
  25. while(!IR_Out);//等待9ms低电平过去
  26. //程序进行到这里,表明经过9ms低电平
  27. TH0=0xf6;
  28. TL0=0xff;
  29. TR0=1;
  30. while(!TF0);
  31. TF0=0;
  32. TR0=0;//延时2.305ms
  33. //IR_Out为低表明是连发码,不予理睬,跳出
  34. if(!IR_Out)
  35. {
  36. EX0=1;
  37. return;
  38. }
  39. //程序进行到这里,表明是引导码,等待4.5ms高电平的过去
  40. while(IR_Out);
  41. //开始接收用户码
  42. for(i=0;i<4;i++)
  43. {
  44. for(j=0;j<8;j++)
  45. {
  46. while(!IR_Out);//等待低电平过去
  47. dat[i]>>=1;//把上次的数据位右移一位
  48. TH0=0xfc;
  49. TL0=0xe7;
  50. TR0=1;
  51. while(!TF0);
  52. TR0=0;
  53. TF0=0;//延时0.793ms
  54. //若为数据"1",则延时后IR_Out为高电平
  55. if(IR_Out)
  56. {
  57. dat[i]|=0x80;//所有数据位1放最高位
  58. while(IR_Out);//等待高电平过去
  59. }
  60. }
  61. }
  62. LED_Port=dat[2];
  63. EX0=1;//开中断
  64. return;
  65. }
  66. /*------------------------------------------------------------*-
  67. ----ENDOFFILE-------------------------------------------
  68. -*------------------------------------------------------------*/


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top