Вот кусочек моего кода для PIC16F1454 -экспериментировал с "USB
лампой" года полтора назад. Рулил посредством SPI. Основное -
времянка импульса, задаваемая в моем случае скоростью spi. NOP-ами
подгонял к "идеальной" времянке из даташита. Но, как оказалось во
время экспериментов, да - паузы некритичны...
void send_ws(void)
{
static uint8_t cb;
static uint8_t i;
for (i=0;i<36;i++)
{
cb=RxDataBuffer[i+3];
SSP1BUF = (cb & 0x80) ? 0xFF : 0xF0;
cb <<= 1;
asm("nop");
asm("nop");
asm("nop");
SSP1BUF = (cb & 0x80) ? 0xFF : 0xF0;
cb <<= 1;
asm("nop");
asm("nop");
asm("nop");
SSP1BUF = (cb & 0x80) ? 0xFF : 0xF0;
cb <<= 1;
asm("nop");
asm("nop");
asm("nop");
SSP1BUF = (cb & 0x80) ? 0xFF : 0xF0;
cb <<= 1;
asm("nop");
asm("nop");
asm("nop");
SSP1BUF = (cb & 0x80) ? 0xFF : 0xF0;
cb <<= 1;
asm("nop");
asm("nop");
asm("nop");
SSP1BUF = (cb & 0x80) ? 0xFF : 0xF0;
cb <<= 1;
asm("nop");
asm("nop");
asm("nop");
SSP1BUF = (cb & 0x80) ? 0xFF : 0xF0;
cb <<= 1;
asm("nop");
asm("nop");
asm("nop");
SSP1BUF = (cb & 0x80) ? 0xFF : 0xF0;
}
}