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