ASCII code 轉成16進制傳給8051 |
尚未結案
|
seeing
初階會員 發表:49 回覆:131 積分:41 註冊:2002-11-07 發送簡訊給我 |
請教各位先進:
一般電腦在傳輸資料時是以ASCII code來傳輸的,那我如果將資料直接由PC透過RS232傳到8051,那麼接收到的資料也將是ASCII code。如果我希望電腦在傳輸時,不是以ASCII code來傳輸,而是以2進制或16進制來傳輸,請問有什麼方法可以轉換嗎? 我的輸入資料是二進制,共8bit(例:01010101) 我之前的作法是這樣的:電腦以ASCII code來傳輸,只會傳輸30H("0")或31H("1"),之後在51裡面寫一個轉換程式,將 30H對應到"0",31H對應到"1"。雖然這樣做是可以成功的轉換出來,但我發現太麻煩了,因此想請教大家,是否有什麼方法可以在PC端的時候就先將原來的字串(01010101)轉成16進制,使8051可以不需要經過轉換就輸出 01010101 來? 謝謝大家
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 請教各位先進: 一般電腦在傳輸資料時是以ASCII code來傳輸的,那我如果將資料直接由PC透過RS232傳到8051,那麼接收到的資料也將是ASCII code。如果我希望電腦在傳輸時,不是以ASCII code來傳輸,而是以2進制或16進制來傳輸,請問有什麼方法可以轉換嗎? 我的輸入資料是二進制,共8bit(例:01010101) 我之前的作法是這樣的:電腦以ASCII code來傳輸,只會傳輸30H("0")或31H("1"),之後在51裡面寫一個轉換程式,將 30H對應到"0",31H對應到"1"。雖然這樣做是可以成功的轉換出來,但我發現太麻煩了,因此想請教大家,是否有什麼方法可以在PC端的時候就先將原來的字串(01010101)轉成16進制,使8051可以不需要經過轉換就輸出 01010101 來? 謝謝大家 seeing 你好: (1)小弟我覺得你的問題有點怪耶!!以下是我個人的想法,不妨參考看看!! (2)假設你的 8051 要控制 8 個 LED 是否亮或不亮,那麼每次只需要傳送 1 個 BYTE 的資料就可以達到目的 (3)例如你在 PC 端經由 RS232 傳送 0x55 (總共有 8 個 bits,二進位為 01010101,十六進位即為 55) 給 8051,那你的 8051 那邊只需要檢測每個 bit 的值,就可以知道要讓哪些 LED 亮或不亮,也許程式碼會像以下這個樣 子 #define BYTE_BIT0 0x01 #define BYTE_BIT1 0x02 #define BYTE_BIT2 0x04 #define BYTE_BIT3 0x08 #define BYTE_BIT4 0x10 #define BYTE_BIT5 0x20 #define BYTE_BIT6 0x40 #define BYTE_BIT7 0x80 BYTE bReceive; // 假設這個是從 PC 端接收到的資料 if(bReceive & BYTE_BIT0) { // 讓第一個 LED 亮 } else { // 否則讓第一個 LED 不亮 } if(bReceive & BYTE_BIT1) { // 讓第二個 LED 亮 } else { // 否則讓第二個 LED 不亮 } ........................... ........................... if(bReceive & BYTE_BIT7) { // 讓第八個 LED 亮 } else { // 否則讓第八個 LED 不亮 } (4)所以,只需要每次傳送 1 個 BYTE,應該就可以達到目的;你之前的做法, 原本只需要傳 1 個 BYTE 的資料,變成要傳送 8 次 (8 個 BYTE),這也是 讓小弟我覺得比較奇怪的地方!! (5)當然,以上的方式,只是小弟我假設的功能的猜測,因為你並沒有把真的要 達到的目的給寫出來!!還是你有更特殊的需求嗎?<><> ( szBin="01010101">-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2004/08/02 22:59:34
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
seeing
初階會員 發表:49 回覆:131 積分:41 註冊:2002-11-07 發送簡訊給我 |
版主您好:
sorry,可能我敘述的不清楚吧..........
我有一個 Edit , 我希望能在裡面輸入二進位的值(共8個數字),再傳給8051,作法如下(使用SPComm):
Comm1->WriteCommData(Edit1->Text.c_str(),Edit1->Text.Length());
但是8051顯示的燈號卻不是相同的,而是輸出 ASCII code ,因此我才會想說是否有什麼方法可以讓PC將ASCII code轉成16進制的。 的確,照您所說的,必須傳送8次才能傳完,因此若能將輸入的字串(例:01010101)直接轉成16進制後(55H),那麼8051那邊將可以把收到的資料直接輸出,而不需做任何轉換 謝謝您,版主 ~~第一次接觸硬體傳輸,尚有許多問題,請多多指教~~
|
seeing
初階會員 發表:49 回覆:131 積分:41 註冊:2002-11-07 發送簡訊給我 |
|
seeing
初階會員 發表:49 回覆:131 積分:41 註冊:2002-11-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |