單片機(jī)可以通過(guò)“定時(shí)/計(jì)數(shù)模式選擇位C/T”令定時(shí)/計(jì)數(shù)器工作于定時(shí)或計(jì)數(shù)模式下,也可通過(guò)“工作方式選擇位M1M0”設(shè)定其工作方式。C/T和M1M0等與定時(shí)/計(jì)數(shù)器有關(guān)的位在寄存器TCON或TMOD中,見(jiàn)表4-8和表4-9。
在家電產(chǎn)品和工業(yè)應(yīng)用系統(tǒng)中,定時(shí)和計(jì)數(shù)是兩種常用的功能,如:微波爐加熱計(jì)時(shí)和流水線上產(chǎn)品數(shù)目統(tǒng)計(jì)等。MCS-51單片機(jī)內(nèi)部集成的兩個(gè)可編程定時(shí)/計(jì)數(shù)器T0和T1使用靈活、方便,在儀器儀表等工業(yè)產(chǎn)品中應(yīng)用廣泛。
MCS-51單片機(jī)有兩個(gè)外部中斷源INT0和INT1,它們分別在P3.2和P3.3引腳出現(xiàn)低電平或下降沿信號(hào)時(shí)向單片機(jī)發(fā)出中斷請(qǐng)求。外部中斷可用于檢測(cè)單片機(jī)外部發(fā)生的事件,如鍵盤(pán)敲擊和特定脈沖發(fā)生的次數(shù)等。
④處理機(jī)執(zhí)行完一條指令后或者這條指令已無(wú)法執(zhí)行完,則立即中止現(xiàn)行程序。接著,中斷部件根據(jù)中斷級(jí)去指定相應(yīng)的主存單元,并把被中斷的指令地址和處理機(jī)當(dāng)前的主要狀態(tài)信息存放在此單元中。
當(dāng)多個(gè)同級(jí)別中斷同時(shí)發(fā)出中斷請(qǐng)求時(shí),單片機(jī)中斷系統(tǒng)將按照自然優(yōu)先級(jí)別進(jìn)行中斷排序,并首先響應(yīng)其中自然優(yōu)先級(jí)別最高的中斷。
MCS-51單片機(jī)中斷系統(tǒng)的結(jié)構(gòu)如圖4-1所示。MCS-51單片機(jī)有5個(gè)中斷源,分別是2個(gè)外部中斷源、2個(gè)定時(shí)/計(jì)數(shù)器中斷源和1個(gè)串行接口中斷源。與中斷系統(tǒng)有關(guān)的寄存器有TCON、SCON、IE和IP,它們都可以按位尋址,其中的每一位都可以通過(guò)指令來(lái)設(shè)置。
單片機(jī)系統(tǒng)用戶可以通過(guò)中斷系統(tǒng)的軟件和硬件實(shí)現(xiàn)對(duì)某一中斷請(qǐng)求的開(kāi)放(或允許)和屏蔽。開(kāi)放是指中斷請(qǐng)求發(fā)生時(shí)中斷系統(tǒng)響應(yīng)該請(qǐng)求,并完成相應(yīng)的中斷服務(wù)處理工作;相反地,屏蔽是指中斷系統(tǒng)既不接收中斷請(qǐng)求,也不進(jìn)行中斷處理。
控制轉(zhuǎn)移指令能夠改變單片機(jī)程序寄存器(PC)的值,即改變單片機(jī)從ROM中讀取指令的順序,從而改變程序執(zhí)行順序??刂妻D(zhuǎn)移指令包括以下幾類:無(wú)條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令和子程序調(diào)用及返回指令等。
在單片機(jī)與外部設(shè)備(簡(jiǎn)稱外設(shè))的數(shù)據(jù)傳送過(guò)程中,單片機(jī)處于核心地位,所謂的數(shù)據(jù)輸入和輸出都是相對(duì)單片機(jī)而言。數(shù)據(jù)由外設(shè)傳送至單片機(jī),為“輸入”,反之為“輸出”。通常,單片機(jī)與外設(shè)的數(shù)據(jù)傳送速度差別較大,因此,選擇恰當(dāng)?shù)臄?shù)據(jù)傳送時(shí)間和傳送時(shí)間間隔,是保證數(shù)據(jù)正確傳送的關(guān)鍵。在單片機(jī)系統(tǒng)中,有三種解決該問(wèn)題的方法,即程序控制傳送、中斷式傳送和DMA傳送。
邏輯運(yùn)算可以分成字節(jié)邏輯運(yùn)算和位邏輯運(yùn)算兩大類,其指令格式見(jiàn)表3-8。當(dāng)邏輯運(yùn)算指令的目的操作數(shù)是累加器A、程序狀態(tài)字寄存器PSW或進(jìn)位標(biāo)志位CY時(shí),PSW會(huì)受到影響,否則PSW不受影響。
ADD指令將源操作數(shù)和累加器A中的數(shù)相加,加法的結(jié)果存入累加器A,并且運(yùn)算結(jié)果會(huì)影響PSW中的CY、OV、AC和P標(biāo)志位。ADD指令對(duì)標(biāo)志位的影響如下:當(dāng)加法結(jié)果的第7位有進(jìn)位時(shí),則進(jìn)位標(biāo)志位CY被置1,否則被清0;如果加法結(jié)果的第3位有進(jìn)位,則輔助進(jìn)位標(biāo)志位AC被置1,否則被清0;如果加法結(jié)果的第6位和第7位的進(jìn)位情況不一致,則溢出標(biāo)志位OV被置1,否則被清0;運(yùn)算結(jié)束時(shí),奇偶標(biāo)志位P的值由累加器A中的數(shù)決定,若累加器A中的值以二進(jìn)制表示后,其中“1”的個(gè)數(shù)為奇數(shù)個(gè),則P為1,否則P為0。
單片機(jī)工作時(shí),經(jīng)常需要進(jìn)行算術(shù)邏輯運(yùn)算等操作,而數(shù)據(jù)通常存放于存儲(chǔ)器和寄存器中,因此進(jìn)行有效的數(shù)據(jù)傳送、獲取操作數(shù)是單片機(jī)程序設(shè)計(jì)的基礎(chǔ)。
堆棧指令是FX系列中新增的基本指令,用于多重輸出電路,為編程帶來(lái)便利、在FX系列PLC中有11個(gè)存儲(chǔ)單元,它們專門(mén)用來(lái)存儲(chǔ)程序運(yùn)算的中間結(jié)果,被稱為棧存儲(chǔ)器。
(片內(nèi)RAM)傳送指令MOV(Move)把一個(gè)字節(jié)、字或雙字的操作數(shù)從源位置傳送到目的位置,源操作數(shù)的內(nèi)容不變??梢詫?shí)現(xiàn)立即數(shù)到通用寄存器或主存的傳送,通用寄存器與通用寄存器、主存或段寄存器之間的傳送,主存與段寄存器之間的傳送。該操作屬于復(fù)制性質(zhì),不屬于搬家性質(zhì)。
在指令“MOV A,#12H”中,立即數(shù)#12H是源操作數(shù),緊隨操作碼74H之后存放在ROM中。該指令執(zhí)行時(shí),單片機(jī)先從ROM中讀取操作碼74H,對(duì)操作碼74H解碼后,確定要進(jìn)行的操作是將一個(gè)8位立即數(shù)送入累加器A,接下來(lái)單片機(jī)從緊鄰操作碼的下一個(gè)存儲(chǔ)單元中取得立即數(shù)12H并送入累加器A。另外,該指令的目的操作數(shù)累加器A隱含在操作碼中,沒(méi)有明確給出。