找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

求助:STC8G1K08A SPI模拟WS2812单总线,电平时间不符合预期

查看数: 561 | 评论数: 6 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2026-2-23 16:56

正文摘要:

最近想试试用SPI模拟2812彩灯的单总线,理论上是可行的,因为SPI的特性是MOSI和MISO都是不归零码,只有需要改变的时候才改变,不会归零。理论上是可行的。 于是我就根据STC的手册写了简单的测试程序,手册给的很清 ...

回复

ID:688692 发表于 2026-2-27 00:28
SPI中断,判断数据要发送的bit是0还是1,移位数据,选一个对应时序的char扔进寄存器,触发SPI发送,然后等中断。或者趁中断没来之前先去干点别的事情,等1uS后,中断来了,重复这些事情……
必要性实在是不是很强
ID:1155837 发表于 2026-2-26 23:47
cnos 发表于 2026-2-26 22:17
这样的代码不一样在死等,直接软件模拟效率还高得多。

void nop(void)

ws2812这种软件模拟确实更搞高效,传输一次也只需要几十us,不过硬件spi不一定非得死等,可以用SPI中断的。
ID:688692 发表于 2026-2-26 22:17
这样的代码不一样在死等,直接软件模拟效率还高得多。
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;
}
ID:1155837 发表于 2026-2-24 16:43
coody_sz 发表于 2026-2-24 11:59
你可以去STC官方论坛看看,他们有完整的程序,SPI驱动WS2812的,其实2812只要保证高电平时间在一定范围就可 ...

我就是看了,不然都不知道MOSI空闲会输出MISO电平。
但是实在是搞不懂为什么这51单片机,怎么在24mhz下,主循环回跳都要整整200ns
ID:1034262 发表于 2026-2-24 11:59
你可以去STC官方论坛看看,他们有完整的程序,SPI驱动WS2812的,其实2812只要保证高电平时间在一定范围就可以了,用于识别数据0或1,低电平只要不超过50us就不会复位,控制在30us之内为好。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表