📄 subject_40643.htm
字号:
<p>
序号:40643 发表者:wgh 发表日期:2003-05-20 12:59:33
<br>主题:怎样接受这个串口数据?
<br>内容:我现在写一个串口通讯方面的程序,有一个问题很困惑:接收到数据中时间用四个字节表示,进位方式采用8421(BCD)码,低位在前,高位在后,最低位表示1毫秒,其中毫秒占12位,秒占7位,分占7位,小时占6位,怎么样把时间提取出来?就是得到时,分,秒,毫秒的数值?<BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:稻子 回复日期:2003-05-20 16:16:31
<br>内容:分别读取四个字节,然后处理每个字节,用异或指令屏蔽掉你所不需要的位。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wgh 回复日期:2003-05-20 16:17:15
<br>内容:为了提取数据,定义结构如下:<BR>typedef struct packet <BR>{ <BR>unsigned int hh1:2; // 小时的十位 <BR>unsigned int hh0:4; //小时的个位 <BR>unsigned int mm1:3;//分钟的十位 <BR>unsigned int mm0:4;// 分钟的个位 <BR>unsigned int ss1:3; // 秒的十位 <BR>unsigned int ss0:4; //秒的个位 <BR>unsigned int ms3:4; // 毫秒的百位 <BR>unsigned int ms2:4; //毫秒的十位 <BR>unsigned int ms1:4; //毫秒的个位 <BR>}STTIME; <BR><BR>之所以要分开个位十位百位,是因为采用8421BCD编码,这样处理就不用转换了, <BR>不知道这样做对不对 <BR>另外,各位如果有好的方法,请多多指点!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:syosinsya 回复日期:2003-05-21 17:34:04
<br>内容:方法挺妙。只是你现在的定义好像是高位在前低位在后(hh1在bit0-bit1).将你定义的STTIME的顺序反过来后,<BR>再定义一个:<BR> typedef unio _rcvpkt{<BR> char buf[4]; // 或者byte buf[4]<BR> STTIME tim;<BR> }RCVPKT;<BR>之后,比如:<BR> RCVPKT RcvTm;<BR>用RcvTm.buf由低位到高位接收数据。那么,RcvTm.tim就是所要的值了吧。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wgh 回复日期:2003-05-22 09:08:22
<br>内容:多谢 GomeNasai:<BR>谢谢提醒,是颠倒了:)<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -