任務(wù)四-消防水箱水位的控制課件_第1頁
任務(wù)四-消防水箱水位的控制課件_第2頁
任務(wù)四-消防水箱水位的控制課件_第3頁
任務(wù)四-消防水箱水位的控制課件_第4頁
任務(wù)四-消防水箱水位的控制課件_第5頁
已閱讀5頁,還剩113頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

3.5單片機(jī)控制水箱水位〖學(xué)習(xí)目標(biāo)〗:通過學(xué)習(xí)任務(wù)的完成方法,學(xué)習(xí)MCS-51單片機(jī)的位操作指令?!既蝿?wù)描述〗:消防水箱總是要保證有一定的水位,以防火災(zāi)發(fā)生,如果單純靠人工操作,時(shí)間不允許,而且還會有險(xiǎn)情發(fā)生。如果用單片機(jī)來代替人工就可以解決這個(gè)問題。3.5單片機(jī)控制水箱水位〖學(xué)習(xí)目標(biāo)〗:通過學(xué)習(xí)任務(wù)的完硬件電路硬件電路電路中:1)輸出:P1.0=1時(shí),M放水;P1.0=0時(shí),M關(guān)2)輸入:水位<A,T1、T2截止→P1.1=1,P1.2=1水位>B,T1、T2導(dǎo)通→P1.1=0,P1.2=0A<水位<B,T1止,T2通→P1.1=1,P1.2=0

水池水位自動控制裝置要求:水位<A放水;水位>B停放中斷方式可提高CPU的效率電路中:水池水位自動控制裝置要求:水位<A放程序設(shè)計(jì)CLRP1.0SETBP1.1SETBP1.2L1:JNBP1.2,L1SETBP1.0L2:JBP1.1,L2CLRP1.0SJMPL1END程序設(shè)計(jì)CLRP1.0相關(guān)知識1、單片機(jī)如何控制單根I/O口線?我們在上面任務(wù)中看到,P3口共有8根口線,現(xiàn)在我們只要控制其中一根線,在單片機(jī)中能不能實(shí)現(xiàn)?答案是肯定的。因?yàn)閱纹瑱C(jī)中有一類位操作指令。2、MCS-51單片機(jī)有哪些位操作指令?MCS-51單片機(jī)有一個(gè)位處理機(jī),它以進(jìn)位標(biāo)志做為位累加器,以內(nèi)部RAM可尋址的128個(gè)為存儲位。既然有位處理機(jī)功能,所以也就有相應(yīng)的位操作指令集,下面我們分別談?wù)?。相關(guān)知識1、單片機(jī)如何控制單根I/O口線?位操作:布爾操作,以二進(jìn)制位為單位進(jìn)行運(yùn)算,由布爾處理器實(shí)現(xiàn)。操作數(shù)范圍:C,位尋址區(qū)的位,11個(gè)可位尋址的寄存器位地址的四種表示: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等。位操作:布爾操作,以二進(jìn)制位為單位進(jìn)行運(yùn)算,由布爾處理器實(shí)現(xiàn)位變量傳送指令位清零和置位指令位邏輯運(yùn)算指令綜合舉例與練習(xí)返回本章首頁位變量傳送指令返回本章首頁1位變量傳送指令MOV C,bit ;C←(bit)MOV bit,C ;bit←C1位變量傳送指令MOV C,bit ;C←(bit)例1以知片內(nèi)RAM的(2FH)=10110101B

執(zhí)行MOVC,2FH.7或MOVC,7FH

結(jié)果C=?例2若C=1,(P1)=11000101B執(zhí)行MOVP1.3,CMOVP1.2,C后(P1)=?C=1(P1)=11001101B例3將P1.2送給P1.6MOVC,P1.3MOVP1.6,C返回本節(jié)例1以知片內(nèi)RAM的(2FH)=10110101B

2位清零和置位指令CLR C ;C←0CLR bit ;(bit)←0SETBC ;C←1SETBbit;(bit)←1返回本節(jié)2位清零和置位指令CLR C ;C←0返回本節(jié)3位邏輯運(yùn)算指令A(yù)NL C,bit ;C←C∧(bit)ANL C,/bit ;C←C∧(bit)ORL C,bit ;C←C∨(bit)ORL C,/bit ;C←C∨(bit)CPL C ;C←CCPL bit ;(bit)←(bit)返回本節(jié)3位邏輯運(yùn)算指令A(yù)NL C,bit ;C←C∧(bit)返例2已知A、B、C、D代表位地址,試編程實(shí)現(xiàn)

D=AB+ABMOV10H,CMOVC,ACC.0ANLC,P2.3ORLC,10HMOVP1.0,C例1試編程完成

P1.0=(ACC.0∧P2.3)∨C答:MOVC,BANLC,AMOVD,CMOVC,AANLC,BORLC,DMOVD,C綜合舉例與練習(xí)例2已知A、B、C、D代表位地址,試編程實(shí)現(xiàn)

例3用軟件實(shí)現(xiàn)下圖所示的P10~P13間的邏輯運(yùn)算。解:MOVC,P1.1ORLC,P1.2ANLC,P1.0MOVP13,CP1.1P1.2P1.0P1.3&例3用軟件實(shí)現(xiàn)下圖所示的P10~P13間的邏輯運(yùn)算。第四章MCS—51單片機(jī)的程序設(shè)計(jì)

匯編語言基本概念

匯編語言程序設(shè)計(jì)

本章思考題與作業(yè)第四章MCS—51單片機(jī)的程序設(shè)計(jì) 匯編語言基本概念匯編語言基本概念一、程序設(shè)計(jì)語言二、匯編語言的語句格式三、偽指令返回本章首頁匯編語言基本概念一、程序設(shè)計(jì)語言返回本章首頁一、程序設(shè)計(jì)語言 按照語言的結(jié)構(gòu)及其功能可以分為三種:1.機(jī)器語言:機(jī)器語言是用二進(jìn)制代碼0和1表示指令和數(shù)據(jù)的最原始的程序設(shè)計(jì)語言,計(jì)算機(jī)可以直接識別和執(zhí)行。2.匯編語言:是一種符號化語言,用助記符代替“0”、“1”,計(jì)算機(jī)不能直接執(zhí)行,要通過匯編程序匯編成機(jī)器語言后再執(zhí)行。不同的計(jì)算機(jī)匯編語言是不同的。3.高級語言:是一種不依賴具體計(jì)算機(jī)的語言,接近于人的自然語言,是面向過程或問題而獨(dú)立于機(jī)器的通用語言,必須要通過解釋程序或編譯程序?qū)崿F(xiàn)執(zhí)行。返回本節(jié)一、程序設(shè)計(jì)語言 按照語言的結(jié)構(gòu)及其功能可以分為三種:二、匯編語言的語句格式 1.匯編語言的指令類型MCS-51單片機(jī)匯編語言,包含兩類不同性質(zhì)的指令。(1)基本指令:即指令系統(tǒng)中的指令。它們都是機(jī)器能夠執(zhí)行的指令,每一條指令都有對應(yīng)的機(jī)器碼。(2)偽指令:匯編時(shí)用于控制匯編的指令。它們都是機(jī)器不執(zhí)行的指令,無機(jī)器碼。二、匯編語言的語句格式 1.匯編語言的指令類型2.匯編語言的語句格式匯編語言源程序是由匯編語句(即指令)組成的。匯編語言語句一般由四部分組成。

其典型的匯編語句格式如下:

[標(biāo)號:] 操作碼[操作數(shù)] [;注釋]

例如START:MOVA,30H ;(

A)

←(30H)2.匯編語言的語句格式其典型的匯編語句格式如下:(1)標(biāo)號是指語句地址的名字。命名規(guī)則:第一字符必須用英文字母;第二個(gè)字符以后可以用字母或數(shù)字0~9;組成標(biāo)號的字符不能超過6個(gè)字符。注:特殊功能寄存器名(SFR)、偽指令、助記符等不能作為標(biāo)號。例:請指出下列標(biāo)號是否正確。2AADDS+MDPTRXXXX(1)標(biāo)號是指語句地址的名字。XXXX(2)操作碼規(guī)定了語句執(zhí)行的具體操作。(3)操作數(shù)提供了操作所需要的數(shù)據(jù)或地址。(4)注釋對語句進(jìn)行解釋或說明,增加可讀性。返回本節(jié)(2)操作碼規(guī)定了語句執(zhí)行的具體操作。(3)操作數(shù)提供了操作ORGEQUDBDWDSBITEND三、偽指令 返回本節(jié)ORG三、偽指令 返回本節(jié)格式:ORGm功能:用來規(guī)定程序段在存儲器中存放的起始地址。例如:ORG 1000H START: MOV A,#20H MOV B,#30H﹍2.EQU——賦值偽指令格式:符號名EQU(或=)表達(dá)式給指定的符號名賦予一個(gè)確定的數(shù)值。例如:SUMEQU22HMOVA,SUM1.ORG—匯編起始偽指令說明:該程序段是從地址是1000H單元開始存放的。(A)=22H1000H74H20H格式:ORGm2.EQU——賦值偽指令1.ORG—匯格式:[標(biāo)號:]DB8位字節(jié)數(shù)據(jù)表

功能:從ROM某一地址單元開始,存入一組規(guī)定好的8位二進(jìn)制數(shù)。例:ORG8000HTAB:DB45H,49H,0AHTAB1:DB07H

3.DB——字節(jié)數(shù)據(jù)定義偽指令45H49H0AH07HTAB=8000HTAB1=8003H格式:[標(biāo)號:]DB8位字節(jié)數(shù)據(jù)表3.DB——字節(jié)格式:[標(biāo)號:]DW16位字?jǐn)?shù)據(jù)表

功能:從ROM某一地址單元開始,存入一組規(guī)定好的16位二進(jìn)制數(shù)。例:ORG3000HTAB:DW5678H,1234HDW3CH

4.DW——字?jǐn)?shù)據(jù)定義偽指令56H78H12H34H00H3CH格式:[標(biāo)號:]DW16位字?jǐn)?shù)據(jù)表4.DW——字5.DS——空間定義偽指令格式:[標(biāo)號:]DS表達(dá)式功能:從標(biāo)號指定的地址單元開始,在ROM中保留由表達(dá)式所指定個(gè)數(shù)的存儲單元作為備用的空間,并均填以零。

例:ORG2000HAB:DS06HTAB:MOVA,BTAB的地址應(yīng)為多少?2006H00H00H00H00H00H00H5.DS——空間定義偽指令格式:[標(biāo)號:]DS表達(dá)6.BIT—位地址符號定義偽指令7.END—匯編結(jié)束偽指令格式:符號名BIT表達(dá)式功能:將位地址賦給指定的符號名。

例:A1BITP1.0MOVC,A1MOVC,P1.0格式:[標(biāo)號:]

END[表達(dá)式]功能:結(jié)束匯編。

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

1.順序結(jié)構(gòu)96H+75H

10BH+F6H01H12二、結(jié)構(gòu)化程序設(shè)計(jì)順序程序是一種最簡單,最基圖4-1例4-1程序流程圖結(jié)束(40H)(A)(A)+(41H)(A)(A)(R1)(42H)(A)(R1)+(A)(R1)(R0)+C(R0)開始C(R0)圖4-1例4-1程序流程圖結(jié)束(40H)(A)ORG 1000HMOV A,40H ;取值A(chǔ)DDA,41H;40H和41H單元相加MOVR1,A;和送R1中CLRAADDCA,#00HMOVR0,AMOVA,42HADDA,R1MOVR1,ACLRAADDCA,R0MOVR0,ASJMP$END ORG 1000H【例4.2】設(shè)X、Y兩個(gè)小于10的整數(shù)分別存于片內(nèi)30H、31H單元,試求兩數(shù)的平方和并將結(jié)果存于32H單元。解:兩數(shù)均小于10,故兩數(shù)的平方和小于100,可利用乘法指令求平方。程序流程如圖4-2所示。

【例4.2】設(shè)X、Y兩個(gè)小于10的整數(shù)分別存于片內(nèi)結(jié)束取數(shù)據(jù)X求X2暫存X2取數(shù)據(jù)Y求Y2求X2+Y2開始保存平方和圖4-2例4.2程序流程圖結(jié)束取數(shù)據(jù)X求X2暫存X2取數(shù)據(jù)Y求Y2求X2+Y2開始保存ORG 2000HMOV A,30H ;取30H單元數(shù)據(jù)MOV B,A ;將X送入B寄存器MUL AB ;求X2,結(jié)果在累加器中MOV R1,A ;將結(jié)果暫存于R1寄存器中MOVA,31H;取31H單元數(shù)據(jù)MOV B,A ;將Y送入B寄存器MUL AB ;求Y2,結(jié)果在累加器中ADD A,R1 ;求X2+Y2MOV 32H,A ;保存數(shù)據(jù)SJMP$ ;暫停END返回本節(jié)ORG 2000H返回本節(jié)(1)分支結(jié)構(gòu)的基本形式分支結(jié)構(gòu)有三種基本形式,如圖4-3所示。分支結(jié)構(gòu)程序的設(shè)計(jì)要點(diǎn)如下:①先建立可供條件轉(zhuǎn)移指令測試的條件。②選用合適的條件轉(zhuǎn)移指令。③在轉(zhuǎn)移的目的地址處設(shè)定標(biāo)號。

2.分支結(jié)構(gòu)(1)分支結(jié)構(gòu)的基本形式2.分支結(jié)構(gòu)條件滿足?AYN(a)條件滿足?ABNY(b)(c)A0A1AnK=0K=1…K=nK=?……圖4-3分支程序結(jié)構(gòu)流程圖返回條件滿足?AYN(a)條件滿足?ABNY(b)(c)A0A1【例4.3】根據(jù)下列程序段,畫出程序流程圖。JZL1MOVR1,#0FFHSJMPL2L1:MOVR1,#00HL2:SJMPL2(A)=0(R1)00H(R1)FFH(2)分支結(jié)構(gòu)程序設(shè)計(jì)舉例NY【例4.3】根據(jù)下列程序段,畫出程序流程圖。(A)=0(R1【例4.4】設(shè)X存在30H單元中,根據(jù)下式

X+2 X>0Y= 100 X=0X X<0求出Y值,將Y值存入31H單元。解:根據(jù)數(shù)據(jù)的符號位判別該數(shù)的正負(fù),若最高位為0,再判別該數(shù)是否為0。程序流程如圖4-4所示。

【例4.4】設(shè)X存在30H單元中,根據(jù)下式A為負(fù)數(shù)?取數(shù),A←(30H)開始結(jié)束A=0?YNNA←XA←64HA←X+2存數(shù),(31H)←A圖4-4例4.3程序流程圖YA為負(fù)數(shù)?取數(shù),A←(30H)開始結(jié)束A=0?YNNA←XAORG2000HMOV A,30H ;取數(shù)JB ACC.7,NEG;負(fù)數(shù),轉(zhuǎn)NEGJZ ZER0 ;為零,轉(zhuǎn)ZER0ADD A,#02H ;為正數(shù),求X+2AJMPSAVE ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)ZER0:MOV A,#64H;數(shù)據(jù)為零,Y=100AJMPSAVE ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)NEG:CPL A ;求XSAVE:MOV 31H,A;保存數(shù)據(jù)SJMP $ ;暫停END返回本節(jié)ORG2000H返回本節(jié)3.循環(huán)結(jié)構(gòu) (1)循環(huán)程序的結(jié)構(gòu)(如圖4-5所示)☆循環(huán)程序一般包括如下四個(gè)部分:①初始化②循環(huán)體③循環(huán)控制④結(jié)束☆循環(huán)程序按結(jié)構(gòu)形式,有單重循環(huán)與多重循環(huán)?!钤诙嘀匮h(huán)中,只允許外重循環(huán)嵌套內(nèi)重循環(huán)?!畈辉试S循環(huán)相互交叉,也不允許從循環(huán)程序的外部跳入循環(huán)程序的內(nèi)部(如圖4-6所示)。3.循環(huán)結(jié)構(gòu) (1)循環(huán)程序的結(jié)構(gòu)(如圖4-5所示)(a)當(dāng)型循環(huán)結(jié)構(gòu)(b)直到型循環(huán)結(jié)構(gòu)循環(huán)結(jié)束?循環(huán)體YN初始化修改循環(huán)參數(shù)結(jié)束部分開始結(jié)束循環(huán)結(jié)束?循環(huán)體Y初始化修改循環(huán)參數(shù)結(jié)束部分開始N結(jié)束圖4-5循環(huán)結(jié)構(gòu)程序流程圖返回(a)當(dāng)型循環(huán)結(jié)構(gòu)(b)直到型循環(huán)結(jié)構(gòu)循環(huán)結(jié)束?循環(huán)體YN初外循環(huán)中循環(huán)內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)內(nèi)循環(huán)(a)嵌套正確(b)嵌套正確(c)交叉不正確圖4-6多重循環(huán)示意圖返回外循環(huán)中循環(huán)內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)內(nèi)循環(huán)(a)嵌套正(2)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例【例4.5】試編程實(shí)現(xiàn)將單片機(jī)的2000H—20FFH單元內(nèi)容清零。解:設(shè)置一個(gè)計(jì)數(shù)器R1控制循環(huán)次數(shù),每清零一次,計(jì)數(shù)器加1。程序流程如下圖所示。(2)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例【例4.5】試編程實(shí)現(xiàn)將單片機(jī)的2任務(wù)四-消防水箱水位的控制課件ORG0100HMOVDPTR,#2000HMOVR0,#00HMOVA,#00HL1:MOVX@DPTR,AINCDPTRINCR0CJNER0,#00H,L1SJMP$ENDORG0100H【例4.5】在單片機(jī)內(nèi)部RAM50H~60H單元中存放一組數(shù),試編程找出其中最大數(shù)并將該數(shù)送2FH單元中。解:設(shè)置一個(gè)計(jì)數(shù)器R1控制循環(huán)次數(shù),每處理完一個(gè)數(shù)據(jù),計(jì)數(shù)器減1。程序流程如圖4-7所示?!纠?.5】在單片機(jī)內(nèi)部RAM50H~60H單元中圖4-7例4.5的程序流程圖圖4-7例4.5的程序流程圖 ORG 1000H MOV R0,#50HMOVR1,#10H MOV A,@R0INCR0MOV40H,@R0MOVB,ACLRCSUBBA,40HJNCLOOP1MOVA,40HSJMPLOOP2LOOP1:MOVA,BLOOP2:DJNZR1,LOOPMOV2FH,ASJMP$END LOOP: ORG 1000H LOO【例4.6】已知在ROM1000H~104FH單元中存放一組各不相同的8位二進(jìn)制數(shù),試編寫程序找出其中是否有數(shù)據(jù)為88H,若有,將該數(shù)所在存儲單元的地址送入R1、R0中,否則R1、R0清零。解:程序流程如圖4-8所示。【例4.6】已知在ROM1000H~104FH單元中存圖4-8例4.6的程序流程圖圖4-8例4.6的程序流程圖ORG0000HLJMPMAINORG0100HMAIN:MOVDPTR,#1000HMOVR2,#50HAGAIN:MOVA,#00HMOVCA,@A+DPTRCJNEA,#88H,LOOPMOVR1,DPHMOVR0,DPLSJMPL1LOOP:INCDPTRDJNZR2,AGAINMOVR0,#00HMOVR1,#00HL1:SJMPL1ENDORG0000H【例4.7】50ms延時(shí)設(shè)晶振頻率為12MHZ,則一個(gè)機(jī)器周期為1μs,執(zhí)行一條DJNZ指令需要2個(gè)機(jī)器周期。解:MOVR7,#200DEL1:MOVR6,#123NOPDEL2:DJNZR6,DEL2;2*123+2μsDJNZR7,DEL1;(248+2)*200+1μs(248+2)*200+1=50.001μs

返回本節(jié)【例4.7】50ms延時(shí)返回本節(jié)4.子程序 (1)子程序概念將在程序中可能多次出現(xiàn)的操作,用獨(dú)立的、標(biāo)準(zhǔn)化的通用程序段表示。所謂調(diào)用子程序,暫時(shí)中斷主程序的執(zhí)行,而轉(zhuǎn)到子程序的入口地址去執(zhí)行子程序。如圖4-9所示。調(diào)用子程序應(yīng)注意:①子程序占用的存儲單元和寄存器。②參數(shù)的傳遞。③子程序經(jīng)過調(diào)用后得到的數(shù)據(jù)來完成程序之間的參數(shù)傳遞。

④嵌套調(diào)用與遞歸調(diào)用。如圖4-10所示。4.子程序 (1)子程序概念RETLCALLSUB圖4-9子程序的調(diào)用與返回返回RETLCALLSUB圖4-9子程序的調(diào)用與返回LCALLARETRETLCALLB圖4-10子程序的嵌套調(diào)用與返回返回LCALLARETRETLCALLB圖4-10子(2)子程序設(shè)計(jì)舉例【例4.7】編寫程序,實(shí)現(xiàn)c=a2+b2,設(shè)a,b,c分別存于DA,DB,DC單元中。解:ORG 1000H MOV A,DAACALLSQRMOVR1,AMOVA,DBACALLSQR

(2)子程序設(shè)計(jì)舉例ADDA,R1MOVDC,ASJMP$SQR:MOVDPTR,#AAMOVCA,@A+DPTRRETAA:DB0,1,4,9,16DB25,36,49,64,81END返回本節(jié)ADDA,R1返回本節(jié)作業(yè)

P736、8思考題什么是偽指令?常用的偽指令有哪些,并指出相應(yīng)的功能。本章思考題與作業(yè)作業(yè)

P736、8思考題本章思考題3.5單片機(jī)控制水箱水位〖學(xué)習(xí)目標(biāo)〗:通過學(xué)習(xí)任務(wù)的完成方法,學(xué)習(xí)MCS-51單片機(jī)的位操作指令?!既蝿?wù)描述〗:消防水箱總是要保證有一定的水位,以防火災(zāi)發(fā)生,如果單純靠人工操作,時(shí)間不允許,而且還會有險(xiǎn)情發(fā)生。如果用單片機(jī)來代替人工就可以解決這個(gè)問題。3.5單片機(jī)控制水箱水位〖學(xué)習(xí)目標(biāo)〗:通過學(xué)習(xí)任務(wù)的完硬件電路硬件電路電路中:1)輸出:P1.0=1時(shí),M放水;P1.0=0時(shí),M關(guān)2)輸入:水位<A,T1、T2截止→P1.1=1,P1.2=1水位>B,T1、T2導(dǎo)通→P1.1=0,P1.2=0A<水位<B,T1止,T2通→P1.1=1,P1.2=0

水池水位自動控制裝置要求:水位<A放水;水位>B停放中斷方式可提高CPU的效率電路中:水池水位自動控制裝置要求:水位<A放程序設(shè)計(jì)CLRP1.0SETBP1.1SETBP1.2L1:JNBP1.2,L1SETBP1.0L2:JBP1.1,L2CLRP1.0SJMPL1END程序設(shè)計(jì)CLRP1.0相關(guān)知識1、單片機(jī)如何控制單根I/O口線?我們在上面任務(wù)中看到,P3口共有8根口線,現(xiàn)在我們只要控制其中一根線,在單片機(jī)中能不能實(shí)現(xiàn)?答案是肯定的。因?yàn)閱纹瑱C(jī)中有一類位操作指令。2、MCS-51單片機(jī)有哪些位操作指令?MCS-51單片機(jī)有一個(gè)位處理機(jī),它以進(jìn)位標(biāo)志做為位累加器,以內(nèi)部RAM可尋址的128個(gè)為存儲位。既然有位處理機(jī)功能,所以也就有相應(yīng)的位操作指令集,下面我們分別談?wù)?。相關(guān)知識1、單片機(jī)如何控制單根I/O口線?位操作:布爾操作,以二進(jìn)制位為單位進(jìn)行運(yùn)算,由布爾處理器實(shí)現(xiàn)。操作數(shù)范圍:C,位尋址區(qū)的位,11個(gè)可位尋址的寄存器位地址的四種表示: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等。位操作:布爾操作,以二進(jìn)制位為單位進(jìn)行運(yùn)算,由布爾處理器實(shí)現(xiàn)位變量傳送指令位清零和置位指令位邏輯運(yùn)算指令綜合舉例與練習(xí)返回本章首頁位變量傳送指令返回本章首頁1位變量傳送指令MOV C,bit ;C←(bit)MOV bit,C ;bit←C1位變量傳送指令MOV C,bit ;C←(bit)例1以知片內(nèi)RAM的(2FH)=10110101B

執(zhí)行MOVC,2FH.7或MOVC,7FH

結(jié)果C=?例2若C=1,(P1)=11000101B執(zhí)行MOVP1.3,CMOVP1.2,C后(P1)=?C=1(P1)=11001101B例3將P1.2送給P1.6MOVC,P1.3MOVP1.6,C返回本節(jié)例1以知片內(nèi)RAM的(2FH)=10110101B

2位清零和置位指令CLR C ;C←0CLR bit ;(bit)←0SETBC ;C←1SETBbit;(bit)←1返回本節(jié)2位清零和置位指令CLR C ;C←0返回本節(jié)3位邏輯運(yùn)算指令A(yù)NL C,bit ;C←C∧(bit)ANL C,/bit ;C←C∧(bit)ORL C,bit ;C←C∨(bit)ORL C,/bit ;C←C∨(bit)CPL C ;C←CCPL bit ;(bit)←(bit)返回本節(jié)3位邏輯運(yùn)算指令A(yù)NL C,bit ;C←C∧(bit)返例2已知A、B、C、D代表位地址,試編程實(shí)現(xiàn)

D=AB+ABMOV10H,CMOVC,ACC.0ANLC,P2.3ORLC,10HMOVP1.0,C例1試編程完成

P1.0=(ACC.0∧P2.3)∨C答:MOVC,BANLC,AMOVD,CMOVC,AANLC,BORLC,DMOVD,C綜合舉例與練習(xí)例2已知A、B、C、D代表位地址,試編程實(shí)現(xiàn)

例3用軟件實(shí)現(xiàn)下圖所示的P10~P13間的邏輯運(yùn)算。解:MOVC,P1.1ORLC,P1.2ANLC,P1.0MOVP13,CP1.1P1.2P1.0P1.3&例3用軟件實(shí)現(xiàn)下圖所示的P10~P13間的邏輯運(yùn)算。第四章MCS—51單片機(jī)的程序設(shè)計(jì)

匯編語言基本概念

匯編語言程序設(shè)計(jì)

本章思考題與作業(yè)第四章MCS—51單片機(jī)的程序設(shè)計(jì) 匯編語言基本概念匯編語言基本概念一、程序設(shè)計(jì)語言二、匯編語言的語句格式三、偽指令返回本章首頁匯編語言基本概念一、程序設(shè)計(jì)語言返回本章首頁一、程序設(shè)計(jì)語言 按照語言的結(jié)構(gòu)及其功能可以分為三種:1.機(jī)器語言:機(jī)器語言是用二進(jìn)制代碼0和1表示指令和數(shù)據(jù)的最原始的程序設(shè)計(jì)語言,計(jì)算機(jī)可以直接識別和執(zhí)行。2.匯編語言:是一種符號化語言,用助記符代替“0”、“1”,計(jì)算機(jī)不能直接執(zhí)行,要通過匯編程序匯編成機(jī)器語言后再執(zhí)行。不同的計(jì)算機(jī)匯編語言是不同的。3.高級語言:是一種不依賴具體計(jì)算機(jī)的語言,接近于人的自然語言,是面向過程或問題而獨(dú)立于機(jī)器的通用語言,必須要通過解釋程序或編譯程序?qū)崿F(xiàn)執(zhí)行。返回本節(jié)一、程序設(shè)計(jì)語言 按照語言的結(jié)構(gòu)及其功能可以分為三種:二、匯編語言的語句格式 1.匯編語言的指令類型MCS-51單片機(jī)匯編語言,包含兩類不同性質(zhì)的指令。(1)基本指令:即指令系統(tǒng)中的指令。它們都是機(jī)器能夠執(zhí)行的指令,每一條指令都有對應(yīng)的機(jī)器碼。(2)偽指令:匯編時(shí)用于控制匯編的指令。它們都是機(jī)器不執(zhí)行的指令,無機(jī)器碼。二、匯編語言的語句格式 1.匯編語言的指令類型2.匯編語言的語句格式匯編語言源程序是由匯編語句(即指令)組成的。匯編語言語句一般由四部分組成。

其典型的匯編語句格式如下:

[標(biāo)號:] 操作碼[操作數(shù)] [;注釋]

例如START:MOVA,30H ;(

A)

←(30H)2.匯編語言的語句格式其典型的匯編語句格式如下:(1)標(biāo)號是指語句地址的名字。命名規(guī)則:第一字符必須用英文字母;第二個(gè)字符以后可以用字母或數(shù)字0~9;組成標(biāo)號的字符不能超過6個(gè)字符。注:特殊功能寄存器名(SFR)、偽指令、助記符等不能作為標(biāo)號。例:請指出下列標(biāo)號是否正確。2AADDS+MDPTRXXXX(1)標(biāo)號是指語句地址的名字。XXXX(2)操作碼規(guī)定了語句執(zhí)行的具體操作。(3)操作數(shù)提供了操作所需要的數(shù)據(jù)或地址。(4)注釋對語句進(jìn)行解釋或說明,增加可讀性。返回本節(jié)(2)操作碼規(guī)定了語句執(zhí)行的具體操作。(3)操作數(shù)提供了操作ORGEQUDBDWDSBITEND三、偽指令 返回本節(jié)ORG三、偽指令 返回本節(jié)格式:ORGm功能:用來規(guī)定程序段在存儲器中存放的起始地址。例如:ORG 1000H START: MOV A,#20H MOV B,#30H﹍2.EQU——賦值偽指令格式:符號名EQU(或=)表達(dá)式給指定的符號名賦予一個(gè)確定的數(shù)值。例如:SUMEQU22HMOVA,SUM1.ORG—匯編起始偽指令說明:該程序段是從地址是1000H單元開始存放的。(A)=22H1000H74H20H格式:ORGm2.EQU——賦值偽指令1.ORG—匯格式:[標(biāo)號:]DB8位字節(jié)數(shù)據(jù)表

功能:從ROM某一地址單元開始,存入一組規(guī)定好的8位二進(jìn)制數(shù)。例:ORG8000HTAB:DB45H,49H,0AHTAB1:DB07H

3.DB——字節(jié)數(shù)據(jù)定義偽指令45H49H0AH07HTAB=8000HTAB1=8003H格式:[標(biāo)號:]DB8位字節(jié)數(shù)據(jù)表3.DB——字節(jié)格式:[標(biāo)號:]DW16位字?jǐn)?shù)據(jù)表

功能:從ROM某一地址單元開始,存入一組規(guī)定好的16位二進(jìn)制數(shù)。例:ORG3000HTAB:DW5678H,1234HDW3CH

4.DW——字?jǐn)?shù)據(jù)定義偽指令56H78H12H34H00H3CH格式:[標(biāo)號:]DW16位字?jǐn)?shù)據(jù)表4.DW——字5.DS——空間定義偽指令格式:[標(biāo)號:]DS表達(dá)式功能:從標(biāo)號指定的地址單元開始,在ROM中保留由表達(dá)式所指定個(gè)數(shù)的存儲單元作為備用的空間,并均填以零。

例:ORG2000HAB:DS06HTAB:MOVA,BTAB的地址應(yīng)為多少?2006H00H00H00H00H00H00H5.DS——空間定義偽指令格式:[標(biāo)號:]DS表達(dá)6.BIT—位地址符號定義偽指令7.END—匯編結(jié)束偽指令格式:符號名BIT表達(dá)式功能:將位地址賦給指定的符號名。

例:A1BITP1.0MOVC,A1MOVC,P1.0格式:[標(biāo)號:]

END[表達(dá)式]功能:結(jié)束匯編。

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

1.順序結(jié)構(gòu)96H+75H

10BH+F6H01H12二、結(jié)構(gòu)化程序設(shè)計(jì)順序程序是一種最簡單,最基圖4-1例4-1程序流程圖結(jié)束(40H)(A)(A)+(41H)(A)(A)(R1)(42H)(A)(R1)+(A)(R1)(R0)+C(R0)開始C(R0)圖4-1例4-1程序流程圖結(jié)束(40H)(A)ORG 1000HMOV A,40H ;取值A(chǔ)DDA,41H;40H和41H單元相加MOVR1,A;和送R1中CLRAADDCA,#00HMOVR0,AMOVA,42HADDA,R1MOVR1,ACLRAADDCA,R0MOVR0,ASJMP$END ORG 1000H【例4.2】設(shè)X、Y兩個(gè)小于10的整數(shù)分別存于片內(nèi)30H、31H單元,試求兩數(shù)的平方和并將結(jié)果存于32H單元。解:兩數(shù)均小于10,故兩數(shù)的平方和小于100,可利用乘法指令求平方。程序流程如圖4-2所示。

【例4.2】設(shè)X、Y兩個(gè)小于10的整數(shù)分別存于片內(nèi)結(jié)束取數(shù)據(jù)X求X2暫存X2取數(shù)據(jù)Y求Y2求X2+Y2開始保存平方和圖4-2例4.2程序流程圖結(jié)束取數(shù)據(jù)X求X2暫存X2取數(shù)據(jù)Y求Y2求X2+Y2開始保存ORG 2000HMOV A,30H ;取30H單元數(shù)據(jù)MOV B,A ;將X送入B寄存器MUL AB ;求X2,結(jié)果在累加器中MOV R1,A ;將結(jié)果暫存于R1寄存器中MOVA,31H;取31H單元數(shù)據(jù)MOV B,A ;將Y送入B寄存器MUL AB ;求Y2,結(jié)果在累加器中ADD A,R1 ;求X2+Y2MOV 32H,A ;保存數(shù)據(jù)SJMP$ ;暫停END返回本節(jié)ORG 2000H返回本節(jié)(1)分支結(jié)構(gòu)的基本形式分支結(jié)構(gòu)有三種基本形式,如圖4-3所示。分支結(jié)構(gòu)程序的設(shè)計(jì)要點(diǎn)如下:①先建立可供條件轉(zhuǎn)移指令測試的條件。②選用合適的條件轉(zhuǎn)移指令。③在轉(zhuǎn)移的目的地址處設(shè)定標(biāo)號。

2.分支結(jié)構(gòu)(1)分支結(jié)構(gòu)的基本形式2.分支結(jié)構(gòu)條件滿足?AYN(a)條件滿足?ABNY(b)(c)A0A1AnK=0K=1…K=nK=?……圖4-3分支程序結(jié)構(gòu)流程圖返回條件滿足?AYN(a)條件滿足?ABNY(b)(c)A0A1【例4.3】根據(jù)下列程序段,畫出程序流程圖。JZL1MOVR1,#0FFHSJMPL2L1:MOVR1,#00HL2:SJMPL2(A)=0(R1)00H(R1)FFH(2)分支結(jié)構(gòu)程序設(shè)計(jì)舉例NY【例4.3】根據(jù)下列程序段,畫出程序流程圖。(A)=0(R1【例4.4】設(shè)X存在30H單元中,根據(jù)下式

X+2 X>0Y= 100 X=0X X<0求出Y值,將Y值存入31H單元。解:根據(jù)數(shù)據(jù)的符號位判別該數(shù)的正負(fù),若最高位為0,再判別該數(shù)是否為0。程序流程如圖4-4所示。

【例4.4】設(shè)X存在30H單元中,根據(jù)下式A為負(fù)數(shù)?取數(shù),A←(30H)開始結(jié)束A=0?YNNA←XA←64HA←X+2存數(shù),(31H)←A圖4-4例4.3程序流程圖YA為負(fù)數(shù)?取數(shù),A←(30H)開始結(jié)束A=0?YNNA←XAORG2000HMOV A,30H ;取數(shù)JB ACC.7,NEG;負(fù)數(shù),轉(zhuǎn)NEGJZ ZER0 ;為零,轉(zhuǎn)ZER0ADD A,#02H ;為正數(shù),求X+2AJMPSAVE ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)ZER0:MOV A,#64H;數(shù)據(jù)為零,Y=100AJMPSAVE ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)NEG:CPL A ;求XSAVE:MOV 31H,A;保存數(shù)據(jù)SJMP $ ;暫停END返回本節(jié)ORG2000H返回本節(jié)3.循環(huán)結(jié)構(gòu) (1)循環(huán)程序的結(jié)構(gòu)(如圖4-5所示)☆循環(huán)程序一般包括如下四個(gè)部分:①初始化②循環(huán)體③循環(huán)控制④結(jié)束☆循環(huán)程序按結(jié)構(gòu)形式,有單重循環(huán)與多重循環(huán)?!钤诙嘀匮h(huán)中,只允許外重循環(huán)嵌套內(nèi)重循環(huán)?!畈辉试S循環(huán)相互交叉,也不允許從循環(huán)程序的外部跳入循環(huán)程序的內(nèi)部(如圖4-6所示)。3.循環(huán)結(jié)構(gòu) (1)循環(huán)程序的結(jié)構(gòu)(如圖4-5所示)(a)當(dāng)型循環(huán)結(jié)構(gòu)(b)直到型循環(huán)結(jié)構(gòu)循環(huán)結(jié)束?循環(huán)體YN初始化修改循環(huán)參數(shù)結(jié)束部分開始結(jié)束循環(huán)結(jié)束?循環(huán)體Y初始化修改循環(huán)參數(shù)結(jié)束部分開始N結(jié)束圖4-5循環(huán)結(jié)構(gòu)程序流程圖返回(a)當(dāng)型循環(huán)結(jié)構(gòu)(b)直到型循環(huán)結(jié)構(gòu)循環(huán)結(jié)束?循環(huán)體YN初外循環(huán)中循環(huán)內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)內(nèi)循環(huán)(a)嵌套正確(b)嵌套正確(c)交叉不正確圖4-6多重循環(huán)示意圖返回外循環(huán)中循環(huán)內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)內(nèi)循環(huán)(a)嵌套正(2)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例【例4.5】試編程實(shí)現(xiàn)將單片機(jī)的2000H—20FFH單元內(nèi)容清零。解:設(shè)置一個(gè)計(jì)數(shù)器R1控制循環(huán)次數(shù),每清零一次,計(jì)數(shù)器加1。程序流程如下圖所示。(2)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例【例4.5】試編程實(shí)現(xiàn)將單片機(jī)的2任務(wù)四-消防水箱水位的控制課件ORG0100HMOVDPTR,#2000HMOVR0,#00HMOVA,#00HL1:MOVX@DPTR,AINCDPTRINCR0CJNER0,#00H,L1SJMP$ENDORG0100H【例4.5】在單片機(jī)內(nèi)部RAM50H~60H單元中存放一組數(shù),試編程找出其中最大數(shù)并將該數(shù)送2FH單元中。解:設(shè)置一個(gè)計(jì)數(shù)器R1控制循環(huán)次數(shù),每處理完一個(gè)數(shù)據(jù),計(jì)數(shù)器減1。程序流程如圖4-7所示。【例4.5】在單片機(jī)內(nèi)部RAM50H~60H單元中圖4-7例4.5的程序流程圖圖4-7例4.5的程序流程圖 ORG 1000H MOV R0,#50HMOVR1,#10H MOV A,@R0INCR0MOV40H,@R0MOVB,ACLRCSUBBA,4

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論