2007-12-25 10:38:53
mcs-51微控制器通常有4個8位i/o埠, 向各埠的寫資料均寫入到對應埠的鎖存器中, 但對各埠的讀操作卻有兩個方式:讀鎖存器和讀引腳
1 讀-修改-寫操作
pn(指p0,p1,p2,p3)在51組合語言中是特殊的識別符號,既代表pn埠引腳,又代表pn鎖存器(pn sfr)。在mcs-51指令系統中有些指令讀鎖存器的值, 有些指令則讀引腳上的值。讀鎖存器指令是從鎖存器中讀取乙個值並進行處理, 把處理後的值(原值或已修改後的值)重新寫入鎖存器中。這類指令稱為讀-修改-寫指令, 表1列舉了有該功能的指令 當目的運算元是pn埠或pn埠的某一位時. 該指令讀取鎖存器的值.
這些指令的乙個共同特點, 就是要先並行讀入pn鎖存器(非pn埠引腳)中的值,作一定的修改,然後再寫入諺埠的鎖存器。表1中晶後三條指令讀-修改-寫關係不夠明顯。實際上它們的執行過程式是:先將pn的8位鎖存器內容一起讀人,再對指定位進行修改, 然後又 8位一起寫入鎖存器。
對於讀-修改-寫指令。直接讀鎖存器而不是讀埠引腳, 是因為從引腳上讀出的資料不一定能真正反映鎖存器的狀態 例如:若用pn的某一位引腳直接驅動乙個npn三極體的基極,當向此埠寫「1」 時, 三極體導通並把埠引腳的電平鉗位約0.7 v (對於矽管) 這時,cpu若從此引腳讀取資料. 會把該資料(應為1)錯讀為0;若直接從鎖存器讀取, 則讀出正確的資料。
理解了pn的特殊性及讀-修改-寫指令後, 就不難理解指令push pn的含義了。它的執行過程是:讀pn引腳(非讀pn鎖存器)的值, 然後將此數值壓入堆疊 以下是一段測試程式:
org 1000h
1000 75a07f mov p2,#7fh
1003 7900 mov r1,#00h
1005 74ff mov a,#0ffh
1007 coa0 push p2
1009 d0a0 pop p2
100b f3 movx @r1,a
100c 22 ret
這段程式原意是將ffh立即數存人外部ram位址為7f00的單元中, 但具體的執行結果與這段程式是在片內或片外被執行有密切關係。若在片內,結果與程式原意一致;若在片外,mcu執行這段片外程式後 結果卻把ffh錯誤地送到了外部ram 的1000h位址去。為什麼會出錯?因為在執行片外程式時, 出現在p2埠引腳上的資料是pch (程式指標的高8位,此時為10h),在執行push p2指令時.讀取p2引腳上的資料是10h.所
以將10h壓入堆疊,緊跟的pop p2指令是將當前棧頂資料10h彈出並寫入p2鎖存器,然後執行的movx @r1,a指令,將a中的資料寫入[p2r1](此
時p2ri=1000h)位址中 有興趣的讀者可以嘗試一下。
2 可靠讀取pn鎖存器中資料的方法
上述程式並無實際執行意義, 在這裡只是引出如何可靠地讀取pn鎖存器中的資料問題。在mcs51指令系統中並沒有一條指令可以讓彙編程式設計師直接讀取pn鎖存器的資料。在表1中只有jbc pn.y,label可以較快速地獲取pn鎖存器第y位的值。由於篇幅關係,本文只介紹p2鎖存器的操作,其他鎖存器的操作可參照p2寫出 下面是獲取p2鎖存器值的子程式。
getsfrp2:push ie ;保護中斷允許暫存器
clr ea ;禁止所有中斷
mov a.#0ffh
jbc p2.0,$+5;p2鎖存器位0為"1" 則清"0"並跳
;轉到$+5位址(jbc p2.1,$+5)
clr acc.0 ;否則acc.0清為"0"
jbc p2.1,$+5
clr acc.1
jbc p2.2,$+5
clracc2
jbc p2.3,$+5
clr acc 3
jbc p2.4,$+5
clr acc 4
jbc p2.5,$+5
clracc 5
jbc p2.6,$+5
clr acc.6
jbc p2.7,$+5
clr acc.7
mov p2,a ;恢復p2鎖存器原值
popie ;恢復中斷允許暫存器
ret另外也可在ram 中建立各pn鎖存器的映像.通過專用程式對pn鎖存器進行操作 這樣就可以在不對引腳狀態有任何影響的情況下,快速可靠地讀取與pn鎖存器一致的數值。以在內部ram 中建立p2映像為例:
ep2 data 60h ;p2鎖存器映像
writesfrp2: mov ep2,a ;將a寫人p2鎖存器映像
mov p2,a ;將a寫人p2鎖存器
retreadsfrp2: mov a,ep2 ;將p2鎖存器映像寫入a
ret如果確信讀p2埠時的值都等於p2鎖存器中的值,則可以用51微控制器位址指標及其應用
的操作方法,簡單地pushp2和pop p2指令來保護和恢復現場程式段中使用的p2鎖存器
以上三種讀取pn鎖存器值的方法, 第二種方法,即在ram 中建立pn鎖存器映像的方法,訪問速度較快,適臺mcs-51的任何工作方式,在讀過程中不會對pn鎖存器及埠引腳狀態有任何干擾,是三種方法中最好的。
MCS 51微控制器基礎
1.data,idata,xdata,pdata 的區別 data 固定指前面0x00 0x7f的128個ram,可以用acc直接讀寫,速度最快,生成的 也最小。idata 固定指前面0x00 0xff的256個ram,其中前128和data的128完全相同,只是訪問方式不同。i用類似c中的指標方式...
MCS 51 微控制器的中斷系統
mcs 51 微控制器的中斷系統 mcs 51中斷系統 5個中斷源 兩個外部中斷,兩個定時器,乙個串列埠 2個優先順序 中斷 當cpu正在處理某件事情時,微控制器外部或內部發生的某一緊急事件請求cpu立即去處理,於是,cpu暫時中止當前的工作,轉去處理這個緊急事件,待處理完畢後,再回到原來被中止的地...
振盪器51微控制器 MCS 51微控制器的引腳
對於微控制器的學習,其內部結構及功能可以從引腳功能開始學習。此處mcs 51採用40只引腳雙列直插封裝。40只引腳按其功能分類,可分為3類 1 電源及時鐘引腳 vcc vss xtal1 xtal2。2 控制引腳 psen ea ale reset rst 3 i o口引腳 p0 p1 p2 p3為...