單片機(jī)并行輸入的含義:
并行輸入就是兩個(gè)或兩個(gè)以上的信號(hào)同時(shí)輸入。比如P0~P3口,都可以同時(shí)接受8路輸入信號(hào),所以是并行輸入。
51單片機(jī)po結(jié)構(gòu):
輸入緩沖器:在P0口中,有兩個(gè)三態(tài)的緩沖器,在學(xué)數(shù)字電路時(shí),我們已知道,三態(tài)門有三個(gè)狀態(tài),即在其的輸出端可以是高電平、低電平,同時(shí)還有一種就是高阻狀態(tài)(或稱為禁止?fàn)顟B(tài)),大家看上圖,上面一個(gè)是讀鎖存器的緩沖器,也就是說(shuō),要讀取D鎖存器輸出端Q的數(shù)據(jù),那就得使讀鎖存器的這個(gè)緩沖器的三態(tài)控制端(上圖中標(biāo)號(hào)為‘讀鎖存器’端)有效。下面一個(gè)是讀引腳的緩沖器,要讀取P0.X引腳上的數(shù)據(jù),也要使標(biāo)號(hào)為‘讀引腳’的這個(gè)三態(tài)緩沖器的控制端有效,引腳上的數(shù)據(jù)才會(huì)傳輸?shù)轿覀儐纹瑱C(jī)的內(nèi)部數(shù)據(jù)總線上。
51單片機(jī)P1結(jié)構(gòu):
圖可見,P1端口與P0端口的主要差別在于,P1端口用內(nèi)部上拉電阻R代替了P0端口的場(chǎng)效應(yīng)管T1,并且輸出的信息僅來(lái)自內(nèi)部總線。由內(nèi)部總線輸出的數(shù)據(jù)經(jīng)鎖存器反相和場(chǎng)效應(yīng)管反相后,鎖存在端口線上,所以,P1端口是具有輸出鎖存的靜態(tài)口。
由圖可見,要正確地從引腳上讀入外部信息,必須先使場(chǎng)效應(yīng)管關(guān)斷,以便由外部輸入的信息確定引腳的狀態(tài)。為此,在作引腳讀入前,必須先對(duì)該端口寫入l。具有這種操作特點(diǎn)的輸入/輸出端口,稱為準(zhǔn)雙向I/O口。8051單片機(jī)的P1、P2、P3都是準(zhǔn)雙向口。P0端口由于輸出有三態(tài)功能,輸入前,端口線已處于高阻態(tài),無(wú)需先寫入l后再作讀操作。
51單片機(jī)P2結(jié)構(gòu):
P2口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口,在結(jié)構(gòu)上P2比P1口多一個(gè)輸出控制部分。
51單片機(jī)P3結(jié)構(gòu):
P3口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口,可以同P1口一樣作為第一功能口,也可以每一位獨(dú)立定義功能。P3口作通用I/O口使用時(shí),輸出功能控制線為高電平,與非門的輸出取決于鎖存器的狀態(tài),此時(shí)鎖存器Q端的狀態(tài)與其引腳狀態(tài)是一致的,這種情況下,P3口的結(jié)構(gòu)和操作與P1口相同。
單片機(jī)并行處理實(shí)現(xiàn):
快速輪流調(diào)用CPU使用權(quán),反正小于10MS的東西,你又看不見,人眼是不能識(shí)別刷新頻率小于10MS的東西的,所以你看到的所謂并行,單核心的CPU,就是這樣,各個(gè)任務(wù)輪流使用CPU的使用權(quán),誰(shuí)也不霸占。
? 利用多線程思想實(shí)現(xiàn)單片機(jī)系統(tǒng)的偽并行處理
隨著計(jì)算機(jī)的不斷發(fā)展,越來(lái)越多的,優(yōu)秀的編程思想被提出來(lái),并付諸實(shí)踐。在某些方面已出現(xiàn)了根本性的變革。另一方面,單片機(jī)自從80年代誕生以來(lái),便以飛快的速度發(fā)展起來(lái),但由于其物理?xiàng)l件的限制,單片機(jī)控制系統(tǒng)的編程仍然局限于經(jīng)驗(yàn)的模式,很少應(yīng)用那些新提出的高級(jí)語(yǔ)言的編程思想。如果將不斷發(fā)展的編程思想與廣泛應(yīng)用的單片機(jī)控制系統(tǒng)結(jié)合起來(lái),一定會(huì)大大促進(jìn)單片機(jī)控制系統(tǒng)的進(jìn)一步發(fā)展。使其更廣泛的應(yīng)用于各個(gè)方面。
在下面這個(gè)具體項(xiàng)目中,實(shí)際情況對(duì)系統(tǒng)有一些比較苛刻的要求。按照一般的單線程的控制方法已經(jīng)無(wú)法滿足實(shí)際需求。具體情況如表1(表1所示為生化分析儀的設(shè)計(jì)中對(duì)單片機(jī)系統(tǒng)的要求的一部分)
表1所示只占了整個(gè)系統(tǒng)要求的1/6。下面對(duì)表1中的幾項(xiàng)內(nèi)容加以說(shuō)明。
對(duì)象M1開始動(dòng)作17操作,即首先步進(jìn)電機(jī)M1(正向)轉(zhuǎn)動(dòng)查找光電開關(guān)信號(hào)PS1;查到后執(zhí)行兩次‘過(guò)程1‘。過(guò)程1:向電機(jī)打出30拍。由表1可知該動(dòng)作從C 段執(zhí)行到 K段停止;
對(duì)象M2即步進(jìn)電機(jī)M2等對(duì)象M1執(zhí)行完動(dòng)作17后執(zhí)行動(dòng)作23等。對(duì)象M3和對(duì)象M4 則在開始時(shí)同時(shí)啟動(dòng),分別執(zhí)行各自的動(dòng)作。各個(gè)對(duì)象之間有的獨(dú)立,有的相互關(guān)聯(lián)。
整個(gè)項(xiàng)目需要控制16臺(tái)步進(jìn)電機(jī),21個(gè)電磁閥,3個(gè)泵,1個(gè)直流電機(jī),系統(tǒng)要求全部執(zhí)行時(shí)間為6秒鐘,系統(tǒng)要求步進(jìn)電機(jī)以其最快的速度 -----40us—60us打拍。如果以單線程的方式編程讓一臺(tái)電機(jī)轉(zhuǎn)到位之后,再轉(zhuǎn)其他電機(jī)。這樣16臺(tái)電機(jī)打一拍就需要640us---960us 已經(jīng)無(wú)法滿足系統(tǒng)要求。這就需要使單片機(jī)并行控制多臺(tái)電機(jī)運(yùn)轉(zhuǎn)。這種以并行的方式驅(qū)動(dòng)各個(gè)電機(jī)同時(shí)啟動(dòng)可以在最短的時(shí)間將各個(gè)電機(jī)同時(shí)到位。在轉(zhuǎn)動(dòng)電機(jī)的同時(shí)還需要檢測(cè)一些開關(guān)量已確定電機(jī)的位置。為了實(shí)現(xiàn)這個(gè)目的。下面提供第一種解決方案(此方案是常用的方案之一,但作者并不推薦這個(gè)方案。因?yàn)檫@個(gè)方案成本太高。)。
方案一: 硬件實(shí)現(xiàn)。
我們可以用多個(gè)CPU,將各個(gè)電機(jī)的控制分到不同的CPU中執(zhí)行,并可將不互相沖突的電機(jī)控制過(guò)程放到一個(gè)CPU中,其結(jié)構(gòu)如圖1
在多線程編程中,每個(gè)線程都用編碼提供線程的行為,用數(shù)據(jù)供給編碼操作。多個(gè)線程同時(shí)處理同一編碼和數(shù)據(jù),不同線程可能各有不同的編碼和數(shù)據(jù)。事實(shí)上,編碼和數(shù)據(jù)部分是相當(dāng)獨(dú)立的,需要時(shí)即可向線程提供。因此經(jīng)常是幾個(gè)線程使用同一段編碼和數(shù)據(jù)這就會(huì)出現(xiàn)下面的情況
當(dāng)一個(gè)線程在調(diào)用數(shù)據(jù)時(shí),另一個(gè)線程可能正在修改這些數(shù)據(jù)。則前一個(gè)線程所調(diào)用的數(shù)據(jù)出現(xiàn)了不確定性。這會(huì)影響整個(gè)運(yùn)行結(jié)果。為了避免這個(gè)問(wèn)題,多線程編程中,各個(gè)線程之間通訊和控制尤為重要。在將多線程的思想向單片機(jī)控制系統(tǒng)移植時(shí),這點(diǎn)要非常注意。因?yàn)橄到y(tǒng)多線程運(yùn)作的實(shí)現(xiàn)從其最基本的層面看仍然是單線程的操作;他的實(shí)現(xiàn)歸根結(jié)底是利用了計(jì)算機(jī)的高速度。它將系統(tǒng)運(yùn)行的基準(zhǔn)時(shí)間分成了許多時(shí)間片,將各個(gè)時(shí)間片分給不同的線程,如此一來(lái)在一個(gè)基準(zhǔn)時(shí)間內(nèi)各個(gè)線程全都向前行進(jìn)了一步,然后運(yùn)行下一個(gè)基準(zhǔn)時(shí)間,周而復(fù)始。這樣在用戶層的角度看來(lái),各個(gè)線程是同步進(jìn)行的。只要速度夠塊,時(shí)間片的劃分不會(huì)影響用戶層面上的應(yīng)用,這樣就可以實(shí)現(xiàn)多線程的操作。近年來(lái)單片機(jī)速度的大幅度提升,這就使多線程思想向單片機(jī)控制系統(tǒng)的移植成為可能。
在整個(gè)項(xiàng)目中全部的輸入信號(hào)共39個(gè);同時(shí)并行查詢的對(duì)象最多時(shí)有61個(gè)系統(tǒng)要求以步進(jìn)電機(jī)最快的速度打拍。時(shí)間約40us---60us,為了保證步進(jìn)電機(jī)打拍的穩(wěn)定性和靈活性。我選用了DSP內(nèi)部的一個(gè)定時(shí)器,定時(shí)時(shí)間為打拍時(shí)間的1/3—1/5。設(shè)定為10us中斷。這個(gè)時(shí)間為整個(gè)系統(tǒng)運(yùn)行的基準(zhǔn)時(shí)間。在這段時(shí)間內(nèi),系統(tǒng)要查詢一遍所有對(duì)象并向相應(yīng)的步進(jìn)電機(jī)打拍。在一些線程中還需要采樣多次。換句話說(shuō),在這個(gè)系統(tǒng)時(shí)間內(nèi)。所有線程都要向前行進(jìn)一步。
就像計(jì)算機(jī)一樣,將這個(gè)基準(zhǔn)時(shí)間分為多個(gè)時(shí)間片。將各個(gè)時(shí)間片分給不同的線程,在這種情況下,各個(gè)線程的執(zhí)行是間斷的。這與用硬件模擬多線程有本質(zhì)的不同。像這樣既要應(yīng)用各線程執(zhí)行的間斷性,又要保證各線程運(yùn)行的連續(xù)性。這對(duì)軟件的設(shè)計(jì)有了很高的要求,這同時(shí)也是單片機(jī)控制系統(tǒng)用軟件模擬多線程方法中的難點(diǎn)之一,為了解決這個(gè)問(wèn)題,可在個(gè)線程自帶線程進(jìn)度指示器用來(lái)標(biāo)志線程的運(yùn)行進(jìn)度,即用一個(gè)變量記載線程的每一步;如圖2
系統(tǒng)設(shè)定線程進(jìn)度指示器用來(lái)指引線程的連續(xù)運(yùn)行,同時(shí)在一個(gè)中斷中輪詢所有對(duì)象。其編程結(jié)構(gòu)大致如下:
時(shí)鐘中斷:
線程1:
線程進(jìn)度標(biāo)志:
1: ;
2: ;
3 ;
線程2:
線程進(jìn)度標(biāo)志:
1: ;
2: ;
用軟件模擬多線程還有很多要注意的地方。
如果選用20兆的DSP來(lái)實(shí)現(xiàn)控制功能,步進(jìn)電機(jī)最快的打拍速度為40us---60us,則有下面的計(jì)算結(jié)果,,取1/4,即10us產(chǎn)生一中斷,在中斷里查詢61個(gè)對(duì)象。20兆DSP單條指令的執(zhí)行時(shí)間大約為50ns在一次中斷內(nèi)可執(zhí)行的語(yǔ)句數(shù)=10us/50ns=200條,如果在分給61個(gè)對(duì)象,每個(gè)對(duì)象所分得的指令數(shù)僅為3條,已經(jīng)不夠用了,即使選擇60兆的DSP,說(shuō)分指令也只是9條,若以犧牲打拍的靈活性為代價(jià),以60us為已中斷。則每個(gè)對(duì)象所分得的指令數(shù)僅為36條勉強(qiáng)夠用,如果所控制的對(duì)象再多的話,軟件編程的靈活性將進(jìn)一步被壓縮,
下面提出了一種擴(kuò)展的多線程模擬方法,如圖
s1,s2為系統(tǒng)運(yùn)行的基準(zhǔn)時(shí)間,M1.1 為第一對(duì)象組中第一對(duì)象。M1.2 為第一對(duì)象組中第二對(duì)象。
這種擴(kuò)展的多線程模擬方法仍將系統(tǒng)時(shí)間化成多個(gè)時(shí)間片,與上面不同的是有幾個(gè)線程(對(duì)象)組成一個(gè)線程組,共享同一個(gè)時(shí)間片,例如:當(dāng)系統(tǒng)運(yùn)行到第一次基準(zhǔn)時(shí)間的第一個(gè)時(shí)間片時(shí),由共享時(shí)間片的第一個(gè)線程占用,當(dāng)系統(tǒng)運(yùn)行到第2次基準(zhǔn)時(shí)間的第1個(gè)時(shí)間片時(shí),由共享時(shí)間片的第2個(gè)線程占用,如此類推,這種擴(kuò)展模式可以靈活的掌控線程與所用時(shí)間的比例,但是這是以犧牲運(yùn)行時(shí)間為代價(jià)的。
結(jié)論:本文對(duì)單片機(jī)控制系統(tǒng)的編程思想作出了擴(kuò)展,將本屬于計(jì)算機(jī)高級(jí)語(yǔ)言編程思想的多線程編程移植到單片機(jī)控制系統(tǒng)中。這種方法使單片機(jī)控制系統(tǒng)可工作于對(duì)系統(tǒng)運(yùn)行速度要求很高的系統(tǒng)中,并且對(duì)其他的高級(jí)語(yǔ)言編程思想,如對(duì)事件句柄的處理等向單片機(jī)控制系統(tǒng)移植起了示范作用。
評(píng)論
查看更多