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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5998|回復: 1
打印 上一主題 下一主題
收起左側

[求助]關于一個程序的疑問??

[復制鏈接]
跳轉到指定樓層
樓主
ID:25357 發表于 2010-8-20 10:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

對以下程序,我有些不明白的地方?請教高手。

紅外發射 啟動 9.12ms +4.5 ms     0.565+0.56為0  0.565+1.685 為1

下面程序中斷一次26us  好像算起來,時間間隔不對的???

可是,我用紅外測試儀測了一下,好像又相差不大????

到底是哪里的問題???謝謝

 

 

#include <AT89X51.h>

static bit OP;        //紅外發射管的亮滅

static unsigned int count;       //延時計數器

static unsigned int endcount; //終止延時計數

static unsigned char flag;      //紅外發送標志

char iraddr1;  //十六位地址的第一個字節

char iraddr2;  //十六位地址的第二個字節

void SendIRdata(char p_irdata);

void delay();

void main(void)

{

  count = 0;

  flag = 0;

  OP = 0;

  P3_4 = 0;

  EA = 1; //允許CPU中斷

  TMOD = 0x11; //設定時器0116位模式1

  ET0 = 1; //定時器0中斷允許

 

  TH0 = 0xFF;

  TL0 = 0xE5; //設定時值038K 也就是每隔26us中斷一次 

  TR0 = 1;//開始計數

  iraddr1=3;

  iraddr2=252;

 

  do{

      delay();

      SendIRdata(0x55);// 在此填入發射數據

  }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;

  //發送9ms的起始碼

  endcount=223; // 26us中斷一次,不是5.7ms????

  flag=1;

  count=0;

  do{}while(count<endcount);

  //發送4.5ms的結果碼

  endcount=117;//   這里好像只有3ms

  flag=0;

  count=0;

  do{}while(count<endcount);

  //發送十六位地址的前八位

  irdata=iraddr1;

  for(i=0;i<8;i++)

  {

     //先發送0.56ms38KHZ紅外波(即編碼中0.56ms的低電平)

     endcount=10;  // 不是0.26ms嗎?哪有0.56ms???

flag=1;

     count=0;

     do{}while(count<endcount);

//停止發送紅外信號(即編碼中的高電平)

     if(irdata-(irdata/2)*2)  //判斷二進制數個位為1還是0

     {

       endcount=41;  //1為寬的高電平 //算到1ms    

}

    else

     {

     endcount=15;   //0為窄的高電平 //只有0.39ms    

 }

    flag=0;

    count=0;

    do{}while(count<endcount);

    irdata=irdata>>1;

  }

  //發送十六位地址的后八位

  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;

  }

  //發送八位數據

  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;

  }

  //發送八位數據的反碼

  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++)

    {

    }

  }

}

 

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

使用道具 舉報

沙發
ID:1 發表于 2010-8-25 14:01 | 只看該作者

是因為c語言編譯的,時間要消耗的多一些所以要預留出一些時間來,才能剛好匹配紅外的那個脈寬,你反匯編看一下代碼就能算出準確的時間了,用12兆的晶振,可精確到1微秒

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费精品久久久久久中文字幕 | 高清黄色毛片 | 成人在线观看免费爱爱 | 亚洲综合色视频在线观看 | 91国语清晰打电话对白 | 久久久久国产精品 | 91在线观看| 午夜精品一区二区三区在线观看 | 亚洲视频在线观看免费 | 亚洲黄色av | 日本不卡在线视频 | 日韩精品在线播放 | 久草资源在线视频 | 欧洲精品在线观看 | 老司机午夜性大片 | 日韩欧美精品在线播放 | 成人午夜激情 | 精品日韩一区二区 | 欧美三级在线 | 久久久久国产 | 国产精品一区免费 | 国产精品99久久久久久大便 | 国产精品一区久久久 | 亚洲国产高清在线观看 | 成人一区二区视频 | 亚洲入口 | 久久国产三级 | 亚洲精品视频播放 | 成人性视频在线播放 | 欧美精品三区 | 中文字幕免费 | 国产不卡在线观看 | 欧美日韩在线精品 | 国产日韩精品一区二区三区 | 亚洲欧美精品 | 91精品国产综合久久婷婷香蕉 | 欧美激情 亚洲 | 亚洲小说图片 | 7777在线视频 | 成人深夜福利网站 | 一级做a爰片性色毛片16美国 |