作者ksmrt0123 (ksmrt)
看板ASM
標題Re: [問題] 量測脈波寬度
時間Tue Apr 14 19:02:46 2009
8051 量測「正」脈波寬度有個簡單又準確的方法.
timer/counter 0/1 有個GATE bit (TMOD.3/TMOD.7),
Intel manual對此bit的說明是:
Gating control when set.
Timer/Counter "x" is enabled
only when INTx# pin is high and TRx control pin is
set. When cleared Timer x is enabled whenever
TRx control bit is set.
打開這個GATE功能, 讓信號從 INTx# pin 進來,
先把timer清為零, 經過一個正脈波後,
timer內的值(TH0/TL0)就是pulse width了.
這種作法是硬體直接計數, resolution是一個
machine cycle, 是8051能達到最準確的方法.
若要量測的pulse width很大, 可用timer interrupt
用變數計數.
另可配合 INTx interrupt 使用, 在正脈波結束
(negative edge)產生 interrupt, 把timer/counter
值讀出並清為0, 準備下一次量測. 這樣即使8051有
很複雜的工作在處理, 也能得到正確的pulse width
值.
示意圖:
________________
INT0# _______| |_________
^
|- EX0 interrupt
timer0 -------
<----running---->----------
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.68.71.218
1F:推 wuonline:相當簡單的方法,推一個! 04/14 19:56
※ 編輯: ksmrt0123 來自: 219.68.71.218 (04/14 20:28)
2F:推 ruemann:我忘了8051有這個不錯的功能了... 04/14 21:48
3F:推 BlueFeel:咦?INT不是負緣觸發嗎?反相後? 04/14 22:45
4F:→ BlueFeel:另外, INT的限制是不是在THTL=FFFF的時候會歸零? 04/14 22:47
5F:→ ksmrt0123:樓上, 我一開始就有寫這是量「正」脈波寬度 04/14 23:26
6F:→ ksmrt0123:還有external interrupt(EX0)跟timer0 interrupt (ET0) 04/14 23:29
7F:→ ksmrt0123:要分清楚... 04/14 23:30
8F:推 WolfLord:還可以用8052的T2EX ^^ 04/14 23:38
9F:推 BlueFeel:剛在翻書,我真的搞混了!>"< 04/14 23:58
10F:推 lostmyself:這個好! 04/15 18:42