版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
任務(wù)4流水燈控制4.1任務(wù)內(nèi)容與分析
4.2任務(wù)實(shí)施4.3任務(wù)相關(guān)知識(shí)
4.1任務(wù)內(nèi)容與分析
1.任務(wù)內(nèi)容
在日常生活中會(huì)經(jīng)常見到一些廣告牌以LED流動(dòng)發(fā)光的形式來增加美觀。本任務(wù)以流水燈控制為例,介紹循環(huán)類和控制轉(zhuǎn)移類指令的應(yīng)用。
2.任務(wù)分析
所謂流水燈,就是若干個(gè)燈依次點(diǎn)亮。在此用8只LED模擬8個(gè)燈,實(shí)現(xiàn)8只LED依次閃爍,間隔時(shí)間為50ms,并一直循環(huán)下去。將8只LED替換成8個(gè)繼電器,然后再去控制8個(gè)彩燈,甚至是8組彩燈,結(jié)果就是真正的流水燈了。流水燈用在夜間建筑物裝飾方面,如在建筑物的棱角上裝上流水燈,可起到變換閃爍、美不勝收的效果。將8只LED編號(hào)為L(zhǎng)ED1~LED8,從LED1開始亮起,每次只點(diǎn)亮一個(gè),并按順序往LED8移動(dòng),結(jié)束后再次從頭開始。從圖4-1可以看出,要點(diǎn)亮LED對(duì)應(yīng)的I/O端口,需輸出高電平;反之,要熄滅LED對(duì)應(yīng)的I/O端口,需輸出低電平。LED流水燈的狀態(tài)變化如表4-1所示。圖4-1流水燈示意電路圖4.2任務(wù)實(shí)施
下面一起實(shí)現(xiàn)流水燈吧。在這重點(diǎn)學(xué)習(xí)循環(huán)類和控制轉(zhuǎn)移類指令的應(yīng)用及循環(huán)結(jié)構(gòu)的編程設(shè)計(jì)。
步驟1:設(shè)計(jì)硬件電路,如圖4-2所示。圖4-2流水燈電路圖步驟2:根據(jù)表4-1,首先將P1口設(shè)為初始狀態(tài)1,然后依次左移七次,就達(dá)到狀態(tài)8,再左移一次,就又回到狀態(tài)1。由于匯編程序中,只能對(duì)累加器ACC進(jìn)行邏輯循環(huán)移位,所以編程時(shí)是對(duì)累加器ACC進(jìn)行移位,然后賦值給P1口。程序流程如圖4-3所示。圖4-3流水燈程序流程圖步驟3:根據(jù)流程圖編寫源程序。具體如下:
//**********流水燈程序***********************
;程序名:流水燈程序LEDBLINK.asm
;程序功能:實(shí)現(xiàn)1只LED依次閃爍,間隔時(shí)間為50ms,并一直循環(huán)下去
ORG0000H
AJMPSTART
ORG0030H
START: MOVP1,#01H ;P1口賦初始狀態(tài)1
MOVA,P1
LOOP:ACALLDELAY_50MS;調(diào)用延時(shí)子程序以延時(shí)
RLA
MOVP1,A ;移位操作后,將值賦給P1口
AJMPLOOP ;跳轉(zhuǎn),一直循環(huán)
END功能擴(kuò)展1:以上實(shí)現(xiàn)的效果是1只LED一直在“左跑”!那如何實(shí)現(xiàn)LED“左右跑”呢,具體說就是1只LED先由左跑到右,再由右跑到左,并一直這樣循環(huán),在這把這種效果稱為“霹靂燈”。
采用循環(huán)結(jié)構(gòu),首先左移八次,再右移八次,如此循環(huán)不停。霹靂燈流程圖及源程序如圖4-4所示。DELAY_50MS子程序請(qǐng)自己補(bǔ)充完整。圖4-4霹靂燈流程圖及源程序4.3任務(wù)相關(guān)知識(shí)
4.3.1邏輯運(yùn)算與循環(huán)類指令
1.累加器循環(huán)移位(4條)
累加器循環(huán)移位指令有4條,如圖4-5所示,圖(a)為指令及注釋,圖(b)為指令執(zhí)行示意圖。圖4-5累加器循環(huán)移位指令及其執(zhí)行示意圖
(1)循環(huán)移位指令只能對(duì)累加器A操作。
(2)?RLC?A與RL?A不同之處在于RLCA指令將CY連同A中內(nèi)容一起左移循環(huán),ACC.7進(jìn)CY,CY進(jìn)ACC.0,但不對(duì)其他標(biāo)志位產(chǎn)生影響。
(3)RRA和RRCA指令的異同點(diǎn)類似于RLA和RLCA,僅是A中數(shù)據(jù)位的移動(dòng)方向向右。
(4)小于80H的數(shù),RL?A直接左移一位就是將累加器A內(nèi)容乘以2,RRA右移一位就是將累加器A內(nèi)容除以2。對(duì)于大于80H的數(shù)就要考慮進(jìn)位CY。例如:無符號(hào)
數(shù)BDH(大于80H)送入A中,(A)=10111101B。運(yùn)算前先
清CY,即CY=0,然后執(zhí)行指令“RLCA”的結(jié)果是(A)=01111010B=7AH,CY=1。而17AH正是BDH的。
【例4-1】若(A)?=?C5H,執(zhí)行指令“RL?A”后結(jié)果是
多少?
解若(A)?=?C5H?=?11000101B,則執(zhí)行過程如圖4-6
所示。圖4-6例4-1執(zhí)行過程示意圖執(zhí)行結(jié)果:(A)=8BH。
2.累加器清0和取反(兩條)
下面兩條指令的功能分別是把累加器A的內(nèi)容清0和取反,結(jié)果仍在A中。
CLR?A ;A←0
CPL?A ;A←【例4-2】若(A)=A5H,執(zhí)行指令“CLR
A”后,則(A)=00H。
3.邏輯與指令(6條)
ANLA,Rn ;?A與Rn中的值按位“與”
ANLA,direct ;?A和直接地址中的數(shù)據(jù)按位“與”
ANLA,@Ri ;?A和間接尋址得到的數(shù)據(jù)按位“與”
ANLA,#data ;?A和立即數(shù)按位“與”
ANLdirect.A ;直接地址中的數(shù)據(jù)與A中的值相“與”,
并送到該地址單元中
ANLdirect,#data;直接地址中的數(shù)據(jù)與立即數(shù)相“與”,
并送到該地址單元中這組指令中的前4條結(jié)果放在A中,僅影響P標(biāo)志。后兩條指令結(jié)果存放到該地址單元中,不影響標(biāo)志位。
【例4-3】若(A)
=
C8H,(R1)
=
A9H,執(zhí)行指令“ANLA,R1”后結(jié)果為多少?
解執(zhí)行結(jié)果:(A)=88H,R1內(nèi)容不變。
4.邏輯或指令(6條)
ORLA,Rn ;A與Rn中的值按位“或”
ORLA,direct ;A和直接地址中的數(shù)據(jù)按位“或”
ORLA,@Ri ;A和間接尋址得到的數(shù)據(jù)按位“或”
ORLA,#data ;A和立即數(shù)按位“或”
ORLdirect.A ;直接地址中的數(shù)據(jù)與A中的值相“或”,并送到該地址單元中
ORLdirect,#data;直接地址中的數(shù)據(jù)與立即數(shù)相“或”,并送到該地址單元中
【例4-4】根據(jù)累加器A中位0~4的狀態(tài),利用邏輯“與”、“或”指令,控制P1口位0~4的狀態(tài)。
ANLA,#00001111B ;A的高4位清0
ANLP1,#11110000B ;P1口的低4位清0
ORLP1,A ;A的低4位送P1口,P1口的高4位不變?yōu)楸苊忮e(cuò)誤可改成如下形式:
ANLA,#00001111B ;?A的高4位清0
ORLP1,A ;如果A的低4位中某位為1,
則將P1.0~P1.3相應(yīng)位置1
ORLA,#11110000B ;?A的高4位置1
ANLP1,A ;如果A的低4位中某位為0,
則將P1.0~P1.3相應(yīng)位置0
5.邏輯異或指令(6條)
所謂“異或”,簡(jiǎn)言之就是參加運(yùn)算的兩個(gè)值相異為1,相同為0。
XRLA,Rn ;?A與Rn中的值按位“異或”
XRLA,direct;?A和直接地址中的數(shù)據(jù)按位“異或”
XRLA,@Ri;?A和間接尋址得到的數(shù)據(jù)按位“異或”
XRLA,#data;?A和立即數(shù)按位“異或”
XRLdirect.A;直接地址中的數(shù)據(jù)與A中的值相“異或”,
并送到該地址單元中
XRLdirect,#data;直接地址中的數(shù)據(jù)與立即數(shù)相“異或”,
并送到該地址單元中
【例4-5】若(A)=43H,執(zhí)行指令“XRLA,#17H”后結(jié)果為多少?
解執(zhí)行結(jié)果:(A)=54H。4.3.2控制轉(zhuǎn)移類指令
1.無條件轉(zhuǎn)移指令(4條)
(1)短轉(zhuǎn)移、長(zhǎng)轉(zhuǎn)移和相對(duì)轉(zhuǎn)移指令:
AJMPaddr11;?(PC)+2→PC,addr11→(PC10~0)
;程序計(jì)數(shù)器賦予新值(低11位地址),而高5位
(PC15~11)不變
LJMPaddr16;?(PC)+2→PC,addr16→(PC)
;程序計(jì)數(shù)器賦予新值(16位地址)
SJMPrel ;(PC)+2+rel→PC
;當(dāng)前程序計(jì)數(shù)器先加2再加上偏移量給程序
計(jì)數(shù)器賦予新值
【例4-6】在單片機(jī)開發(fā)中,經(jīng)常要用到鍵盤。圖4-7(a)所示為有9個(gè)按鍵的鍵盤。當(dāng)按下功能鍵A、B、…、I時(shí)去完成不同的功能。如果用程序設(shè)計(jì)的語言來表達(dá)的話,就是按下不同的鍵去執(zhí)行不同的程序段,以完成不同的功能。
怎么樣來實(shí)現(xiàn)呢?首先調(diào)用鍵盤處理程序,獲得鍵值,如圖4-7(b)所示。圖4-79個(gè)按鍵及其執(zhí)行存儲(chǔ)示意圖如按下“A”鍵后獲得的鍵值是0,按下“B”鍵后獲得的鍵值是1等,然后根據(jù)不同的值進(jìn)行跳轉(zhuǎn),如鍵值為0就轉(zhuǎn)到S1執(zhí)行,為1就轉(zhuǎn)到S2執(zhí)行……程序設(shè)計(jì)如下:
MOV
DPTR,#TAB;將TAB所代表的地址送入DPTR
MOV
A,R0
;從R0中取數(shù)(詳見下面的說明)
MOV
B,#2
MULAB ;?A中的值乘2(詳見下面的說明)
JMPA,@A+DPTR ;跳轉(zhuǎn)
TAB:AJMPS1 ;跳轉(zhuǎn)表格
AJMPS2
AJMPS3
AJMPS9
上面程序中,若干個(gè)AJMP語句最后在存儲(chǔ)器中是這樣存放的,見圖4-7(c),也就是每個(gè)AJMP語句都占用了兩個(gè)存儲(chǔ)器的空間,并且是連續(xù)存放的。再來看程序的執(zhí)行過程。第一句MOVDPTR,#TAB執(zhí)行完了之后,DPTR中的值就是TAB。第二句是MOVA,R0,我們假設(shè)R0是由按鍵處理程序獲得的鍵值,比如按下A鍵,R0中的值是0,按下B鍵,R0中的值是1,以此類推?,F(xiàn)在我們假設(shè)按下的是B鍵,則執(zhí)行完第二條指令后,A中的值就是1。按我們的分析,按下B鍵后應(yīng)當(dāng)執(zhí)行S2這段程序,讓我們來看一看是否是這樣呢。第三條、第四條指令是將A中的值乘2,即執(zhí)行完第4條指令后A中的值是2。下面就執(zhí)行JMP@A+DPTR,現(xiàn)在DPTR中的值是TAB,而A+DPTR后就是TAB+2。因此,執(zhí)行此句程序后,將會(huì)跳到TAB+2這個(gè)地址繼續(xù)執(zhí)行。在TAB+2這個(gè)地址里面放的就是AJMPS2這條指令。
2.條件轉(zhuǎn)移指令(8條)
(1)判斷累加器A是否為0轉(zhuǎn)移指令(兩條):
JZrel ;若A中的值為0則轉(zhuǎn)移到偏移量所指向的地
址,否則順序執(zhí)行本指令的下一條指令
JNZrel ;若A中的值不為0則轉(zhuǎn)移到偏移量所指向的
地址,否則順序執(zhí)行本指令的下一條指令
【例4-7】閱讀以下程序段,思考程序是如何執(zhí)行的。
MOV
A,R0
JZ
L1
MOV
R1,#00H
AJMPL2
L1: MOV
R1,#0FFH
L2: SJMPL2
在執(zhí)行上面這段程序前,如果R0中的值是0的話,就轉(zhuǎn)移到L1執(zhí)行,故最終的執(zhí)行結(jié)果是R1中的值為0FFH;而如果R0中的值不等于0,則順序執(zhí)行,也就是執(zhí)行MOV
R1,#00H指令,最終的執(zhí)行結(jié)果是R1中的值等于0。
(2)比較不相等轉(zhuǎn)移指令(4條):
CJNEA,#data.rel;(A)和data比較,如果(A)=data,則
順序執(zhí)行,否則轉(zhuǎn)移;如果(A)>data,
則(CY)=0,否則(CY)?=?1
CJNEA.direct.rel;(A)和(direct)比較,如果(A)=(direct),
則順序執(zhí)行,否則轉(zhuǎn)移;如果(A)>
(direct),則(CY)=0,否則(CY)=1
CJNERn.#data.rel
;(Rn)和data比較,如果(Rn)=data,
則順序執(zhí)行,否則轉(zhuǎn)移;如果(Rn)
>data,則(CY)=0,否則(CY)=1
CJNE@Ri.#data.rel;((Ri))和data比較,如果((Ri))=data,
則順序執(zhí)行,否則轉(zhuǎn)移;如果((Ri))
>data,則(CY)=0,否則(CY)=1比較不相等轉(zhuǎn)移指令是把兩個(gè)數(shù)相比,根據(jù)比較的結(jié)果來決定是否轉(zhuǎn)移。如果兩個(gè)數(shù)相等,就順序執(zhí)行,否則轉(zhuǎn)移。
判斷兩數(shù)是否相等,在很多場(chǎng)合是非常有用的。但有時(shí)還想得知兩數(shù)比較后哪個(gè)大,哪個(gè)小。如果目的操作數(shù)大,則CY=0,否則CY=1。
【例4-8】假設(shè)有一溫度控制器,如果溫度高于35℃,則打開風(fēng)扇;如果溫度低于35℃,則打開加熱器;如果溫度等于35℃,則關(guān)閉加熱器和風(fēng)扇。假設(shè)溫度傳感器測(cè)得溫
度后置于R7中,P1.0用于控制風(fēng)扇開關(guān),置1為打開風(fēng)扇,清0關(guān)閉風(fēng)扇;P1.1用于控制加熱器,置1為打開加熱器,清0關(guān)閉加熱器。
CJNER7,#35,NEXT
CLRP1.1
;?(R7)?=?35關(guān)閉加熱器
CLRP1.0
;關(guān)閉風(fēng)扇
AJMPLOOP
;轉(zhuǎn)去循環(huán)再測(cè)溫
NEXT: JCHOT;如果(R7)<35℃,則比較后
(CY)=1,轉(zhuǎn)去加熱
;如果(R7)>35℃,則比較后
(CY)=0,執(zhí)行本條語句后將
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026山東青島市李滄區(qū)所屬事業(yè)單位招聘32人備考考試試題附答案解析
- 2026廣東廣州生物醫(yī)藥與健康研究院數(shù)字生物醫(yī)學(xué)研究中心招聘科研助理1人備考考試題庫附答案解析
- 2026新疆新業(yè)有資產(chǎn)經(jīng)營(yíng)(集團(tuán))有限責(zé)任公司招聘參考考試試題附答案解析
- 2026天津市嘉誠(chéng)中學(xué)教師招聘參考考試題庫附答案解析
- 2026浙江嘉興市嘉睿人力招聘1人備考考試題庫附答案解析
- 2026河南駐馬店市上蔡縣事業(yè)單位引進(jìn)高層次人才59人備考考試試題附答案解析
- 2026云南昆明市云南技師學(xué)院建筑與工藝技術(shù)學(xué)院編制外教師招聘3人參考考試題庫附答案解析
- 2026廣西南寧市北投低空經(jīng)濟(jì)投資有限公司社會(huì)招聘2人備考考試題庫附答案解析
- 2026年中國(guó)科學(xué)院蘭州化學(xué)物理研究所招聘81人備考考試題庫附答案解析
- 2026廣西北海市合浦縣民政局招錄城鎮(zhèn)公益性崗位人員11人參考考試試題附答案解析
- 2025年鐵路裝卸工考試題目及答案
- 2026全國(guó)青少年模擬飛行考核理論知識(shí)題庫40題含答案(綜合卷)
- 2025年全球恐怖主義的應(yīng)對(duì)策略
- 2025線粒體醫(yī)學(xué)行業(yè)發(fā)展現(xiàn)狀與未來趨勢(shì)白皮書
- 2025年中國(guó)泥炭生物肥項(xiàng)目創(chuàng)業(yè)投資方案
- 消防工程從入門到精通
- 營(yíng)銷員考試題庫及答案解析
- 動(dòng)態(tài)血壓監(jiān)護(hù)儀前14大企業(yè)占據(jù)全球83%的市場(chǎng)份額(2024年)
- 設(shè)計(jì)師年終總結(jié)
- 綠色工廠知識(shí)培訓(xùn)內(nèi)容課件
- 團(tuán)建活動(dòng)合同協(xié)議書范本
評(píng)論
0/150
提交評(píng)論