|
|
发表于 2015-9-23 10:45:10
|
显示全部楼层
由於你要求的精確度去到 microseconds, 但每個指令執行都需要一點時間, 結果可能會出現輕微的差距.
每 500us 一次轉變, 只要變成 525us 左右, 就已失去了一定的脉冲.
我嘗試簡化了你的程序, 你看看 ee 顯示出來會是多少?
- unsigned long aa=0;
- unsigned long bb=0;
- unsigned long dd=0;
- unsigned int ee=0;
-
- void setup()
- {
- Serial.begin(115200);
- aa = millis();
- dd = micros();
- }
-
- void loop()
- {
- if(micros()-dd>=500){
- ee++;
- dd=micros();
- }
-
- if(millis()-aa>=1000){
- Serial.println(ee);
- aa = millis();
- ee=0;
- }
- }
复制代码
這裡已抽去了大部份 IO 指令, 單純的數, 我用 UNO 去執行, 也只可以得到 1977 左右, 當中已比理想的少了 23 次.
雖然, 你是希望每 500us 執行一次, 但 (micro() - dd >= 500) 只是做到最少 500us 才執行一次, 而非絕對地每 500us 執行一次.
結果有可能用了大約 525us 吧.
|
|