Re: [問題] UART收到的字元(ASCII)如何轉為Bin或Hex?

看板ASM (組合語言)作者 (好歹我也是個夕陽武士)時間12年前 (2012/08/03 15:53), 編輯推噓3(301)
留言4則, 3人參與, 最新討論串2/2 (看更多)
個人獻醜 .. 希望沒有會錯意 ------------------------------------------------------- 我的觀念 * C語言裡面的"字元"是以單引號來辨識.所以建議用 '0'-'F' * 所謂的 "字元"與 "字串"差別. 是"字串"為數個"字元"並加上"字串結尾" * 文中的 bin與hex是進制的意思. 但是純"值" 0-15 是沒有禁制的問題 當 sbuf 是 dec-12 時 也同時代表 hex-C 與 bin-1100 * 所以您的轉換應該是 希望將傳入的 '0'-'F' 字元轉為 bin 0000-1111 值 * 我習慣的寫法會是 b=SBUF; rec(pointer++) = ( b < 'A') ? ( b-'0') : ( b-'A'+10 ) ; ps..我知道可讀性不高.只是我習慣了 -------------------------------------------- ※ 引述《deo2000 (800IM)》之銘言: : 目前用PC -> rs232 -> 8051 控制兩顆直流馬達的運動平台 : 每顆馬達 正 逆 停 煞 四個狀態 2bit,兩顆就有4bit,接在 P2^0,P2^1 和 P2^2,P2^3 : 也就是這個運動平台共有 16 種狀態, : 在VS2010中編碼成 "0"~"F"傳送給8051 (因為我只會一次傳一個字元) : 因為我不會直接把字元轉成對應的Bin或Hex,所以解碼的相當沒效率 : (聽說分支指令在單晶片中,比PC要來得沒效率很多,真的嗎?) : 8051端: : if(RI) : { : RI=0; : if(SBUF==0x30) //0,1111純停止 : P2=0x00; : else if(SBUF==0x31) //1 : P2=0x01; : else if(SBUF==0x32) //2 : P2=0x02; : : : : : else if(SBUF==0x46) //F,1111 煞車 : P2=0x0F; : } : 請問ASCII可以直接解碼嗎? 或者其他更有效率的寫法? : 目前速度還不錯,但是還有其他功能想加入,而且是real time,怕這裡中斷太久 : PC大約每 30ms 會中斷一次8051 -- Only You. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.187.13

08/03 17:04, , 1F
已經比我的寫法可讀性高了 :P
08/03 17:04, 1F

08/07 01:59, , 2F
阿 我連運算子都看不懂
08/07 01:59, 2F

08/07 01:59, , 3F
是...沒看過才對
08/07 01:59, 3F

08/07 10:07, , 4F
好文!
08/07 10:07, 4F
文章代碼(AID): #1G6uEJiu (ASM)
文章代碼(AID): #1G6uEJiu (ASM)