當多個同級別中斷同時發(fā)出中斷請求時,單片機中斷系統(tǒng)將按照自然優(yōu)先級別進行中斷排序,并首先響應其中自然優(yōu)先級別最高的中斷。
MCS-51單片機中斷系統(tǒng)的結構如圖4-1所示。MCS-51單片機有5個中斷源,分別是2個外部中斷源、2個定時/計數器中斷源和1個串行接口中斷源。與中斷系統(tǒng)有關的寄存器有TCON、SCON、IE和IP,它們都可以按位尋址,其中的每一位都可以通過指令來設置。
單片機系統(tǒng)用戶可以通過中斷系統(tǒng)的軟件和硬件實現對某一中斷請求的開放(或允許)和屏蔽。開放是指中斷請求發(fā)生時中斷系統(tǒng)響應該請求,并完成相應的中斷服務處理工作;相反地,屏蔽是指中斷系統(tǒng)既不接收中斷請求,也不進行中斷處理。
控制轉移指令能夠改變單片機程序寄存器(PC)的值,即改變單片機從ROM中讀取指令的順序,從而改變程序執(zhí)行順序??刂妻D移指令包括以下幾類:無條件轉移指令、條件轉移指令和子程序調用及返回指令等。
在單片機與外部設備(簡稱外設)的數據傳送過程中,單片機處于核心地位,所謂的數據輸入和輸出都是相對單片機而言。數據由外設傳送至單片機,為“輸入”,反之為“輸出”。通常,單片機與外設的數據傳送速度差別較大,因此,選擇恰當的數據傳送時間和傳送時間間隔,是保證數據正確傳送的關鍵。在單片機系統(tǒng)中,有三種解決該問題的方法,即程序控制傳送、中斷式傳送和DMA傳送。
邏輯運算可以分成字節(jié)邏輯運算和位邏輯運算兩大類,其指令格式見表3-8。當邏輯運算指令的目的操作數是累加器A、程序狀態(tài)字寄存器PSW或進位標志位CY時,PSW會受到影響,否則PSW不受影響。
ADD指令將源操作數和累加器A中的數相加,加法的結果存入累加器A,并且運算結果會影響PSW中的CY、OV、AC和P標志位。ADD指令對標志位的影響如下:當加法結果的第7位有進位時,則進位標志位CY被置1,否則被清0;如果加法結果的第3位有進位,則輔助進位標志位AC被置1,否則被清0;如果加法結果的第6位和第7位的進位情況不一致,則溢出標志位OV被置1,否則被清0;運算結束時,奇偶標志位P的值由累加器A中的數決定,若累加器A中的值以二進制表示后,其中“1”的個數為奇數個,則P為1,否則P為0。
單片機工作時,經常需要進行算術邏輯運算等操作,而數據通常存放于存儲器和寄存器中,因此進行有效的數據傳送、獲取操作數是單片機程序設計的基礎。
堆棧指令是FX系列中新增的基本指令,用于多重輸出電路,為編程帶來便利、在FX系列PLC中有11個存儲單元,它們專門用來存儲程序運算的中間結果,被稱為棧存儲器。
(片內RAM)傳送指令MOV(Move)把一個字節(jié)、字或雙字的操作數從源位置傳送到目的位置,源操作數的內容不變。可以實現立即數到通用寄存器或主存的傳送,通用寄存器與通用寄存器、主存或段寄存器之間的傳送,主存與段寄存器之間的傳送。該操作屬于復制性質,不屬于搬家性質。
在指令“MOV A,#12H”中,立即數#12H是源操作數,緊隨操作碼74H之后存放在ROM中。該指令執(zhí)行時,單片機先從ROM中讀取操作碼74H,對操作碼74H解碼后,確定要進行的操作是將一個8位立即數送入累加器A,接下來單片機從緊鄰操作碼的下一個存儲單元中取得立即數12H并送入累加器A。另外,該指令的目的操作數累加器A隱含在操作碼中,沒有明確給出。
MCS-51單片機的匯編語言程序由若干條匯編語言指令和偽指令構成。指令存放在程序存儲器中,被單片機讀取并執(zhí)行,且執(zhí)行結果將影響單片機自身的狀態(tài)。
單片機由中央處理器(含部分特殊功能寄存器)、內部RAM、程序存儲器、各種外設(IO端口、定時器、串行接口、中斷處理電路等等)及對應控制寄存器、時鐘電路、復位電路等幾部分組成。
MCS-51單片機4個并行I/O端口引腳的內部結構如圖2-10所示,每個端口有8個相互獨立且內部結構完全相同的引腳。圖2-10中的字母X代表引腳序號,是0~7的整數。接下來將分別介紹P0、P1、P2和P3口的引腳特性。
MCS-51系列單片機產品有8051,8031,8751,80C51,80C31等型號(前三種為CMOS芯片,后兩種為CHMOS芯片)。它們的結構基本相同,其主要差別反映在存儲器的配置上。8051內部設有4K字節(jié)的掩模ROM程序存儲器,8031片內沒有程序存儲器,而8751是將8051片內的ROM換成EPROM。由ATMEL公司生產的89C51將EPROM改成了4K的閃速存儲器。