500 likes | 715 Views
課程目標. 了解何謂單晶片. 學會 MCS-51 的基本應用電路. 活用 MCS-51 單晶片的組合語言指令. 加強程式邏輯觀念. 單元一. 單晶片概論. 何謂微電腦?. 輸出單元. 輸入單元. CU ( 控制單元 ). CPU. ALU ( 算術邏輯單元 ). 記憶單元. 何謂單晶片微電腦?. 單晶片微電腦和一般微電腦最大的不同為就是:將微電腦的各單元做在同一個IC中,使用時只要再加上一些簡單的電路即可成為一個體積小且完整的微電腦控制系統。. 單晶片的優點. ◆ 體積小. ◆ 線路簡單. ◆ 價格低廉. ◆ 簡單易學. 單晶片能做什麼 ?.
E N D
課程目標 • 了解何謂單晶片 • 學會MCS-51的基本應用電路 • 活用MCS-51單晶片的組合語言指令 • 加強程式邏輯觀念
單元一 單晶片概論
何謂微電腦? 輸出單元 輸入單元 CU (控制單元) CPU ALU (算術邏輯單元) 記憶單元
何謂單晶片微電腦? 單晶片微電腦和一般微電腦最大的不同為就是:將微電腦的各單元做在同一個IC中,使用時只要再加上一些簡單的電路即可成為一個體積小且完整的微電腦控制系統。
單晶片的優點 ◆體積小 ◆線路簡單 ◆價格低廉 ◆簡單易學
AT89S51的特性(一) • 工作電壓:4V ~ 5.5V。 • 工作頻率範圍:3.5MHz~33MHz • 內含4KB的Flash Memory用來儲存單晶片的程式,允許電子式多次清除與寫入。 • 內含128Btyes的資料記憶空間。 • 二個16bits的計時/計數器。
AT89S51的特性(二) • 111個組合語言指令。 • 4個雙向的I/O Ports( P0、 P1、P2 、 P3)共32個I/O點,其低態最大驅動電流為10mA。
單晶片輸出驅動電路的方式 • 高態驅動方式-- 以輸出為 Hi 時驅動電路 • 低態驅動方式-- 以輸出為 Lo 時驅動電路
5V 2V 約30K 300 高態驅動方式(較不理想的方式) - ID≒ 30K = 0.1mA 計算得知受限於IC內提昇電阻,輸出電流較小,對LED的驅動力較差,亮度比較暗
2V 5V 300 低態驅動方式(理想的方式) - ID= 300 = 10mA 由電路得知,當IC輸出為Lo時內部晶體飽和接地,因此流過LED的電流就由外部電路決定;由於此時晶體呈飽和,因此就算大電流流入,IC本身的消耗功率不大亦可達到較大的電路驅動力
AT89S51的接腳功能 應用電路
VDD及GND 單晶片之電源輸入端,其工作電壓範圍為: 4V~5.5 V 返回接腳圖
RST重置接腳 AT89S51重置動作為高態動作,因此若要將單晶片重置(即重新開機),就要將此一接腳接至高電位並維持2個機械週期即可令系統達到重置。 右圖為一般單晶片電路常用之Power On Reset及手動重置電路的接法。 R=10KΩ C=10uF 返回接腳圖
CPU重置 重置完成CPU 開始動作 Power On Reset Power On Reset指的是開機時自動重置,是利用電容暫態的特性完成此一動作。 VO Power On VCC VCC t 5RC
XTAL1 、 XTAL2 為IC內部的反相振盪器的輸入/輸出接腳,可於兩腳間接上一個石英振盪器及電容,或由XTAL1端將時脈訊號輸入,以提供單晶片工作時所需之時脈訊號。 外部振盪訊號 12MHz 20PF 返回接腳圖
P01~P07(輸出/入埠接腳) 單晶片對外存取資料之接腳,為開汲極電路結構,使用時需外加提昇電阻,否則IC的輸出狀態會變成浮接。
P1、P2、P3(輸出/入埠接腳) 單晶片對外存取資料之接腳,內部皆已有約30KΩ之提昇電阻。 另P3埠除了作為一般輸出/入使用外,也做為串列傳輸、中斷輸入、計數器輸入之特殊功能使用。
PORT3的特殊功能接腳 P3.0:RXD(串列輸入埠) P3.1:TXD(串列輸出埠) P3.2:(外部中斷0) P3.3:(外部中斷1) P3.4:T0(外部計時/計數輸入0) P3.5:T1(外部計時/計數輸入1) 返回接腳圖
AT89S51的記憶體結構 • 程式記憶體(ROM) 由Flash RAM構成,因此資料可輕易的以電壓的方式寫入及抹去,主要是儲存單晶片的執行程式。 • 資料記憶體(RAM) 或統稱為暫存器,主要是存放程式執行過程中所產生的數據資料,整個記憶體在結構上又可分為一般資料存取區和特殊功能暫存器(SFR)兩大區塊。
程式記憶體 (一) AT89S51的程式記憶體(ROM)共有4KB,其位址範圍為0000H~0FFFH ,其程式記憶體可以外加擴充。 0FFFH 0002H 0001H 0000H
程式記憶體 (二) 在4KB的程式記憶體中有六個特殊位址,其功能及說明如下: • 0000H 程式執行的起始位址(即系統重置後系統執行程式的第一個位址)。 一般我們在寫程式時都會在這一個位址加上跳躍的指令直接跳到程式的真正進入點。
程式記憶體 (三) • 0003H 這個位址為外部硬體中斷0(INT0)的進入點。就是說當89S51硬體中斷0發生時,程式計數器PC會被設為0003H;因此中斷0一但發生且被CPU認可時,它就會自動的跳到此一位址去執行所要做的中斷服務程式。
程式記憶體 (四) • 000BH 這個位址為計時/計數器0(TIMER0)溢位中斷的進入點。就是說當89S51的計時/計數器0產生溢位且被認可時,程式計數器PC會被設為000BH,此時CPU會自動的跳到此一位址去執行所要做的中斷服務程式。
程式記憶體 (五) • 0013H 這個位址為外部硬體中斷1(INT1)的進入點。就是說當89S51硬體中斷1發生時,程式計數器PC會被設為0003H;因此中斷0一但發生且被CPU認可時,它就會自動的跳到此一位址去執行所要做的中斷服務程式。
程式記憶體 (五) • 001BH 這個位址為計時/計數器1(TIMER1)溢位中斷的進入點。就是說當89S51的計時/計數器1產生溢位且被認可時,程式計數器PC會被設為000BH,此時CPU會自動的跳到此一位址去執行所要做的中斷服務程式。
程式記憶體 (六) • 0023H 這個位址為串列通訊中斷的進入點。就是說當AT89S51串列埠接收或傳送資料完畢時產生中斷請求且被CPU認可時,程式計數器PC會被設為0023H;因此CPU會自動的跳到此一位址去執行所要做的中斷服務程式。
資料記憶體 00FFH 80個位址,可自由使用區域,一般可規劃為一般資料存放區及堆疊使用 特殊暫存器 (SFR) 0080H 007FH 80個位址,可自由使用區域,一般可規劃為一般資料存放區及堆疊使用 一般資料區 0030H 002FH 16個位址共128個位元,存取時可以Byte為單位亦可以位元為單位 可位元定址區 0020H 001FH 32個位址,8個位址為一個單位,其編號皆為R0~R7,可由PSW選擇使用 四個暫存器庫 0000H
資料記憶體-四個暫存器庫 0000H~001FH共32個位址,可平均分為四組,每一組皆以R0~R7來代表8個位址,使用時每一時間只能用其中一組,至於使用哪一組,則可用PWS中的RS1、RS0來設定。
資料記憶體-可位元定址區 • 存取時有兩種方式: • 20H.1:代表0020H的第1位元 • 01H:同(1)之存取位元 • 註:為了避免和一般8位元資料存取時混淆,故在指令集中有專為位元存取設計之指令。
Carry Flag 進位旗標 Flag 一般旗標 Overflow 溢位旗標 Parity 同位旗號 Auxiliary Carry flag 輔助進(借)位旗標 暫存器庫選擇位元 PWS-程式狀態字組 主要是用來記錄CPU在執行「數學」或是「邏輯運算」之後所產生的各種狀態以及暫存器庫的選擇。
結論 單晶片程式的設計,說穿了就是對單晶片內的記憶體資料做存取及運算,因此若想要寫好單晶片程式,就必需要對其記憶體的組成有基本的認知。
AT89S51的組合語言指令 共有111個指令 ,可分為下列五大類: • 算數運算指令 • 邏輯運算指令 • 資料搬移指令 • 位元操作指令 • 跳躍指令
可代表將來此行程式燒錄在ROM中的位址。這個部份在撰寫程式時只需給它一個名稱(第一個字不可為數字或是使用保留字元),將來組譯器在組譯時就會自動幫我們算出真的的位址值。如此做法可以省去我們在做程式開發時的麻煩。(註:這個欄位為非必要性欄位,可有可無) 為AT89C2051之指令 為指令執行時之相關資料。依指令的特性,這個欄位中運算元的個數可能是1個、2個或是沒有;這裏所放的資料可能是數值、暫存器位址或是標記名稱。 用來說明此一敘述之功能,增加程式之可讀性。(此註解在做組譯時會略過) AT89S51的組合語言語法 每一列指令可分為下列四個欄位:
目的,來源 AT89S51的程式範例 START: MOV R0,#7 ;令R0=7 本行指令執行完後,R0=7
AT89S51的定址法 所謂的定址法指的是「CPU存取資料的方法」;可分為下列五種--- • 立即定址法 • 直接定址法 • 間接定址法 • 暫存器定址法 • 索引定址法
00H 04H 00H 03H 00H 02H 00H 01H 00H 00H 立即定址法 運算元中的一個就是常數(即是將數值資料直接存入暫存器中)。 MOV R3 , #7 找到資料記憶體位址 07H 將立即資料放入指定位址
00H 24H 1FH 23H A0H 22H 06H 21H 04H 20H 直接定址法 就是將某個位址的內含值傳到另一個暫存器中。 MOV 20H , 22H 找到資料來源位址 找到目的位址 04H 將資料複製到目的位址
00H E0H .. 1FH 04H 00H 03H 00H 02H 00H 01H 00H 00H 間接定址法 就是利用R0、R1當成指標,而指標的內含值即記憶體位址。這種方式可以取得所有暫存器及程式記憶體或資料記憶中任一個位址的資料。 1FH MOV R0 , #4 MOV A , @R0 從R0的內含值找到04H的位址,再將04H位址的內容複製到A 先將04H資料存入R0 @代表間接定址,即R0的值代表的是要定址的位置 04H
00H 04H 1FH 03H A0H 02H 06H 01H 04H 00H 暫存器定址法 R0~R7和累積器A間的資料存取 。 MOV R0 , R2 找到資料來源位址 找到目的位址 將資料複製到目的位址 A0H
索引定址法 利用DPTR暫存器為基底值,然後將這個基底值加上累積器的值,得到一個位址值然後以此位址值取出其中的內容,這個方式主要是用於查表。
AT89S51的程式結構 ;===以下是變數宣告區=== I EQU 00H ;===以下是程式區=== ORG 0 START: • MOV R0,#0 • DJNZ R0,$ • MOV SP,#60H • .. AGAIN: 主程式 • AJMP AGAIN • END
ORG 0 START: MOVR0, #0H DJNZR0,$ MOVSP,#60H AGAIN: MOVP1, #0 MOVP1, #0FFH AJMPAGAIN AT89S51的第一個程式
ORG 0 START: MOVR0, #0H DJNZR0,$ MOVSP,#60H AGAIN: MOVP1, #0 ACALL DELAY MOVP1, #0FFH ACALL DELAY AJMPAGAIN DELAY: MOV R0,#0 D1: MOV R1,#0 DJNZ R1,$ DJNZ R0,D1 RET END AT89S51的第一個程式改良