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