看板 ASM 關於我們 聯絡資訊
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
wuonline:相當簡單的方法,推一個! 04/14 19:56
※ 編輯: ksmrt0123 來自: 219.68.71.218 (04/14 20:28)
ruemann:我忘了8051有這個不錯的功能了... 04/14 21:48
BlueFeel:咦?INT不是負緣觸發嗎?反相後? 04/14 22:45
BlueFeel:另外, INT的限制是不是在THTL=FFFF的時候會歸零? 04/14 22:47
ksmrt0123:樓上, 我一開始就有寫這是量「正」脈波寬度 04/14 23:26
ksmrt0123:還有external interrupt(EX0)跟timer0 interrupt (ET0) 04/14 23:29
ksmrt0123:要分清楚... 04/14 23:30
WolfLord:還可以用8052的T2EX ^^ 04/14 23:38
BlueFeel:剛在翻書,我真的搞混了!>"< 04/14 23:58
lostmyself:這個好! 04/15 18:42