**!!**定时器中断法控制WS2812B不可行!!
原因:即使在40MHZ不分频的情况下,WS2812B一个节拍16机器周期(即400ns),然而一个i++或i--需要5-7个机器周期,一个最简单的while至少需要13个机器周期,所以会导致定时器中断来临时,本该在上一个中断前执行完毕的程序执行不完甚至没有机会执行就发生了下一次中断并改变了上一个中断的执行条件。
最简单的while代码:
i=1;//13个机器周期不包括赋值,赋值占4个机器周期
while(i)
{
i--;
}
时钟周期、振荡周期、机器周期
1.时钟周期=振荡周期=1秒/晶振频率
2.51内核单片机即兼容Intel8031指令系统的单片机统称,故51内核单片机每个指令所需机器周1T和12T是一样的,不同的只是机器周期占用时钟周期的长短。根据指令占用机器周期的多少分为1周期指令、2周期指令、4周期指令(只有乘法(MUL)和除法(DIV)),指令速查表如下。
3.单片程序执行最小时间单位(T--->time:次数):
1T单片机(STC8A系列):1机器周期=1时钟周期,即晶振跳一下执行一个基本动作,所以ST8A系列单片机又叫单时钟/机器周期单片机;
12T单片机(80C51/80C52):1机器周期=12时钟周期;
4.老版本:一个机器周期包含六个状态例如,取指令、存储器读、存储器写等。即机器周期等于6个状态周期,而一个状态周期是2个时钟周期,因此一个机器周期又等于12个时钟周期,这就是12T的由来,但新改进的1T单片机在一个时钟周期就能把这六个状态一次执行完;
5.一般i--占5或7个机器周期;i++占6个机器周期。