子情景3 彩燈控制器)_第1頁
子情景3 彩燈控制器)_第2頁
子情景3 彩燈控制器)_第3頁
子情景3 彩燈控制器)_第4頁
子情景3 彩燈控制器)_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、情境情境1 彩燈控制電路的制作與調(diào)試彩燈控制電路的制作與調(diào)試 子情境子情境1 認識單片機最小系統(tǒng)認識單片機最小系統(tǒng)子情境子情境2 單片機最小系統(tǒng)安裝與調(diào)試單片機最小系統(tǒng)安裝與調(diào)試子情境子情境3 彩燈控制程序設(shè)計與調(diào)試彩燈控制程序設(shè)計與調(diào)試一、任務(wù)說明一、任務(wù)說明 P1口作為輸出口??谧鳛檩敵隹?。P1.0至至P1.7接接8個發(fā)光二極個發(fā)光二極管。要求編寫程序?qū)崿F(xiàn)如下功能:管。要求編寫程序?qū)崿F(xiàn)如下功能:8個發(fā)光二個發(fā)光二極管依次亮滅并循環(huán),延時極管依次亮滅并循環(huán),延時0.1秒(已知秒(已知fosc=12MHz)。)。重點:重點: 1、學(xué)習(xí)、學(xué)習(xí)P1口作為輸出口的使用方法??谧鳛檩敵隹诘氖褂梅椒?。

2、2、匯總數(shù)據(jù)傳送指令、算數(shù)運算指令、匯總數(shù)據(jù)傳送指令、算數(shù)運算指令 3、學(xué)習(xí)延時程序的設(shè)計方法。、學(xué)習(xí)延時程序的設(shè)計方法。任務(wù)任務(wù)1:流水燈控制:流水燈控制二、任務(wù)分析二、任務(wù)分析1、硬件分析硬件分析 發(fā)光二極管采用共發(fā)光二極管采用共陽極連接,陽極連接,P1口某個引口某個引腳輸出腳輸出“0”則對應(yīng)的燈則對應(yīng)的燈點亮。點亮。89S522、軟件分析、軟件分析 (1)整體任務(wù)分析:控制字始終是)整體任務(wù)分析:控制字始終是7個個“1”和和1個個“0”,“0”的位的位置每隔置每隔0.1秒左移秒左移1位,然后由位,然后由P1口輸出控制字點燈??谳敵隹刂谱贮c燈。(2)程序流程圖)程序流程圖控制字初值控制字初

3、值0FEH送送A控制字送控制字送p1口點燈口點燈調(diào)用延時子程序調(diào)用延時子程序?qū)⒖刂谱肿笠茖⒖刂谱肿笠?位位開始開始(3)關(guān)于左移運算:可以利用循環(huán)左移指令實現(xiàn))關(guān)于左移運算:可以利用循環(huán)左移指令實現(xiàn)指令性質(zhì):邏輯運算指令指令性質(zhì):邏輯運算指令指令格式:指令格式: RL A注意:操作數(shù)只能是累加器。注意:操作數(shù)只能是累加器。指令說明:執(zhí)行時累加器指令說明:執(zhí)行時累加器A的存儲內(nèi)容(的存儲內(nèi)容(8位位2進制數(shù)),進制數(shù)),整體向左移動整體向左移動1位(低位移動到相鄰的高位),最高位(低位移動到相鄰的高位),最高位補回到最低位。位補回到最低位。指令應(yīng)用:常用于完成快速乘法,每次執(zhí)行累加器內(nèi)容指令應(yīng)用

4、:常用于完成快速乘法,每次執(zhí)行累加器內(nèi)容擴大擴大2倍。倍。相關(guān)指令:相關(guān)指令:RR A; RLC A; RRC A(4)數(shù)據(jù)傳送類指令匯總)數(shù)據(jù)傳送類指令匯總以以A為目的操作數(shù)為目的操作數(shù)MOV A,Rn;A (Rn)MOV A,direct ;A(direct)MOV A,Ri;A(Ri)MOV A,#data ;A #data以以Rn為目的操作數(shù)為目的操作數(shù)MOV Rn,A;Rn (A)MOV Rn,direct;Rn (direct)MOV Rn,#data;Rn #data以直接地址為目的操作數(shù)以直接地址為目的操作數(shù)MOV direct,#data;direct dataMOV dir

5、ect1,direct2 ;direct1(direct2)MOV direct,Ri; direct (Ri)MOV direct, Rn ; direct (Rn)MOV direct, A ; direct (A)以間接地址為目的操作數(shù)以間接地址為目的操作數(shù)MOV Ri,A;(;(Ri) AMOV Ri,direct;(;(Ri) (direct)MOV Ri,#data;(;(Ri) #data例如:設(shè)(例如:設(shè)(30H)=6FH,(,(R1)=40H,執(zhí)行,執(zhí)行MOV R1,30H后,后,30H單元中數(shù)據(jù)取出送單元中數(shù)據(jù)取出送入入R1間接尋址的間接尋址的40H單元,(單元,(40H)

6、=6FH?!纠纠?】 已知相應(yīng)單元的內(nèi)容如下,請指出下列指令執(zhí)行后各單元內(nèi)容相應(yīng)的變化。寄存器R050H寄存器R166H寄存器R630H內(nèi)部RAM:50H60H內(nèi)部RAM:66H45H內(nèi)部RAM:70H40H(1) MOV A,R6 (2) MOV R6,70H(3) MOV 70H,50H(4) MOV 40H,R0(5) MOV R1,#88H解:(1) MOV A,R6執(zhí)行后(A)=30H。(2) MOV R6,70H執(zhí)行后(R6)=40H。(3) MOV 70H,50H執(zhí)行后(70H)=60H。(4) MOV 40H,R0執(zhí)行后(40H)=60H。(5) MOV R1,#88H執(zhí)行后

7、(66H)=88H。【例例2】 將片內(nèi)將片內(nèi)RAM 30H單元與單元與40H單元中的內(nèi)容互換單元中的內(nèi)容互換。方法方法1(直接地址傳送(直接地址傳送法):法): MOVA,30H MOV30H,40H MOV40H,A SJMP$方法方法2(間接地址傳送法):(間接地址傳送法): MOVR0,#40H MOVR1,#30H MOVA,R0 MOVB,R1 MOVR1,A MOVR0,B SJMP$以以DPTR為目的操作數(shù)為目的操作數(shù)MOV DPTR,#data16 ;DPTR #data16例如執(zhí)行例如執(zhí)行 MOV DPTR,#2000H 后,后,(DPTR)= 2000H。(5)延時子程序設(shè)

8、計方法)延時子程序設(shè)計方法實現(xiàn)有限循環(huán)的關(guān)鍵指令實現(xiàn)有限循環(huán)的關(guān)鍵指令DJNZ指令名稱:減一不為零轉(zhuǎn)移,指令性質(zhì):條件轉(zhuǎn)移類指令指令名稱:減一不為零轉(zhuǎn)移,指令性質(zhì):條件轉(zhuǎn)移類指令格式:格式:DJNZ Rn,標號;先將(標號;先將(Rn)-1,再判斷(再判斷(Rn)是否為)是否為0, ;若不為;若不為0,則跳轉(zhuǎn)到標號所在的語句,若為零則執(zhí)行下一條語句。,則跳轉(zhuǎn)到標號所在的語句,若為零則執(zhí)行下一條語句。DJNZ dir,標號;先將(標號;先將(dir)-1,再判斷(再判斷(dir)是否為)是否為0,;若不為;若不為0,則跳轉(zhuǎn)到標號所在的語句,若為零則執(zhí)行下一條語句。,則跳轉(zhuǎn)到標號所在的語句,若為零

9、則執(zhí)行下一條語句。注意:這條指令可以用來構(gòu)建有限循環(huán)程序。具體做法是將循環(huán)注意:這條指令可以用來構(gòu)建有限循環(huán)程序。具體做法是將循環(huán)次數(shù)賦給某個工作寄存器(一般首選次數(shù)賦給某個工作寄存器(一般首選R7),用來對循環(huán)主體倒),用來對循環(huán)主體倒計數(shù),每執(zhí)行一次循環(huán)主體就用該語句測試一次(次數(shù)自動減計數(shù),每執(zhí)行一次循環(huán)主體就用該語句測試一次(次數(shù)自動減一),若循環(huán)次數(shù)不夠,則跳回去再執(zhí)行一次循環(huán)主體,直至一),若循環(huán)次數(shù)不夠,則跳回去再執(zhí)行一次循環(huán)主體,直至循環(huán)次數(shù)減到零,則有限循環(huán)結(jié)束,不再重復(fù)執(zhí)行循環(huán)主體,循環(huán)次數(shù)減到零,則有限循環(huán)結(jié)束,不再重復(fù)執(zhí)行循環(huán)主體,退出循環(huán)執(zhí)行下一語句。退出循環(huán)執(zhí)行下一

10、語句。【例【例3】分析下面程序段的執(zhí)行結(jié)果分析下面程序段的執(zhí)行結(jié)果ST:MOV R7,#10CLR A;累加器清零;累加器清零LOOP:ADD A,R7;求和;求和DJNZ R7,LOOPMOV R0,ASJMP $;原地踏步;原地踏步延時子程序的結(jié)構(gòu)延時子程序的結(jié)構(gòu) 采用類似鐘表模型的雙重循環(huán)結(jié)構(gòu),依靠幾條指令的反復(fù)執(zhí)采用類似鐘表模型的雙重循環(huán)結(jié)構(gòu),依靠幾條指令的反復(fù)執(zhí)行來湊夠主程序所需要的延時時間,所以循環(huán)次數(shù)需要根據(jù)具體行來湊夠主程序所需要的延時時間,所以循環(huán)次數(shù)需要根據(jù)具體延時時間來計算。延時時間來計算。 雙重循環(huán)的執(zhí)行過程如下。循環(huán)假設(shè)內(nèi)循環(huán)次數(shù)為雙重循環(huán)的執(zhí)行過程如下。循環(huán)假設(shè)內(nèi)循

11、環(huán)次數(shù)為X,外循環(huán),外循環(huán)次數(shù)為次數(shù)為Y,內(nèi)循環(huán)執(zhí)行,內(nèi)循環(huán)執(zhí)行1次進行次進行X-1判斷,若不為判斷,若不為0(次數(shù)不到)跳(次數(shù)不到)跳回判斷指令本身,內(nèi)循環(huán)執(zhí)行回判斷指令本身,內(nèi)循環(huán)執(zhí)行X次后,循環(huán)結(jié)束執(zhí)行外循環(huán)判斷;次后,循環(huán)結(jié)束執(zhí)行外循環(huán)判斷;外循環(huán)執(zhí)行外循環(huán)執(zhí)行1次進行次進行Y-1判斷,若不為判斷,若不為0(次數(shù)不到)則返回到(次數(shù)不到)則返回到內(nèi)循內(nèi)循環(huán)賦初值的指令環(huán)賦初值的指令,內(nèi)循環(huán)重新執(zhí)行,內(nèi)循環(huán)重新執(zhí)行X次。即內(nèi)循環(huán)每執(zhí)行一圈(次。即內(nèi)循環(huán)每執(zhí)行一圈(X次),外循環(huán)執(zhí)行一次,外循環(huán)執(zhí)行次),外循環(huán)執(zhí)行一次,外循環(huán)執(zhí)行Y次后(內(nèi)循環(huán)執(zhí)行次后(內(nèi)循環(huán)執(zhí)行Y圈),圈),整個程序結(jié)

12、束,延時時間湊夠,子程序返回,繼續(xù)執(zhí)行主程序。整個程序結(jié)束,延時時間湊夠,子程序返回,繼續(xù)執(zhí)行主程序。 一般將外循環(huán)次數(shù)規(guī)定為一般將外循環(huán)次數(shù)規(guī)定為200次,列方程求解內(nèi)循環(huán)次數(shù)。次,列方程求解內(nèi)循環(huán)次數(shù)。例:已知例:已知fosc=12MHz,要求實現(xiàn),要求實現(xiàn)0.1秒延時時間,求秒延時時間,求X。 雙重循環(huán)程序雙重循環(huán)程序 指令執(zhí)行次數(shù)指令執(zhí)行次數(shù) 每次執(zhí)行周期數(shù)每次執(zhí)行周期數(shù) DEL: MOV R7,#200 1 1 DEL1: MOV R6,#X 200 1 NOP 200 1 DEL2: DJNZ R6,DEL2 200*X 2 DJNZ R7,DEL1 200 2 RET 1 2列出

13、方程:列出方程:(指令執(zhí)行次數(shù)指令執(zhí)行次數(shù)*每次執(zhí)行周期數(shù)每次執(zhí)行周期數(shù))* M=0.1S其中其中M為機器周期,當(dāng)為機器周期,當(dāng)fosc=12MHz時時M=12/fosc=1S計算后得到計算后得到X=248,誤差為,誤差為3 S。三、任務(wù)實施三、任務(wù)實施步驟步驟1:各小組按照流程圖設(shè)計個部分程序。:各小組按照流程圖設(shè)計個部分程序。步驟步驟2:程序匯編無誤后,利用:程序匯編無誤后,利用ISP軟件和下載線將目標軟件和下載線將目標文件(文件(.HEX)程序代碼寫入本組的單片機芯片中。)程序代碼寫入本組的單片機芯片中。步驟步驟3:接通直流電源,啟動電路板觀察現(xiàn)象,如現(xiàn)象:接通直流電源,啟動電路板觀察現(xiàn)

14、象,如現(xiàn)象不對則重復(fù)步驟不對則重復(fù)步驟1、2。步驟步驟4:現(xiàn)象無誤,請求教師檢查、評價。:現(xiàn)象無誤,請求教師檢查、評價。步驟步驟5:編制項目報告并提交。:編制項目報告并提交。四、任務(wù)拓展四、任務(wù)拓展如何實現(xiàn)如何實現(xiàn)8個燈累加點亮并循環(huán)?個燈累加點亮并循環(huán)? 提示:每過提示:每過0.1秒控制字中增加秒控制字中增加1個個0,全,全0后回到全后回到全1。加法和減法運算匯總:加法和減法運算匯總:1、不帶進位的加法指令、不帶進位的加法指令A(yù)DDADD A,Rn ;A (A) + (Rn)ADD A,direct;A (A) +(direct)ADD A,Ri;A (A) +(Ri)ADD A,#data

15、;A (A) + #data執(zhí)行后刷新全部標志位:執(zhí)行后刷新全部標志位:CY,AC,OV,P。OV=D7 D62、帶進位的加法指令、帶進位的加法指令A(yù)DDC A,Rn;A A + Rn + CADDC A,direct;A A +(direct)+ CADDC A,Ri;A A +(Ri)+ CADDC A,#data;A A + #data + CC為執(zhí)行指令前進位標志為執(zhí)行指令前進位標志CY的值。的值。執(zhí)行后刷新全部標志位:執(zhí)行后刷新全部標志位:CY,AC,OV,P。例如,設(shè)(例如,設(shè)(A)=20H,(,(R0)=21H,C=1,執(zhí)行指令,執(zhí)行指令 ADDC,R0后,后, (A)=42H。

16、【例】【例】 :雙字節(jié)數(shù)據(jù)求和:雙字節(jié)數(shù)據(jù)求和 已知已知D0=12B5H,存放在片內(nèi),存放在片內(nèi)RAM的的31H(高字節(jié))和(高字節(jié))和30H(低字節(jié))單元,(低字節(jié))單元,D1=43ACH,存放在片內(nèi),存放在片內(nèi)RAM的的41H(高字(高字節(jié))和節(jié))和40H(低字節(jié))單元,試編程求和并將結(jié)果放在工作寄(低字節(jié))單元,試編程求和并將結(jié)果放在工作寄存器存器R1(高字節(jié))、(高字節(jié))、R0(低字節(jié))中。(低字節(jié))中。算法:算法: 同權(quán)相加同權(quán)相加,低位向高位進位。,低位向高位進位。 應(yīng)注意高位字節(jié)數(shù)據(jù)相加時應(yīng)同時將低位字節(jié)相加應(yīng)注意高位字節(jié)數(shù)據(jù)相加時應(yīng)同時將低位字節(jié)相加的進位溢出(進位標志的進位溢

17、出(進位標志CY)加上。)加上。 程序:程序: MOV A, 30H; 取低位字節(jié)數(shù)據(jù)取低位字節(jié)數(shù)據(jù) ADD A, 40H; 低位字節(jié)數(shù)據(jù)相加低位字節(jié)數(shù)據(jù)相加 MOV R0, A; 存低位和數(shù)據(jù)存低位和數(shù)據(jù) MOV A, 31H; 取高位字節(jié)數(shù)據(jù)取高位字節(jié)數(shù)據(jù) ADDC A, 41H; 高位字節(jié)數(shù)據(jù)相加高位字節(jié)數(shù)據(jù)相加 MOV R1, A; 存高位和數(shù)據(jù)存高位和數(shù)據(jù) ADDC A,#00H; 取最高位數(shù)據(jù)取最高位數(shù)據(jù) MOV R2, A; 存最高位數(shù)據(jù)存最高位數(shù)據(jù) 3帶借位減指令帶借位減指令SUBB A,Rn;A A - Rn - CSUBB A,direct ;A A -(direct)-

18、CSUBB A,Ri;A A -(Ri)- CSUBB A,#data ;A A - #data C執(zhí)行后刷新全部標志位:執(zhí)行后刷新全部標志位:CY,AC,OV,P。例如,設(shè)例如,設(shè)A=39H,R0=20H,(,(20H)=32H,C=1,執(zhí)行指令,執(zhí)行指令 SUBB,R0后,后,A=06H4加加1指令指令I(lǐng)NC A;A A + 1,執(zhí)行后刷新標志位,執(zhí)行后刷新標志位P。INC Rn;Rn Rn + 1INC direct ;(;(direct) (direct)+ 1INC Ri;(;(Ri)(Ri)+ 1INC DPTR;DPTR DPTR + 1例如,(例如,(30H)=22H,執(zhí)行,執(zhí)

19、行 INC 30H 后,后,(30H)=23H。5減減1指令指令DEC A;A A - 1DEC Rn;Rn Rn - 1DEC direct;direct (direct)- 1DEC Ri ;(;(Ri)(Ri)- 1例如,例如,R0=30H,(,(30H)=22H,執(zhí)行,執(zhí)行 DEC R0 后,(后,(30H)=21H。6、乘法指令、乘法指令MUL AB ;BA ABA和和B中各存放一個中各存放一個8位無符號數(shù),指令執(zhí)行后,位無符號數(shù),指令執(zhí)行后,16位乘積的高位乘積的高8位在位在B中,低中,低8位存位存A中。中。 執(zhí)行執(zhí)行指令后標志位指令后標志位CY清清0,乘積大于,乘積大于1字節(jié)時,

20、字節(jié)時,OV置置1。例如,例如,A=30H,B=60H,執(zhí)行,執(zhí)行 MUL AB 后,后,A=00H,B=12H,CY=0,OV=1。7除法指令除法指令 DIV AB ;AB商在商在A中,余數(shù)在中,余數(shù)在B中中 A和和B中各存放一個中各存放一個8位無符號數(shù),位無符號數(shù),A放被除放被除數(shù),數(shù),B放除數(shù)。指令執(zhí)行后,放除數(shù)。指令執(zhí)行后,A中存放商,中存放商,B中存入余數(shù)。若中存入余數(shù)。若B=00H,則指令執(zhí)行后,則指令執(zhí)行后OV=1,A與與B不變。不變。 例如,例如,A=30H,B=07H,執(zhí)行,執(zhí)行 DIV AB 后,后,A=06H,B=06H。任務(wù)二:轉(zhuǎn)彎燈控制任務(wù)二:轉(zhuǎn)彎燈控制一、任務(wù)說明一

21、、任務(wù)說明 P1口作為輸入、輸出口??谧鳛檩斎搿⑤敵隹?。P1.0、P1.1接開關(guān)接開關(guān)K1、K2;P1.2、P1.3接發(fā)光二極管接發(fā)光二極管L1、L2;P1.4、P1.5接接L5、L6。K1作為左轉(zhuǎn)彎開關(guān),作為左轉(zhuǎn)彎開關(guān),K2作為右轉(zhuǎn)彎開關(guān)。作為右轉(zhuǎn)彎開關(guān)。L1、L2作為左轉(zhuǎn)彎燈,作為左轉(zhuǎn)彎燈,L5、L6作為右轉(zhuǎn)彎燈。要求編寫作為右轉(zhuǎn)彎燈。要求編寫程序?qū)崿F(xiàn)如下功能:向上打程序?qū)崿F(xiàn)如下功能:向上打K1時時(K1=1),左轉(zhuǎn)彎燈,左轉(zhuǎn)彎燈以一定頻率閃爍,向上打以一定頻率閃爍,向上打K2時時(K2=1),右轉(zhuǎn)彎燈以,右轉(zhuǎn)彎燈以一定頻率閃爍,兩開關(guān)同時向上或向下,四燈都滅。一定頻率閃爍,兩開關(guān)同時向上

22、或向下,四燈都滅。 燈閃爍一次即可,閃爍時先亮燈閃爍一次即可,閃爍時先亮0.5S再滅再滅0.5S。二、任務(wù)分析二、任務(wù)分析1、硬件說明、硬件說明 P1口為準雙向口為準雙向I/O接口,輸出單條指令接口,輸出單條指令完成,輸入時應(yīng)當(dāng)先完成,輸入時應(yīng)當(dāng)先向?qū)?yīng)的端口鎖存器向?qū)?yīng)的端口鎖存器寫入寫入1,然后讀入數(shù),然后讀入數(shù)據(jù)。據(jù)。 2、軟件說明、軟件說明(1)整體分析:先讀入開關(guān)的狀態(tài),跟據(jù)開關(guān)的四種狀態(tài)分情況控制燈)整體分析:先讀入開關(guān)的狀態(tài),跟據(jù)開關(guān)的四種狀態(tài)分情況控制燈的亮滅???zé)敉瓿珊蠓祷亻_始繼續(xù)讀開關(guān),保證開關(guān)持續(xù)有效。的亮滅???zé)敉瓿珊蠓祷亻_始繼續(xù)讀開關(guān),保證開關(guān)持續(xù)有效。 (2)多分支

23、判斷的實現(xiàn):開關(guān)有四種狀態(tài),對應(yīng)燈有四種控制規(guī)律??刹扇≈瘘c)多分支判斷的實現(xiàn):開關(guān)有四種狀態(tài),對應(yīng)燈有四種控制規(guī)律??刹扇≈瘘c檢測的方式實現(xiàn)分支控制。即讀入開關(guān)狀態(tài)后先判斷是否為檢測的方式實現(xiàn)分支控制。即讀入開關(guān)狀態(tài)后先判斷是否為00,若為,若為00則燈全滅;則燈全滅;若不為若不為00則判斷開關(guān)是否為則判斷開關(guān)是否為01,若為,若為01則左轉(zhuǎn)彎燈閃爍;若不為則左轉(zhuǎn)彎燈閃爍;若不為01則判斷開關(guān)是則判斷開關(guān)是否為否為10,若為,若為10則右轉(zhuǎn)彎燈閃爍;若不為則右轉(zhuǎn)彎燈閃爍;若不為10則必然為則必然為11,燈全滅。,燈全滅。K1K0狀態(tài)狀態(tài)控?zé)粢?guī)律控?zé)粢?guī)律控制字控制字00全滅全滅0FFH01左轉(zhuǎn)

24、彎燈閃爍左轉(zhuǎn)彎燈閃爍0F3H,0FFH10右轉(zhuǎn)彎燈閃爍右轉(zhuǎn)彎燈閃爍0CFH,0FFH11全滅全滅0FFH(3)實現(xiàn)分支判斷的關(guān)鍵指令:條件轉(zhuǎn)移指令)實現(xiàn)分支判斷的關(guān)鍵指令:條件轉(zhuǎn)移指令CJNE指令名稱:比較不相等轉(zhuǎn)移。指令名稱:比較不相等轉(zhuǎn)移。指令格式:指令格式:CJNE A,#data,rel;若若(A) data, 則跳到標號處執(zhí)行指令則跳到標號處執(zhí)行指令,否則順序執(zhí)行。,否則順序執(zhí)行。對借位標志有影響:若對借位標志有影響:若 (A)data,則,則CY=1,否則,否則CY=0。CJNE A,direct,rel;若;若(A)(dir), 則跳到標號處執(zhí)行指令則跳到標號處執(zhí)行指令,否則順序

25、執(zhí)行。,否則順序執(zhí)行。CJNE Rn,#data,rel;若若(Rn)data, 則跳到標號處執(zhí)行指令則跳到標號處執(zhí)行指令,否則順序執(zhí)行。,否則順序執(zhí)行。單次判斷單次判斷程序結(jié)構(gòu):程序結(jié)構(gòu):(5)開關(guān)狀態(tài)讀入)開關(guān)狀態(tài)讀入置置1端口鎖存器:端口鎖存器:SETB指令屬性:位運算指令指令屬性:位運算指令指令格式:指令格式: SETB C;C1,位累加器置,位累加器置1。 SETB bit;bit1,置,置1任何任何1位。位。Bit的范圍:片內(nèi)的范圍:片內(nèi)RAM的位尋址區(qū)的位尋址區(qū)20H2FH;SFR中支持位尋址的寄存器,中支持位尋址的寄存器,如如A,B,PSW,P0P3。類似的指令:類似的指令:M

26、OVC,bit;Cbit,位數(shù)據(jù)傳送指令。,位數(shù)據(jù)傳送指令。MOV bit,C;bitC,位數(shù)據(jù)傳送指令。,位數(shù)據(jù)傳送指令。CLRC;C0,位清,位清0指令。指令。CLRbit;bit0,位清,位清0指令。指令。CPLC;CC,位取反指令。,位取反指令。CPLbit;bit bit,位取反指令。,位取反指令。保留開關(guān)狀態(tài)保留開關(guān)狀態(tài)P1口狀態(tài)讀入后,需清口狀態(tài)讀入后,需清0高高6位,只保留低位,只保留低2位。位。存儲單元指定位置清存儲單元指定位置清0實現(xiàn)指令:實現(xiàn)指令:ANL指令名稱:邏輯與指令。指令屬性:邏輯運算指令。指令名稱:邏輯與指令。指令屬性:邏輯運算指令。指令格式:指令格式: ANL

27、 A,direct ;A (A)direct ANL A,Rn ; A (A)Rn ANL A,Ri ; A (A)(Ri) ANL A,#data ; A (A)#data ANL direct,A ;(direct) (direct)(A) ANL direct,#data ; (direct)(direct)#data注意:注意: 以上指令結(jié)果通常影響程序狀態(tài)字寄存器以上指令結(jié)果通常影響程序狀態(tài)字寄存器PSW的的P標志。標志。存儲單元存儲單元指定位清指定位清0的做法:按照需清的做法:按照需清0的位置填的位置填0,需保留的位置填,需保留的位置填1的原則構(gòu)建的原則構(gòu)建清清0常數(shù),然后利用常數(shù)

28、,然后利用ANL指令實現(xiàn)運算。指令實現(xiàn)運算。相近的指令:邏輯或指令相近的指令:邏輯或指令ORL,邏輯異或指令,邏輯異或指令XRL,清,清0指令指令CLR,取反指令,取反指令CPL。邏輯或可實現(xiàn)邏輯或可實現(xiàn)存儲單元存儲單元指定位置指定位置1,邏輯異或可實現(xiàn),邏輯異或可實現(xiàn)存儲單元存儲單元指定位取反。指定位取反。(6)程序流程圖:)程序流程圖:開始開始置置1鎖存器,讀開關(guān)鎖存器,讀開關(guān)保留后保留后2位送位送A是否為是否為00四燈全滅四燈全滅是否為是否為01左燈閃爍左燈閃爍是否為是否為10右燈閃爍右燈閃爍全滅全滅 ORG 0200 DEL: MOV R1,#05 DEL1: MOV R2,#200

29、DEL2: MOV R3,#126 DEL3: DJNZ R3,DEL3 DJNZ R2,DEL2 DJNZ R1,DEL1 RET END三、任務(wù)實施三、任務(wù)實施步驟步驟1:各小組按照流程圖設(shè)計個部分程序。:各小組按照流程圖設(shè)計個部分程序。步驟步驟2:程序匯編無誤后,利用:程序匯編無誤后,利用ISP軟件和下載線將目標軟件和下載線將目標文件(文件(.HEX)程序代碼寫入本組的單片機芯片中。)程序代碼寫入本組的單片機芯片中。步驟步驟3:接通直流電源,啟動電路板觀察現(xiàn)象,如現(xiàn)象:接通直流電源,啟動電路板觀察現(xiàn)象,如現(xiàn)象不對則重復(fù)步驟不對則重復(fù)步驟1、2。步驟步驟4:現(xiàn)象無誤,請求教師檢查、評價。:

30、現(xiàn)象無誤,請求教師檢查、評價。步驟步驟5:編制項目報告并提交。:編制項目報告并提交。任務(wù)任務(wù)3 交通燈控制交通燈控制一、任務(wù)說明一、任務(wù)說明P1口控制口控制6個燈,紅、黃、綠各兩個,編程實現(xiàn)交通燈控制規(guī)律。個燈,紅、黃、綠各兩個,編程實現(xiàn)交通燈控制規(guī)律。兩紅燈亮兩紅燈亮延時延時1秒秒東西路口綠燈亮,南北路口紅燈亮東西路口綠燈亮,南北路口紅燈亮延時延時6秒秒東西路黃燈閃爍東西路黃燈閃爍8次,南北路口紅燈亮次,南北路口紅燈亮每次延時每次延時1秒秒兩紅燈亮兩紅燈亮延時延時1秒秒東西路口紅燈亮,南北路口綠燈亮東西路口紅燈亮,南北路口綠燈亮延時延時6秒秒東西路紅燈亮,南北路口黃燈閃爍東西路紅燈亮,南北路

31、口黃燈閃爍8次次每次延時每次延時1秒秒4.2.5 子程序子程序 1子程序概念子程序概念 所謂調(diào)用子程序,暫時中斷主程序的執(zhí)行,而所謂調(diào)用子程序,暫時中斷主程序的執(zhí)行,而轉(zhuǎn)到子程序的入口地址去執(zhí)行子程序。如圖轉(zhuǎn)到子程序的入口地址去執(zhí)行子程序。如圖4-10所示。調(diào)用子程序應(yīng)注意:所示。調(diào)用子程序應(yīng)注意:(1)子程序占用的存儲單元和寄存器。)子程序占用的存儲單元和寄存器。 (2)參數(shù)的傳遞。)參數(shù)的傳遞。(3)子程序經(jīng)過調(diào)用后得到的數(shù)據(jù)來完成程序)子程序經(jīng)過調(diào)用后得到的數(shù)據(jù)來完成程序之間的參數(shù)傳遞。之間的參數(shù)傳遞。 (4)嵌套調(diào)用與遞歸調(diào)用。如圖)嵌套調(diào)用與遞歸調(diào)用。如圖4-11所示。所示。RETL

32、CALL SUB圖4-10 子程序的調(diào)用與返回 LCALL ARETRETLCALL B 圖4-11 子程序的嵌套調(diào)用與返回2子程序設(shè)計舉例子程序設(shè)計舉例【例【例4.8】 將將4.4節(jié)中的例節(jié)中的例4.5改為子程序結(jié)構(gòu)。改為子程序結(jié)構(gòu)。解:數(shù)據(jù)塊中的十個數(shù)都需要進行符號判斷并解:數(shù)據(jù)塊中的十個數(shù)都需要進行符號判斷并作相應(yīng)處理,可把一部分工作交給子程序完作相應(yīng)處理,可把一部分工作交給子程序完成,主程序只負責(zé)讀取數(shù)據(jù)、調(diào)用判斷處理成,主程序只負責(zé)讀取數(shù)據(jù)、調(diào)用判斷處理子程序、保存數(shù)據(jù)、循環(huán)控制工作。子程序、保存數(shù)據(jù)、循環(huán)控制工作。 源程序如下:源程序如下: ORG 0000H MOV R0,#10 MOV R1,#30HSTART:MOV A,R1;取數(shù);取數(shù) ACALL DISPOSE

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論