社区
网络编程
帖子详情
BCD码问题?
lashengcrh
2003-07-08 10:17:06
在下在做串口通讯时,往串口中写BCD码。
希望各位大侠给我讲一讲原理,并加一些实现ASCII<=>BCD的转换代码。
或者指出那里有相关内容也行。
分数相送。
...全文
199
5
打赏
收藏
BCD码问题?
在下在做串口通讯时,往串口中写BCD码。 希望各位大侠给我讲一讲原理,并加一些实现ASCIIBCD的转换代码。 或者指出那里有相关内容也行。 分数相送。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lashengcrh
2003-07-10
打赏
举报
回复
UP
DoubleJiang
2003-07-09
打赏
举报
回复
用异步串口操作
*/
BOOL CComm::OpenComm( void )
{
m_hComm = CreateFile( szCommName,
GENERIC_READ | GENERIC_WRITE,
0, //share mode: no share
NULL, //securiy attributes
OPEN_EXISTING, //Open disposition
FILE_FLAG_OVERLAPPED,
NULL);
if( INVALID_HANDLE_VALUE == m_hComm )
{
AfxMessageBox( "打开串口错误, [OpenComm--CreateFile]函数", MB_OK, MB_ICONSTOP );
return FALSE;
}
SetCommMask( m_hComm, EV_RXCHAR | EV_TXEMPTY );
SetupComm( m_hComm, 1024, 512 );
PurgeComm( m_hComm, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR );
COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout = 5; //5 seconds
CommTimeOuts.WriteTotalTimeoutMultiplier = 100;
SetCommTimeouts( m_hComm, &CommTimeOuts );
//LPCOMMCONFIG lpCC = m_dlgComSet.GetCC();
DCB dcb;
GetCommState( m_hComm, &dcb );
dcb.BaudRate = m_cc.dcb.BaudRate;
dcb.ByteSize = m_cc.dcb.ByteSize;
dcb.fBinary = TRUE;
dcb.fParity = m_cc.dcb.fParity;
if( !SetCommState( m_hComm, &dcb ) )
{
AfxMessageBox( "打开串口错误, [OpenComm--SetCommState]函数" );
return FALSE;
}
m_bCommOpen = TRUE;
DWORD dwThreadID;
m_hCommThread = CreateThread( NULL, 0, ThreadProc, this, 0, &dwThreadID );
if( !m_hCommThread )
{
ShowError();
//AfxMessageBox( "打开串口错误, [OpenComm--CreateThread]函数" );
return FALSE;
}
return TRUE;
}
DWORD CComm::ThreadProc( LPVOID lpParam )
{
CComm *pThis = ( CComm * )lpParam;
DWORD dwEvents, dwBytesRead;
while( pThis->m_bCommOpen )
{
if( WaitCommEvent( pThis->m_hComm, &dwEvents, NULL ) )
{
if( dwEvents == EV_RXCHAR )
{
dwBytesRead = pThis->ReadCommBlock( pThis->m_byteBuffer, 1024 );
if(dwBytesRead)
{
ResetEvent( pThis->m_hEvBufferEmpty );
::PostMessage( pThis->m_MainWindow, UM_DATAARRIVAL, 0, dwBytesRead );
WaitForSingleObject( pThis->m_hEvBufferEmpty, INFINITE );
}
}
}
else
{
if( GetLastError() != 995 )
pThis->ShowError();
//AfxMessageBox( "后台线程错误, [GetLastError() != 995]", MB_OK, MB_ICONSTOP );
return 0;
}
}
return 1;
}
NewFree
2003-07-09
打赏
举报
回复
int ConvertBCD(int dnum)
{
int bcdval=0;
if( dnum>9999 || dnum < 0 ) return -1;
bcdval = ( ( (dnum/1000)*16+(dnum%1000)/100)*16+(dnum%100)/10 )*16 +dnum%10;
return bcdval;
}
spwnihao
2003-07-09
打赏
举报
回复
8421码也叫BCD码
例如:
十进制数48
BCD码表示:0100 1000
二进制表示:0011 0000
Semigod
2003-07-08
打赏
举报
回复
BCD码是针对数字的。 分两种:非压缩BCD和压缩BCD
非压缩BCD码,一个字节只存一个0-9的数字,存储方法是:
0 ==> 0x00
1 ==> 0x01
....
9 ==> 0x09
压缩BCD码,一个字节存两个0-9的数字,存储方法是:
00 ==> 0x00
01 ==> 0x01
11 ==> 0x11
....
99 ==> 0x99
四个二进制位为单位,保存十进制数
汇编语言:8421
BCD码
加减法的修正
问题
本文主要介绍汇编语言中8421
BCD码
加减法的修正
问题
。当8421
BCD码
进行加法或减法运算出现超出合法范围的值时,需人为调整。加法若低位不符合要求,加6修正;减法若低四位向高四位产生借位,则减6修正。特殊减法情况的修正方法待后续补充。
全面解决计算机启动
问题
:
BCD码
修复工具实战指南
本文围绕计算机启动
问题
展开,介绍了
BCD码
在Windows中的作用,分析了硬件、软件、病毒等导致启动
问题
的常见原因。重点讲解了BCD修复工具,尤其是EasyBCD的功能、界面、使用方法,还说明了获取软件及相关资源的途径,以及BCD编辑器的高级应用,助用户恢复系统正常启动。
关于 BCD 码减数求补的
问题
本文解析了一个MCS-51单片机的
BCD码
减法程序,详细解释了如何通过求补数将减法转换为加法,并使用DA A指令进行十进制调整的过程。
JAVA中
BCD码
的转化
问题
:原来可以这么简单
本文介绍了一种在Java中将十进制数转换为二进制存储的
BCD码
的方法,并通过具体步骤实现了该转换过程。从获取十进制字符串表示开始,经过解析为
BCD码
,再到最终验证转换正确性的全过程。
c++ 转
bcd码
_C++ BCD转码
问题
| 学步园
本文介绍了一种将
BCD码
转换为AnsiString字符串的方法,并提供了将字符串转换回
BCD码
的逆过程实现。此外,还展示了如何进行十进制与BCD之间的相互转换,并提供了一个实用的时间延迟函数。
网络编程
18,356
社区成员
64,161
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章