任務四消防水箱水位的控制_第1頁
任務四消防水箱水位的控制_第2頁
任務四消防水箱水位的控制_第3頁
任務四消防水箱水位的控制_第4頁
任務四消防水箱水位的控制_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、3.5 單片機控制水箱水位,學習目標:通過學習任務的完成方法,學習MCS-51單片機的位操作指令。 任務描述:消防水箱總是要保證有一定的水位,以防火災發(fā)生,如果單純靠人工操作,時間不允許,而且還會有險情發(fā)生。如果用單片機來代替人工就可以解決這個問題,硬件電路,電路中: 1)輸出:P1.0=1時,M放水; P1.0=0時,M關 2)輸入:水位B, T1、T2導通 P1.1=0,P1.2=0 A水位B, T1止,T2通 P1.1=1,P1.2=0,水池水位自動控制裝置,要求:水位B停放,中斷方式可提高CPU的效率,程序設計,CLR P1.0 SETB P1.1 SETB P1.2 L1: JNB

2、P1.2, L1 SETB P1.0 L2: JB P1.1, L2 CLR P1.0 SJMP L1 END,相關知識,1、單片機如何控制單根I/O口線? 我們在上面任務中看到,P3口共有8根口線,現(xiàn)在我們只要控制其中一根線,在單片機中能不能實現(xiàn)?答案是肯定的。因為單片機中有一類位操作指令。 2、MCS-51單片機有哪些位操作指令? MCS-51單片機有一個位處理機,它以進位標志做為位累加器,以內(nèi)部RAM可尋址的128個為存儲位 。 既然有位處理機功能,所以也就有相應的位操作指令集,下面我們分別談論,位操作:布爾操作,以二進制位為單位進行運算,由布爾處理器實現(xiàn),操作數(shù)范圍: C,位尋址區(qū)的位

3、,11個可位尋址的寄存器,位地址的四種表示: 1)使用直接位地址表示;如20H、30H、33H等; 2)使用位寄存器名來表示;如C、OV、F0等; 3)用字節(jié)寄存器名后加位數(shù)來表示;如PSW.4、P0.5ACC.3等; 4)字節(jié)地址加位數(shù)來表示;如20.0、30.4、50.7等,位變量傳送指令 位清零和置位指令 位邏輯運算指令 綜合舉例與練習,返回本章首頁,1 位變量傳送指令,MOVC,bit;C(bit) MOV bit,C;bitC,例1 以知片內(nèi)RAM 的(2FH)=10110101B 執(zhí)行 MOV C,2FH.7或MOV C,7FH 結(jié)果 C=,例2 若C=1,(P1)=1100010

4、1B 執(zhí)行 MOV P1.3,C MOV P1.2,C 后 (P1)=,C=1,P1)=11001101B,例3 將P1.2送給P1.6,MOV C,P1.3 MOV P1.6,C,返回本節(jié),2 位清零和置位指令,CLR C;C0 CLR bit;(bit)0 SETB C ;C1 SETB bit ;(bit)1,返回本節(jié),3 位邏輯運算指令,ANLC,bit;CC(bit) ANLC,/bit;CC(bit) ORLC,bit;CC(bit) ORLC,/bit;CC(bit) CPLC ;CC CPLbit ;(bit)(bit,返回本節(jié),例2已知A、B、C、D代表位地址,試編程實現(xiàn) D

5、A B+A B,MOV 10H,C MOV C,ACC.0 ANL C,P2.3 ORL C,10H MOV P1.0,C,例試編程完成.(.,答:MOV C,B ANL C,A MOV D,C,MOV C,A ANL C,B ORL C,D MOV D,C,綜合舉例與練習,例3 用軟件實現(xiàn)下圖所示的P10 P13間的邏輯運算,解: MOV C,P1.1 ORL C,P1.2 ANL C,P1.0 MOV P13,C,P1.1,P1.2,P1.0,P1.3,第四章 MCS51單片機的程序設計,匯編語言基本概念 匯編語言程序設計 本章思考題與作業(yè),匯編語言基本概念,一、 程序設計語言 二、 匯編

6、語言的語句格式 三、 偽指令,返回本章首頁,一、 程序設計語言,按照語言的結(jié)構(gòu)及其功能可以分為三種: 1機器語言:機器語言是用二進制代碼0和1表示指令和數(shù)據(jù)的最原始的程序設計語言,計算機可以直接識別和執(zhí)行。 2匯編語言:是一種符號化語言,用助記符代替“0”、“1”,計算機不能直接執(zhí)行,要通過匯編程序匯編成機器語言后再執(zhí)行。不同的計算機匯編語言是不同的。 3高級語言:是一種不依賴具體計算機的語言,接近于人的自然語言,是面向過程或問題而獨立于機器的通用語言,必須要通過解釋程序或編譯程序?qū)崿F(xiàn)執(zhí)行,返回本節(jié),二、 匯編語言的語句格式,1匯編語言的指令類型 MCS-51單片機匯編語言,包含兩類不同性質(zhì)的

7、指令。 (1)基本指令:即指令系統(tǒng)中的指令。它們都是機器能夠執(zhí)行的指令,每一條指令都有對應的機器碼。 (2)偽指令:匯編時用于控制匯編的指令。它們都是機器不執(zhí)行的指令,無機器碼,2匯編語言的語句格式 匯編語言源程序是由匯編語句(即指令)組成的。匯編語言語句一般由四部分組成,其典型的匯編語句格式如下: 標號:操作碼 操作數(shù);注釋 例如 START:MOV A,30H; ( A ) (30H,1)標號,是指語句地址的名字。 命名規(guī)則:第一字符必須用英文字母;第二個 字符以后可以用字母或數(shù)字09;組 成標號的字符不能超過6個字符。 注:特殊功能寄存器名(SFR)、偽指令、助 記符等不能作為標號。 例

8、:請指出下列標號是否正確。 2A ADD S+M DPTR,X,X,X,X,2)操作碼,規(guī)定了語句執(zhí)行的具體操作,3)操作數(shù),提供了操作所需要的數(shù)據(jù)或地址,4)注釋,對語句進行解釋或說明,增加可讀性,返回本節(jié),ORG EQU DB DW DS BIT END,三、 偽指令,返回本節(jié),格式:ORG m 功能:用來規(guī)定程序段在存儲器中存放的起始地址。 例如:ORG1000H START:MOVA,#20H MOVB,#30H,2EQU賦值偽指令 格式:符號名 EQU(或=)表達式 給指定的符號名賦予一個確定的數(shù)值。 例如:SUM EQU 22H MOV A,SUM,1ORG 匯編起始偽指令,說明:

9、該程序段是從地址是1000H 單元開始存放的,A)=22H,1000H,74H,20H,格式:標號: DB 8位字節(jié)數(shù)據(jù)表 功能:從ROM某一地址單元開始, 存入一組規(guī)定好的8位二進制數(shù)。 例:ORG 8000H TAB: DB 45H,49H,0AH TAB1:DB 07H,3DB 字節(jié)數(shù)據(jù)定義偽指令,45H,49H,0AH,07H,TAB=8000H TAB1=8003H,格式:標號: DW 16位字數(shù)據(jù)表 功能:從ROM某一地址單元開始, 存入一組規(guī)定好的16位二進制數(shù)。 例:ORG 3000H TAB: DW 5678H,1234H DW 3CH,4DW 字數(shù)據(jù)定義偽指令,56H,78

10、H,12H,34H,00H,3CH,5DS 空間定義偽指令,格式:標號: DS 表達式 功能:從標號指定的地址單元開始, 在ROM中保留由表達式所指定 個數(shù)的存儲單元作為備用的空 間,并均填以零。 例:ORG 2000H AB:DS 06H TAB:MOV A,B TAB的地址應為多少,2006H,00H,00H,00H,00H,00H,00H,6BIT位地址符號定義偽指令,7END匯編結(jié)束偽指令,格式:符號名 BIT 表達式 功能:將位地址賦給指定的符號名。 例: A1 BIT P1.0 MOV C,A1,MOV C,P1.0,格式: 標號: END 表達式 功能:結(jié)束匯編,返回本節(jié),匯編語

11、言程序設計,一、 匯編語言程序設計步驟 二、 結(jié)構(gòu)化程序設計 1. 順序結(jié)構(gòu) 2. 分支結(jié)構(gòu) 3. 循環(huán)結(jié)構(gòu) 4. 子程序結(jié)構(gòu),返回本章首頁,一、 匯編語言程序設計步驟,1分析問題 2確定算法 3繪制程序流程圖 4分配內(nèi)存單元 5編寫匯編語言源程序 6調(diào)試程序,返回本節(jié),二、 結(jié)構(gòu)化程序設計,順序程序是一種最簡單,最基本的程序。 特點:程序按編寫的順序依次往下執(zhí)行每一條指 令,直到最后一條。 【例4.1】 將單片機內(nèi)部RAM40H、41H、42H三個單 元內(nèi)的無符號數(shù)相加,和存入R0(高)和R1 (低)中。程序流程如圖4-1所示,1. 順序結(jié)構(gòu),96H + 75H,1 0BH,F6H,01H,

12、1,2,圖4-1 例4-1程序流程圖,ORG 1000H MOVA,40H;取值 ADD A,41H ;40H和41H單元相加 MOV R1,A ;和送R1中 CLR A ADDC A,#00H MOV R0,A MOV A,42H ADD A,R1 MOV R1,A CLR A ADDC A,R0 MOV R0,A SJMP $ END,例4.2】 設X、Y兩個小于10的整數(shù)分別存于片內(nèi) 30H、31H單元,試求兩數(shù)的平方和并將結(jié) 果存于32H單元。 解:兩數(shù)均小于10,故兩數(shù)的平方和小于100,可利用 乘法指令求平方。程序流程如圖4-2所示,圖4-2 例4.2程序流程圖,ORG 2000H

13、 MOVA,30H;取30H單元數(shù)據(jù) MOVB,A;將X送入B寄存器 MUL AB;求X2,結(jié)果在累加器中 MOV R1,A;將結(jié)果暫存于R1寄存器中 MOV A,31H;取31H單元數(shù)據(jù) MOV B,A;將Y送入B寄存器 MUL AB;求Y2,結(jié)果在累加器中 ADD A,R1;求X2+ Y2 MOV 32H,A;保存數(shù)據(jù) SJMP $;暫停 END,返回本節(jié),1)分支結(jié)構(gòu)的基本形式 分支結(jié)構(gòu)有三種基本形式,如圖4-3所示。 分支結(jié)構(gòu)程序的設計要點如下: 先建立可供條件轉(zhuǎn)移指令測試的條件。 選用合適的條件轉(zhuǎn)移指令。 在轉(zhuǎn)移的目的地址處設定標號,2. 分支結(jié)構(gòu),圖4-3 分支程序結(jié)構(gòu)流程圖,返回

14、,例4.3】根據(jù)下列程序段,畫出程序流程圖。 JZ L1 MOV R1,#0FFH SJMP L2 L1:MOV R1,#00H L2:SJMP L2,2)分支結(jié)構(gòu)程序設計舉例,N,Y,例4.4】 設X存在30H單元中,根據(jù)下式 X+2X0 Y =100X=0 X X0 求出Y值,將Y值存入31H單元。 解:根據(jù)數(shù)據(jù)的符號位判別該數(shù)的正負,若最高位為0,再判別該數(shù)是否為0。程序流程如圖4-4所示,圖4-4 例4.3程序流程圖,Y,ORG 2000H MOVA,30H;取數(shù) JBACC.7,NEG;負數(shù),轉(zhuǎn)NEG JZZER0 ;為零,轉(zhuǎn)ZER0 ADDA,#02H;為正數(shù),求X+2 AJMP

15、SAVE;轉(zhuǎn)到SAVE,保存數(shù)據(jù) ZER0:MOVA,# 64H ;數(shù)據(jù)為零,Y=100 AJMP SAVE ;轉(zhuǎn)到SAVE,保存數(shù)據(jù) NEG:CPL A ;求X SAVE:MOV31H,A ;保存數(shù)據(jù) SJMP ;暫停 END,返回本節(jié),3. 循環(huán)結(jié)構(gòu),1)循環(huán)程序的結(jié)構(gòu)(如圖4-5所示) 循環(huán)程序一般包括如下四個部分: 初始化 循環(huán)體 循環(huán)控制 結(jié)束 循環(huán)程序按結(jié)構(gòu)形式,有單重循環(huán)與多重循環(huán)。 在多重循環(huán)中,只允許外重循環(huán)嵌套內(nèi)重循環(huán)。 不允許循環(huán)相互交叉,也不允許從循環(huán)程序的外部跳入循環(huán)程序的內(nèi)部(如圖4-6所示,圖4-5 循環(huán)結(jié)構(gòu)程序流程圖,返回,圖4-6 多重循環(huán)示意圖,返回,2)循

16、環(huán)結(jié)構(gòu)程序設計舉例,例4.5】試編程實現(xiàn)將單片機的2000H 20FFH單元內(nèi)容清零。 解:設置一個計數(shù)器R1控制循環(huán)次數(shù),每清零一次,計數(shù)器加1。程序流程如下圖所示,ORG 0100H MOV DPTR,#2000H MOV R0,#00H MOV A,#00H L1:MOVX DPTR,A INC DPTR INC R0 CJNE R0,#00H,L1 SJMP $ END,例4.5】在單片機內(nèi)部RAM50H60H單元中 存放一組數(shù),試編程找出其中最大數(shù) 并將該數(shù)送2FH單元中。 解:設置一個計數(shù)器R1控制循環(huán)次數(shù),每處理完一個數(shù)據(jù),計數(shù)器減1。程序流程如圖4-7所示,圖4-7 例4.5的

17、程序流程圖,ORG 1000H MOV R0,#50H MOV R1,#10H MOV A,R0 INC R0 MOV 40H,R0 MOV B,A CLR C SUBB A,40H JNC LOOP1 MOV A,40H SJMP LOOP2 LOOP1: MOV A,B LOOP2: DJNZ R1,LOOP MOV 2FH,A SJMP $ END,LOOP,例4.6】已知在ROM1000H104FH單元中存 放一組各不相同的8位二進制數(shù),試 編寫程序找出其中是否有數(shù)據(jù)為 88H,若有,將該數(shù)所在存儲單元的 地址送入R1、R0中,否則R1、R0清 零。 解:程序流程如圖4-8所示,圖4-

18、8 例4.6的程序流程圖,ORG 0000H LJMP MAIN ORG 0100H MAIN:MOV DPTR,#1000H MOV R2,#50H AGAIN:MOV A,#00H MOVC A,A+DPTR CJNE A,#88H,LOOP MOV R1,DPH MOV R0,DPL SJMP L1 LOOP: INC DPTR DJNZ R2,AGAIN MOV R0,#00H MOV R1,#00H L1:SJMP L1 END,例4.7】50ms延時 設晶振頻率為12MHZ,則一個機器周期為1s,執(zhí)行一條DJNZ指令需要2個機器周期。 解: MOV R7,#200 DEL1:MOV R6,#123 NOP DEL2:DJNZ R6,DEL2;2*123+2 s DJNZ R7,DEL1;(248+2)*200+1 s (248+2)*200+1 =50.001s,返回本節(jié),4. 子程序,1)子程序概念 將在程序中可能多次出現(xiàn)的操作,用獨立的、標 準化的通用程序段表示。 所謂調(diào)用子程序,暫時中斷主程序的執(zhí)行,而轉(zhuǎn) 到子程序的入口地址去執(zhí)行子程序。如圖4-9所 示。 調(diào)用子程序應注意: 子程序占用的存儲單元和寄存器。 參數(shù)的傳遞。 子程序經(jīng)過調(diào)用后得到的數(shù)據(jù)來完成程序之間的 參數(shù)傳遞。 嵌套調(diào)用與遞歸調(diào)用。如圖4-10所示,圖4-9 子

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論