第1个参数: Baud Rate 是波特率, 每秒传输的位(bit)数
第2个参数: 校验方式(Parity), m:Mark,校验位始终为1, s:Space,校验位始终为0, n:No Parity, 无校验位, e:Even(偶), o:Odd(奇)
第3个参数: 数据位数(Byte Size), 每次传输的位(bit)数, 以这些位数为单位传输数据, 一般为 8 位 (一个字节)
第4个参数: 停止位(Stop Bits), 每个数据单位(Byte Size) 之后需要有1到2个停止位标识这个 Byte 传输结束
这些参数都是由硬件完成的,只要参数设置正确就可以了,软件上不需要做什么额外的处理。
CRC 校验码有几种,按位数分8位、16位、32位等,又分标准的和CCITT的算法,都可以在本站的串口控件的 yb_base.h 里面找到
以本站的串口控件为例:
try
{
YbCommDevice1->Baud = TYbCommDevice::br57600; //波特率为 57600 bps
//YbCommDevice1->CommPort->Baud = 57600; //也可以这么设波特率
YbCommDevice1->Parity = TYbCommDevice::ptMarkParity; //设校验为 Mark Parity
YbCommDevice1->StopBits = TYbCommDevice::sbOneStopBit; //设停止位为 1 (One Stop Bit)
YbCommDevice1->Active = true; //打开串口
char Addr[2] = {0x01,0x02}; //假设地址的数据为 01H, 02H
YbCommDevice1->Write(Addr, 2); //发送 Addr 的数据, 2 个字节
YbCommDevice1->Parity = TYbCommDevice::ptSpaceParity; //设校验为 Space Parity
YbCommDevice1->Active = true; //打开串口
char Data[5] = {0xaa,0xab,0x56,0x78,0x99}; //假设数据是这5个字节
YbCommDevice1->Write(Data, 5); //发送 Data 的数据, 5 个字节
}
catch(Exception &e)
{
ShowMessage(e.Message); //错误信息
}
接收数据可以用 YbCommDevice->Read 方法
--------------------next---------------------
using namespace TBinFileFuncs;
char Data[DataSize]; //数据, DataSize 个字节的数据需要做 CRC 校验
unsigned char MyCRC8 = 0; //计算 CRC 校验码之前需要赋初始值, 根据实际情况需要, 可能是 0 ,可能是 -1 (0xff)
_Crc8(MyCRC8, Data, DataSize); //计算 CRC8 的值
现在 MyCRC8 就是计算的 CRC8 值
如果初始值为 -1, ~CRC8 是CRC8 值
unsigned short MyCRC16 = -1; //计算 CRC 校验码之前需要赋初始值, 根据实际情况需要, 可能是 0 ,可能是 -1 (0xffff)
_CrcCcitt16(MyCRC16, Data, DataSize); //计算 CRC16 的值
由于初始值是 -1, ~MyCRC16 是 CRC16 的值,注意前面有个 “~”
如果初始值是 0, MyCRC16 直接就是计算的值
由于初始值的不同,计算的结果也不同,所以计算 CRC 除了有前面说的标准之外,还有初始值的说法,不同的初始值,计算的结果不同
一般初始值使用 0, 但有些情况用 -1, 并且结果取反。
--------------------next---------------------
阅读(1120) | 评论(0) | 转发(0) |