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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13920|回復: 6
收起左側

怎么用單片機的普通I/O口測脈沖寬度(100ms左右)

[復制鏈接]
ID:51443 發表于 2013-7-2 22:05 | 顯示全部樓層 |閱讀模式
如題,怎么用單片機的普通I/O口測量脈沖寬度(100ms左右)?比如把脈沖加到STC89C52RC的P1.6口進行測量。
回復

使用道具 舉報

ID:7485 發表于 2013-7-3 08:17 | 顯示全部樓層
可以使用查詢方式。
回復

使用道具 舉報

ID:51443 發表于 2013-7-3 09:40 | 顯示全部樓層

本帖最后由 職教電子 于 2013-7-3 09:48 編輯
ahshmj 發表于 2013-7-3 08:17
可以使用查詢方式。


能說具體點嗎?我剛學,看了很多例程,都是把脈沖加到中斷口才行,我試著用了查詢方式,但沒有成功。我就是想用一個普通I/O口來識別四個不同寬度的正脈沖,即:我把100ms的正脈沖加到P1.6口,讓單片機干第一件事情;當我把200ms的正脈沖加到P1.6口,讓單片機干第二件事情......(每種脈沖都是連續發送)
回復

使用道具 舉報

ID:7485 發表于 2013-7-3 11:45 | 顯示全部樓層
使用循環,一直查詢該腳是否變成高電平。如果是,就啟動定時器開始計時。然后繼續查詢,該腳是否變成低電平,若是,則停止定時器計時,然后讀出計時值即可計算脈沖寬度。
回復

使用道具 舉報

ID:51443 發表于 2013-7-3 12:31 | 顯示全部樓層
ahshmj 發表于 2013-7-3 11:45
使用循環,一直查詢該腳是否變成高電平。如果是,就啟動定時器開始計時。然后繼續查詢,該腳是否變成低電平 ...

定時器最多只能有幾十毫秒的定時時間吧,我需要上百毫秒。我是這樣做的:
void keyscan() //
  {
    //uint ci=0;前面已定義成全局變量
    TMOD=0x02; //T0模式2
      TH0=0; //賦初值
     TL0=0;
       EA=1; //開總中斷
     ET0=1;//開定時器中斷

    if(key==1)   //key=P1^6
      {
        TR0=1;   //啟動定時器
        while(!key) //等待低電平到來
        if(key==0)
        {
          TR0=0; //關閉定時器
      if((ci>200) && (ci<300)) //若200<ci<300
            num=0;
      }
      }

    }
void T0_time() interrupt 1   //T0中斷
{
  ci++;
  }
l哪錯了?
回復

使用道具 舉報

ID:7485 發表于 2013-7-3 17:37 | 顯示全部樓層
如果使用6.0000m晶振可以在一次中斷內做到65535*2微秒(130ms多)。

如果在要再長時間,可以像時鐘程序一樣另外設一個計數器,記錄中斷次數。
回復

使用道具 舉報

ID:51443 發表于 2013-7-3 20:36 | 顯示全部樓層
ahshmj 發表于 2013-7-3 17:37
如果使用6.0000m晶振可以在一次中斷內做到65535*2微秒(130ms多)。

如果在要再長時間,可以像時鐘程序 ...

謝謝版主的回復,我用全局變量記錄溢出次數為什么不行呢?我只需要把40ms-----300ms的不同脈寬區分開就行。不需要準確的數值。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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