0

我有一个 PIC18F4455 微控制器,我试图用它通过 USB 发送 200 个值。基本上,我使用 for 循环和 printf 语句将值打印到 USB 输出流。但是,当代码执行时,我在串行端口监视器中看到它只发送前 25 个左右的值,然后停止。我的 PIC C 代码如下。它将发送第 25 个左右的值(和逗号),但之后不发送任何内容,也不发送换行符。我试图让它发送所有值,然后在末尾发送一个换行符。我将它们全部作为字符发送,因为我可以在它的 PC 端转换它们。

//print #3
   for (i = 0; i <= 199; i++){if (data[i]=='\0' || data[i]=='\n'){data[i]++;}}
   for (i = 0; i < 199; i++){printf(usb_cdc_putc, "%c,", data[i]);}
   printf(usb_cdc_putc, "%c\n", data[199]);
4

2 回答 2

2

如果缓冲区太短,您可能会过度填充缓冲区(硬件中的 FIFO)。这就是延迟解决问题的原因——因为在将新字节填充到 FIFO 之前,您给了硬件时间来实际发送一些字节。

阅读控制器的数据表以了解该 FIFO 有多大。可能有一种方法可以检查它有多满,因此等待不到恒定的 20 微秒。

此外,我将putchar用于打印单个字符,而不是printf.

于 2010-04-03T05:11:16.990 回答
0

我想到了。我最终需要在打印到流后延迟。在 print 语句清除后,for 循环中的 delay_us(20) 。

于 2010-04-03T04:15:19.653 回答