在目前絕大多數(shù)的電子產(chǎn)品和電力系統(tǒng)中,都因內(nèi)部嵌入了單片機,所以PO端E作為輸入端口使用時,在讀入引腳的信息之前,應先向鎖而具有一定的智能化。正因為如此片機也因而得到了空前未有的發(fā)展和 存器中寫入“1”,使T2截止。這樣才能保證讀到內(nèi)部總線上的信息,能正實際應用。確代表Po端E某個引腳的變化。這樣分析了它特有的硬件之后,才真正明白 單片機的廣泛普及和應用,不在于它的軟件有多么豐富,也不是因為它 了為什么要在讀端口之前,先進行寫…1 的輸出操作。同時也揭示了5系的硬件結(jié)構(gòu)特殊,它真正的亮點在于能將軟件和硬件緊密的結(jié)合在一起,充 列的單片機4個端幾為什么都叫準雙向的真正內(nèi)涵分發(fā)揮軟件和硬件的各自優(yōu)勢。
如果只有軟件,我們無論如何都不能看到發(fā) 第_二、具體軟硬件的結(jié)合體現(xiàn)在整個存儲器的特點上。首先是單片機的光二極管的點亮、繼電器的動作、電機的旋轉(zhuǎn)等真實電路的具體變化,而要 片內(nèi)存儲器中,不同的硬件區(qū)域有不同的軟件操作特性。想讓我們的這些想法和思路成為現(xiàn)實,那么我們必須借助于單片機精簡的硬 51系列的單片機片內(nèi)有256字節(jié)的數(shù)據(jù)存儲器,但是在硬件結(jié)構(gòu)L卻把件電路結(jié)構(gòu)以及適當?shù)妮o助電路,才能完成將軟件中人的思想,具體在某個 這個整體分成了兩大塊兒,其中的高128字節(jié)不均勻的分布T21個特殊功能特定的硬件七放射光芒。
但是如果只靠單片機有限的硬件資源,來完成某個 寄存器,低128字節(jié)才是用戶的通用編程區(qū)。而且在低128字節(jié)中又分為3個產(chǎn)品的具體實現(xiàn)過程,那么這個產(chǎn)品只能是功能單一,十分不靈活,難以適 不同功能的區(qū)間,在3個區(qū)間中只有20H到2F|I這16個單元共128個位可以單獨應各種用戶的多樣需求,可是如果有了單片機軟件的密切配合之后,就可以 尋址。
在不改變硬件的前提下,通過調(diào)節(jié)、變換軟件指令,即可實現(xiàn)多個任務的靈 如果軟件編程的時候,我們不注意這些,僅僅根據(jù)指令的語法來判斷指活應變,從而使相同硬件結(jié)構(gòu)的產(chǎn)品可以滿足各種用戶的不同需求。單片機 令的對錯,那么是根本無法排除軟件程序中的錯誤的。
例如:如果單一從軟的軟件和硬件在具體實現(xiàn)某個任務的過程中,已經(jīng)成為一個無法分離的整 件的指令語法角度考慮,CLR IOH和CLR 20H.O兩條指令,它們的功能都是體。
如果將單片機實現(xiàn)某個具體的任務比喻成一個人,那么單片機的軟件就 將兩個由點操作符表示的一進制位清零。但是如果把這兩條指令交給任何一相當于人的思想,單片機的硬件就象人的軀體。硬件是軟件思想的一個有力 種能開發(fā)51系列單片機的編譯系統(tǒng)之后,結(jié)果都是只有CLR 20H.o這一條指支撐體,而軀體這個硬件的所有行為,又受到軟件思想的直接控制。二者缺令正確。那么為什么兩條同樣結(jié)構(gòu)的指令中,前一條指令不正確而后一條指一不可。
令正確呢?產(chǎn)生這種編譯不通過的主要原因在于,51系列單片機片內(nèi)RAM 下面以經(jīng)典的51系列單片機為例,深入分析這種結(jié)合的具體體現(xiàn)。只有從20H到2FH這16個字節(jié)可以進行位尋址其他的地址,如這里的 第一、表現(xiàn)在四個并行端口的特點上。
在整個5l系列單片機軟件和硬件 IOH存儲單元,就不能用點操作符的形式單獨訪問它的某個二進制位,只能具體結(jié)合的過程中,最應該引起注意的是:為什么在讀取P0端口所連接外設(shè) 以整字節(jié)的形式訪問這些單元。
內(nèi)容的時候,要用下面這樣的指令組合呢? 再比如:要用軟件編程實現(xiàn)累加器A中的內(nèi)容暫時放入B中保存,然后把 MOV P0,#OFFH A中加68H的結(jié)果存入到某個直接地址中。
有人寫出如下的程序段: MOV A,PO MOV B,A‘ 如果拋開硬件結(jié)構(gòu),單一的從指令本身考慮,就是將一個立即數(shù)送到 ADD A 68HPo端口對應的寄存器中,然后馬上就讀它的內(nèi)容到累加器A中,好象根本不能 MOV OFOH。A有任何變化,讀到累加器A中的內(nèi)容就應該是剛剛送去的立即數(shù)“OFF}I”。從 MOV A,B軟件的表面上分析,只能說這兩個指令的組合僅相當于“M0v A,#OFFH” 這段程序原本的思路是,在A沒有參與加法運算之前,為了不丟失原來這樣的一條指令。
如果不了解單片機那種端口特有的硬件結(jié)構(gòu),遇到這樣的 A中的數(shù)據(jù),把A中內(nèi)容先放入B寄存器暫時保存,然后把加法結(jié)果保存到一指令組合之后,根本沒法用單一的軟件解釋清楚。
個地址是FOH的內(nèi)存單元,最后從B中取回A中原來寄存的內(nèi)容。可是實際上 在B中得到的信息根本不是A中原來的內(nèi)容,而是這次加法的和。這主要是是 不了解單片機的硬件結(jié)構(gòu)特點,而導致的一個軟件上的分析錯誤,最后丟失 了A中原來的數(shù)據(jù)。
當仔細分析了存儲器的內(nèi)部結(jié)構(gòu)特點才知道,原來在 lib 51系列單片機的內(nèi)部,寄存器B的直接地址就是FOH,這樣在軟件指令中的 B和FOH,表面上看是兩個內(nèi)容,一個是寄存器名稱,一個是直接地址,但實 質(zhì)上它們是對應的是一個硬件宅間。
所以在進行軟件編程之前,應該首先對 存儲器的這種硬件結(jié)構(gòu)特點有所了解。其次是訪問不同的存儲器空間,系統(tǒng)采用了使用軟件和硬件結(jié)合的方法 來區(qū)分。
圖1 PO端口某個引腳的內(nèi)部結(jié)構(gòu) 在51系列的單片機中,對于8051的存儲器加上外部可以擴展的,一共有 但是當仔細分析圖1中PO端口的內(nèi)部硬件機構(gòu)之后,發(fā)現(xiàn)P0端口某個引 4#-相對獨立的模塊,即片內(nèi)256字節(jié)的RAM、片外可擴展的最多64K字節(jié)的腳的輸入,既加到了T1和T2的公共端上,同時也加到了“讀引腳”的三態(tài)緩 R刪、片內(nèi)4K字節(jié)的R刪、片外可擴展的最多64K字節(jié)的ROM。
如果由D觸發(fā)器構(gòu)成的鎖存器Q輸出端為“0”,則T2導通,那么 如果想知道單片機所執(zhí)行的指令對應的機器碼。
到底存放到片內(nèi)程序存P0口上的電位就被鉗制在低電平,這樣如果從引腳輸入數(shù)據(jù)“1”,就無法 儲器還是片外程序存儲器了,要借助硬件的巨X引腳外圍電路連接情況來判20 I井援博莧 萬方數(shù)據(jù) 焉烹黑烹息!===}蔫啊I 科學論壇斷,如果這個引腳連接的是高電平,那么8051單片機的指令是首先從片內(nèi) 題中,被廣泛采用的方法大致有常見的3種處理方法,單純軟件、單純硬4l【程序存儲器中取出,然后自動調(diào)到片外的1000}Ij也址單元,繼續(xù)訪問片外 件、軟硬結(jié)合。
其中軟件的延時很簡單,只要利用某種程序控制某些指令的程序存儲器中的其它指令。相反假設(shè)這個引腳連接的是一個低電平,那么所 反復運行多次,即可實現(xiàn)延時操作的要求,但是它的最大缺點是時間不精有的指令的機器碼都來自單片機外擴的程序存儲器。
只有掌握了這個硬件的 確、大量占用了CPU的執(zhí)行時間,使CPU的工作效率變得很低;硬件的延時需特點之后,才能對8031這種片內(nèi)沒有程序存儲器的單片機,做出正確硬件設(shè) 要專門的硬件芯片搭接恰當?shù)碾娐罚旊娐纷龊弥蟆?/p>
想重新調(diào)整延時時間計——將它的i五引腳唯一只能設(shè)計成低電平的電路結(jié)構(gòu)。只能重新改變電路的參數(shù)和結(jié)構(gòu),這樣使設(shè)計在靈活性上失去了實用性;如 上面是采用了單片機豆X引腳,不同的硬件連接方式,訪問不同的程序 果能采用單片機的軟件和硬件的定時器相結(jié)合的方式,處理關(guān)于時間的問存儲器空間。
可是如果我們按照相同的規(guī)律,去分析如何用硬件再次區(qū)分數(shù) 題,利用這種軟件和硬件配合的方式,能很好的克服由單一的軟件或硬件帶據(jù)存儲器的片內(nèi)、片外時,開始千方百計的尋找另外一個,用來區(qū)分數(shù)據(jù)存 來的種種缺點和不足,集軟件和硬件的優(yōu)點于一身。
這主要是因為,單片機儲器是在片內(nèi)還是在片外的硬件引腳時,卻根本沒有任何結(jié)論。
原因在于此 有一個能獨立工作的硬件定時器,它在得到了單片機的軟件初始化命令字之時單片機的軟件和硬件又一次開始交換了它們的功能和使命,硬件不能完成 后,就可以單獨的和CPU同步并行工作,這樣不但能實現(xiàn)精確的定時。而且就改用了軟件來實現(xiàn)。軟件和硬件已經(jīng)開始相互融合、滲透。那么如果存 還可以充分提高CPU的工作效率。
這種軟件和硬件結(jié)合于一體的設(shè)計思路,儲運算結(jié)果時,想把這些數(shù)據(jù)指定存放到片內(nèi)還是片外,或者從數(shù)據(jù)存儲器 為我們的實際應用帶來了方便。
中讀來的數(shù)據(jù)想知道是來自片內(nèi)還是片外,我們怎樣來區(qū)分呢?此時單片機 第七、軟硬件結(jié)合,還能通過掉電保護和待機的工作方式中得到具體的給我們提供的操作方法是用軟件不同的指令來區(qū)分數(shù)據(jù)存儲器訪問的是片內(nèi) 體現(xiàn)。
為了讓單片機功耗降到最低。在實際工作時我們可以讓單片機工作在還是片外。具體用MOVX的操作碼代表訪問片外數(shù)據(jù)存儲器,用MOV操作碼代 特定的節(jié)電工作方式之下。51系列單片機典型的節(jié)電工作方式有2種,它們表訪問片內(nèi)的數(shù)據(jù)存儲器。是待機的工作方式和掉電保護的工作方式,分別由Pc0N寄存器的編程位 第三、軟硬件的結(jié)合可以從分析單片機的定時器溢出處理過程中得到結(jié) IDL和PD位控制。
如果在單片機的硬件開始動作之前,用軟件將IDL位置“論。這里用定時器Tl為例,分析這種軟件和硬件的具體結(jié)合。單片機的定時 1”,即可讓單片機的硬件電路進入待機工作方式;可是如果軟件是設(shè)置了器控制寄存器TCON中,TF是溢出標志位。當T產(chǎn)生溢出時,由硬件自動使 PD位置“1”,則單片機立刻出現(xiàn)掉電的方式,此時送入時鐘電路的振蕩信TFl置l。
這時如果軟件程序設(shè)計是采用中斷的編程方式處理溢出,那么當 號被封鎖,不產(chǎn)生時鐘信號,片內(nèi)的一切工作都停止,只有片內(nèi)R心的數(shù)據(jù)CPU響應該中斷請求時,是由系統(tǒng)中特定的內(nèi)部硬件自動將TFI清零。
但是如過保留。這里我們看到利用軟件可以直接改變硬件的工作狀態(tài)。
如果此時我們利用的是軟件查詢方式編程,來處理這次溢出,那么剛才由硬件 如果我們繼續(xù)分析待機的工作方式,我們還可以繼續(xù)發(fā)現(xiàn)這種軟件自動置l的TFl標志位,這時就要用~條相應的軟件指令來清除,也就是需要 和硬件的具體結(jié)合。
如果在單片機的硬件開始動作之前,用軟件將IDL位你用軟件將這種硬件的自動變化,調(diào)整回去,以便下次重新判斷定時器是否 置“1”,即進入待機工作方式,這時在程序運行過程中,如果CPU在等待有新的溢出產(chǎn)生。
由此可以看出。
同樣一個定時器的溢出的問題,如果采用 某個外設(shè)的結(jié)束麗沒有具體任務時,那么此時單片機的工作電流僅為中斷和查詢兩種不同的編程方法去處理,單片機就會用不同的硬件和軟件來 1.7mA一5mA,而正常的工作電流為1ImA-20mA。
此時CPU的工作“暫停”,處理標志位的復位。
通過這一點可以看到,單片機的軟硬件結(jié)合,確實達到 但是內(nèi)部時鐘發(fā)生器仍然工作,并向中斷系統(tǒng)、串行IEI和定時器提供工了密不可分的程度。
作時鐘信號,但向CPU提供時鐘的電路被封鎖,CPUI作停止。
這里因為軟 第四、主要體現(xiàn)在對外部中斷源的處理過程上。
當5系列單片機在處理 件從而改變了單片機內(nèi)部的電路工作狀態(tài)發(fā)生了不同的變化。
而且如果外部中斷的過程中,如果負責檢測中斷的硬件電路,想判斷某個外部中斷源 我們能了解這種特性之后,就可以大大降低單片機的功耗。
那么現(xiàn)在我是否有中斷產(chǎn)生之前,首先要判斷~下,軟件編程設(shè)定位IT0或ITl的當前狀 們最關(guān)心的是,這種由軟件改變的硬件工作方式,怎樣才能再次使它恢態(tài),被軟件程序設(shè)置成什么樣的初始值,從而使硬件電路得到了外部中斷源 復到正常的工作狀態(tài)上來呢?這里有非常恰當?shù)姆椒ǎ沂擒浖陀驳挠|發(fā)方式是邊沿觸發(fā)方式還是電平觸發(fā)方式,如果設(shè)定位是高電平,則中 件分別可以恢復的2種方法。
方法之一是軟件中斷激活,另一種方法是硬斷硬件電路會以邊沿的觸發(fā)方式,去檢測雨而或雨而引腳上的下降沿,來 件復位法。
在軟件中斷激活的方法中把軟件和硬件再次緊密的結(jié)合在一作為對應外部中斷源有中斷申請的標志;相反,如果是將設(shè)定位用軟件設(shè)定 起,在待機的工作方式之下,任何一個開放的中斷源發(fā)出的中斷請求,成了低電平,那么中斷硬件電路就會用電平的觸發(fā)方式,這次就不會去檢測 都能利用硬件對IDL清零,使單片機退出待機方式進入正常工作方式。硬INTO或祈i引腳上的F降沿了。而是用引腳上有沒有低電平,作為判斷中 件復位法的工作原理是,因為單片機在待機方式下時鐘發(fā)生器仍然工斷源是否有中斷申請的標志。
這時體現(xiàn)了因軟件設(shè)定方式不同,從而直接決 作,所以只要在RsT引腳上送一個脈寬大于兩個機器周期的正脈沖,就能定了硬件電路的工作情況軟件改變了硬件的工作。
接下來當外部引腳有硬 完成對單片機的復位操作,然后使之退出待機方式,但這次是讓單片機件的電平變化之后,單片機會將標志位IEO或IEI自動置“1”,硬件變化直 重新從頭開始工作,而不是在原來的基礎(chǔ)上繼續(xù)工作。接產(chǎn)生了軟件標志位的狀態(tài)變化。這樣硬件又返回來改變了軟件的狀態(tài)。
以上這些事實的列舉不能不說明單片機的軟件和硬件結(jié)合得如此之難舍 在這一點上,我們不僅看到了因單片機軟件設(shè)定不同,而導致硬件電路 難分,而且如果我們掌握了這些軟件和硬件結(jié)合的特點之后,能根據(jù)具體設(shè)的工作情況有所改變,而且同時也看到了硬件自動改變軟件標志位的真實所 計要求,可以方便地利用軟件和硬件各自的優(yōu)勢,在它們之間進行靈活的自在。
單片機軟件和硬件的結(jié)合已經(jīng)到了密不可分的地步了。由切換,充分發(fā)揮軟件和硬件的特長,達到最終滿意的理想設(shè)計效果。這也 第五、我們可以在串行口收發(fā)數(shù)據(jù)上,找到這種軟件和硬件結(jié)合的緊密 是單片機能具有廣泛應用的魅力之所在。但同時也給單片機的設(shè)計人員提出之處。我們知道,51系列的單片機有一個全雙工的串行口。
當我們要想利用 了即要精通軟件的設(shè)計精髓.同時也要合理的設(shè)計出容易控制的硬件電路,它的串行口發(fā)送數(shù)據(jù)時,軟件編程時只要寫出MOV SBUF,A這樣的核心指令 軟件和硬件都要學,而且兩樣都要精通,這樣單片機才能真正發(fā)揮它強大的就可以,剩下的任務就交給了硬件來完成。
當串行口的硬件電路將累加器中 內(nèi)在潛力.要發(fā)送數(shù)據(jù)的一個字節(jié),所有二進制位一位一位的經(jīng)過幾個時間片在T)D引腳上,發(fā)送成功之后,軟件又開始接受硬件電路的變化了。
評論