找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13297|回復: 12
收起左側

可以使用計數器計數的方法,獲取外部輸入信號的高電平持續(xù)時間?

[復制鏈接]
ID:37685 發(fā)表于 2015-4-2 11:40 來自手機 | 顯示全部樓層 |閱讀模式
你好,請問我可以使用計數器計數的方法,獲取外部輸入信號的高電平持續(xù)時間?
回復

使用道具 舉報

ID:27916 發(fā)表于 2015-4-2 12:42 | 顯示全部樓層
可以的,你可以在檢測到上升沿或高電平后開始定時,等到低電平或是下降沿后停下來,看 看時間是多少

評分

參與人數 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:1 發(fā)表于 2015-4-2 12:58 來自手機 | 顯示全部樓層
樓上說得對,可以反相以后,利用中斷來啟動檢測。然后循環(huán)檢測來判斷時間;蛘咧苯硬捎醚h(huán)判斷也行。
回復

使用道具 舉報

ID:73833 發(fā)表于 2015-4-2 17:44 | 顯示全部樓層
我送個程序你看看
定時器T0的模式2測量正脈沖寬度
#include<reg51.h>   //包含51單片機寄存器定義的頭文件
sbit ui=P3^2;  //將ui位定義為P3.2(INT0)引腳,探測輸入電壓
/*******************************************
函數功能:主函數
******************************************/       
void main(void)
  {
    TMOD=0x0a;   // TMOD=0000 1010B,使用定時器T0的模式2,GATE置1
    EA=1;         //開總中斷
    ET0=0;        //禁止定時器T0中斷     
   TH0=0;        //計數器T0高8位賦初值
   TL0=0;        //計數器T0低8位賦初值
   TR0=1;        //啟動T0
         while(1)      
     {
            while(ui==0) ;  //INT0為低電平,T0不啟動
                  
           TL0=0;   //INT0為高電平, T0啟動, TL0清0做準備
               
           while(ui==1) ; //在INT0高電平期間等待,計時結果送TH0\TL0       
       
          P1=TL0;    //INT0一旦為低電平就將計時結果送P1口(或其他變量存儲),根據機器周期可以計              

                          算出INT0上高電平存續(xù)的寬度,當然如果高電平時間太長,也可以算上TH1。
                          
        //While(1);
}
}

評分

參與人數 1黑幣 +35 收起 理由
admin + 35 很給力!

查看全部評分

回復

使用道具 舉報

ID:73833 發(fā)表于 2015-4-2 17:54 | 顯示全部樓層
定時器T0的模式2測量正脈沖寬度
#include<reg51.h>   //包含51單片機寄存器定義的頭文件
sbit ui=P3^2;  //將ui位定義為P3.2(INT0)引腳,表示輸入電壓
/*******************************************
函數功能:主函數
******************************************/       
void main(void)
  {
    TMOD=0x0a;   // TMOD=0000 1010B,使用定時器T0的模式2,//GATE置1
    EA=1;         //開總中斷
         ET0=0;        //禁止定時器T0中斷     
         TH0=0;        //計數器T0高8位賦初值
         TL0=0;        //計數器T0低8位賦初值
TR0=1;        //啟動T0
         while(1)       //無限循環(huán),不停地將TL0計數結果送P1口
     {
            while(ui==0) ;  //INT0為低電平,T0不能啟動
                  
                 TL0=0;   //INT0為高電平, T0已啟動, TL0清0做準備
               
while(ui==1) ; //在INT0高電平期間等待,計時結果送
//TH0\TL0               
P1=TL0;    //INT0一旦為低電平就將計時結果送P1口或其他變量//存儲,根據機器周期可以計算出高電平存續(xù)的時間當//然如果高電平時間太長,也可以算上TH0。
        //While(1);
}
}
定時器/計數器是一家人,單憑這家人是完不成任務的,還得去求人家INT0

評分

參與人數 1威望 +50 黑幣 +50 收起 理由
admin + 50 + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:37685 發(fā)表于 2015-4-3 13:52 來自手機 | 顯示全部樓層
dingmingzhou 發(fā)表于 2015-4-2 17:54
定時器T0的模式2測量正脈沖寬度
#include   //包含51單片機寄存器定義的頭文件
sbit ui=P3^2;  //將ui位 ...

太感謝了,程序條理清晰,注釋的非常詳細,很容易讓人理解。真是幫了我的大忙,再次表示感謝,祝您身體健康萬事順利。晚上我在燒錄到單片機里面去,測試一下。
回復

使用道具 舉報

ID:75077 發(fā)表于 2015-4-3 23:45 來自手機 | 顯示全部樓層
我不是以前就上傳過答案么

評分

參與人數 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:73833 發(fā)表于 2015-4-5 09:38 | 顯示全部樓層
/**********************************************************************
//樓主:也不知你實驗的怎樣了。不過別高興太早,這個程序是我粘來的,近日細琢磨一下,認為它還有些問題:
//1、既不查詢中斷標志,也不用中斷服務,更甚者沒開任何中斷源!而開個總中斷干什么呢?
//2、程序使用的是T0的工作方式2,它是自動重裝的8位計數器。所以注釋中說"可以算上TH0"以及存入"TH0"之類的注釋,是何意?   哎,什么人弄得!
//我把它改吧改吧,你試驗一下行不?愿討論。
/*************************************************************************/
#include<reg51.h>   //包含51單片機寄存器定義的頭文件
sbit  ui = P3^2;  //將ui位定義為P3.2(INT0)引腳,探測輸入電壓  
void main(void)
  {       
   TMOD=0x09;   // 使用定時器T0的模式1,GATE置1。定時模式。  
while(1)      
     {  
          TL0=0;           //定時器低8位清零       
          TH0=0;     //定時器高8位清零          
           while(ui);          //為了完整測量一個高電平,必須準確尋找一個完整的高電平。
                        //因此,如果此時P3.2腳上的電平為高,由于此時的TR0=0,
                        //定時器T0不能啟動。從下一個高電平開始。
            TR0=1;        //        在P3.2腳 為低電平時        ,讓TR0=1,做準備。
       while(!ui) ;        //         在P3.2腳低電平期間,等待。       
           while(ui) ;  //  程序到這一步時,P3.2腳已為高電平,同時啟動T0定時,并等待 P3.2腳變低。
                    TR0=0;    //  P3.2腳變低時,關閉定時器T0.
          P1=TL0;  
          P2=TH0;           //顯示 。TH0\TL0兩個寄存器可以存儲最大65536個數。
       
         }
   }

評分

參與人數 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:88353 發(fā)表于 2015-8-14 23:56 | 顯示全部樓層
dingmingzhou 發(fā)表于 2015-4-5 09:38
/**********************************************************************
//樓主:也不知你實驗的怎樣 ...

正在做電賽的東西,抱走了哈~~~
回復

使用道具 舉報

ID:88483 發(fā)表于 2015-8-17 17:57 | 顯示全部樓層
我覺得可以,利用輸入捕捉,前提是你要知道你計數是上升沿觸發(fā)還是下降沿觸發(fā)和上升沿都觸發(fā)。
回復

使用道具 舉報

ID:88776 發(fā)表于 2015-8-23 23:14 | 顯示全部樓層
太好了。。。多謝樓主。。樓主好人。
回復

使用道具 舉報

ID:489281 發(fā)表于 2019-5-9 09:28 | 顯示全部樓層
感謝樓下大佬
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

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