社区
网络编程
帖子详情
BCD码问题?
lashengcrh
2003-07-08 10:17:06
在下在做串口通讯时,往串口中写BCD码。
希望各位大侠给我讲一讲原理,并加一些实现ASCII<=>BCD的转换代码。
或者指出那里有相关内容也行。
分数相送。
...全文
173
5
打赏
收藏
BCD码问题?
在下在做串口通讯时,往串口中写BCD码。 希望各位大侠给我讲一讲原理,并加一些实现ASCIIBCD的转换代码。 或者指出那里有相关内容也行。 分数相送。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
四个二进制位为单位,保存十进制数
四位二进制转
BCD码
转换器
四位二进制转
BCD码
转换器
什么是
BCD码
?
BCD码
编码规则
BCD码
微机原理汇编语言练习(含详细注释代码)
微机原理实验练习题目要求(代码见文末) 实验二 设计并利用Emu8086仿真实验环境调试程序 1、编写程序进行数据类型转换
问题
一:如要将2个非组合
BCD码
变为组合
BCD码
怎么办?
问题
二:如要将1个组合
BCD码
变为2个ASCⅡ码怎么办?
问题
三:如要将2个ASCⅡ码变为组合
BCD码
怎么办? 三选二完成即可 2、内存单元中有一数X(8位无符号),按下式计算Y值,并将Y值存于X后面的单元。(参照课件中的例子)问:
问题
一:如X是有符号数怎么办?
问题
二:如X是16位数怎么办?
问题
三:如X是
BCD码
怎么办?
2.1.3 什么是
BCD码
?(有权码和无权码、格雷码、8421码、余3码、余3循环码、2421码等)
文章目录:什么是
BCD码
?有权码和无权码8421码的计算 什么是
BCD码
? 简单来说,就是用4位二进制数来表示1位十进制数(0~9),是一种二进制的数字编码形式,用二进制编码来代替十进制代码。
BCD码
可分为两类:有权码和无权码 为什么使用
BCD码
:这种编码技巧最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。相对于一般的浮点式记数法,采用
BCD码
,既可保存数值的精确度...
什么是
BCD码
?
用四位二进制代码来表示一位十进制数,称为二--十进制编码,简称BCD(Binary Coded Decimal)码。根据代码的每一位是否有权值
BCD码
可分为有权码和无权码两类,应用最多的是8421
BCD码
,无权码用得较多的是余三码和格雷码,我们通常所说的
BCD码
指的是8421
BCD码
。这些编码跟十进制数对应的关系如下: 十进制数 8421
BCD码
余3码 格雷码
网络编程
18,363
社区成员
64,187
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章