作者lion21 (好歹我也是个夕阳武士)
看板ASM
标题Re: [问题] UART收到的字元(ASCII)如何转为Bin或Hex?
时间Fri Aug 3 15:53:52 2012
个人献丑 .. 希望没有会错意
-------------------------------------------------------
我的观念
* 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
1F:推 WolfLord:已经比我的写法可读性高了 :P 08/03 17:04
2F:推 deo2000:阿 我连运算子都看不懂 08/07 01:59
3F:→ deo2000:是...没看过才对 08/07 01:59
4F:推 Deltaguita:好文! 08/07 10:07