专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
PIC单片机
pic18-usb
2020-02-09 11:24
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
2736
7
7
avr都有很多搞USB的文章,咱们pic专区也不能闲着啊,有没有哪位高手用pic18f2550做过,能不能资源共享一下啊?
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
li4512369
2020-02-09 23:42
问题已经搞定了,已经能够接收上位机发送的指令了,但是用我的LABVIEW程序却无法读取下位机的数据,其显示“设置不对”(搞了好久还是搞不定)。猜测可能是上位机程序的问题,再请各位指点一二,附上我更改的下位机程序和上位机程序:
1:下位机程序的更改:(参见user.c)
*****************************************************************************/
void ServiceRequests(void)
{
byte index;
if(USBGenRead((byte*)&dataPacket,sizeof(dataPacket))) //如果USB总线接收到数据
{
counter = 0;
switch(dataPacket.CMD) //判断数据包的CMD字节位
{
case 0x00: //如果CMD为0那么就将0x00
dataPacket._byte[2] = 0x00; //和0x01发送给上位机
dataPacket._byte[3] = 0x01; //并且送数据包的大小4个字节
counter=0x04;
case 0x01: //如果CMD为1那么就判断ID这个字节
counter = 0x01;
if(dataPacket.ID == 0) //如果ID为0那么就LED3和LED4关闭
{
mLED_3_Off();mLED_4_Off();
}
else if(dataPacket.ID == 1) //如果ID为1那么就。。。。。。
{
mLED_3_Off();mLED_4_On();
}
else if(dataPacket.ID == 2)
{
mLED_3_On();mLED_4_Off();
}
else if(dataPacket.ID == 3)
{
mLED_3_On();mLED_4_On();
}
else
counter = 0x00;
break;
case 0x02: //RD_POT
//ReadPOT();
//dataPacket._byte[1] = ADRESL;
//dataPacket._byte[2] = ADRESH;
dataPacket._byte[1] = 0xff; //将0xff和0x00发送给主机
dataPacket._byte[2] = 0x00;
counter=0x04;
break;
/* case RESET:
Reset();
break;
*/
default:
break;
}//end switch()
if(counter != 0) //在USB总线空闲的时候将datapacket+比特数发送给主机
{
if(!mUSBGenTxIsBusy())
{
USBGenWrite((byte*)&dataPacket,counter);
}
}//end if
}//end if
}//end ServiceRequests
2上位机程序:
我才用的是labview软件自带的USB测试程序进行的部分更改,从从机设备的识别和对LED的控制都能实现了,可是就是主机发送指令给单片机要读取数据却不能实现,具体如下:
当发送设置如下图1所示时,LED3和LED4都关闭更改发送的数据可实现LED3和LED4的组合控制,证明数据的接收时没有问题的
但是当我对其发送0x00或者512让从机发送数据给主机读取,甚至不管发送什么数据只要点击“Bulk in”时就会报错(图2):
这个问题着实把我给难住了,希望高手指点一二,甚是感激。
(原文件名:1.JPG)
(原文件名:2.JPG)
我的整个开发文件夹
ourdev_585682MG6DWP.rar(文件大小:1.06M)
(原文件名:Demo.rar)
加载中...
查看其它7个回答
一周热门
更多
>
相关问题
PIC单片机不同的IO口驱动74HC573驱动共阴极的数码管,有的段不亮
1 个回答
一种简单精确的pic延时方法
21 个回答
谁熟悉PIC的产品发布时间的,帮看看PIC18F47K40啥版本IDE能开发
12 个回答
求AN1078对应的源代码下载地址
5 个回答
PIC单片机应用技巧
4 个回答
相关文章
一种用PIC单片机主时钟驱动的老式挂钟
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
PIC单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
1:下位机程序的更改:(参见user.c)
*****************************************************************************/
void ServiceRequests(void)
{
byte index;
if(USBGenRead((byte*)&dataPacket,sizeof(dataPacket))) //如果USB总线接收到数据
{
counter = 0;
switch(dataPacket.CMD) //判断数据包的CMD字节位
{
case 0x00: //如果CMD为0那么就将0x00
dataPacket._byte[2] = 0x00; //和0x01发送给上位机
dataPacket._byte[3] = 0x01; //并且送数据包的大小4个字节
counter=0x04;
case 0x01: //如果CMD为1那么就判断ID这个字节
counter = 0x01;
if(dataPacket.ID == 0) //如果ID为0那么就LED3和LED4关闭
{
mLED_3_Off();mLED_4_Off();
}
else if(dataPacket.ID == 1) //如果ID为1那么就。。。。。。
{
mLED_3_Off();mLED_4_On();
}
else if(dataPacket.ID == 2)
{
mLED_3_On();mLED_4_Off();
}
else if(dataPacket.ID == 3)
{
mLED_3_On();mLED_4_On();
}
else
counter = 0x00;
break;
case 0x02: //RD_POT
//ReadPOT();
//dataPacket._byte[1] = ADRESL;
//dataPacket._byte[2] = ADRESH;
dataPacket._byte[1] = 0xff; //将0xff和0x00发送给主机
dataPacket._byte[2] = 0x00;
counter=0x04;
break;
/* case RESET:
Reset();
break;
*/
default:
break;
}//end switch()
if(counter != 0) //在USB总线空闲的时候将datapacket+比特数发送给主机
{
if(!mUSBGenTxIsBusy())
{
USBGenWrite((byte*)&dataPacket,counter);
}
}//end if
}//end if
}//end ServiceRequests
2上位机程序:
我才用的是labview软件自带的USB测试程序进行的部分更改,从从机设备的识别和对LED的控制都能实现了,可是就是主机发送指令给单片机要读取数据却不能实现,具体如下:
当发送设置如下图1所示时,LED3和LED4都关闭更改发送的数据可实现LED3和LED4的组合控制,证明数据的接收时没有问题的
但是当我对其发送0x00或者512让从机发送数据给主机读取,甚至不管发送什么数据只要点击“Bulk in”时就会报错(图2):
这个问题着实把我给难住了,希望高手指点一二,甚是感激。
(原文件名:1.JPG)
(原文件名:2.JPG)
我的整个开发文件夹ourdev_585682MG6DWP.rar(文件大小:1.06M) (原文件名:Demo.rar)
一周热门 更多>