天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術熱線: 4007-888-234
設計開發

專注差異化嵌入式產品解決方案 給智能產品定制注入靈魂給予生命

開發工具

提供開發工具、應用測試 完善的開發代碼案例庫分享

技術支持

從全面的產品導入到強大技術支援服務 全程貼心伴隨服務,創造無限潛能!

新聞中心

提供最新的單片機資訊,行業消息以及公司新聞動態

單片機延時與中斷常見問題及相關解答

更新時間: 2019-03-25
閱讀量:5425

新手在單片機開發應用過程中,時而出現延時與中斷的問題,那該怎么解決呢?

一些人會把單片機中斷和延時概念搞混,首先我們先來理清楚單片機中斷和延時的概念。中斷是停止當前正執行的任務,轉而去執行中斷任務,等中斷任務執行結束后繼續回來執行當前正在運行的任務。開啟中斷源之后,有初始化中斷、響應中斷等都是從中斷入口地址處執行中斷程序的,建議有中斷程序盡可能的簡潔,越短越好。而延時僅僅是主程序在執行的過程中不斷調用的一段子程序。

下邊為大家分享一下大多數單片機包含PIC單片機開發在內的延時與中斷的常見問題及解決方法。

1、單片機延時程序的延時時間怎么算的?

答:如果用循環語句實現的循環,沒法計算,但是可以通過軟件仿真看到具體時間,但是一般精精確延時是沒法用循環語句實現的。

如果想精確延時,一般需要用到定時器,延時時間與晶振有關系,單片機系統一般常選用11.059 2 MHz、12 MHz或6 MHz晶振。第一種更容易產生各種標準的波特率,后兩種的一個機器周期分別為1 μs和2 μs,便于精確延時。本程序中假設使用頻率為12 MHz的晶振。最長的延時時間可達216=65 536 μs。若定時器工作在方式2,則可實現極短時間的精確延時;如使用其他定時方式,則要考慮重裝定時初值的時間(重裝定時器初值占用2個機器周期)。

2、求個單片機89S51 12M晶振 用定時器延時10分鐘,控制1個燈就可以

答:可以設50ms中斷一次,定時初值,TH0=0x3c、TL0=0xb0。中斷20次為1S,10分鐘的話,需中斷12000次。計12000次后,給一IO口一個低電平(如功率不夠,可再加擴展),就可控制燈了。而且還要看你用什么語言計算了,匯編延時準確,知道單片機工作周期和循環次數即可算出,但不具有可移植性,在不同種類單片機中,匯編不通用。用c的話,由于各種軟件執行效率不一樣,不會太準,通常用定時器做延時或做一個不準確的延時,延時短的話,在c中使用匯編的nop做延時

3、51單片機,晶振為6M,求一個10ms的延時程序

答:延時有很多種方法,有一種是讓單片機去做無聊的循環,還有一種是用定時器。

第一種的算法是:

晶振的周期T1=1/f; 這里f=6MHz 所以T1=1/6 us;(微秒)

單片機花12個T1去執行一個指令,

所以一個機器周期等于12個晶振周期,

T2=12*T1=2us

10ms=1000 0us

所以你要得到10ms的延時就要想辦法讓機器去做5000條“無聊的指令”

(尤其是在多中斷任務執行時),中斷首先要開啟中斷源,初始化中斷,然后響應中斷,從中斷的入口地址處執行中斷程序。

利用中斷可以使程序執行效率高效,實現“一邊。。。一邊。。。”初始化中斷源后主程序,就可以去干其他事情了。

4、51單片機C語言for循環延時程序時間計算 ,設晶振12MHz,即一個機器周期是1us。

for(i=0,i<100;i++)

for(j=0,j<100;j++)

我覺得時間是100*100*1us=10ms,怎么會是100ms

答:

不可能的,是不是你的編譯有錯的啊

我改的晶振12M,在KEIL 4.0 里面編譯的,為你得出的結果最大也就是40ms,這是軟件的原因,

不可能出現100ms那么大的差距,是你的軟件的原因。

不信你實際編寫一個秒鐘,利用原理計算編寫一個燒進單片機和利用軟件測試的秒程序燒進單片機,你會發現原理計算的程序是正確的。

5、PIC單片機AD中斷什么時候開啟,對AD中斷應該怎樣理解。

答:

AD模數轉換,是把模擬電壓數值采樣進來,然后轉換成數字信號。這一采樣和轉換是需要時間的。并不是一開AD就能讀到數字信號數據。

一般來說其時間都只有幾微秒到幾百微秒(根據設置不同而定)。如果單片機沒有其他工作的時候,可以用循環等待的方式等AD轉換結束(轉換結束后DONE位會被置位)。但如果你的單片機還有其他工作,那就沒必要在等待它上面花費時間。可以開AD操作后,繼續執行其他程序。而轉換結束后,AD中斷可以暫時斷開現有炒作,而把AD數據讀進來。這就是AD中斷的作用。

6、51單片機的五個中斷分別在什么時候(什么情況)執行里面的程序!

答:

外部中斷0 :P3.2口有低電平(IT0=0)/ 下降沿(IT0=1)。

外部中斷1 :P3.3口有低電平(IT1=0)/ 下降沿(IT1=1)。

定時器0中斷:當定時器0計數到FFFF溢出時

定時器1中斷:當定時器1計數到FFFF溢出時

串口中斷:串口接收到一幀。或發送完一幀數據都會產生中斷。

你網上找一下TCON和SCON。什么條件讓中斷標志位的值改變。 那么就會進入中斷服務程序去。 


7、51單片機,如果中斷函數比較長,執行到一半又觸發了這個中斷,程序會停止從頭執行,還是執行結束后響應中

答:51單片機中,中斷分高低兩個優先級,高優先級的中斷能打斷低優先級的中斷。

但同級中斷是不能打斷同級中斷的!無論該中斷函數有多長,在執行到一半這個中斷又發生了,還是要等到該中斷函數執行完畢,并再執行了一條主程序指令后才會再次進入該中斷。

不過,若樓主恰好在這個低優先級中斷服務程序中修改了該中斷為高優先級,那么如果該中斷函數比較長,執行到一半又觸發了這個中斷,則該中斷函數就會被重新從頭開始執行(中斷嵌套)。這是因為除串口中斷以外的其他中斷,在 CPU 響應該中斷,程序轉入該中斷函數前就已經將該中斷的中斷標志清零了。

另外,51的串口中斷比較特別,因為需要軟件清除串口中斷標志,所以只要在未清串口中斷標志前,是不會發生上述這樣的中斷嵌套的。

以上是一些單片機開發過程中的中斷與延時的常見問題解答。單片機開發過程是比較復雜的,需要進行項目評估及項目實施兩個大步驟,希望以上的知識總結能夠給你帶來一定幫助。


联系我们: 会泽县| 佛冈县| 太保市| 肥东县| 无为县| 麻阳| 池州市| 辽宁省| 黔江区| 涟源市| 安塞县| 兴文县| 临城县| 周口市| 阿图什市| 商水县| 平塘县| 鄱阳县| 沙雅县| 凭祥市| 上栗县| 特克斯县| 临邑县| 南和县| 古田县| 玛沁县| 绥滨县| 彰化县| 临汾市| 凤山县| 鹿邑县| 宿松县| 洮南市| 军事| 浮梁县| 柳江县| 铜川市| 疏附县| 浠水县| 富源县| 宁蒗|