久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 17483|回復: 20
收起左側(cè)

關于紅外發(fā)射的問題

  [復制鏈接]
ID:20083 發(fā)表于 2010-9-4 16:39 | 顯示全部樓層 |閱讀模式

以下是51hei板子自帶紅外發(fā)射程序一部分

//發(fā)送9ms的起始碼
  endcount=223;
  flag=1;
  count=0;
  do{}while(count<endcount);

 

這里寫發(fā)送9ms起始碼,設置endcountwei 223

 

想請教下,223是怎么算出來的,我自己老是算不出這個數(shù),謝謝!

 

 

 

 

 

 

以下是完整程序


#include <AT89X51.h> 
static bit OP;        //紅外發(fā)射管的亮滅
static unsigned int count;       //延時計數(shù)器
static unsigned int endcount; //終止延時計數(shù)
static unsigned char flag;      //紅外發(fā)送標志
char iraddr1;  //十六位地址的第一個字節(jié)
char iraddr2;  //十六位地址的第二個字節(jié)
void SendIRdata(char p_irdata);
void delay();
void main(void) 
{
  count = 0;
  flag = 0;
  OP = 0;
  P3_4 = 0;
  EA = 1; //允許CPU中斷 
  TMOD = 0x11; //設定時器0和1為16位模式1 
  ET0 = 1; //定時器0中斷允許 

  TH0 = 0xFF; 
  TL0 = 0xE5; //設定時值0為38K 也就是每隔26us中斷一次  
  TR0 = 1;//開始計數(shù)
  iraddr1=3;
  iraddr2=252;

  do{
      delay();
      SendIRdata(0x55);// 在此填入發(fā)射數(shù)據(jù)
  }while(1);
} 
//定時器0中斷處理 
void timeint(void) interrupt 1 
{ 
  TH0=0xFF; 
  TL0=0xE5; //設定時值為38K 也就是每隔26us中斷一次
  count++;
  if (flag==1)
  {
    OP=~OP;
  }
  else
  {
    OP = 0;
  }
  P3_4 = OP;
} 

void SendIRdata(char p_irdata)
{
  int i;
  char irdata=p_irdata;
  //發(fā)送9ms的起始碼
  endcount=223;
  flag=1;
  count=0;
  do{}while(count<endcount);
  //發(fā)送4.5ms的結(jié)果碼
  endcount=117;
  flag=0;
  count=0;
  do{}while(count<endcount);
  //發(fā)送十六位地址的前八位
  irdata=iraddr1;
  for(i=0;i<8;i++)
  {
     //先發(fā)送0.56ms的38KHZ紅外波(即編碼中0.56ms的低電平)
     endcount=10;
     flag=1;
     count=0;
     do{}while(count<endcount);
//停止發(fā)送紅外信號(即編碼中的高電平)
     if(irdata-(irdata/2)*2)  //判斷二進制數(shù)個位為1還是0
     {
       endcount=41;  //1為寬的高電平
     }
    else
     {
     endcount=15;   //0為窄的高電平
     }
    flag=0;
    count=0;
    do{}while(count<endcount);
    irdata=irdata>>1;
  }
  //發(fā)送十六位地址的后八位
  irdata=iraddr2;
  for(i=0;i<8;i++)
  {
     endcount=10;
     flag=1;
     count=0;
     do{}while(count<endcount);
     if(irdata-(irdata/2)*2)
     {
        endcount=41;
     }
     else
     {
       endcount=15;
     }
     flag=0;
     count=0;
     do{}while(count<endcount);
     irdata=irdata>>1;
  }
  //發(fā)送八位數(shù)據(jù)
  irdata=p_irdata;
  for(i=0;i<8;i++)
  {
     endcount=10;
     flag=1;
     count=0;
     do{}while(count<endcount);
     if(irdata-(irdata/2)*2)
     {
         endcount=41;
     }
     else
     {
       endcount=15;
     }
     flag=0;
     count=0;
     do{}while(count<endcount);
     irdata=irdata>>1;
  }
  //發(fā)送八位數(shù)據(jù)的反碼
  irdata=~p_irdata;
  for(i=0;i<8;i++)
  {
     endcount=10;
     flag=1;
     count=0;
     do{}while(count<endcount);
     if(irdata-(irdata/2)*2)
     {
         endcount=41;
     }
     else
     {
       endcount=15;
     }
     flag=0;
     count=0;
     do{}while(count<endcount);
     irdata=irdata>>1;
  }
  endcount=10;
  flag=1;
  count=0;
  do{}while(count<endcount);
  flag=0;
}
void delay()
{
  int i,j;
  for(i=0;i<400;i++)
  {
    for(j=0;j<100;j++)
    {
    }
  }
}

回復

使用道具 舉報

ID:20083 發(fā)表于 2010-9-4 16:41 | 顯示全部樓層
以上是51hei自帶的一個完整程序 以下是程序一部分 //發(fā)送9ms的起始碼 endcount="223; " flag="1; " count="0; " do{}while(count
回復

使用道具 舉報

ID:1 發(fā)表于 2010-9-4 17:12 | 顯示全部樓層

稍等 馬上回復

回復

使用道具 舉報

ID:20083 發(fā)表于 2010-9-4 17:15 | 顯示全部樓層
真是太感謝了,呵呵
回復

使用道具 舉報

ID:1 發(fā)表于 2010-9-4 21:21 | 顯示全部樓層
  定時器0中斷,每隔26us中斷一次,  而這個223*26us 就是38k方波發(fā)射時間,
但是由于是c語言寫的代碼,效率有點低,我們沒有辦法直接計算出代碼執(zhí)行所需要的時間,所以還需要少算一點這時間值,因為其他的代碼運行也需要時間。取223這樣大約是發(fā)射9ms的的38k方波,這是個經(jīng)驗值,當然最好是要對著示波器驗證一下,以保證剛好為9ms
回復

使用道具 舉報

ID:20083 發(fā)表于 2010-9-4 21:32 | 顯示全部樓層

原來是這樣子啊。。我也是拿223X26,但覺得差好多,呵呵

 

 endcount=41;  //1為寬的高電平  代表1.685ms

 

endcount=10; 代表0.56ms

 

這些都是靠經(jīng)驗啊?有點郁悶,呵呵

回復

使用道具 舉報

ID:1 發(fā)表于 2010-9-4 21:54 | 顯示全部樓層

那我告訴你一招軟件調(diào)試的方法吧,可把誤差減到最小

 

首先在工程里把晶振設置為12.0M  debug框里選擇 use simulator  并且要goto main打勾

 

在這2個個地方設置斷點

其實這2個斷點中間的代碼就是在發(fā)射38k方波

001.jpg

記錄程序運行到第一個斷點的時間為1.49654400
002.jpg

程序運行到第二個斷點的時間為1.50511800

 

所花的時間為1.50511800秒 -1.49654400秒=0.008574秒 ,和9ms已經(jīng)差不遠了 

 

然后你可以采用改變那個數(shù)字或者加入減少代碼的方法把時間調(diào)試到1個微妙都不差,這也不是很難的事情

 

  我們用c語言編寫這類的時候  要做到精確  也不是很難的  你需要首先計算出一個大概的時間 然后慢慢修改調(diào)試至最精確的值

[此貼子已經(jīng)被作者于2010-9-5 0:51:01編輯過]
回復

使用道具 舉報

ID:20083 發(fā)表于 2010-9-4 22:31 | 顯示全部樓層
哈哈,實在感謝!
回復

使用道具 舉報

ID:44179 發(fā)表于 2013-1-30 13:37 | 顯示全部樓層

這個代碼是NEC 發(fā)射的程式,各位大俠是否有RC5 發(fā)射的代碼呢?

回復

使用道具 舉報

ID:65464 發(fā)表于 2014-8-26 09:44 | 顯示全部樓層
不錯下來看看!!
回復

使用道具 舉報

ID:66367 發(fā)表于 2014-9-18 22:33 | 顯示全部樓層
為了 m比 回一個
回復

使用道具 舉報

ID:67796 發(fā)表于 2014-11-29 13:23 | 顯示全部樓層
admin 發(fā)表于 2010-9-4 21:54
那我告訴你一招軟件調(diào)試的方法吧,可把誤差減到最小
&nbsp;
首先在工程里把晶振設置為12.0M&nbsp; debug ...

這個方法確實是能解決一時問題。

代碼的其中一個價值在于復用,如果寫作函數(shù)調(diào)用,稍微改變下調(diào)用的結(jié)構,整個就得重算一遍。

看了您在 紅外萬能學習型遙控器_c  的代碼,用了_nop_()在一定程度上回避了這一算法的缺陷,倒是更有借鑒之處。

也難怪,可能真沒有比較完滿的解決辦法,不然宋老師的視頻不至于跳過這個不講。
回復

使用道具 舉報

ID:58581 發(fā)表于 2014-12-18 09:27 | 顯示全部樓層
學習了!!!
回復

使用道具 舉報

ID:37147 發(fā)表于 2015-1-12 21:57 | 顯示全部樓層
程序看起來好累 雖然看不懂  但堅持學習!!!!
回復

使用道具 舉報

ID:92665 發(fā)表于 2015-11-1 15:04 | 顯示全部樓層
現(xiàn)在還是菜鳥,紅外的程序只能慢慢看了
回復

使用道具 舉報

ID:68356 發(fā)表于 2017-1-26 17:07 | 顯示全部樓層
好動西,收藏了
回復

使用道具 舉報

ID:152917 發(fā)表于 2017-3-29 11:26 | 顯示全部樓層
棒棒棒
回復

使用道具 舉報

ID:185661 發(fā)表于 2017-5-15 19:22 | 顯示全部樓層
好東西,
回復

使用道具 舉報

ID:276399 發(fā)表于 2018-1-21 19:12 | 顯示全部樓層
好資料,51黑有你更精彩
回復

使用道具 舉報

ID:272080 發(fā)表于 2018-2-5 13:19 | 顯示全部樓層
if(irdata-(irdata/2)*2)  //判斷二進制數(shù)個位為1還是0   樓主可以解釋一下這個代碼嗎  這里不是很看得懂了
回復

使用道具 舉報

ID:282408 發(fā)表于 2018-2-5 17:17 | 顯示全部樓層
0.5秒內(nèi)檢測到兩個24v脈沖不動作,繼續(xù)檢測   當0.5秒只檢測到一個為脈沖信號為異常  并報警,人工復位,有意向聯(lián)系 微信tfktfk
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产91久久综合桃花 | 欧美一区二区三区在线 | 99久久婷婷国产综合精品电影 | 国产精品视频不卡 | 日韩免| 色婷婷av一区二区三区软件 | 国产欧美在线 | 国产成人99久久亚洲综合精品 | 天天射夜夜操 | 91在线精品一区二区 | 国产黄色一级片 | 日韩欧美视频 | 黄免费观看视频 | 国产成人久久av免费高清密臂 | 激情网站在线 | 国产精品久久久久久久久久久久久久 | 黄色av网站在线免费观看 | 国产观看| 久久久日韩精品一区二区三区 | 精品久久久久久久久亚洲 | 欧美日韩黄色一级片 | 情侣黄网站免费看 | 欧美精品久久久久久 | 小h片免费观看久久久久 | 亚洲精品一区二三区不卡 | 日本啊v在线 | 亚洲a视| 亚洲精品aⅴ | 久久精品久久综合 | 波波电影院一区二区三区 | 永久看片| 免费毛片网站 | 国产露脸国语对白在线 | 日韩中文在线视频 | 久久久.com| 成人免费在线 | 欧美黄色精品 | 日韩不卡一区二区三区 | 精品综合| 欧美一级特黄aaa大片在线观看 | 国产精品一区二区在线 |