我正在使用PIC C编程PIC18F4455微控制器。我正在使用USB_CDC.h头文件。我在计算机上有一个程序发送一个字符串,如“W250025”。但是,当我使用usb_cdc_getc()获取第一个char时,它会冻结。有时程序只发送'T',所以我真的想要得到第一个字符。
为什么我的代码永远不会执行过去= usb_cdc_getc();当我发送“W250025”?
if (usb_cdc_kbhit())
{
//printf(lcd_putc, "Check 3"); delay_ms(3000); printf(lcd_putc, "\f");
received = usb_cdc_getc();
printf(lcd_putc, "Received "); lcd_putc(received); delay_ms(3000); printf(lcd_putc, "\f");
if (received == 'W'){ //waveform
disable_interrupts(INT_TIMER1);
set_adc_channel(0);
load_and_print_array(read_into_int(), read_into_int());}
else if (received == 'T'){ //temperature
set_adc_channel(1);
enable_interrupts(INT_TIMER1);}
}
答案 0 :(得分:1)
我不知道PIC单片机的具体细节,但是,假设usb_cdc_getc
的行为与普通getc
相似,最可能的原因是你的角色没有达到这个功能,通常是块。你发送换行符了吗?它也可能是一个硬件问题,其中角色首先没有到达你的uC。
如果是前者,而不是期望的行为,则可能存在非阻塞getch
等效。
答案 1 :(得分:0)
也许这会有所帮助:
usb_cdc_getc()
- 从接收缓冲区中获取一个字符。如果 它将等待直到接收缓冲区中没有数据 接收缓冲区中有数据。如果你不想要 要在无限循环中等待,请先使用usb_cdc_kbhit()
在致电usb_cdc_getc()
之前检查是否有数据。"
来自https://github.com/tkrworks/PICnome-Firmware/blob/master/usb_cdc.h