請問什么原因單片機小精靈延時生成的代碼延時時間跟除錯的差距很大
uj5u.com熱心網友回復:
時鐘參考不一致,比如外部晶振不同代碼沒有做相應處理。uj5u.com熱心網友回復:
可以用軟體仿真除錯界面運行程式(注意設定晶振頻率,設定好單片機型號),看看延時時間(應該有地方可以看到電腦算出的運行到某一步的理論時間,根據延時開始的理論時間和延時結束的理論時間的差值就可以得到延時時間),再根據延時時間調整程式以達到滿意效果。關于自動生成延時不準,我感覺可能是晶振頻率沒調對,或者單片機型號與延時生成程式的預設不符導致之類的。
uj5u.com熱心網友回復:
要看是什么因素造成的延時不準確,能造成延時不準確的因素很多,也與程式流程中各種延時安排有直接關聯;比如定時器呼叫中斷,本來定時器計時是很準確的,但因為等待中斷回應,則表現在時鐘上就是計時不準確,所以才有了外部時鐘模塊單獨計時然后讀其內部計時從而不影響計時準確性.
下面舉個栗子,明顯看到延時受到其他延時影響,一個極其簡單的數碼管顯示一個數遞減的程式:
void main()
{
unsigned int YS=54000,a=55555;
while(1)
{
a--;
YS=54000;while(YS--)ZhengShuXianShi(8,a);/*整數拆分到數碼管顯示從第8位到第1位*/
}
}
這個簡單程式仿真看到只減少了1之后不動了,沒預想的那樣延時遞減效果

這時就會產生疑問?怎么這么簡單的程式明明看是沒錯,怎么就不動了!
此時呼叫LED作個測驗,則延時是正常的
void main()
{
while(1)
{
a--;
P1=P1<<1;
YS=54000;while(YS--);
if(!P1)P1=255;
}
}

經過分析應該是數碼管顯示中的延時影響了這個主函式中的延時了,為了驗證這個推斷,修改代碼如下:
void main()
{
while(1)
{
a--;
P1=P1<<1;
YS=54;while(YS--)ZhengShuXianShi(8,a);
if(!P1)P1=255;
}
}

其實提問類似問題的不少,今天剛好弄這個簡單的程式順便舉個栗子以解答類似疑問,有些人遇到類似問題分析能力不足,長時無法理解和解決,從而懷疑是其他問題造成程式無法按預期的運行.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/108493.html
標籤:單片機/工控
上一篇:04.卷積神經網路 W2.深度卷積網路:實體探究(作業:Keras教程+ResNets殘差網路)
下一篇:CAN通訊
