ВходНаше всё Теги codebook PARTS Поиск Опросы Закон Вторник
26 мая
/894075
Топик полностью
Гудвин (07.01.2019 11:01, просмотров: 13) в ответ на Насчет времянки для WS2812B. У меня получилось и на помедленней. Пришлось ассемблер использовать. На С было не предсказуемо, плюс шлак от XC8 free делал код медленным. - автор: Shatun_
Не понимаю я все эти 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, как оказалось, это вполне переваривает. Так что можно и сдвиги в цикл вставить.
Ответить
Ответы