Re: [問題] 量測脈波寬度

看板ASM (組合語言)作者 (ksmrt)時間15年前 (2009/04/14 19:02), 編輯推噓6(604)
留言10則, 6人參與, 最新討論串7/8 (看更多)
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

04/14 19:56, , 1F
相當簡單的方法,推一個!
04/14 19:56, 1F
※ 編輯: ksmrt0123 來自: 219.68.71.218 (04/14 20:28)

04/14 21:48, , 2F
我忘了8051有這個不錯的功能了...
04/14 21:48, 2F

04/14 22:45, , 3F
咦?INT不是負緣觸發嗎?反相後?
04/14 22:45, 3F

04/14 22:47, , 4F
另外, INT的限制是不是在THTL=FFFF的時候會歸零?
04/14 22:47, 4F

04/14 23:26, , 5F
樓上, 我一開始就有寫這是量「正」脈波寬度
04/14 23:26, 5F

04/14 23:29, , 6F
還有external interrupt(EX0)跟timer0 interrupt (ET0)
04/14 23:29, 6F

04/14 23:30, , 7F
要分清楚...
04/14 23:30, 7F

04/14 23:38, , 8F
還可以用8052的T2EX ^^
04/14 23:38, 8F

04/14 23:58, , 9F
剛在翻書,我真的搞混了!>"<
04/14 23:58, 9F

04/15 18:42, , 10F
這個好!
04/15 18:42, 10F
文章代碼(AID): #19v6rQ2o (ASM)
文章代碼(AID): #19v6rQ2o (ASM)