博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC++ 6.0 C8051F340 USB 通信 CAN 数据解析
阅读量:6566 次
发布时间:2019-06-24

本文共 3666 字,大约阅读时间需要 12 分钟。

// HelloWorld.cpp : Defines the entry point for the console application.///***************************************************************************** *              VC++ 6.0 C8051F340 USB 通信 CAN 数据解析 * 声明: *    1. 这是在《VC++ 6.0 C8051F340 USB PC侧通信 Demo》的基础上的代码; *    2. 由一可知,本文会只注释了相对重要的内容。 *    3. 本文主要是通过USB获取CAN的数据,并解析出其中的数据。  *    4. 帧格式可以参考:http://wenku.baidu.com/view/f508511d6bd97f192279e902.html * *                                       2015-7-11 晴 深圳 南山平山村 曾剑锋 ****************************************************************************/#include "stdafx.h"#include 
#include
#include "SiUSBXp.h"#include
int main(int argc, char* argv[]){ printf("Hello World!\n"); HANDLE m_hUSBDevice = INVALID_HANDLE_VALUE; DWORD dwNumDevices = 0; SI_GetNumDevices(&dwNumDevices); printf("zengjf debug: dwNumDevices = %d.\n", dwNumDevices); if ( dwNumDevices ==0 ) return FALSE; if ( SI_Open(1, &m_hUSBDevice) == SI_SUCCESS ) printf("zengjf debug: SI_Open USBDevice success.\n"); else printf("zengjf debug: SI_Open USBDevice fails.\n"); char testData[17] = "zengjf"; DWORD hasWritten = 0; DWORD hasRead = 0; DWORD timeCount = 0; while ( true ) { Sleep(100); // 接收6帧数据就退出程序,作为测试程序,这个量也就差不多了 if ( timeCount++ > 6 ) break; memset(testData, 0, sizeof(testData)); if ( SI_Read( m_hUSBDevice, testData, 40, &hasRead) == SI_SUCCESS ) { printf("zengjf debug: SI_Read USBDevice success, hasRead length = %d.\n", hasRead); // 以16进制的形式打印出接收到的一帧数据 printf("printf all data:\n\t"); for ( DWORD i = 0; i < hasRead; i++ ) printf(" %02x ", testData[i] & 0xff); printf("\n"); // 判断接收到的数据是远程帧,还是数据帧 if ( testData[0] & ( 1 << 6 ) ) printf("Frame Format: Remote Frame.\n"); else printf("Frame Format: Data Frame.\n"); // 输出数据长度 printf("Frame data length: %d.\n", testData[0] & 0xf); // 输出是扩展帧,还是标准帧 if ( testData[0] & (1 << 7) ) { printf("Frame Type: Extend Frame.\n"); // 解析扩展帧的ID printf("ID: %X.\n", (((testData[1] & 0x0ff) << 21) | \ ((testData[2] & 0x0ff) << 13) | \ ((testData[3] & 0x0ff) << 5) | \ ((testData[4] >> 3) & 0x1f))); // 将二进制数值转换成字符数字 for ( DWORD i = 5; i < hasRead; i++ ) testData[i] += '0'; // 显示所有的接收的数据 printf("zengjf debug: show data from C8051F340 -- testData[ %s ].\n", testData+5); } else { printf("Frame Type: Standard Frame.\n"); // 解析标准帧的ID printf("ID: %X.\n", (((testData[1] & 0x0ff) << 3 ) | ((testData[2] >> 5) & 0x7))); // 将二进制数值转换成字符数字 for ( DWORD i = 3; i < hasRead; i++ ) testData[i] += '0'; // 显示所有的接收的数据 printf("zengjf debug: show data from C8051F340 -- testData[ %s ].\n", testData+3); } } else { printf("zengjf debug: SI_Read USBDevice fails.\n"); break; } } if ( SI_Close(m_hUSBDevice) == SI_SUCCESS ) printf("zengjf debug: SI_Close USBDevice success.\n"); else printf("zengjf debug: SI_Close USBDevice fails.\n"); return 0;}

 

转载地址:http://lsdjo.baihongyu.com/

你可能感兴趣的文章
《FPGA全程进阶---实战演练》第十一章 VGA五彩缤纷
查看>>
第七次课程作业
查看>>
C++ 文本查询2.0(逻辑查询)
查看>>
Objective-C学习总结-13协议1
查看>>
web学习方向
查看>>
A*算法实现
查看>>
第一周 从C走进C++ 002 命令行参数
查看>>
【java】itext pdf 分页
查看>>
看看这个电脑的配置
查看>>
[转]【NoSQL】NoSQL入门级资料整理(CAP原理、最终一致性)
查看>>
RequireJS进阶(二)
查看>>
我设计的网站的分布式架构
查看>>
linux extract rar files
查看>>
Knockout.Js官网学习(监控属性Observables)
查看>>
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决
查看>>
azure之MSSQL服务性能测试
查看>>
Android BitmapFactory.Options
查看>>
前端构建:Less入了个门
查看>>
phonegap(cordova) 自己定义插件代码篇(三)----支付宝支付工具整合
查看>>
linux 批量进行:解压缩某一类压缩文件类型的文件
查看>>