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

看板ASM (組合語言)作者 (ksmrt)時間15年前 (2009/04/15 20:27), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串8/8 (看更多)
講一個 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
RS232的另類應用 XD
04/16 00:10, 1F

04/16 01:16, , 2F
又學到新東西!推!
04/16 01:16, 2F
※ 編輯: ksmrt0123 來自: 219.68.71.218 (04/16 19:42)
文章代碼(AID): #19vTAkzl (ASM)
文章代碼(AID): #19vTAkzl (ASM)