作者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