找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1956|回复: 7
打印 上一主题 下一主题
收起左侧

再次被单片机红外线发射程序整哭了!

[复制链接]
跳转到指定楼层
楼主
这是我写的红外发射程序,不成功,不知道错在哪里了?
我测的晶振是11.030,所以有些定时器数据是按11.030计算的.
反复测试按11.5092和11.030设置定时器数据都不成功,二个差值也不大.

不知道错在哪里,希望大神指导一下!!!!!

单片机源程序如下:
  1. #include<reg52.h>

  2. #define uint unsigned int
  3. #define uchar unsigned char
  4.         
  5. sbit fs=P1^5;
  6. uchar i;
  7. uchar sj[]={        1,0,0,0,0,0,0,0,   0,1,1,1,1,1,1,1,         0,0,0,0,0,0,0,0,        1,1,1,1,1,1,1,1,        
  8.                
  9. };  //需要发送的数据

  10. void delayns(uchar i)
  11. {
  12. while(i--);
  13. }
  14. void Delay()                //@11.0592MHz
  15. {
  16.         unsigned char i, j, k;

  17.         i = 16;
  18.         j = 19;
  19.         k = 10;
  20.         do
  21.         {
  22.                 do
  23.                 {
  24.                         while (--k);
  25.                 } while (--j);
  26.         } while (--i);
  27. }


  28. void init()
  29. {
  30.         TMOD=0X11;
  31.         EA=1;
  32.         ET0=1;
  33. }

  34. void t0() interrupt 1
  35. {

  36. fs=~fs;
  37.         TR0=0;
  38.         TF0=0;
  39. }

  40. void n1()
  41. {


  42. <strong> </strong>       TH0=0xdf;
  43.         TL0=0x99;        //定时9MS
  44.         fs=0;         //开始发
  45.         TR0=1;          //开始定时
  46.         while(!TF0);      //中断变低
  47.         
  48.         TH0=0xEF;   
  49.         TL0=0xcc;            //定时4.5MS
  50.         TR0=1;
  51.         while(!TF0);     //中断高
  52. }

  53. void s1()
  54. {
  55.         TH0=0xfd;   //定时562US
  56.         TL0=0xfa;
  57.         TR0=1;
  58.         while(!TF0);    //中断变低
  59.         
  60.         TH0=0xf9;   //定时1654US
  61.         TL0=0xef;
  62.         TR0=1;
  63.         while(!TF0);   //中断变高
  64. }

  65. void s0()
  66. {
  67.         TL0=0xfa;    //定时562US
  68.         TH0=0xfd;
  69.         TR0=1;        //中断变低
  70.         while(!TF0);
  71.         
  72.         TL0=0xfa;   //定时562US
  73.         TH0=0xfd;
  74.         TR0=1;
  75.         while(!TF0);     //中断变高
  76.         
  77. }

  78. void main()
  79. {

  80.         init();

  81.         while(1)
  82.         {
  83.         n1();
  84.         for(i=0;i<32;i++){if(sj[i]==0)s0();else {s1();}}
  85.         delayns(58);fs=1;   //结束号562US后变低
  86.         Delay();        
  87.                 }
  88.         
  89. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:299872 发表于 2019-3-25 14:20 | 显示全部楼层
我觉得还有2个问题
1.波型差不多是对了的, 有可以延时问题.
2.可能是协议理解不对,发送数据格式不对.什么低位开始发,或者是数据发送时间间隔错了.
回复

使用道具 举报

板凳
ID:299872 发表于 2019-3-25 23:17 | 显示全部楼层
diy1997 发表于 2019-3-25 21:17
一般红外遥控是调制38KHZ的载波。

你的载波是外挂的?

越波是个什么东西呀???????不是太明白你的意思呀.
回复

使用道具 举报

地板
ID:299872 发表于 2019-3-26 19:49 | 显示全部楼层


完美的波型!!!!!!!!!!!!!!!!!!!!!

现再还一个问题.
红外发射头的功率非常小,半米内有效.

用万用测了,电流不到200ua,这还是接的8050的三极管,后来用PNP三极管还是一样的结果.
什么原因呀?







回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表