作者ksmrt0123 (ksmrt)
看板ASM
标题Re: [问题] 量测脉波宽度
时间Wed Apr 15 20:27:23 2009
讲一个 8051 量测「负」脉波宽度的简单方法.
这个方法有很多限制, 也不精确, 最大的好处是简单.
这个方法就是... 用serial port来量,
更精确的说, 是用RXD来量.
Serial receiver 接收到1->0(negative edge),
就会启动後续接收动作, 根据baud rate依序sample出
start bit, 8个data bits, 以及最後是 stop bit
(每种 mode 有些许差异).
若此负脉波很短, 只有一个bit time, 就会接收到0xFF;
若长度大於或等於9个bit time, 就是0x00; 介於其中,
可由接收到的data值估计负脉波宽度, 如下表:
data pulse
value width
(in SBUF) (bit time)
-------------- -----------
0xFF 1
0xFE 2
0xFC 3
0xF8 4
0xF0 5
0xE0 6
0xC0 7
0x80 8
0x00 9 or longer
再强调一次这方法很不精确(resolution 是1个 bit time).
不过使用简单. 如原po的需求, 只要把baud rate设在9600
左右, 1mS 或以上的负脉波都会被接收成0x00, 所以程式只要
这样写就可以了:
if(RI) {
if(SBUF) { ... } // short pulse
else { ... } // long pulse
RI = 0;
}
此方法除了可以粗略量测「负」脉波宽度, 也可应用於按键
de-bouncing. 另外,
-----------------------------------------------------
把概念反过来, 可以从TXD输出简单的 PWM 喔~~~
-----------------------------------------------------
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.68.71.218
※ 编辑: ksmrt0123 来自: 219.68.71.218 (04/15 20:29)
1F:推 ruemann:RS232的另类应用 XD 04/16 00:10
2F:推 wuonline:又学到新东西!推! 04/16 01:16
※ 编辑: ksmrt0123 来自: 219.68.71.218 (04/16 19:42)