|
Arduino的millis函數(shù)使用起來很方便。用普中開發(fā)板寫的程序,仿照Arduino,實(shí)現(xiàn)非阻塞、時(shí)間輪片多任務(wù)。
/*模仿Arduino的millis構(gòu)造非阻塞時(shí)間輪片程序*/
#include <STC90C5xAD.H>
#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long
sbit LED1 = P0^0;
sbit LED2 = P0^1;
sbit LED3 = P0^2;
u32 millis = 0; //ms定時(shí)計(jì)數(shù),長(zhǎng)57天
const u16 timeLong1 = 1000;
const u16 timeLong2 = 2000;
u32 previousMillis1 = 0;
u32 previousMillis2 = 0;
u32 previousMillis3 = 0;
void InitTimer0(void);
void main (void)
{
InitTimer0();
while(1)
{
if (millis - previousMillis1 >= timeLong1) //現(xiàn)在時(shí)間-以前時(shí)間
{
previousMillis1 = millis; //現(xiàn)在時(shí)間賦值以前時(shí)間變量
LED1 =~LED1;
}
if (millis - previousMillis2 >= timeLong2)
{
previousMillis2 = millis;
LED2 =~LED2;
}
if (millis - previousMillis3 >= timeLong1)
{
previousMillis3 = millis;
LED3 =~LED3;
}
}
}
void InitTimer0(void) //22.1M晶振定時(shí)器0的1ms初始化
{
TMOD = 0x01;
TH0 = 0x0F8;
TL0 = 0x0CD;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void Timer0Int(void) interrupt 1 //定時(shí)器中斷,millis計(jì)數(shù)加1
{
TH0 = 0x0F8;
TL0 = 0x0CD;
millis++;
if(millis>0xfffffffa)
{
millis = 0;
previousMillis1 = 0;
previousMillis2 = 0;
}
}
|
評(píng)分
-
查看全部評(píng)分
|