weatt123456789 发表于 2018-10-29 15:41:42

用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个周期 ,则会出现一个位的数据发送两次的现像。

weatt123456789 发表于 2018-10-31 12:23:20

是不是响应时间不够呢?还是我写的问题?
页: [1]
查看完整版本: 用STC8的PWM驱动WS2812,响应不过来,该咋弄尼?