Re: 請問如何將10 bit ADC 轉換成 10進位資料
|
||||
---|---|---|---|---|
初級會員
|
Dear RYYu,
1. 您可引用 AN544 的 Appendix B 裡面的 16-bit 轉成 5-digit BCD (也就是 3 bytes, 每個 byte 有兩個 BCD <Dual-digit BCD Byte>) 的程式. 該處提供兩個 16-bit 轉成 5-digit BCD 轉換程式, 您可了解一下異同之處. http://ww1.microchip.com/downloads/en/appnotes/00544d.pdf 2. 由於 10-bit 只佔 4-digit 的 BCD, 所以可以將 Dual-digit BCD 的 MSByte 丟棄. 剩 2 個 Dual-digit BCD bytes. 3. 取用 Dual-digits BCD 的 LSByte. 轉成兩個 bytes 的 10 進位 ascii code(右第一位數及第二位數).方法如4~7: 4. 該 Dual-digit BCD 以 logic "AND" 0FH, 再 logic "OR" 30H. 這將使得 MSNibble 的 BCD 內容被丟棄, 而將 LSNibble 部分的 BCD 轉成 10 進位 ascii code (30H~39H). 5. 這成為的較低位數的10 進位 ascii code, 將其存入適當的位置. 6. 取回該 Dual-digit BCD byte, 再用 swapf 指令將 BCD 的 nibbles 對調, 使得該 dual-digit BCD byte 中較高的 BCD digit 被調到 LSNibble 的位置. 7. 重複 4. 將被調到 LSNible 的較高位數 BCD digit 轉成 10 進位 ascii code, 並存入適當的位置. 8. 再取用 Dual-digit BCD 的第二個 Byte. 重複 4~7 得到第三及第四位數的 10 進位 ascii code, 並存入適當的位置.. 也就是說, 對於 '02FDH' 這個 16-bit 數字, 經過前述處理時的結果如下, 1. 得到 '00H', '07H', '65H' 三個 bytes. 2. 丟掉 '00H', 因為永遠是 '00H'. 3. 取用 '65H', 得到 '36H' 及 '35H' 兩個 bytes 的 ASCII. 4. '65H' AND '0FH' -> '05H', OR '30H' -> '35H'. 5. Store '35H'. 6. '65H' swapf -> '56H'. 7. '56H' AND '0FH' -> '06H', OR '30H' -> '36H'. Store '36H'. 8. 取用 '07H', 得到 '30H' 及 '37H' 兩個 bytes 的 ASCII. '07H' AND '0FH' -> '07H', OR '30H' -> '37H'. Store '37H' '07H' swapf -> '70H'. '70H' AND '0FH' -> '00H', OR '30H' -> '30H'. Store '30H'. OK啦! 這樣就可以得到 '30H', '37H', '36H', '35H' 等 4 位數的 ASCII CODE 啦! Any other question?
發表於: 2006/2/4 0:49
|
|||
|
Re: 請問如何將10 bit ADC 轉換成 10進位資料
|
||||
---|---|---|---|---|
新會員
|
參照:
謝謝你的回應,我的問題是 假設我現在得到ADRESH是0x02, ADRESL是0xfd 我希望能將上面的資料改為ASCII code傳送至電腦 也就是電腦收到的信號直接就是”7”,”6”,”5”的資料了 希望各位指點迷津。
發表於: 2006/2/3 17:39
|
|||
|
Re: 請問如何將10 bit ADC 轉換成 10進位資料
|
||||
---|---|---|---|---|
初級會員
|
Dear RYYu,
將資料透過 rs232 傳送至PC不一定要十進位或多少進位. 你的問題應該是兩個獨立不相關的問題, 問題1. 如何將10-bit ADC的資料透過rs232傳送至電腦: Binary Code 或 ASCII Code等都能傳. 但是如果你要透過如超級終端機等軟體連線時, 則需以ASCII Code傳比較好, 否則若干數值會被當成特殊碼, 無法讀取. 所以你的題目是否應該是如何要將 Binary Code換成 ASCII Code呢? 至於換成 ASCII Code時若仍保持16進位的話(0~9,A~F), 無論發送端還是接收端都會比較容易處理. 問題2. 將10-bit的16進位訊號轉換10進位的資料: 您可參考AN544 的 Appendix B.
發表於: 2006/2/3 17:32
|
|||
|
Re: 請問如何將10 bit ADC 轉換成 10進位資料
|
||||
---|---|---|---|---|
資深會員
|
資料格式是10進位還是16進位,對uC都是一樣的東西。
您的問題著眼應該是,是要用binary方式傳送資料,還是用ASCII的方式傳送資料。 例如ADC得到的是765(或是0x02FD),您是直接想把0x02、0xFD透過UART傳到PC端,還是把他轉成ASCII碼的"765"或是"0x02FD"? 若是前者,右邊的教材有現成的CODE可參考,因為我是用那裡的CODE來用。
發表於: 2006/2/3 17:11
|
|||
不要問我哪裡來,我只是個流浪天涯的工程師
|
||||
|
請問如何將10 bit ADC 轉換成 10進位資料
|
||||
---|---|---|---|---|
新會員
|
請問大家,
我用的事pic16f877 我現在想要將10-bit ADC的資料透過rs232傳送至電腦, 想請教大家如何將10-bit的16進位訊號轉換10進位的資料, 這樣我就可以直接由電腦判讀資料, 謝謝大家
發表於: 2006/2/3 17:00
|
|||
|