用STC8的PWM驱动WS2812,响应不过来,该咋弄尼?
本帖最后由 weatt123456789 于 2018-10-29 16:09 编辑#include "STC8.h"//30MHZ
#include "intrins.h"
#define PWM0_L PWM0T1
#define PWM0_H PWM0T2
static unsigned char PWM_01;
static bitPs=1;
void PWM_Isr() interrupt 22 using 1
{
if (PWMCFG & 0x80)
{ PWMCFG &= ~0x80;
if(Ps==1)
{
if(PWM_01==1)
{
PWM0_L=25;//0.85
}
else
{
PWM0_L=12;//0.40
}
Ps=0;
}
}
}
void WS2812_data(unsigned char Dat)
{
unsigned char i;
for(i=8;i!=0;i--)
{
if(Dat&0x80)
{
PWM_01=1;
}
else
{
PWM_01=0;
}
Dat=(Dat<<1);
Ps=1;
while(Ps);
}
}
void main()
{
P_SW2 = 0x80;
PWMCKS = 0x00;
PWMC = 38;
PWM0CR= 0x80;
PWM0_H=0;
//P_SW2 = 0x00;
PWMCR = 0xc0;
EA = 1;
while (1)
{
WS2812_data(0xaa);
}
}
我把周期改成100就没有问题,周期如果是37,低电平在第12个周期 ,则会出现一个位的数据发送两次的现像。
是不是响应时间不够呢?还是我写的问题?
页:
[1]