版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、單片機(jī)原理與技術(shù) 計(jì)算機(jī)基礎(chǔ)1.1 計(jì)算機(jī)軟件1.2 80C51體系結(jié)構(gòu)概要1.3 第1章概 述1.1 計(jì)算機(jī)基礎(chǔ) 1.1.1 計(jì)算機(jī)的基本結(jié)構(gòu) 圖1-1 計(jì)算機(jī)的基本結(jié)構(gòu)圖 1.1.2 常用的名詞術(shù)語和二進(jìn)編碼 1位、字節(jié)、字及字長 位(bit)。“位”指一個(gè)二進(jìn)制位。它是計(jì)算機(jī)中信息存儲的最小單位。 字節(jié)(Byte)?!白止?jié)”指相鄰的8個(gè)二進(jìn)制位。1024個(gè)字節(jié)構(gòu)成1個(gè)千字節(jié),用KB表示。1024KB構(gòu)成1個(gè)兆字節(jié),用MB表示。1024MB構(gòu)成1個(gè)千兆字節(jié),用GB表示。B、KB、MB、GB都是計(jì)算機(jī)存儲器容量的單位。 字(Word)和字長。“字”是計(jì)算機(jī)內(nèi)部進(jìn)行數(shù)據(jù)傳遞處理的基本單位。通常
2、它與計(jì)算機(jī)內(nèi)部的寄存器、運(yùn)算裝置、總線寬度相一致。 2數(shù)字編碼 為便于機(jī)器識別和轉(zhuǎn)換,計(jì)算機(jī)中的十進(jìn)制數(shù)的每一位用二進(jìn)制編碼表示,這就是所謂的十進(jìn)制數(shù)的二進(jìn)制編碼,簡稱二十進(jìn)制編碼(BCD碼)。 3字符編碼 4漢字編碼(1)外部碼(2)內(nèi)部碼(3)交換碼(4)輸出碼 1.1.3 指令程序和指令系統(tǒng) 就拿兩個(gè)數(shù)相加這一最簡單的運(yùn)算來說,就需要以下幾步(假定要運(yùn)算的數(shù)已在存儲器中)。 第一步:把第一個(gè)數(shù)從它所在的存儲單元(location)中取出來,送至運(yùn)算器; 第二步:把第二個(gè)數(shù)從它所在的存儲單元中取出來,送至運(yùn)算器; 第三步:相加; 第四步:把相加的結(jié)果,送至存儲器中指定的單元。 指令通常分成
3、操作碼(opcode,即operation code)和操作數(shù)(operand)兩大部分。操作碼表示計(jì)算機(jī)執(zhí)行什么操作;操作數(shù)是此指令要操作的對象。指令中的操作數(shù)部分常規(guī)定參加操作的數(shù)的本身或操作數(shù)所在的地址。 1.1.4 初級計(jì)算機(jī) 1CPU的結(jié)構(gòu) 圖1-3 微型機(jī)結(jié)構(gòu)圖 圖1-4 一個(gè)模型機(jī)的CPU結(jié)構(gòu) 圖1-5 模型機(jī)的存儲器結(jié)構(gòu)圖 圖1-6 存儲器讀操作示意圖 圖1-7 存儲器寫操作示意圖 1.1.5 簡單程序舉例 若要求機(jī)器把兩個(gè)數(shù)7和10相加。在編程序時(shí)首先要查一下機(jī)器的指令系統(tǒng),看機(jī)器能用什么指令完成這樣的操作。查到可用表1-1所示的3條指令完成兩數(shù)相加的操作。 名 稱助 記 符
4、操 作 碼說 明立即數(shù)取入累加器MOV AL,n10110000 B0 n n這是一條兩字節(jié)指令,把指令第二字節(jié)的立即數(shù)n送累加器AL加立即數(shù)ADD AL,n00000100 04 n n這是一條兩字節(jié)指令,累加器AL中的內(nèi)容與指令第二字節(jié)的立即數(shù)相加,結(jié)果在AL中停 機(jī) HLT 11110100 F4停止操作表1-1完成兩數(shù)相加的指令 第一條指令1011 0000 (MOV AL,n) 0000 0111 (n=7)第二條指令0000 0100 (ADD AL,n) 0000 1010 (n=10)第三條指令1111 0100 (HLT)總共是3條指令5個(gè)字節(jié)。 圖1-8 指令的存放 圖1-
5、9 取第一條指令的操作示意圖 圖1-10 取立即數(shù)的操作示意圖 圖1-11 取第二條指令的操作示意圖 1.1.6 尋址方式 1立即尋址(immediate addressing) 上例中的操作數(shù)就包含在指令中,這種規(guī)定操作數(shù)的方式,稱為立即尋址。指令中的操作數(shù)稱為立即數(shù)。 2寄存器尋址(register addressing) 若操作數(shù)在某一寄存器中,這種尋址方 式稱為寄存器尋址。例如指令 MOV AL,BL 圖1-12 執(zhí)行第二條指令的操作示意圖 3直接尋址(direct addressing) 圖1-13 直接尋址方式示意圖 4寄存器間接尋址(register indirect addre
6、ssing) 圖1-14 寄存器間接尋址方式示意圖 圖1-15 寄存器間接尋址加法指令示意圖 指令名稱尋 址 方 式助 記 符操 作 碼說 明取數(shù)指令立即尋址MOV AL,n B0 n把指令第二字節(jié)的立即數(shù)送累加器(AL)中;nAL立即尋址MOV BL,nB3 n把指令第二字節(jié)的立即數(shù)送至寄存器(BL)中;nBL表1-24 種尋址方式及相應(yīng)的指令 指令名稱尋 址 方 式助 記 符操 作 碼說 明取數(shù)指今寄存器尋址MOV AL,BL8A C3把BL中的內(nèi)容送至AL中;BLALMOV BL,AL8A D8把AL中的內(nèi)容送至BL中,ALBL寄存器間接尋址MOV AL,BL8A 07以BL中的內(nèi)容為操
7、作數(shù)的地址,操作數(shù)送至AL中;BLAL直接尋址MOV AL,nA0 n指令中的第二字節(jié)為操作數(shù)的地址,操作數(shù)送至AL中;nAL續(xù)表 指令名稱尋 址 方 式助 記 符操 作 碼說 明存數(shù)指令直接尋址MOV n,ALA2 n指令中的第二字節(jié)為地址,把AL中的內(nèi)容存入此地址單元;ALn寄存器間接尋址MOV BL,AL88 07以BL中的內(nèi)容作為地址,把AL中的內(nèi)容存入此地址單元;ALBL續(xù)表 指令名稱尋 址 方 式助 記 符操 作 碼說 明加法指令立即尋址ADD AL,n 04 nn為立即數(shù);AL+nAL寄存器尋址ADD AL,BL02 C3BL中的內(nèi)容為操作數(shù);AL+BLAL寄存器間接尋址ADD
8、AL,BL02 07以BL中的內(nèi)容為操作數(shù)的地址;AL+BLAL續(xù)表 圖1-16 程序在存儲器中存放示意圖 圖1-17 取出第一條指令后CPU的狀態(tài)圖 圖1-18 直接尋址方式操作示意圖 圖1-19 取操作數(shù)過程示意圖 圖1-20 計(jì)算機(jī)的基本硬件結(jié)構(gòu) 圖1-21 三總線的微型機(jī)結(jié)構(gòu) 圖1-22 典型的三總線結(jié)構(gòu)1.2 計(jì)算機(jī)軟件 1.2.1 系統(tǒng)軟件 以上這些都是由機(jī)器的設(shè)計(jì)者提供的,為了使用和管理計(jì)算機(jī)的軟件,統(tǒng)稱為系統(tǒng)軟件。 系統(tǒng)軟件包括: 各種語言和它們的匯編或解釋、編譯程序; 機(jī)器的監(jiān)控管理程序(moniter)、調(diào)試程序(debug)、故障檢查和診斷程序; 程序庫(為了擴(kuò)大計(jì)算機(jī)的
9、功能,便于用戶使用,機(jī)器中設(shè)置了各種標(biāo)準(zhǔn)子程序,這些子程序的總和就形成了程序庫); 操作系統(tǒng)。 1.2.2 應(yīng)用軟件 用戶利用計(jì)算機(jī)和它所提供的各種系統(tǒng)軟件,來編制解決用戶各種實(shí)際問題的程序,稱之為應(yīng)用軟件。應(yīng)用軟件也可以逐步標(biāo)準(zhǔn)化、模塊化,逐步形成解決各種典型問題的應(yīng)用程序的組合,將其稱為軟件包(package)。 1.2.3 支撐(或稱為支持)軟件1.3 80C51體系結(jié)構(gòu)概要 1.3.1 80C51簡介 表1-3 不同ROM的80C51系列編號 圖1-23 8051核的方框圖 圖1-24 8051的體系結(jié)構(gòu)圖 1.3.2 80C51單片機(jī)的CPU結(jié)構(gòu) 圖1-25 80C51單片機(jī)功能方框
10、圖 圖1-26 80C51的CPU (1)運(yùn)算電路(2)控制電路(3)CPU的通用寄存器(4)CPU的系統(tǒng)寄存器 圖1-27 CPU的通用寄存器體 位名分類位7位6位5位4位3位2位1位0狀態(tài)位CYACOVP控制位RS1RS0保留位F0-表1-4PSW的位分配第2章 存儲器 存儲器2.180C51中的存儲器組織的特點(diǎn)2.2 程序存儲器2.3 數(shù)據(jù)存儲器2.42.1 存 儲 器 2.1.1 讀寫存儲器(RAM) 1SRAM基本存儲電路 圖2-1 SRAM基本存儲電路 2DRAM基本存儲電路 圖2-2 DRAM的單管存儲電路 2.1.2 只讀存儲器(ROM) 1掩膜只讀存儲器 圖2-3 掩膜ROM
11、舉例 位 字位1位2位3位4字10(1)1(0)1(0)0(1)字20(1)1(0)0(1)1(0)字31(0)0(1)1(0)0(1)字40(1)0(1)0(1)0(1)表2-1ROM的內(nèi)容 2可擦除的可編程序的只讀存儲器(EPROM) 圖2-4 EPROM的基本存儲電路 3新一代電可擦除的可編程的只讀存儲器FLASH存儲器 圖2-5 閃存的典型結(jié)構(gòu) 圖2-6 FLASH 擦除與編程說明示意圖2.2 80C51中的存儲器組織的特點(diǎn) 8051系列存儲器組織的特點(diǎn)是程序存儲器與數(shù)據(jù)存儲器在邏輯上分離。 程序存儲器與數(shù)據(jù)存儲器截然分開,分為兩個(gè)不同的地址空間,并且配備各自獨(dú)立的尋址機(jī)構(gòu)、尋址方式與
12、操作指令。這種體系結(jié)構(gòu)是由Harward Aiken于1944年提出的,稱為“Harward(哈佛)體系結(jié)構(gòu)”。8051系列采用的就是這種哈佛體系結(jié)構(gòu)。 圖2-7 80C51存儲器結(jié)構(gòu) 設(shè) 備ROM/EPROM(字節(jié))寄存器RAM(字節(jié))80C51FA無ROM25683C51FA8K25687C51FA8K EPROM25683C51FB16K ROM25687C51FB16K EPROM25683C51FC32K ROM25687C51FC32K EPROM256表2-2 8051系列的片內(nèi)ROM及寄存器2.3 程序存儲器 圖2-8 8051系列的程序存儲器 圖2-9 從外部程序存儲器執(zhí)行2
13、.4 數(shù)據(jù)存儲器 2.4.1 外部數(shù)據(jù)存儲器空間 圖2-10 訪問外部數(shù)據(jù)存儲器 2.4.2 內(nèi)部數(shù)據(jù)存儲器 圖2-11 內(nèi)部數(shù)據(jù)存儲器 圖2-12 內(nèi)部RAM的低128B 1寄存器體區(qū)域 2可位尋址區(qū)域 3普通RAM區(qū) 圖2-13 寄存器體 圖2-14 可位尋址區(qū)域的位地址 圖2-15 內(nèi)部RAM的復(fù)合功能 圖2-16 內(nèi)部RAM的高128B 2.4.3 堆棧 1什么是堆棧 堆棧是在片內(nèi)RAM中開辟的一塊具有特殊用途的讀寫存儲器區(qū)域。 2為什么要用堆棧 圖2-17 調(diào)用子程序示意圖 3堆棧的操作 硬件自動(dòng)操作。 用戶用堆棧操作指令,即用入棧指令PUSH把數(shù)據(jù)推入堆棧和用出棧指令POP從堆棧彈
14、出數(shù)據(jù)。 圖2-18 用堆棧保護(hù)與恢復(fù)斷點(diǎn) 4注意事項(xiàng) 2.4.4 特殊功能寄存器空間 圖2-19 SFR空間 表2-3SFR的符號、名稱和地址符 號名 稱地 址 *ACC累加器 0E0H *BB寄存器 0F0H *PSW程序狀態(tài)字 0D0H SP堆棧指針 81H續(xù)表符 號名 稱地 址 DPTR DPL DPH數(shù)據(jù)指針寄存器 2B低字節(jié)高字節(jié) 82H 83H *P0端口0 80H *P1端口1 90H *P2端口2 0A0H *P3端口3 0B0H續(xù)表符 號名 稱地 址 *IP中斷優(yōu)先權(quán)控制 0B8H *IE中斷啟用控制 0A8H TMOD定時(shí)器/計(jì)數(shù)器方式控制 89H *TCON定時(shí)器/計(jì)數(shù)
15、器控制 88H *+T2CON定時(shí)器/計(jì)數(shù)器2控制 0C8H TH0定時(shí)器/計(jì)數(shù)器0高字節(jié) 8CH TL0定時(shí)器/計(jì)數(shù)器0低字節(jié) 8AH續(xù)表符 號名 稱地 址 TH1定時(shí)器/計(jì)數(shù)器1高字節(jié) 8DH TL1定時(shí)器/計(jì)數(shù)器1低字節(jié) 8BH +TH2定時(shí)器/計(jì)數(shù)器2高字節(jié) 0CDH +TL2定時(shí)器/計(jì)數(shù)器2低字節(jié) 0CCH +RCAP2H定時(shí)器/計(jì)數(shù)器2捕獲寄存器高字節(jié) 0CBH *SCON串行控制 98H SBUF串行數(shù)據(jù)緩沖器 99H PCON電源控制 87H 表2-4復(fù)位后SFR的內(nèi)容寄 存 器以二進(jìn)制表示的值 *ACC 00000000 *B 00000000 *PSW 00000000續(xù)表
16、寄 存 器以二進(jìn)制表示的值 SP 00000111 DPTR DPL DPH 00000000 00000000 *P0 11111111 *P1 11111111 *P2 11111111 *P3 11111111 寄 存 器以二進(jìn)制表示的值 *IP 8051xxx00000 8052xx000000 *IE 80510 xx00000 80520 x000000 TMOD 00000000 *TCON 00000000 *+T2CON 00000000 TH0 00000000 TL0 00000000續(xù)表 續(xù)表寄 存 器以二進(jìn)制表示的值 TH1 00000000 TL1 00000000
17、 +TH2 00000000 +TL2 00000000 +RCAP2H 00000000 *SCON 00000000 SBUF 不確定 PCON HMOS0 xxxxxxx CHMOS0 xxx0000 分 類用 途寄存器符號寄存器地址復(fù) 位 值與CPU內(nèi)核相關(guān)CPU內(nèi)核ACCE0H00HBF0H00HDPH83H00HDPL82H00HSP81H07H與功能部件或外圍模塊相關(guān)中斷系統(tǒng)IEA8H0000000BIPB8H000000B并行端口P080HFFHP190HFFHP2A0HFFHP3B0HFFH表2-6SFR的功能分類 分 類用 途寄存器符號寄存器地址復(fù) 位 值與功能部件或外圍模
18、塊相關(guān)串口PCON87H00000BSBUF99HHSCON98H00H定時(shí)器0和1TCON88H00HTH08CH00HTL08AH00HTH18DH00HTL18BH00HTMOD89H00H續(xù)表第3章MCS-51指令系統(tǒng) 數(shù)據(jù)傳送3.3 尋址方式3.2 程序狀態(tài)字3.1 算術(shù)指令3.4 跳轉(zhuǎn)指令3.7 MCS-51指令集小結(jié) 3.8 布爾指令3.6 邏輯指令3.53.1 程序狀態(tài)字 程序狀態(tài)字(program status word,PSW)包含反映當(dāng)前CPU狀態(tài)的若干狀態(tài)位。 圖3-1 在MCS-51設(shè)備中的PSW(程序狀態(tài)字)3.2 尋 址 方 式 3.2.1 立即尋址 某些指令用包
19、含在指令中的數(shù)據(jù)作為源操作數(shù),這些操作數(shù)稱為立即操作數(shù)(簡稱立即數(shù))。常數(shù)的值能跟在程序存儲器的操作碼后,例如: MOVA,#100指令:MOVDPTR,#DATA16 3.2.2 寄存器尋址 指令:MOVA,Rn 圖3-2 立即尋址示意圖 圖3-3 寄存器尋址示意圖 3.2.3 直接尋址 圖3-4 直接尋址示意圖 3.2.4 隱含尋址 3.2.5 間接尋址 在間接尋址中,指令規(guī)定包含操作數(shù)地址的寄存器。內(nèi)部RAM與外部RAM都能間接尋址。 對于8位地址,地址寄存器可以是所選擇的寄存器體的R0或R1或堆棧指針。對于16位地址,其地址寄存器只能是“數(shù)據(jù)指針”寄存器DPTR。例如指令: MOVA,
20、Ri 圖3-5 間接尋址示意圖 3.2.6 變址尋址 只有程序存儲器能用變址尋址方式訪問且只能用于讀。此尋址方式用于在程序存儲器中查找表項(xiàng)。一16位基寄存器(DPTR或程序計(jì)數(shù)器PC)指向表的基地址,而累加器作為表的入口偏移。在程序存儲器中的表項(xiàng)的地址由累加器數(shù)據(jù)加至基指針形成。 這種尋址方式的指令只有兩條: MOVC A,A+PC MOVC A,A+DPTR 變址尋址示意圖如圖3-6所示。 圖3-6 變址尋址示意圖表3-1尋址方式小結(jié)分 類尋 址 方 式采用的寄存器變量尋 址 空 間與字節(jié)數(shù)據(jù)有關(guān)立即尋址程序存儲器(ROM)的全部空間(最大64KB)直接尋址片內(nèi)128 RAM空間和SFR空間
21、隱含尋址A、AB、DPTR4個(gè)SFR的字節(jié)地址:80H、F0H、82H、83H 分 類尋 址 方 式采用的寄存器變量尋 址 空 間與字節(jié)數(shù)據(jù)有關(guān)寄存器尋址R7R0片內(nèi)RAM低32B空間(00H31H)間接尋址R1、R0片內(nèi)RAM的128B空間(8052系列可為256B)R1、R0限于片外RAM的任何一項(xiàng)(256B)空間DPTR片外RAM的全部空間(最大64KB)變址尋址A+DPTR、A+PC程序存儲器(ROM)的全部空間(最大84KB) 續(xù)表分 類尋 址 方 式采用的寄存器變量尋 址 空 間與跳轉(zhuǎn)地址有關(guān)相對跳轉(zhuǎn)尋址PC+rel限于程序存儲器(ROM)的256B范圍絕對跳轉(zhuǎn)尋址程序存儲器(RO
22、M)的全部空間(最大64KB)變址跳轉(zhuǎn)尋址A+DPTR程序存儲器(ROM)的全部空間(最大64KB)與位數(shù)據(jù)有關(guān)隱含位尋址CCY(位地址:D7H)直接位尋址片內(nèi)RAM區(qū)內(nèi)的20H2FH字節(jié)和SFR區(qū)內(nèi)的實(shí)有的83個(gè)可尋址位3.3 數(shù) 據(jù) 傳 送 3.3.1 指令中的常用符號 Rn- 當(dāng)前選擇的寄存器體的寄存器R7R0。 Direct- 8位內(nèi)部的數(shù)器單元的地址。只能是一內(nèi)部RAM的數(shù)據(jù)單元(0127)或一SFR(即I/O端口、控制寄存器、狀態(tài)寄存器等(128255)。 Ri - 通過寄存器R1或R0間接尋址的8位內(nèi)部RAM單元(0255)。 #data- 包含在指令中的8位常數(shù)。 #data1
23、6- 包含在指令中的16位常數(shù)。 addr16- 16位目的地址。由LCALL與LJMP使用。能分支至64KB程序存儲器地址空間內(nèi)的任一處。 addr11- 11位目的地址。由LCALL與LJMP使用。分支在程序存儲器的同一2KB頁內(nèi)作為下一條指令的第一字節(jié)。 rel - 帶符號的8位偏移字節(jié)。由SJMP與所有條件跳轉(zhuǎn)指令使用。范圍是相對于下一條指令的第一個(gè)字節(jié)的128+127。 bit- 在內(nèi)部RAM或特殊功能寄存器中的直接地址位。 - 表示數(shù)據(jù)傳送方向。 - 代表算術(shù)“加法”運(yùn)算符。 - 代表算術(shù)“減法”運(yùn)算符。 - 代表算術(shù)“乘法”運(yùn)算符。 - 代表算術(shù)“除法”運(yùn)算符。 - 代表邏輯“與
24、”運(yùn)算符。 - 代表邏輯“或”運(yùn)算符。 - 代表邏輯“異或”運(yùn)算符。 - 出現(xiàn)在位地址前面時(shí),表示將對應(yīng)位操作數(shù)取反。 - 出現(xiàn)在特定寄存器前面時(shí),表示被用作間接尋址寄存器。 #- 用在指令中的操作數(shù)前面時(shí),表示該操作數(shù)為一個(gè)立即數(shù),即常數(shù)。 3.3.2 內(nèi)部RAM表3-2訪問內(nèi)部RAM的MCS-51數(shù)據(jù)傳送指令清單助 記 符操 作尋 址 方 式執(zhí)行時(shí)間(s)直接間接寄存器立即MOV A,A=1MOV ,A=A1MOV ,=2續(xù)表助 記 符操 作尋 址 方 式執(zhí)行時(shí)間(s)直接間接寄存器立即MOV DPTR,#data16DPTR=16位立即常數(shù)2PUSH INC SP:MOV“esp”,2續(xù)
25、表助 記 符操 作尋 址 方 式執(zhí)行時(shí)間(s)直接間接寄存器立即POP MOV ,“esp”:DEC SP2 助 記 符操 作尋 址 方 式執(zhí)行時(shí)間(s)直接間接寄存器立即XCH A,累加器與交換數(shù)據(jù)1XCHD A,Ri累加器與Ri交換低半字節(jié)1續(xù)表 圖3-7 把BCD數(shù)向右移兩個(gè)數(shù)字 圖3-8 向右移BCD數(shù)一個(gè)數(shù)字 3.3.3 外部RAM 地 址 寬 度助 記 符操 作執(zhí)行時(shí)間(s)8位MOVX A,Ri讀外部RAMRi28位MOVX Ri,A寫外部RAMRi216位MOVX A,DPTR讀外部RAMDPTR216位MOVX DPTR,A寫外部RAMDPTR2表3-3 訪問外部RAM空間的
26、MCS-51數(shù)據(jù)傳送指令清單 3.3.4 查找表 助 記 符操 作執(zhí)行時(shí)間(s)MOVC A,A+DPTR在(A + DPTR)讀程序存儲器2MOVC A,A+PC在(A + PC)讀程序存儲器2表3-4MCS-51讀查找表指令3.4 算 術(shù) 指 令 表3-5 元MCS-51算術(shù)指今清單 助 記 符操 作尋址方式執(zhí)行時(shí)間(s)直接間接寄存器立即數(shù)ADD A,字節(jié)A=A + 字節(jié)1ADDC A,A=A + + C1續(xù)表助 記 符操 作尋址方式執(zhí)行時(shí)間(s)直接間接寄存器立即數(shù)SUBB A,A=A C1INC AA=A + 1只適用于累加器1INC = + 11續(xù)表助 記 符操 作尋址方式執(zhí)行時(shí)間
27、(s)直接間接寄存器立即數(shù)INC DPTRDPTR=DPTR + 1只適用于DPTR2DEC AA=A 1只適用于累加器1DEC 11續(xù)表助 記 符操 作尋址方式執(zhí)行時(shí)間(s)直接間接寄存器立即數(shù)MUL ABB:A=BA只適用于累加器與B4DIV ABA=IntA/BB=ModA/B只適用于累加器與B4DA A十進(jìn)制調(diào)整只適用于累加器1 若在50H、51H與60H、61H存放著兩個(gè)16位數(shù)(地址高的為高字節(jié)),求它們的和放至在自70H單元開始的存儲單元中。 MOVA,50H;取第一個(gè)數(shù)的低字節(jié)至累加器AADDA,60H;與第二個(gè)數(shù)的低字節(jié)相加,若有進(jìn)位保留在標(biāo)志C中MOV70H,A;把相加的和
28、送至RAMMOVA,51H;取第一個(gè)數(shù)的第二個(gè)字節(jié)ADDCA,61H;與第二個(gè)數(shù)的第二個(gè)字節(jié)以及進(jìn)位位一起相加MOV71H,A;和寫至RAMMOVA,#00H;清零累加器AADDCA,#00H;兩位16位數(shù)相加,可能產(chǎn)生進(jìn)位,與進(jìn)位位相加MOV72H,A;存進(jìn)位位3.5 邏 輯 指 令 表3-6MCS-51邏輯指令清單助 記 符操 作尋 址 方 式執(zhí)行時(shí)間(s)直接間接寄存器立即ANL A,A=A“與”1ANL ,A=“與”A1ANL ,#DATA=“與”#DATA2 續(xù)表助 記 符操 作尋 址 方 式執(zhí)行時(shí)間(s)直接間接寄存器立即ORL A, A=A“或”1ORL ,A=“或”A1ORL
29、,#DATA=“或”#DATA2XRL A, A=A“異或”1續(xù)表助 記 符操 作尋 址 方 式執(zhí)行時(shí)間(s)直接間接寄存器立即XRL ,A=“異或”A1XRL ,#DATA=“異或”#DATA2續(xù)表助 記 符操 作尋 址 方 式執(zhí)行時(shí)間(s)直接間接寄存器立即CRL AA=0只用于累加器1CPL AA=“非”A只用于累加器1RL A累加器左旋轉(zhuǎn)1位只用于累加器1RLC A帶進(jìn)位位左旋轉(zhuǎn)只用于累加器1RR A累加器右旋轉(zhuǎn)1位只用于累加器1RRC A帶進(jìn)位位右旋轉(zhuǎn)只用于累加器1SWAP A在A中半字節(jié)交換只用于累加器1 ANL A,指令能取以下形式的任一種:ANL A,7FH(直接尋址)ANL
30、A,R1(間接尋址)ANL A,R6(寄存器尋址)ANL A,#53H(立即常數(shù)) 1邏輯“與”指令 2邏輯“或”指令 MOV A,51H;把第二個(gè)單元的00000111取入累加器ASWAP A;使A中的高4位與低4位交換,變?yōu)?1110000ORL A,50H;與50H單元的00000100相“或”,變?yōu)?1110100MOV 60H,A;結(jié)果存至60H單元 3邏輯“異或”指令4旋轉(zhuǎn)指令(RL A、RLC A等) 圖3-9 旋轉(zhuǎn)指令 5SWAP A指令 MOV B,#10 DIV AB SWAP A ADD A,B3.6 布 爾 指 令 助 記 符操 作執(zhí)行時(shí)間(s)ANL C,bitC=C
31、“與”bit2ANL C,/bitC=C“與”“非”bit2OR C,bitC=C“或”bit2OR C,/bitC=C“或”“非”bit2MOV C,bit C=bit1MOV bit,C Bit=C1CLR CC=01CLR bitBit=01表3-7MCS-51布爾指令清單續(xù)表助 記 符操 作執(zhí)行時(shí)間(s)SETB CC=11SETB bitBit=11CPL CC=“非”C1CPL bitBit=“非”bit1JC rel若C=1跳轉(zhuǎn)2JNC rel若C=0跳轉(zhuǎn)2JB bit,rel若bit=1跳轉(zhuǎn)2JNB bit,rel若bit=0跳轉(zhuǎn)2JBC bit,rel若bit=1跳轉(zhuǎn),清除b
32、it2 隱含尋址方式直接尋址方式CLRC CLR CYSETB C SETB CYCPLC CPL CYJC rel JB CY,relJNCrel JNBCY,rel3.7 跳 轉(zhuǎn) 指 令 助 記 符操 作執(zhí)行時(shí)間(s)JMP addr跳轉(zhuǎn)至addr2JMP A+DPTR跳轉(zhuǎn)至A+DPTR2CALL addr在addr調(diào)用子例程2RET從子例程返回2RETI從中斷返回2NOP無操作1表3-8MCS-51設(shè)備中的無條件跳轉(zhuǎn)指令 1相對短跳轉(zhuǎn)SJMP SJMP是一相對跳轉(zhuǎn)指令,指令為2字節(jié),指令第二字節(jié)是一8位符號數(shù)的相對于指令指針的偏移量。 2絕對近跳轉(zhuǎn)AJMP AJMP指令是2字節(jié)長,由操作
33、碼,在它的高3位中包全地址的高3位,a10a8和指令碼中的另一地址字節(jié)a7a0形成了11位目標(biāo)地址。當(dāng)指令執(zhí)行時(shí),這11位簡單地替換在PC中的低11位,高5位保持。 因此,目的地址在AJMP指令的下一條指令的相同的2KB塊內(nèi)。此指令既繼承了SJMP指令編碼短的優(yōu)點(diǎn),又?jǐn)U展了跳轉(zhuǎn)的范圍。 3絕對遠(yuǎn)跳轉(zhuǎn)LJMP LJMP指令是一條3字節(jié)指令,指令的第2、第3字節(jié)形成了16位目的地址。把這16位地址送至PC,程序能跳轉(zhuǎn)至64KB程序存儲器空間的任一處。 4絕對變址跳轉(zhuǎn) JMP A + DPTR指令,采用變址尋址方式,支持情況(case)跳轉(zhuǎn),目的地址在執(zhí)行時(shí)計(jì)算,用DPTR 16位寄存器與累加器之和
34、作為目的地址。 3.7.2 子程序調(diào)用與返回指令 1近調(diào)用ACALL PC PC + 2, SP SP + 1,(SP) PCL, SP SP + 1,(SP) PCH, PC10 0 addr11 2遠(yuǎn)調(diào)用LCALL PC PC + 3, SP SP + 1,(SP) PCL, SP SP + 1,(SP) PCH, PC addr16 3返回指令 PCH (SP),SP SP - 1, PCL (SP),SP SP - 1 3.7.3 條件跳轉(zhuǎn)指令 助 記 符操 作尋 址 方 式執(zhí)行時(shí)間(s)直接間接寄存器立即JZ rel若A=0跳轉(zhuǎn)只適用于累加器2JNZ rel若A 0跳轉(zhuǎn)只適用于累加器
35、2表3-9 在MCS-51設(shè)備中的條件跳轉(zhuǎn)指令續(xù)表助 記 符操 作尋 址 方 式執(zhí)行時(shí)間(s)直接間接寄存器立即DJNE ,rel減量,若不為0跳轉(zhuǎn)2CJNE A,rel若A 跳轉(zhuǎn)2CJNE ,#data,rel若 #data跳轉(zhuǎn)2 1判0跳轉(zhuǎn) 指令JZ rel,判斷累加器A,若其內(nèi)容為0,則跳轉(zhuǎn)。指令JNZ rel,也判斷累加器A,若其內(nèi)容不為0,則跳轉(zhuǎn)。 2減1不為0跳轉(zhuǎn) DJNZ指令有兩種,一種為:DJNZ Rn,rel Rn Rn 1,若Rn 0,則PC PC + 2 + rel 這是寄存器尋址方式,先使寄存器減1,若其不等于0,則滿足條件,跳轉(zhuǎn)。 另一種指令為:DJNZ direct
36、,rel direct (direct) 1,若(direct) 0,則PC PC + 2 + rel MOVCOUNTER, #10LOOP:(開始循環(huán)) (終止循環(huán)) DJNZCOUNTER,LOOP(繼續(xù))3.8 MCS-51指令集小結(jié) 3.8.1 指令對標(biāo)志位的影響 指 令標(biāo) 志COVACADDADDCSUBBMUL0DIV0DA表3-10影響標(biāo)志設(shè)置的指令 續(xù)表指 令標(biāo) 志COVACRRCRLCSETB1CLR C0CPL CANL C,bit續(xù)表指 令標(biāo) 志COVACANL C,/bitORL C,bitORL C,/bitMOV C,bitCJNE 助 記 符描 述字 節(jié)振蕩器頻
37、率(MHz)算術(shù)運(yùn)算ADD A,Rn加寄存器至累加器112ADD A,direct加直接地址字節(jié)單元內(nèi)容至累加器212ADD A,Ri加間接尋址的RAM內(nèi)容至累加器112ADD A,#data加立即數(shù)至累加器212表3-11MCS-51指令集續(xù)表 助 記 符描 述字 節(jié)振蕩器頻率(MHz)ADDC A,Rn加寄存器至累加器,帶進(jìn)位位112ADDC A,direct加直接地址字節(jié)單元內(nèi)容至累加器,帶進(jìn)位212ADDC A,Ri加間接尋址的RAM內(nèi)容至累加器,帶進(jìn)位112ADDC A,#data加立即數(shù)至累加器,帶進(jìn)位212SEBB A,Rn從累加器減寄存器,帶借位112SUBB A,direct
38、從累加器減直接尋址字節(jié)單元內(nèi)容,帶借位212 助 記 符描 述字 節(jié)振蕩器頻率(MHz)SUBB A,Ri從累加器減間接尋址字節(jié)單元內(nèi)容,帶借位112SUBB A,#data從累加器減立即數(shù),帶借位212INC A增量累加器內(nèi)容112INC Rn增量寄存器中的內(nèi)容112INC direct增量直接尋址的內(nèi)存單元內(nèi)容212INC Ri增量間接尋址的內(nèi)存單元內(nèi)容112DEC A減量累加器內(nèi)容112DEC Rn減量寄存器中的內(nèi)容112DEC direct減量直接尋址的內(nèi)存單元內(nèi)容212續(xù)表續(xù)表助 記 符描 述字 節(jié)振蕩器頻率(MHz)DEC Ri減量間接尋址的內(nèi)存單元內(nèi)容112INC DPTR增量數(shù)
39、據(jù)指針尋址的內(nèi)存單元內(nèi)容124MUL AB乘A與B148DIV ABA被B除148DA A對累加器進(jìn)行十進(jìn)制調(diào)整112續(xù)表助 記 符描 述字 節(jié)振蕩器頻率(MHz)邏輯運(yùn)算ANL A,Rn累加器與寄存器做邏輯“與”運(yùn)算112ANL A,direct累加器與直接尋址內(nèi)存單元內(nèi)容做邏輯“與”運(yùn)算212ANL A,Ri累加器與間接尋址內(nèi)存單元內(nèi)容做邏輯“與”運(yùn)算112ANL A,#data累加器與立即數(shù)做邏輯“與”運(yùn)算212ANL direct,A直接尋址內(nèi)存單元的內(nèi)容與累加器做邏輯“與”運(yùn)算212續(xù)表助 記 符描 述字 節(jié)振蕩器頻率(MHz)ANL direct,#data直接尋址內(nèi)存單元的內(nèi)容與
40、立即數(shù)做邏輯“與”運(yùn)算324ORL A,Rn累加器與寄存器做邏輯“或”運(yùn)算112ORL A,direct累加器與直接尋址內(nèi)存單元的內(nèi)容做邏輯“或”運(yùn)算212ORL A,Ri累加器與間接尋址內(nèi)存單元的內(nèi)容做邏輯“或”運(yùn)算112ORL A,#data累加器與立即數(shù)做邏輯“或”運(yùn)算212ORL direct,A直接尋址內(nèi)存單元的內(nèi)容與累加器做邏輯“或”運(yùn)算212續(xù)表助 記 符描 述字 節(jié)振蕩器頻率(MHz)ORL direct,#data直接尋址內(nèi)存單元的內(nèi)容與立即數(shù)做邏輯“或”運(yùn)算324XRL A,Rn累加器與寄存器做“異或”運(yùn)算112XRL A,direct累加器與直接尋址內(nèi)存單元的內(nèi)容做“異或
41、”運(yùn)算212XRL A,Ri累加器與間接尋址內(nèi)存單元的內(nèi)容做“異或”運(yùn)算112XRL A,#data累加器與立即數(shù)做“異或”運(yùn)算212續(xù)表助 記 符描 述字 節(jié)振蕩器頻率(MHz)XRL direct,A直接尋址內(nèi)存單元的內(nèi)容與累加器做“異或”運(yùn)算212XRL direct,#data直接尋址內(nèi)存單元的內(nèi)容與立即數(shù)做“異或”運(yùn)算324CLR A清除累加器112CPL A對累加器求補(bǔ)112RL A累加器左循環(huán)移位112續(xù)表助 記 符描 述字 節(jié)振蕩器頻率(MHz)RLC A累加器帶進(jìn)位位左循環(huán)移位112RR A累加器右循環(huán)移位112RRC A累加器帶進(jìn)位位右循環(huán)移位112SWAP A累加器內(nèi)半字
42、節(jié)對換112續(xù)表助 記 符描 述字 節(jié)振蕩器頻率(MHz)數(shù)據(jù)傳送MOV A,Rn寄存器傳送至累加器112MOV A,direct直接尋址內(nèi)存單元的內(nèi)容傳送至累加器212MOV A,Ri間接尋址內(nèi)存單元的內(nèi)容傳送至累加器112MOV A,#data立即數(shù)傳送至累加器212續(xù)表助 記 符描 述字 節(jié)振蕩器頻率(MHz)數(shù)據(jù)傳送MOV Rn,A累加器傳送至寄存器112MOV Rn,direct直接尋址內(nèi)存單元的內(nèi)容傳送至寄存器212MOV Rn,#data立即數(shù)傳送至寄存器212MOV direct,A累加器傳送至直接尋址內(nèi)存單元212MOV direct,Rn寄存器傳送至直接尋址內(nèi)存單元224續(xù)
43、表助 記 符描 述字 節(jié)振蕩器頻率(MHz)數(shù)據(jù)傳送MOV direct,direct直接尋址內(nèi)存單元的內(nèi)存?zhèn)魉椭林苯訉ぶ返膬?nèi)存單元324MOV direct,Ri間接尋址內(nèi)存單元的內(nèi)存?zhèn)魉椭林苯訉ぶ返膬?nèi)存單元224MOV direct,#data立即數(shù)傳送至直接尋址內(nèi)存單元324MOV Ri,A傳送累加器至間接尋址的內(nèi)存單元112續(xù)表 助 記 符描 述字 節(jié)振蕩器頻率(MHz)MOV Ri,direct傳送直接尋址內(nèi)存單元的內(nèi)容至間接尋址的內(nèi)存單元224MOV Ri,#data傳送立即數(shù)至間接尋址的內(nèi)存單元212MOV DPTR,#data16傳送16位立即數(shù)至數(shù)據(jù)指針324MOVC A,A
44、+DPTR 傳送相對于DPTR的代碼字節(jié)至累加器124MOVC A,A+PC傳送相對于PC的代碼字節(jié)至累加器124續(xù)表助 記 符描 述字 節(jié)振蕩器頻率(MHz)MOVX A,Ri傳送外部RAM(8位地址)的內(nèi)容至累加器124MOVX A,DPTR傳送外部RAM(16位地址)的內(nèi)容至累加器124MOVX Ri,A傳送累加器至外部RAM(8位地址)單元124MOVX DPTR,A傳送累加器至外部RAM(16位地址)單元124PUSH direct把直接尋址內(nèi)存單元的內(nèi)容推入堆棧224續(xù)表助 記 符描 述字 節(jié)振蕩器頻率(MHz)POP direct把堆棧的內(nèi)容彈出至直接尋址內(nèi)存單元224XCH A
45、,Rn累加器與寄存器內(nèi)容交換112XCH A,direct累加器與直接尋址內(nèi)存單元的內(nèi)容交換212XCH A,Ri累加器與間接尋址內(nèi)存單元的內(nèi)容交換112XCHD A,Ri累加器與間接尋址內(nèi)存單元的內(nèi)容交換低序數(shù)112續(xù)表助 記 符描 述字 節(jié)振蕩器頻率(MHz)布爾變量操作CLR C清除進(jìn)位位112CLR bit清除直接尋址的位212SETB C設(shè)置進(jìn)位位112SETB bit設(shè)置直接尋址的位112CPL C進(jìn)位位求補(bǔ)112續(xù)表助 記 符描 述字 節(jié)振蕩器頻率(MHz)布爾變量操作CPL bit直接尋址的位求補(bǔ)212ANL C,bit進(jìn)位位和直接尋址的位做“與”運(yùn)算224ANL C,/bit
46、進(jìn)位位和直接尋址的位的補(bǔ)碼做“與”運(yùn)算224ORL C,bit進(jìn)位位和直接尋址的位做“或”運(yùn)算224ORL C,/bit進(jìn)位位和直接尋址的位的補(bǔ)碼做“或”運(yùn)算224續(xù)表助 記 符描 述字 節(jié)振蕩器頻率(MHz)布爾變量操作MOV C,bit傳送直接尋址的位至累加器212MOV bit,C傳送累加器至直接尋址的位224JC rel若進(jìn)位位設(shè)置跳轉(zhuǎn)224JNC rel若進(jìn)位位未設(shè)置跳轉(zhuǎn)224JB bit,rel若直接尋址的位設(shè)置跳轉(zhuǎn)324JNB bit,rel若直接尋址的位未設(shè)置跳轉(zhuǎn)324JBC bit,rel若直接尋址的位設(shè)置跳轉(zhuǎn)并清除位324續(xù)表助 記 符描 述字 節(jié)振蕩器頻率(MHz)程序分
47、支ACALL addr11絕對子例程調(diào)用224LCALL addr16長子例程調(diào)用324RET從子例程返回124RETI從中斷返回124AJMP addr11絕對跳轉(zhuǎn)224續(xù)表助 記 符描 述字 節(jié)振蕩器頻率(MHz)程序分支LJMP addr16長跳轉(zhuǎn)324SJMP rel短跳轉(zhuǎn)(相對地址)224JMP A+DPTR相對于DPTR的間接跳轉(zhuǎn)124JZ rel若累加器為0跳轉(zhuǎn)224JNZ rel若累加器不為0跳轉(zhuǎn)224CJNE A,direct,rel比較累加器與直接尋址字節(jié),若不相等,跳轉(zhuǎn)324續(xù)表助 記 符描 述字 節(jié)振蕩器頻率(MHz)程序分支CJNE A,#data,rel比較累加器與
48、立即數(shù),若不相等,跳轉(zhuǎn)324CJNE Rn,#data,rel比較寄存器與立即數(shù),若不相等,跳轉(zhuǎn)324CJNE Ri,#data,rel立即數(shù)與間接尋址字節(jié)比較,若不相等,跳轉(zhuǎn)324DJNZ Rn,rel減量寄存器,若不為0,跳轉(zhuǎn)224DJNZ direct,rel減量直接尋址內(nèi)存單元,若不為0,跳轉(zhuǎn)324NOP無操作112第4章匯編語言程序設(shè)計(jì) 匯編語言的格式4.1 語句行的構(gòu)成4.2 指示性語句4.3 匯編語言程序設(shè)計(jì)及舉例 4.4 4.1 匯編語言的格式 下面先介紹一個(gè)例子來說明80C51匯編語言的格式。 ORG00H;定義程序的入口 LJMPMAIN;跳轉(zhuǎn)至此程序入口 ORG30H;本
49、程序開始存放的地址COUNT EQU04H ;定義符號COUNT MAIN: MOVDPTR,#BCD1;置BCD1的地址指針 MOVR0,#BCD11;置BCD11的地址指針 MOVR2,#COUNT;循環(huán)次數(shù)送至R2 LOP1:MOVA,#0 ;為變址尋址置A的初值 MOVC A,A+DPTR ;利用變址尋址從程序區(qū)取第一個(gè) BCD數(shù)的第一個(gè)字節(jié)至累加器A MOVR0,A;把數(shù)存至RAM區(qū)BCD11處 INCDPTR;修改地址指針 INCR0 DJNZR2,LOP1;未完循環(huán) MOVDPTR,#BCD2;為BCD2置地址指針 MOVR0,#BCD11;置已在RAM中的第一個(gè)BCD數(shù)的 地址
50、指針 MOVR1,#SUM;置存放和的地址指針 MOVR3,#COUNT;置循環(huán)次數(shù) LOP2:MOVA,#0;為變址尋址置A的初值 MOVCA,A+DPTR;用變址尋址取進(jìn)第二個(gè)BCD數(shù)的 第一個(gè)字節(jié) ADDCA,R0;與第一個(gè)BCD數(shù)的相應(yīng)字節(jié)相加 DAA;十進(jìn)制調(diào)整 MOVR1,A;存和 INCDPTR;修改地址指針 INCR0 INCR1 DJNZR3,LOP2;未完循環(huán) MOVA,#00H;清零累加器A ADDCA,#00H;與最后一次加法可能產(chǎn)生的進(jìn)位 位相加 MOVR1,A;存進(jìn)位位 J1:JMPJ1;模擬暫停指令 ORG20H;規(guī)定存放預(yù)置數(shù)據(jù)的地址BCD1EQU20H DB4
51、4H,55H,66H,77H;用DB偽指令在程序區(qū)中預(yù)置數(shù)據(jù)BCD2:DB55H,44H,55H,88H ORG60HBCD11EQU60H DS 4;在RAM中預(yù)留空間以存放從程序 區(qū)中取出的數(shù)據(jù) ORG70HSUMEQU70H DS5;為和保留空間 END4.2 語句行的構(gòu)成 4.2.1 標(biāo)記 1匯編語言的字符集(1)字母 包含大寫的英文字母:ABCDXYZ;小寫的英文字母:abcxyz。 (2)數(shù)字 阿拉伯?dāng)?shù)字:0123456789。 (3)特殊字符 圖4-1 匯編字符集中可打印字符 2界符 界符(delimiters)是一些特殊字符,利用它們可以表明某個(gè)標(biāo)記的結(jié)束,它們本身也有一定的意
52、義,這一點(diǎn)就與分隔符(空格)不同。例子中的冒號(:)、逗號(,)都是一種界符。 3常量 凡是出現(xiàn)在80C51源程序中的固定值(它在程序運(yùn)行期間不會(huì)變化),就稱為常量(constants)。例子中的數(shù)0、3、100等都是常量,而且是數(shù)字常量。 匯編語言中允許的常量有數(shù)字常量和字符串常量兩種。(1)數(shù)字(整數(shù))常量(2)字符串常量 4標(biāo)識符 一個(gè)標(biāo)識符是由最多為31個(gè)字母、數(shù)字及規(guī)定的特殊字符(? _ $)等組成的,且不能用數(shù)字打頭(以免與十六進(jìn)制數(shù)相混淆)。 5保留字 6注釋 4.2.2 符號 1寄存器(registers) 2變量(variable) 3標(biāo)號(label) 4數(shù) 4.2.3 表
53、達(dá)式 1操作數(shù)(operands)(1)常量操作數(shù)(2)存儲器操作數(shù) 2運(yùn)算符(operators)(1)算術(shù)運(yùn)算符(2)邏輯運(yùn)算符(3)關(guān)系運(yùn)算符 4.2.4 語句 如前所述,一個(gè)匯編語言的源程序是由一條條語句(statements)組成的,語句就是完成一個(gè)動(dòng)作的說明。源程序中的語句可分成如下兩類。 一類是指令語句,匯編程序把它們翻譯成機(jī)器代碼,這些代碼命令80C51執(zhí)行某些操作,如MOV、ADD、JMP等。 另一類指示性語句(偽指令),匯編程序并不把它們翻譯成機(jī)器代碼,也不可能翻譯成機(jī)器代碼,只是用來指示、引導(dǎo)匯編程序在匯編時(shí)做一些操作,如定義符號、分配存儲單元、初始化存儲器等,所以偽指令
54、本身不占用存儲單元,例如: 4.3 指示性語句 在Ax51宏匯編中有以下幾種指示性語句(directive statements): 符號定義(symbol definition)語句; 數(shù)據(jù)定義(data definition)語句; 結(jié)束(termination)語句。 4.3.1 符號定義語句 1等值語句EQU NAME EQU 表達(dá)式 2定義匯編過程中的變量語句SET SET語句的格式為: 符號名SET表達(dá)式 3給內(nèi)部RAM的位單元定義一個(gè)符號位地址語句BIT BIT語句的內(nèi)格式為: 4給直接尋址的內(nèi)部RAM字節(jié)單元定義符號名語句 DATA DATA語句的格式為: 符號名DATA表達(dá)式
55、 4.3.2 存儲空間初始化語句 存儲空間初始化語句,其格式與指令性語句基本相似,也由4個(gè)字段組成,其格式如下:標(biāo)號:偽指令助記符參數(shù)1,參數(shù)2, ;注釋 此類偽指令共有4條:DB(Define Byte,定義字節(jié))和DW(Define Word,定義字)僅適用于ROM空間,為ROM區(qū)間填充常數(shù)或常數(shù)表格;DS(Data byte Reserve Space,為數(shù)據(jù)字節(jié)保留空間)和DBIT(Data BIT reserve space,為數(shù)據(jù)位保留空間),用來從其一RAM地址開始預(yù)留一些單元,作為變量空間。 1DB在ROM空間定義一個(gè)字節(jié)數(shù)值串 標(biāo)號:DBN1,N2, Nx 圖4-1 包含2的
56、權(quán)的字節(jié)的表 2DW在ROM空間定義一個(gè)字列表(地址表) DW偽指令的格式與功能與DB類似,只是DW定義的是一個(gè)雙字節(jié)的字序列。每個(gè)數(shù)據(jù)項(xiàng)占2個(gè)字節(jié),并且16位二進(jìn)制數(shù)的高8位存放在低地址單元,而低8位存放在高地址單元。DW通常用于在ROM中定義一個(gè)16位的跳轉(zhuǎn)地址表。 3DS在RAM中保留指定數(shù)量的字節(jié)單元 DS語句的格式為: 標(biāo)號:DSnn 自標(biāo)號開始在RAM中保留nn個(gè)字節(jié)單元,用以存放程序運(yùn)行過程中產(chǎn)生的數(shù)據(jù)或變量。nn可以是數(shù)值常量或在匯編過程中能產(chǎn)生數(shù)值的表達(dá)式。例如: 4DBIT在RAM中保留指定數(shù)量的位單元 DBIT偽指令與DS為指令類似,只是它在RAM中保留指定數(shù)量的位單元,
57、以儲存在程序運(yùn)行過程中產(chǎn)生的位變量。用以指定位單元數(shù)量的“nn”可以是數(shù)值常量或表達(dá)式。 4.3.3 起始語句 起始語句ORG(origin),它規(guī)定了段內(nèi)的起始地址。偽指令ORG 的一般格式為: ORG 表達(dá)式 4.3.4 結(jié)束語句 END 4.4.2 分支程序設(shè)計(jì)4.4 匯編語言程序設(shè)計(jì)及舉例 例4-1 兩個(gè)32位BCD數(shù)相加程序。 若有兩個(gè)32位BCD數(shù)DATA1與DATA2,DATA1存放在自50H開始的單元中,DATA2存放在自60H開始的單元中。存放時(shí)低字節(jié)在低地址處,高字節(jié)在地址較高處。相加以后的和自70H單元開始存放,其流程圖如圖4-2所示。 圖4-2 直線運(yùn)行程序流程圖 4.
58、4.2 分支程序設(shè)計(jì) 圖4-3 符號函數(shù)的程序流程圖 4.4.3 循環(huán)程序設(shè)計(jì) 1用計(jì)數(shù)器控制循環(huán) 圖4-4 計(jì)數(shù)循環(huán)程序流程圖 程序如下: 2多重循環(huán) 延時(shí)子程序如下: 圖4-5 多重循環(huán)程序流程圖 4.4.4 字符串處理程序設(shè)計(jì) 1確定字符串的長度 例4-3 從頭搜索字符串的結(jié)束標(biāo)志,統(tǒng)計(jì)搜索的字符個(gè)數(shù),其流程圖如圖4-6所示。 圖4-6 確定字符串長度的流程圖 相應(yīng)的程序如下: 2加偶校驗(yàn)到ASCII字符 例4-4 若有一個(gè)ASCII字符串,它們的起始地址放在單元STRING內(nèi),要求從串中取出每一個(gè)字符,檢查其中包含的“1”的個(gè)數(shù),若已為偶數(shù),則它的最高有效位置“0”;否則,最高有數(shù)位置
59、“1”后送回,其流程圖如圖4-7所示。 圖4-7 加偶校驗(yàn)位至ASCII字符流程圖 相應(yīng)的程序如下: 圖4-8 把十六進(jìn)制數(shù)轉(zhuǎn)換為ASCII的程序流程圖 程序如下: 2從二進(jìn)制到ASCII串的轉(zhuǎn)換 例4-6 把在內(nèi)存變量NUMBER1中的8位二進(jìn)制數(shù),每一位轉(zhuǎn)換為相應(yīng)的ASCII,存入串變量HEX_1中,其流程圖如圖4-9所示。 圖4-9 把二進(jìn)制位串的每一位轉(zhuǎn)換為ASCII的程序流程圖 3從BCD碼到二進(jìn)制的轉(zhuǎn)換 圖4-10 3位BCD數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)的流程圖第5章80C51的并行端口 80C51并行端口的特點(diǎn)5.4 基本輸入/輸出功能5.2 80C51的引腳功能5.1 CPU與外設(shè)間數(shù)據(jù)傳
60、送的方式5.5 簡單的人機(jī)接口5.35.1 80C51的引腳功能 圖5-1 PDIP40封裝80C51引腳布局圖 圖5-2 PDIP40封裝80C51全功能邏輯地址符號 續(xù)表續(xù)表續(xù)表 5.2 基本輸入/輸出功能 5.2.1 80C51與I/O設(shè)備之間的接口信息 1數(shù)據(jù)(data) 數(shù)字量。 模擬量。 開關(guān)量。 圖5-3 80C51與I/O之間傳送的信息 2狀態(tài)(status) 在輸入時(shí),有輸入設(shè)備是否準(zhǔn)備好(ready)的狀態(tài)信息;在輸出時(shí),有輸出設(shè)備是否有空(empty)的狀態(tài)信息,若輸出設(shè)備正在輸出,則以忙(busy)指示等。 3控制(control) 控制信息控制輸入/輸出設(shè)備啟動(dòng)或停止
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 八年級班級工作總結(jié)
- 銷售人員個(gè)人年度工作總結(jié)
- 三年級第二學(xué)期數(shù)學(xué)教學(xué)計(jì)劃
- 公司商務(wù)合同范本
- 小學(xué)信息技術(shù)五年級上冊第2課《插入圖片和藝術(shù)字》說課稿
- 爬架的施工方案
- 初二上冀教版數(shù)學(xué)試卷
- 畢節(jié)陽光教育數(shù)學(xué)試卷
- 鞍山九年級月考數(shù)學(xué)試卷
- 時(shí)尚行業(yè)的年度時(shí)裝發(fā)布會(huì)
- 2024新版《藥品管理法》培訓(xùn)課件
- 浙江省杭州市2024年中考英語真題(含答案)
- 《陸上風(fēng)電場工程設(shè)計(jì)概算編制規(guī)定及費(fèi)用標(biāo)準(zhǔn)》(NB-T 31011-2019)
- 信訪事項(xiàng)受理、辦理、復(fù)查、復(fù)核、聽證程序課件
- 【北京】施工現(xiàn)場安全生產(chǎn)標(biāo)準(zhǔn)化管理圖集
- 小學(xué) 三年級 科學(xué)《觀測風(fēng)》教學(xué)設(shè)計(jì)
- JJF1664-2017溫度顯示儀校準(zhǔn)規(guī)范-(高清現(xiàn)行)
- 第二講共振理論、有機(jī)酸堿理論
- 研究性學(xué)習(xí)課題——有趣對聯(lián)
- 高考英語聽力必備場景詞匯精選(必看)
- (精心整理)一元一次不等式組100道計(jì)算題
評論
0/150
提交評論