Два виртуальных COM порта

За основу взят пример тов. ttabbal (модификация примера CDC из Microchip MCHPFSUSB Framework 2.3).

1. Качаем пример

с http://www.microchip.com/forums/tm.aspx?m=398985

2. Как обычно модифицируем программу под загрузку бутлоадером PCkit-а

Определение периферии (под особенности железа PICkit2
Файл HardwareProfile.h
Файл main.c
#elif defined(PROGRAMMABLE_WITH_USB_PK2HID_BOOTLOADER)
	#define REMAPPED_RESET_VECTOR_ADDRESS		0x2000
	#define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS	0x2008
	#define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS	0x2018
#if defined(PROGRAMMABLE_WITH_USB_PK2HID_BOOTLOADER)|| defined(PROGRAMMABLE_WITH_USB_HID_BOOTLOADER)||defined(PROGRAMMABLE_WITH_USB_MCHPUSB_BOOTLOADER)
extern void _startup (void);        // See c018i.c in your C18 compiler dir
#pragma code REMAPPED_RESET_VECTOR = REMAPPED_RESET_VECTOR_ADDRESS
void _reset (void)
{
      ...
#if defined(PROGRAMMABLE_WITH_USB_PK2HID_BOOTLOADER)|| defined(PROGRAMMABLE_WITH_USB_HID_BOOTLOADER)||defined(PROGRAMMABLE_WITH_USB_MCHPUSB_BOOTLOADER)
//Note: If this project is built while one of the bootloaders has

В общем то все! Можно скомпилировать и прошить в PICkit2. Как залить свою прошивку в PICkit2 читаем тут

Замечание
у меня не получилось запустить пример с прилагаемыми драйверами под Windows XP SP2 (не поставился драйвер под второй COM-порт и 2-й порт нормально не работал), пришлось обновиться до SP3. Под Windows XP SP3 драйвера установились нормально и оба виртуальных COM порта заработали. Под OS Vista я не пробовал, желающие могут протестировать и отписаться.

После установки драйверов (из папки inf в архиве) в Windows появятся 2 виртуальных COM порта. Можно открыть два отдельных окна гипертерминала каждое под свой COM порт и понажимать кнопки на клавиатуре. Скорости обоих COM портов могут быть установлены разные. Пример сделан так, что возвращается нажатый символ+1, т.е. при нажатии на букву «а» в окне гипертерминала напечатается «б».

Я модифицировал пример так, что данные, переданные через один виртуальный COM порт, передаются в другой и наоборот. Так же в примере передаем значения кнопок без сдвига, т.е. при передаче символа «а» в одном окне терминала, принимаем в другом тоже «а».

Исходные коды проекта 2 виртуальных COM порта на PIC контроллере.