找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2503|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

再次被單片機(jī)紅外線發(fā)射程序整哭了!

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這是我寫的紅外發(fā)射程序,不成功,不知道錯(cuò)在哪里了?
我測(cè)的晶振是11.030,所以有些定時(shí)器數(shù)據(jù)是按11.030計(jì)算的.
反復(fù)測(cè)試按11.5092和11.030設(shè)置定時(shí)器數(shù)據(jù)都不成功,二個(gè)差值也不大.

不知道錯(cuò)在哪里,希望大神指導(dǎo)一下!!!!!

單片機(jī)源程序如下:
  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. };  //需要發(fā)送的數(shù)據(jù)

  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;        //定時(shí)9MS
  44.         fs=0;         //開始發(fā)
  45.         TR0=1;          //開始定時(shí)
  46.         while(!TF0);      //中斷變低
  47.         
  48.         TH0=0xEF;   
  49.         TL0=0xcc;            //定時(shí)4.5MS
  50.         TR0=1;
  51.         while(!TF0);     //中斷高
  52. }

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

  65. void s0()
  66. {
  67.         TL0=0xfa;    //定時(shí)562US
  68.         TH0=0xfd;
  69.         TR0=1;        //中斷變低
  70.         while(!TF0);
  71.         
  72.         TL0=0xfa;   //定時(shí)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;   //結(jié)束號(hào)562US后變低
  86.         Delay();        
  87.                 }
  88.         
  89. }
復(fù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:299872 發(fā)表于 2019-3-25 14:20 | 只看該作者
我覺得還有2個(gè)問題
1.波型差不多是對(duì)了的, 有可以延時(shí)問題.
2.可能是協(xié)議理解不對(duì),發(fā)送數(shù)據(jù)格式不對(duì).什么低位開始發(fā),或者是數(shù)據(jù)發(fā)送時(shí)間間隔錯(cuò)了.
回復(fù)

使用道具 舉報(bào)

板凳
ID:310519 發(fā)表于 2019-3-25 21:17 | 只看該作者
一般紅外遙控是調(diào)制38KHZ的載波。

你的載波是外掛的?
回復(fù)

使用道具 舉報(bào)

地板
ID:299872 發(fā)表于 2019-3-25 23:17 | 只看該作者
diy1997 發(fā)表于 2019-3-25 21:17
一般紅外遙控是調(diào)制38KHZ的載波。

你的載波是外掛的?

越波是個(gè)什么東西呀???????不是太明白你的意思呀.
回復(fù)

使用道具 舉報(bào)

5#
ID:246741 發(fā)表于 2019-3-26 09:27 | 只看該作者
是載波,不是越波,你直接把單片機(jī)輸出的波形通過紅外發(fā)射頭發(fā)出是不行的。
需要把單片機(jī)輸出的波形和38kHz的載波進(jìn)行調(diào)制,再通過紅外發(fā)射頭發(fā)出。一般集成的紅外接收頭有解調(diào)的功能,能夠把調(diào)制在38kHz上的波形解調(diào)出來(lái),成為正常能夠讀取的信息。
為了實(shí)現(xiàn)波形和38kHz載波進(jìn)行調(diào)制,最簡(jiǎn)單的辦法就是:外部加一個(gè)38kHz的方波發(fā)生器(也可以用單片機(jī)的一個(gè)引腳輸出),將該載波和波形通過與門相與,在通過紅外發(fā)射頭發(fā)射。
這個(gè)調(diào)制的原理和電話傳輸語(yǔ)音類似,需要把語(yǔ)音信號(hào)調(diào)制在高頻的載波上,然后才能進(jìn)行語(yǔ)音信號(hào)的傳輸。
回復(fù)

使用道具 舉報(bào)

6#
ID:310519 發(fā)表于 2019-3-26 19:05 | 只看該作者
xjtong 發(fā)表于 2019-3-25 23:17
越波是個(gè)什么東西呀???????不是太明白你的意思呀.

載波,為了發(fā)射方便和抗干擾等目的,

把要發(fā)射的信息搭載在一些波形上發(fā)射,

比如收單機(jī)的調(diào)幅,調(diào)頻。

紅處遙控一般用的是頻率為38KHZ的方波。

常用的三個(gè)腳的接收頭對(duì)38KHz的方波信號(hào)很敏感(接收頭有其它頻率的),

當(dāng)收到38KHZ的方波信號(hào)時(shí),輸出腳就輸出低電平,

所以,以常用的NEC編碼協(xié)議的引導(dǎo)碼來(lái)說,

你要先發(fā)射9MS的38KHZ的方波,然后停止4.5MS,

接著就是數(shù)據(jù)了......






回復(fù)

使用道具 舉報(bào)

7#
ID:299872 發(fā)表于 2019-3-26 19:49 | 只看該作者


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

現(xiàn)再還一個(gè)問題.
紅外發(fā)射頭的功率非常小,半米內(nèi)有效.

用萬(wàn)用測(cè)了,電流不到200ua,這還是接的8050的三極管,后來(lái)用PNP三極管還是一樣的結(jié)果.
什么原因呀?







回復(fù)

使用道具 舉報(bào)

8#
ID:466164 發(fā)表于 2019-3-26 21:34 | 只看該作者
你要先確定你接收有沒有載波,即接收部件有沒有專門的晶振,或震蕩電路,如果有代表有載波,單片機(jī)晶振頻率達(dá)不到,發(fā)送自然接收不了。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表