|
----------------===============延時函數==================--------------
延時函數,是很多程序都會用到的函數。C語言很難調試出非常精確的延時函數,但對于大多說場合來說還是可以應用的。若是像DS18B20這類單總線器件對時序的要求較高的,就必須要討論延時函數的準確性了。
在此,我所說的是一般應用延時函數。如延時1ms、10ms之類的,用于LED流水燈和按鍵消抖的程序!在調試過程中,也遇到一些問題,由于不懂匯編,所以暫時無法測試其具體原因,所以,我也在想是否要學習匯編語言。希望懂匯編的朋友能夠自己分析。
--------------------------==============延時程序==============------------------
--------------------------------------------------------------
編譯測試環境:
KEIL μVision 3
晶振頻率:
11.0592MHz
測試方法:
軟件自帶調試功能
-------------------------------------------------------------
void delay(unsigned int t) //延時 t 毫秒函數,參數在0 ~ 65535之間,晶振為11.0592MHz
{
unsigned int x,y; //定義兩個循環用的變量參數
for(x = t;x > 0;x --) //循環的次數,有實參決定
for(y = 120;y > 0;y --); //每次循環的內部循環次數。
}
問題:當把y聲明為unsigned char類型時,延時函數有所改變,測試結果為3.1ms左右。
如下面所示:
-------------------------------------------------------
void delay(unsigned int t) //此延時函數,不能準確延時1ms.
{
unsigned int x; //定義兩個循環用的變量參數
unsigned char y;
for(x = t;x > 0;x --) //循環的次數,有實參決定
for(y = 120;y > 0;y --); //每次循環的內部循環次數。
}
-------------------------------------------------------
問題的具體原因,我不清楚。應該用匯編的方法來調試。
---------------------==若以后調試出來,會再更新的==在次做個標記--------------------------
|
|