ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 апреля
894075 Топик полностью
Гудвин, волшебник (07.01.2019 11:01, просмотров: 397) ответил Shatun_ на Насчет времянки для WS2812B. У меня получилось и на помедленней. Пришлось ассемблер использовать. На С было не предсказуемо, плюс шлак от XC8 free делал код медленным.
Не понимаю я все эти MOVLWLWLW с банками ;) Тупо наговнокодил:  void send_ws(void) { static uint8_t cb; static uint8_t i; for (i=0;i<36;i++) { cb=RxDataBuffer[i]; 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; } } Задержка 1.25 us возникает во время чтения очередного байта. Но WS, как оказалось, это вполне переваривает. Так что можно и сдвиги в цикл вставить.