Re: [問題] 量測脈波寬度
講一個 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)
推
04/16 00:10, , 1F
04/16 00:10, 1F
推
04/16 01:16, , 2F
04/16 01:16, 2F
※ 編輯: ksmrt0123 來自: 219.68.71.218 (04/16 19:42)
討論串 (同標題文章)
ASM 近期熱門文章
PTT數位生活區 即時熱門文章