我后面那段話打的字白打了
如果你要一個1000uS的延時,16位定時器要工作在1模式,中斷程序的代碼執行時間是50uS,那么,設定16位定時器的溢出就是950
當中斷被觸發的時候延時開始,執行時間是50uS,中斷返回.950uS之后再次觸發中斷,這個過程不就是精確的1000uS了?
你告訴我,哪里不對了
對于你說的那些問題,是基于你對單片機的不了解產生的
比如,你說的:如果你延時的時間很短,只有8uS,但定時器執行代碼可能是50uS的長度,那么肯定是會出現問題的,像這種情況,在8051的8位定時器模式0就是可以自動加載延時時間的,它可以做到只有兩條指令,也就是兩個時鐘周期的中斷,對于12MHZ的晶振,所用的時間就是2uS
從你的話里,我認為你并沒有真正的編寫過一個嚴謹的定時器延時程序,甚至是中斷都不太了解是怎么一回事
編程是一門很嚴謹的技術,并不是你覺得它會亂或者太麻煩了就不會這樣執行了
C語言會由于編譯器的不同,編譯出來的效率也不同,所以,C語言在精確到幾個時鐘周期的精確度是很難做到的,所以,你會看到有的人在寫C的時候會嵌入匯編,匯編語言可以精確到一個時鐘周期 |