最近在用cc2541与ws2812b通信。通信协议是0.4us的高电平接0.85us的低电平表示0码,0.85us的高电平接0.4us的低电平表示1码,50us低电平表示结束。最终通过蓝牙协议栈传输数据。
下面是代码:
for(i = 0; i<3 ; i++)
{
for(j=0;j<8;j++)
{
if(table[i][j] == 0)
{
PIN = 1;
asm("NOP");asm("NOP");asm("NOP");
asm("NOP");asm("NOP");asm("NOP");
PIN=0;
asm("NOP");asm("NOP");asm("NOP");
asm("NOP");asm("NOP");asm("NOP");
asm("NOP");asm("NOP");asm("NOP");
asm("NOP");asm("NOP");asm("NOP");
asm("NOP");
}
// 1码
else
{
PIN = 1;
asm("NOP");asm("NOP");asm("NOP");
asm("NOP");asm("NOP");asm("NOP");
asm("NOP");asm("NOP");asm("NOP");
asm("NOP");asm("NOP");asm("NOP");
asm("NOP");
PIN=0;
asm("NOP");asm("NOP");asm("NOP");
asm("NOP");asm("NOP");asm("NOP"); //6个NOP是400ns
}
}
}
通过示波器发现,低电平持续时间很长,这一定是从数组中取数据太慢造成的,在IAR中,data关键字不能使用,该怎样能更快取数据作比较呢。本人刚出学校,小白一个,望大家指点一二。