(玩電子) 電子技術學習與研究

极速pk10APP官网

作者:佚名   來源:本站原創(chuang)   點擊數:x  更新時(shi)間︰2007年(nian)08月15日(ri)   【字體︰

    前面(mian)那些(xie)流(liu)水燈的(de)例程(cheng),我們已經習慣了“位”一位就是一盞燈的(de)亮和滅,而我們學的(de)指令卻(que)全都是用“字節(jie)”來介紹的(de)︰字節(jie)的(de)移動(dong)、加(jia)法、減(jian)法、邏輯運算、移位等等。用字節(jie)來chuang)chu)理一些(xie)數學問題,比如說(shuo)︰控(kong)制(zhi)冰箱的(de)溫度、電視的(de)音量等等很(hen)直觀,能(neng)直接(jie)用數值來表在。可是如果用它(ta)來控(kong)制(zhi)一些(xie)開關的(de)打開和合上(shang),燈的(de)亮和滅,就有些(xie)不直接(jie)了,記得(de)我們上(shang)次課上(shang)的(de)流(liu)水燈的(de)例程(cheng)嗎(ma)?我們知(zhi)道送(song)往P1口的(de)數值後並不能(neng)馬上(shang)知(zhi)道哪個燈亮和來滅,而是要化成二進制(zhi)才知(zhi)道。工業(ye)中有很(hen)多場合需要處(chu)理這類開關輸(shu)出(chu),繼電器吸合,用字節(jie)來chuang)chu)理就顯yun)居行xie)麻(ma)煩,所以在8031單片機中特意引入一個位處(chu)理機制(zhi)。

位尋址區

在8031中,有一部份RAM和一部份SFR是具有位尋址功能(neng)的(de),也就是說(shuo)這些(xie)RAM的(de)每(mei)一個位都jia)凶砸訓de)地(di)址,能(neng)直接(jie)用這個地(di)址來對(dui)此進行操作。

內部RAM的(de)20H-2FH這16個字節(jie),就是8031的(de)位尋址區。看圖(tu)1。可見(jian)這里面(mian)的(de)每(mei)一個RAM中的(de)每(mei)個位我們都可能(neng)直接(jie)用位地(di)址來找ye)剿ta)們,而不必(bi)用字節(jie)地(di)址,然(ran)後再用邏輯指令的(de)方式(shi)。

能(neng)位尋址的(de)特殊功能(neng)寄存器

8031中有一些(xie)SFR是能(neng)進行位尋址的(de),這些(xie)SFR的(de)特點是其(qi)字節(jie)地(di)址均(jun)可被8整除,如A累(lei)加(jia)器,B寄存器、PSW、IP(中斷優先級控(kong)制(zhi)寄存器)、IE(中斷允(yun)許(xu)控(kong)制(zhi)寄存器)、SCON(串行口控(kong)制(zhi)寄存器)、TCON(定時(shi)器/計數器控(kong)制(zhi)寄存器)、P0-P3(I/O端(duan)口鎖存器)。以上(shang)的(de)一些(xie)SFR我們還不熟,等我們講解相關內容(rong)時(shi)再作詳細解釋。

位操作指令

MCS-51單片機的(de)硬件(jian)結(jie)構中,有一個位處(chu)理器(又稱布爾處(chu)理器),它(ta)有一套位變量處(chu)理的(de)指令集。在進行位處(chu)理時(shi),CY(就是我們前面(mian)講的(de)進位位)稱“位累(lei)加(jia)器”。有自已的(de)位RAM,也就是我們剛講的(de)內部RAM的(de)20H-2FH這16個字節(jie)單元即128個位單元,還有自已的(de)位I/O空間(即P0.0…..P0.7,P1.0…….P1.7,P2.0……..P2.7,P3.0……..P3.7)。當然(ran)在物(wu)理實體上(shang)它(ta)們與原來的(de)以字節(jie)尋址用的(de)RAM,及端(duan)口是完全相同(tong)的(de),或者說(shuo)這些(xie)RAM及端(duan)口都能(neng)有兩種使用辦(ban)法。

位傳(chuan)送(song)指令

MOV C,BIT

MOV BIT,C

這組指令的(de)功能(neng)是實現位累(lei)加(jia)器(CY)和其(qi)它(ta)位地(di)址之(zhi)間的(de)數據傳(chuan)遞(di)。

例︰MOV P1.0,CY ;將CY中的(de)狀態送(song)到P1.0管腳上(shang)去(如果是做算術運算,我們就能(neng)通過觀察(cha)知(zhi)道現在CY是多少啦)。

MOV P1.0,CY ;將P1.0的(de)狀態送(song)給CY。

位修正指令

位清0指令

CLR C ;使CY=0

CLR bit ;使指令的(de)位地(di)址等于0。例︰CLR P1.0 ;即使P1.0變為0

位置1指令

SETB C ;使CY=1

SETB bit ;使指定的(de)位地(di)址等于1。例︰SETB P1.0 ;使P.0變為1

位取反指令

CPL C ;使CY等于原來的(de)相反的(de)值,由1變為0,由0變為1。

CPL bit ;使指定的(de)位的(de)值等于原來相反的(de)值,由0變為1,由1變為0。

例︰CPL P1.0

以我們做過的(de)實驗為例,如果原來燈是亮的(de),則執(zhi)行本指令後燈滅,反之(zhi)原來燈是滅的(de),執(zhi)行本指令後燈亮。

位邏輯運算指令

位與指令

ANL C,bit ;CY與指定的(de)位地(di)址的(de)值相與,結(jie)果送(song)回CY

ANL C,/bit ;先將指定的(de)位地(di)址中的(de)值取出(chu)後取反,再和CY相與,結(jie)果送(song)回CY,但注意,指定的(de)位地(di)址中的(de)值本身並不發生變化。

例︰ANL C,/P1.0

設執(zhi)行本指令前,CY=1,P1.0等于1(燈滅),則執(zhi)行完本指令後CY=0,而P1.0也是等于1。

可用下列程(cheng)序驗證︰

ORG 0000H

AJMP START

ORG 30H

START︰ MOV SP,#5FH

MOV P1,#0FFH

SETB C

ANL C,/P1.0

MOV P1.1,C ;將做完的(de)結(jie)果送(song)P1.1,結(jie)果應(ying)當是P1.1上(shang)的(de)燈亮,而P1.0上(shang)的(de)燈還是不亮

位或指令

ORL C,bit

ORL C,/bit

這個的(de)功能(neng)大家自行分析吧(ba),然(ran)後對(dui)照上(shang)面(mian)的(de)例程(cheng),編一個驗證程(cheng)序,看看你(ni)相得(de)對(dui)嗎(ma)?

位條(tiao)件(jian)轉(zhuan)移指令

判CY轉(zhuan)移指令

JC rel

JNC rel

第一條(tiao)指令的(de)功能(neng)是如果CY等于1就轉(zhuan)移,如果不等于1就次序執(zhi)行。那麼轉(zhuan)移到什麼地(di)方去呢(ne)?我們能(neng)這樣理解︰JC 標號(hao),如果等于1就轉(zhuan)到標號(hao)處(chu)執(zhi)行。這條(tiao)指令我們在上(shang)節(jie)課中已講到,不再重復(fu)。

第二條(tiao)指令則和第一條(tiao)指令相反,即如果CY=0就轉(zhuan)移,不等于0就次序執(zhi)行,當然(ran),我們也同(tong)樣理解︰ JNC 標號(hao)

判位變量轉(zhuan)移指令

JB bit,rel

JNB bit,rel

第一條(tiao)指令是如果指定的(de)bit位中的(de)值是1,則轉(zhuan)移,不然(ran)次序執(zhi)行。同(tong)樣,我們能(neng)這樣理解這條(tiao)指令︰JB bit,標號(hao)

第二條(tiao)指令請大家先自行分析

下面(mian)我們舉個例程(cheng)說(shuo)明︰

ORG 0000H

LJMP START

ORG 30H

START︰MOV SP,#5FH

MOV P1,#0FFH

MOV P3,#0FFH

L1: JNB P3.2,L2 ;P3.2上(shang)接(jie)有一只(zhi)按鈕,它(ta)按下時(shi),P3.2=0

JNB P3.3,L3 ;P3.3上(shang)接(jie)有一只(zhi)按鈕,它(ta)按下時(shi),P3.3=0

LJM P L1

L2: MOV P1,#00H

LJMP L1

L3: MOV P1,#0FFH

LJMP L1

END

把上(shang)面(mian)的(de)例程(cheng)寫入片子,看看cong)惺裁聰窒hellip;……

按下接(jie)在P3.2上(shang)的(de)按鈕,P1口的(de)燈全亮了,松(song)開或再按,燈並不熄滅,然(ran)後按下接(jie)在P3.3上(shang)的(de)按鈕,燈就全滅了。這像什麼?這不就是工業(ye)現場經常用到的(de)“啟動(dong)”、“停止”的(de)功能(neng)嗎(ma)?

怎麼做到的(de)呢(ne)?一開始,將0FFH送(song)入P3口,這樣,P3的(de)所有引線都處(chu)于高電平(ping),然(ran)後執(zhi)行L1,如果P3.2是高電平(ping)(鍵(jian)沒有按下),則次序執(zhi)行JNB P3.3,L3語句,同(tong)樣,如果P3.3是高電平(ping)(鍵(jian)沒有按下),則次序執(zhi)行LJMP L1語句。這樣就不停地(di)檢測(ce)P3.2、P3.3,如果有一次P3.2上(shang)的(de)按鈕按下去了,則轉(zhuan)移到L2,執(zhi)行MOV P1,#00H,使燈全亮,然(ran)後又轉(zhuan)去L1,再次循環,直到檢測(ce)到P3.3為0,則轉(zhuan)L3,執(zhi)行MOV P1,#0FFH,例燈全滅,再轉(zhuan)去L1,如此循環不已。大家能(neng)否稍加(jia)改動(dong),將本程(cheng)序用JB指令改寫?

發表評論(lun)】【告(gao)訴(su)好友】【收藏此文(wen)】【關閉窗口

极速pk10APP官网

极速pk10APP官网 | 下一页