⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pic18f2550usb.c.txt

📁 pic18f2550mcu与上位机进行usb通信的一个固件程序。
💻 TXT
📖 第 1 页 / 共 2 页
字号:
                        out_data[0] = usbConfirmAction;
                        out_data[1] = usbReadADC;
                        out_data[2] = tempADC;
                        out_data[3] = in_data[1];
                     }
                     break;
                  case usbReadADCnTimes: {
                        if (make16(in_data[1],in_data[2]) <= theSampleSize) {
                           if (in_data[3] != 255 & in_data[3] != currentADCpin) {
                              currentADCpin = in_data[3];
                              set_adc_channel(currentADCpin);
                              delay_ms(1);
                           }
                           set_timer3(0);
                           for (n=0;n<make16(in_data[1],in_data[2]);n++)
                           {
                              adcData[n] = READ_ADC();
                           }
                           period = get_timer3();   // 1000/((clock/4)/8) for ms
                           out_data[0] = usbConfirmAction;
                           out_data[1] = usbReadADCnTimes;
                           out_data[2] = in_data[1];
                           out_data[3] = in_data[2];
                           out_data[4] = in_data[3];
                        }
                        else {
                           out_data[0] = usbError;
                           out_data[1] = usbReadADCnTimes;
                           out_data[2] = in_data[1];
                           out_data[3] = in_data[2];
                           out_data[4] = in_data[3];
                        }
                     }
                     break;
                  case usbReadADCPeriod: {
                        out_data[0] = usbConfirmAction;
                        out_data[1] = usbReadADCPeriod;
                        out_data[2] = make8(period,1);
                        out_data[3] = make8(period,0);
                     }
                     break;
                  case usbReadADCnTimesUS: {
                        if (make16(in_data[1],in_data[2]) <= theSampleSize) {
                           if (in_data[5] != 255 & in_data[5] != currentADCpin) {
                              currentADCpin = in_data[5];
                              set_adc_channel(currentADCpin);
                              delay_ms(1);
                           }
                           approxUS = make16(in_data[3],in_data[4]);
                           for (n=0;n<make16(in_data[1],in_data[2]);n++)
                           {
                              set_timer3(0);
                              adcData[n] = READ_ADC();
                              while (get_timer3() * 2/3 < approxUS);   // 1000000/((clock/4)/8)
                           }
                           out_data[0] = usbConfirmAction;
                           out_data[1] = usbReadADCnTimesUS;
                           out_data[2] = in_data[1];
                           out_data[3] = in_data[2];
                           out_data[4] = in_data[3];
                           out_data[5] = in_data[4];
                           out_data[6] = in_data[5];
                        }
                        else {
                           out_data[0] = usbError;
                           out_data[1] = usbReadADCnTimesUS;
                           out_data[2] = in_data[1];
                           out_data[3] = in_data[2];
                           out_data[4] = in_data[3];
                           out_data[5] = in_data[4];
                           out_data[6] = in_data[5];
                        }
                     }
                     break;
                  case usbReadADCnTimesMS: {
                        if (make16(in_data[1],in_data[2]) <= theSampleSize) {
                           if (in_data[5] != 255 & in_data[5] != currentADCpin) {
                              currentADCpin = in_data[5];
                              set_adc_channel(currentADCpin);
                              delay_ms(1);
                           }
                           approxMS = make16(in_data[3],in_data[4]);
                           for (n=0;n<make16(in_data[1],in_data[2]);n++)
                           {
                              set_timer3(0);
                              adcData[n] = READ_ADC();
                              while (get_timer3() * 1/1500 < approxMS);   // 1000/((clock/4)/8)
                           }
                           out_data[0] = usbConfirmAction;
                           out_data[1] = usbReadADCnTimesMS;
                           out_data[2] = in_data[1];
                           out_data[3] = in_data[2];
                           out_data[4] = in_data[3];
                           out_data[5] = in_data[4];
                           out_data[6] = in_data[5];
                        }
                        else {
                           out_data[0] = usbError;
                           out_data[1] = usbReadADCnTimesMS;
                           out_data[2] = in_data[1];
                           out_data[3] = in_data[2];
                           out_data[4] = in_data[3];
                           out_data[5] = in_data[4];
                           out_data[6] = in_data[5];
                        }
                     }
                     break;
                  case usbClearRam: {
                        for (n=0;n<512;n++)
                        {
                           adcData[n] = 0;
                        }
                        out_data[0] = usbConfirmAction;
                        out_data[1] = usbClearRam;
                     }
                     break;
                  case usbSetRamByte: {
                        for (n=0;n<512;n++)
                        {
                           adcData[n] = in_data[1];
                        }
                        out_data[0] = usbConfirmAction;
                        out_data[1] = usbSetRamByte;
                        out_data[2] = in_data[1];
                     }
                     break;
                  case usbSetUseCRC: {
                        useCRC = true;
                        out_data[0] = usbConfirmAction;
                        out_data[1] = usbSetUseCRC;
                     }
                     break;
                  case usbClearUseCRC: {
                        useCRC = false;
                        out_data[0] = usbConfirmAction;
                        out_data[1] = usbClearUseCRC;
                     }
                     break;
                  case usbReadPort: {
                        out_data[0] = usbConfirmAction;
                        out_data[1] = usbReadPort;
                        out_data[2] = input_b();
                     }
                     break;
                  case usbWritePort: {
                        output_b(in_data[1]);
                        out_data[0] = usbConfirmAction;
                        out_data[1] = usbWritePort;
                        out_data[2] = in_data[1];
                     }
                     break;
                  case usbReadPin: {
                        out_data[0] = usbConfirmAction;
                        out_data[1] = usbReadPin;
                        out_data[2] = in_data[1];
                        switch (in_data[1]) {
                           case 0: out_data[3] = input(PIN_B0); break;
                           case 1: out_data[3] = input(PIN_B1); break;
                           case 2: out_data[3] = input(PIN_B2); break;
                           case 3: out_data[3] = input(PIN_B3); break;
                           case 4: out_data[3] = input(PIN_B4); break;
                           case 5: out_data[3] = input(PIN_B5); break;
                           case 6: out_data[3] = input(PIN_B6); break;
                           case 7: out_data[3] = input(PIN_B7); break;
                        }
                     }
                     break;
                  case usbWritePin: {
                        switch (in_data[1]) {
                           case 0: output_bit(PIN_B0, in_data[2] & 1); break;
                           case 1: output_bit(PIN_B1, in_data[2] & 1); break;
                           case 2: output_bit(PIN_B2, in_data[2] & 1); break;
                           case 3: output_bit(PIN_B3, in_data[2] & 1); break;
                           case 4: output_bit(PIN_B4, in_data[2] & 1); break;
                           case 5: output_bit(PIN_B5, in_data[2] & 1); break;
                           case 6: output_bit(PIN_B6, in_data[2] & 1); break;
                           case 7: output_bit(PIN_B7, in_data[2] & 1); break;
                        }
                        out_data[0] = usbConfirmAction;
                        out_data[1] = usbWritePin;
                        out_data[2] = in_data[1];
                        out_data[3] = in_data[2];
                     }
                     break;
               }
               if (useCRC) {
                  theCRC = 0;
                  theCRC = calc_crc(theCRC,out_data[0]);
                  theCRC = calc_crc(theCRC,out_data[1]);
                  theCRC = calc_crc(theCRC,out_data[2]);
                  theCRC = calc_crc(theCRC,out_data[3]);
                  theCRC = calc_crc(theCRC,out_data[4]);
                  theCRC = calc_crc(theCRC,out_data[5]);
                  theCRC = calc_crc(theCRC,out_data[6]);
                  out_data[7] = theCRC;
               }

               usb_put_packet(1, out_data, 8, USB_DTS_TOGGLE);
            }

            delay_ms(1);
         }
      }
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -