|
|
SPI中断,判断数据要发送的bit是0还是1,移位数据,选一个对应时序的char扔进寄存器,触发SPI发送,然后等中断。或者趁中断没来之前先去干点别的事情,等1uS后,中断来了,重复这些事情…… 必要性实在是不是很强 |
cnos 发表于 2026-2-26 22:17 ws2812这种软件模拟确实更搞高效,传输一次也只需要几十us,不过硬件spi不一定非得死等,可以用SPI中断的。 |
|
这样的代码不一样在死等,直接软件模拟效率还高得多。 STC8G@22.1184MHz void nop(void) { } void WS2812sendbyte(unsigned char byte) { unsigned char i; i=8; EA=0; do { WS2812IO=1;nop(); WS2812IO=byte&0x80;nop(); WS2812IO=0;nop(); byte=(byte<<1); //左移位 }while(--i); EA=1; } |
coody_sz 发表于 2026-2-24 11:59 我就是看了,不然都不知道MOSI空闲会输出MISO电平。 但是实在是搞不懂为什么这51单片机,怎么在24mhz下,主循环回跳都要整整200ns |
| 你可以去STC官方论坛看看,他们有完整的程序,SPI驱动WS2812的,其实2812只要保证高电平时间在一定范围就可以了,用于识别数据0或1,低电平只要不超过50us就不会复位,控制在30us之内为好。 |