當前位置:編程學習大全網 - 編程語言 - 51單片機的優先級怎麽用C語言怎麽寫?

51單片機的優先級怎麽用C語言怎麽寫?

有些單片機的中斷優先級在默認的情況下是確定的,不需要設置,例如51單片機,其優先級從高到低以及向量地址是:00H 復位中斷 優先級0(最高)03H 外部中斷0 10BH 定時器0 213H 外部中斷1 31BH 定時器1 423H 串口 5單片機在運行時,當發生中斷時,CPU會自動把相應的中斷向量地址裝載到PC中,也就是程序會自動跑到相應中斷的向量地址上面去。例如發生定時器0中斷,在發生中斷前PC的值不管多少,壹發生中斷,PC的值就會變成0BH。在執行完中斷服務程序後會返回到發生中斷時的程序地址。所以,相應的中斷服務程序必須寫在對應的中斷向量的地址,但是由於兩個相鄰向量的地址之間的間隔太小,不能放下太多的指令,所以在用匯編寫程序的時候壹般是在其向量地址上面放壹條跳轉指令,而正真的中斷服務程序寫在別的地方。例如:ORG 0BH;定時器0中斷向量地址 LCALL TIMER0;跳轉到真正的中斷服務程序。...... ;其他主程序TIMER0: ;真正的中斷服務程序 ..........RETI ;返回到主程序而用C語言就更簡單了,把中斷服務程序就是壹個函數,不過這個函數加個interrupt的關鍵字來修飾就是了。而interrupt後面加的是個中斷的中斷號。由於復位中斷的發生是不可逆的,發生後不可能再返回到發生中斷之前。所以復位中斷沒有服務程序,也就沒有中斷號。各個中斷的中斷號就是上表中的優先級再減1。例如定時器0的中斷函數。void Timer0(void) interrupt 1{// add your code} 各個中斷的優先級是在上面那個表中,從上到小依次降低的。高優先級的中斷可以打斷低優先級的中斷,同等級的中斷不能相互打斷。不過通過設置IP寄存器的值,可以改變中斷的優先級。例如我想把定時器0的優先級設置得比外部0高,我就把IP寄存器中的PT0位設置為1,其他位為0就可以了。

  • 上一篇:科技環保讀書筆記有沒有,急急急急急嘰嘰嘰嘰嘰嘰嘰嘰嘰嘰
  • 下一篇:中考數學能用計算器嗎
  • copyright 2024編程學習大全網