(玩電(dian)子) 電(dian)子技術學習(xi)與研(yan)究
當前(qian)位置︰單片機教程網(wang) >> 基(ji)礎(chu)教程 >> 瀏覽文章

辽宁福彩网官网

作者:佚名   來源:本站原創   點擊數(shu):x  更新時(shi)間︰2020年02月23日(ri)   【字體︰

   通過(guo)前(qian)面的(de)學習(xi),我們已知單片機的(de)na)誆坑OM、有RAM、有並行I/O口,那麼,除(chu)了(liao)這些東西之外,單片機內部究竟gou)huai)有些什(shi)麼,這些個零碎的(de)東西怎麼連在一起的(de),讓我們來對(dui)單片機內部的(de)寄存器作一個完(wan)整的(de)功能分析吧(ba)!

  下圖(tu)中我們能看出,在51單片機內部有一個CPU用來運算、控制,有四個並行I/O口,分別是P0、P1、P2、P3,有ROM,用來存放程序,有RAM,用來存放中間結(jie)果,此外還(huai)有定時(shi)/計數(shu)器,串行I/O口,中斷(duan)系統,以及(ji)一個內部的(de)時(shi)鐘(zhong)電(dian)路。在一個51單片機的(de)na)誆堪 liao)這麼多的(de)東西。


 

  對(dui)上面的(de)圖(tu)進行進一步的(de)分析,我們已知,對(dui)並行I/O口的(de)讀寫只(zhi)要將數(shu)據送入到對(dui)應I/O口的(de)鎖存器就(jiu)能了(liao),那麼對(dui)于定時(shi)/計數(shu)器,串行I/O口等怎麼用呢(ne)?在單片機中有一些獨立(li)的(de)存儲單元是用來控制這些器件的(de),被稱(chen)之為特(te)殊功能寄存器(SFR)。事(shi)實上,我們已接觸過(guo)P1這個特(te)殊功能寄存器了(liao),還(huai)有哪(na)些呢(ne)?看下表(biao)1

符號

地(di)址(zhi)

功能介紹

B

F0H

B寄存器

ACC

E0H

累(lei)加器

PSW

D0H

程序狀態字

IP

B8H

中斷(duan)優(you)先級控制寄存器

P3

B0H

P3口鎖存器

IE

A8H

中斷(duan)允許控制寄存器

P2

A0H

P2口鎖存器

SBUF

99H

串行口鎖存器

SCON

98H

串行口控制寄存器

P1

90H

P1口鎖存器

TH1

8DH

定時(shi)器/計數(shu)器1(高(gao)8位)

TH0

8CH

定時(shi)器/計數(shu)器1(低8位)

TL1

8BH

定時(shi)器/計數(shu)器0(高(gao)8位)

TL0

8AH

定時(shi)器/計數(shu)器0(低8位)

TMOD

89A

定時(shi)器/計數(shu)器方式控制寄存器

TCON

88H

定時(shi)器/計數(shu)器控制寄存器

DPH

83H

數(shu)據地(di)址(zhi)指針(高(gao)8位)

DPL

82H

數(shu)據地(di)址(zhi)指針(低8位)

SP

81H

堆棧指針

P0

80H

P0口鎖存器

PCON

87H

電(dian)源控制寄存器

  表(biao)1
 

<特(te)殊功能寄存器地(di)址(zhi)映象表(biao)(一)>

 

<特(te)殊功能寄存器地(di)址(zhi)映象表(biao)(二)>

 

<特(te)殊功能寄存器地(di)址(zhi)映象表(biao)(三)>

下面,我們介紹一下幾個常用的(de)SFR,看圖(tu)2。

1、ACC︰累(lei)加器,常常用A表(biao)示(shi)。這是個什(shi)麼東西,可不能從名字上理(li)解(jie),它(ta)是一個寄存器,而不是一個做加法的(de)東西,為什(shi)麼給它(ta)這麼一個名字呢(ne)?或許是因為在運算器做運算時(shi)其中一個數(shu)一定是在ACC中的(de)緣故吧(ba)。它(ta)的(de)名字特(te)殊,身份也(ye)特(te)殊,稍後我們將學到指令,能發現,所有的(de)運算類指令都離不開它(ta)。

2、B︰一個寄存器。在做乘(cheng)、除(chu)法時(shi)放乘(cheng)數(shu)或除(chu)數(shu),不做乘(cheng)除(chu)法時(shi),隨你(ni)怎麼用。

3、PSW︰程序狀態字。這是一個很重要的(de)東西,里面放了(liao)CPU工作時(shi)的(de)很多狀態,借此,我們能了(liao)解(jie)CPU的(de)當前(qian)狀態,並作出對(dui)應的(de)處(chu)理(li)。它(ta)的(de)各(ge)位huai)δ芮 幢biao)2

D7

D6

D5

D4

D3

D2

D1

D0

CY

AC

F0

RS1

RS0

OV

 

P

      表(biao)2

PSW也(ye)稱(chen)為標志(zhi)寄存器,了(liao)解(jie)這個對(dui)于了(liao)解(jie)單片機原理(li)非常的(de)重要,存放各(ge)有關(guan)標志(zhi)。其結(jie)構和定義(yi)如(ru)下︰

 

  下面我們逐一介紹sfr各(ge)位的(de)用途

(1)CY︰進位標志(zhi)。用于表(biao)示(shi)Acc.7有否向(xiang)更高(gao)位進位。8051中的(de)運算器是一種8位的(de)運算器,我們知道,8位運算器只(zhi)能表(biao)示(shi)到0-255,如(ru)果做加法的(de)話,兩數(shu)相加可能會(hui)超過(guo)255,這樣最(zui)高(gao)位就(jiu)會(hui)丟失,造(zao)成(cheng)運算的(de)錯誤,怎麼chuang)ban)?最(zui)高(gao)位就(jiu)進到這里來chu)U庋jiu)沒事(shi)了(liao)。

例(li)︰78H+97H(01111000+10010111)

(2)AC︰輔助(zhu)進位標志(zhi)也(ye)叫半進位標志(zhi)。  用于表(biao)示(shi)Acc.3有否向(xiang)Acc.4進位

例(li)︰57H+3AH(01010111+00111010)

(3)F0︰用戶標志(zhi)位,由我們(編程人員)決定什(shi)麼時(shi)候用,什(shi)麼時(shi)候不用。

(4)RS1RS0︰工作寄存器組選擇位。這個我們已知了(liao)。
              RS1、RS0 = 00 —— 0區(00H~07H)

              RS1、RS0 = 01 —— 1區(08H~0FH)

              RS1、RS0 = 10 —— 2區(10H~17H)

              RS1、RS0 = 11 —— 3區(18H~1FH) 

(5)0V︰溢出標志(zhi)位。 表(biao)示(shi)Acc在有符號數(shu)算術運算中的(de)溢出,什(shi)麼是溢出我們稍後再談吧(ba)。

(6)P︰奇偶校驗位︰它(ta)用來表(biao)示(shi)ALU運算結(jie)果中二進制數(shu)位“1”的(de)個數(shu)的(de)奇偶性。若為奇數(shu),則(ze)P=1,不然(ran)為0。

例(li)︰某運算結(jie)果是78H(01111000),顯(xian)然(ran)1的(de)個數(shu)為偶數(shu),所以P=0。

4、DPTR(DPH、DPL)︰數(shu)據指針,能用它(ta)來訪問外部數(shu)據存儲器中的(de)任一單元,如(ru)果不用,也(ye)能作為通用寄存器來用,由我們自(zi)已決定如(ru)何使用。16位,由兩個8位寄存器DPH、DPL組成(cheng)。主要用于存放一個16位地(di)址(zhi),作為訪問外部存儲器(外RAM和ROM)的(de)地(di)址(zhi)指針。

5、P0P1P2P3︰這個我們已經知道,是四個並行輸入/輸出口的(de)寄存器。它(ta)里面的(de)na)諶rong)對(dui)應著管腳(jiao)的(de)輸出。

6、SP︰堆棧指針。(專用于指出堆棧頂部數(shu)據的(de)地(di)址(zhi)。)
 

   堆棧介紹︰日(ri)常生活中,我們都注意(yi)到過(guo)這樣的(de)現象,家里洗的(de)碗,一只(zhi)一只(zhi)摞起來,最(zui)晚放上去(qu)的(de)放在最(zui)上面,而最(zui)早放上去(qu)的(de)則(ze)放在最(zui)下面,在取的(de)時(shi)候正好相反,先從最(zui)上面取,這種現象我們用一句話來概括︰“先進後出,後進先出”。請大家想想,還(huai)有什(shi)麼地(di)方有這種現象?其實比(bi)比(bi)皆是,建築工地(di)上堆放的(de)磚頭、材料,倉庫里放的(de)貨物,都是“先進後出,後進先出”,這實際是一種存取物品的(de)規則(ze),我們稱(chen)之為“堆棧”。

   在單片機中,我們也(ye)能在RAM中構造(zao)這樣一個區域(yu),用來存放數(shu)據,這個區域(yu)存放數(shu)據的(de)規則(ze)就(jiu)是“先進後出,後進先出”,我們稱(chen)之為“堆棧”。為什(shi)麼需要這樣來存放數(shu)據呢(ne)?存儲器本身不是能按地(di)址(zhi)來存放數(shu)據嗎?對(dui),知道了(liao)地(di)址(zhi)的(de)確就(jiu)能知道里面的(de)na)諶rong),但如(ru)果我們需要存放的(de)是一批數(shu)據,每一個數(shu)據都需要知道地(di)址(zhi)那不是麻煩嗎?如(ru)果我們讓數(shu)據一個接一個地(di)放置,那麼我們只(zhi)要知道第一個數(shu)據所在地(di)址(zhi)單元就(jiu)能了(liao)(看圖(tu)2)如(ru)果第一個數(shu)據在27H,那麼第二、三個就(jiu)在28H、29H了(liao)。所以利用堆棧這種辦(ban)法來放數(shu)據能簡化操(cao)作

   那麼51中堆棧什(shi)麼地(di)方呢(ne)?單片機中能存放數(shu)據的(de)區域(yu)有限,我們不能夠(gou)專門(men)分配一塊地(di)方做堆棧,所以就(jiu)在內存(RAM)中開闢一塊地(di)方,用于堆棧,但是用內存的(de)na)囊豢檳ne)?還(huai)是不好定,因為51是一種通用的(de)單片機,各(ge)人的(de)實際需求(qiu)各(ge)不相同,有人需要多一些堆棧,而有人則(ze)不需要那麼多,所以怎麼分配都不合適,怎樣來解(jie)決這個問題?分不好干脆就(jiu)不分了(liao),把分的(de)權利給用戶(編程者),根(gen)據自(zi)已的(de)需要去(qu)定吧(ba),所以51單片機中堆棧的(de)位置是能變化的(de)。而這種變化就(jiu)體現在SP中值的(de)變化,看圖(tu)2,SP中的(de)值等于27H不就(jiu)相當于是一個指針指向(xiang)27H單元嗎?當bi)ran)在真正的(de)51機中,開始指針所指的(de)位置並非就(jiu)是數(shu)據存放的(de)位置,而是數(shu)據存放的(de)前(qian)一個位置,比(bi)如(ru)一開始指針是指向(xiang)27H單元的(de),那麼第一個數(shu)據的(de)位置是28H單元,而不是27H單元,為什(shi)麼會(hui)這樣,我們在學堆棧命令時(shi)再說明(ming)。其它(ta)的(de)SFR,我們在用到時(shi)再介紹。

作者點評(ping)︰這一課可能比(bi)較難(nan)懂了(liao),看大家的(de)評(ping)論很多都這樣說,其實並不需要把上面的(de)這些東西都死記硬背在腦子里面,這是很難(nan)的(de),我們只(zhi)需要理(li)解(jie)他的(de)工作原理(li),一次看不懂就(jiu)要多看幾次,等到要寫程序的(de)時(shi)候,我們再把這些表(biao)格拿出來查閱所以建議(yi)你(ni)把本頁(ye)保存為書(shu)簽.筆者在開始學習(xi)單片機的(de)時(shi)候也(ye)是這樣做的(de).

發表(biao)評(ping)論】【告訴好友】【收藏此文】【關(guan)閉窗(chuang)口

辽宁福彩网官网

辽宁福彩网官网 | 下一页