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