欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2715|回復: 7
收起左側

再次被單片機紅外線發射程序整哭了!

[復制鏈接]
ID:299872 發表于 2019-3-25 14:14 | 顯示全部樓層 |閱讀模式
這是我寫的紅外發射程序,不成功,不知道錯在哪里了?
我測的晶振是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. }
復制代碼


回復

使用道具 舉報

ID:299872 發表于 2019-3-25 14:20 | 顯示全部樓層
我覺得還有2個問題
1.波型差不多是對了的, 有可以延時問題.
2.可能是協議理解不對,發送數據格式不對.什么低位開始發,或者是數據發送時間間隔錯了.
回復

使用道具 舉報

ID:310519 發表于 2019-3-25 21:17 | 顯示全部樓層
一般紅外遙控是調制38KHZ的載波。

你的載波是外掛的?
回復

使用道具 舉報

ID:299872 發表于 2019-3-25 23:17 | 顯示全部樓層
diy1997 發表于 2019-3-25 21:17
一般紅外遙控是調制38KHZ的載波。

你的載波是外掛的?

越波是個什么東西呀???????不是太明白你的意思呀.
回復

使用道具 舉報

ID:246741 發表于 2019-3-26 09:27 | 顯示全部樓層
是載波,不是越波,你直接把單片機輸出的波形通過紅外發射頭發出是不行的。
需要把單片機輸出的波形和38kHz的載波進行調制,再通過紅外發射頭發出。一般集成的紅外接收頭有解調的功能,能夠把調制在38kHz上的波形解調出來,成為正常能夠讀取的信息。
為了實現波形和38kHz載波進行調制,最簡單的辦法就是:外部加一個38kHz的方波發生器(也可以用單片機的一個引腳輸出),將該載波和波形通過與門相與,在通過紅外發射頭發射。
這個調制的原理和電話傳輸語音類似,需要把語音信號調制在高頻的載波上,然后才能進行語音信號的傳輸。
回復

使用道具 舉報

ID:310519 發表于 2019-3-26 19:05 | 顯示全部樓層
xjtong 發表于 2019-3-25 23:17
越波是個什么東西呀???????不是太明白你的意思呀.

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

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

比如收單機的調幅,調頻。

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

常用的三個腳的接收頭對38KHz的方波信號很敏感(接收頭有其它頻率的),

當收到38KHZ的方波信號時,輸出腳就輸出低電平,

所以,以常用的NEC編碼協議的引導碼來說,

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

接著就是數據了......






回復

使用道具 舉報

ID:299872 發表于 2019-3-26 19:49 | 顯示全部樓層


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

現再還一個問題.
紅外發射頭的功率非常小,半米內有效.

用萬用測了,電流不到200ua,這還是接的8050的三極管,后來用PNP三極管還是一樣的結果.
什么原因呀?


捕獲3.JPG

4.JPG

5.JPG
回復

使用道具 舉報

ID:466164 發表于 2019-3-26 21:34 | 顯示全部樓層
你要先確定你接收有沒有載波,即接收部件有沒有專門的晶振,或震蕩電路,如果有代表有載波,單片機晶振頻率達不到,發送自然接收不了。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表