pic18-usb

2020-02-09 11:24发布

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)

一周热门 更多>