51單片機實現狀態(tài)機_第1頁
51單片機實現狀態(tài)機_第2頁
51單片機實現狀態(tài)機_第3頁
51單片機實現狀態(tài)機_第4頁
51單片機實現狀態(tài)機_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、單片機技術基礎教程與實踐整理ppt 第第9章章 51單片機實現狀態(tài)機單片機實現狀態(tài)機 9.1 有限狀態(tài)機有限狀態(tài)機有限狀態(tài)機(FSM)與流程圖很相似,具有一組按照一定路徑排列的狀態(tài),依據于狀態(tài)中的事件和動作,一個狀態(tài)可以轉移到其他狀態(tài)。狀態(tài)是時間中的一個點,例如,當你等火車的時候,你在等待狀態(tài)。一種狀態(tài)在一個狀態(tài)機中,只能出現一次。事件是某時發(fā)生的事情,例如火車到達,火車運行。動作是當事件出現時,實現的任務,例如,火車到達后,上車轉移是兩個狀態(tài)之間的聯系,可以從一個狀態(tài)移動到另外一個狀態(tài)。狀態(tài)圖就是對一個事物在某個事件發(fā)生后從一個源狀態(tài)到另外一個目的狀態(tài)轉移的圖形描述。狀態(tài)圖中,使用圓圈表示狀

2、態(tài),圓圈中的文字或數字表示該狀態(tài)的名字或是編碼,狀態(tài)轉移方向用箭頭表示,在箭頭旁寫的文字是轉移條件。對于梅里狀態(tài)圖,在箭頭旁用“輸入/輸出”的格式表示轉移條件與滿足該轉移條件下的輸出;而對于摩爾狀態(tài)機,常將輸出放在狀態(tài)圓圈中。單片機技術基礎教程與實踐整理pptreset=0reset=0reset=0reset=0reset=0reset=0a0a0a1a1a2a2a3a3a4a4報警報警置數置數定時定時k=0k=0k=0k=0k=1k=1td=1td=1.由圖可知,當k=0時,狀態(tài)從a0轉移到a1,若是k0=1,從狀態(tài)a1轉移到a2,等等,若是reset=0,則無論在什么狀態(tài),都將轉移到a0

3、狀態(tài)。單片機技術基礎教程與實踐整理ppt一個狀態(tài)機描述需要五個要素:狀態(tài)、輸入、輸出、狀態(tài)轉移函數、輸出函數。如果在一個狀態(tài)中包含著另一個狀態(tài)序列,則稱該狀態(tài)為復合狀態(tài)。狀態(tài)機就是能夠根據狀態(tài)轉移條件進行狀態(tài)轉換和輸出狀態(tài)活動的自動機。狀態(tài)機可以使用數字電路實現,或是單片機通過軟件編程實現。如果狀態(tài)數量有限、輸入數量有限、輸出數量有限,則稱為有限狀態(tài)機(FSM)。在數字電路中,有兩類基本的電路,它們是組合電路和時序電路,它們之間的區(qū)別是組合電路的結構中沒有反饋、輸入值直接決定輸出值,而時序電路的結構中具有反饋,其輸出由狀態(tài)和輸入決定。狀態(tài)機是時序電路的一種。記 憶 電 路組 合 邏 輯反 饋輸

4、 入現 在 狀 態(tài)次 態(tài) 邏 輯 或 驅 動 邏 輯.單片機技術基礎教程與實踐整理ppt9.1.1 時鐘同步有限狀態(tài)機時鐘同步有限狀態(tài)機如果一個時序電路中的觸發(fā)器都使用同一個時鐘信號,則稱為同步狀態(tài)機1.結構時鐘同步狀態(tài)機的結構如圖所示。其中次態(tài)邏輯由現態(tài)和輸入形成。狀態(tài)記憶是n個觸發(fā)器,用于記憶2n狀態(tài)。輸出邏輯由現在狀態(tài)和輸入形成。在時鐘的上升沿或是下降沿(取決于觸發(fā)器結構),觸發(fā)器在次態(tài)邏輯的控制下動作。次態(tài)邏輯狀態(tài)記憶驅動現態(tài)輸出邏輯時鐘輸入輸出.單片機技術基礎教程與實踐整理ppt2.輸出邏輯如果一個時序電路的輸出與現在狀態(tài)和輸入都有關,則稱為梅里狀態(tài)機,就是說,在某狀態(tài)下,滿足某輸入

5、條件的輸出就是梅里輸出。值得注意的是梅里狀態(tài)機的輸入變化直接引起輸出的變化,而不是等到下一個狀態(tài)到來時輸出才變化。就是梅里狀態(tài)機。次態(tài)邏輯狀態(tài)記憶驅動現態(tài)輸出邏輯時鐘輸入輸出.與輸入無關,輸出只與狀態(tài)有關的狀態(tài)機,稱為摩爾狀態(tài)機,所以摩爾狀態(tài)機的輸出與狀態(tài)變化同步。摩爾狀態(tài)機是使用廣泛的狀態(tài)機,如圖所示。單片機技術基礎教程與實踐整理ppt3.狀態(tài)編碼具有n個狀態(tài)變量的狀態(tài)機具有2n個狀態(tài)。究竟一個狀態(tài)用什么樣的二進制數表示,就是狀態(tài)編碼問題。狀態(tài)與它的編碼之間不是唯一關系。最簡單的狀態(tài)編碼就是采用自然二進制整數順序來表示狀態(tài),這樣的編碼雖然簡單,但是最終的電路未必是最簡單的。如果要得到最簡單的

6、結果,最好把各種編碼都試一試,但是太累人,一般情況下采用經驗編碼方法。在狀態(tài)編碼時應該考慮的一些因素:(1)選擇初始狀態(tài)的編碼與狀態(tài)機的復位狀態(tài)相同,這樣就會使狀態(tài)機復位時就回到狀態(tài)機的初始狀態(tài)。(2)每一次狀態(tài)變化,應該使發(fā)生的狀態(tài)變量最少。(3)如果有未使用的狀態(tài),則盡量選擇可以達到簡化邏輯設計的狀態(tài)編碼。設計中應該保證從未使用狀態(tài)一定可以進入初始狀態(tài)。單片機技術基礎教程與實踐整理ppt4.主從狀態(tài)機一個大的狀態(tài)機設計是非常復雜的,一般情況下,最好將大的狀態(tài)機分解成小狀態(tài)機的集合。一般劃分的原則是按照功能劃分,主要輸入、輸出和控制算法由主狀態(tài)機完成,而輔助的、在主狀態(tài)機控制下的算法由子狀態(tài)

7、機完成,就是說主狀態(tài)機完成頂層算法,子狀態(tài)機完成底層算法。最常見的劃分就是將計數器作為子狀態(tài)機,這時,主狀態(tài)機只要發(fā)出啟動信號,而等待計數器返回的計數完成信號。雖然主狀態(tài)機增加了啟動計數器的輸出信號和來自計數器的計數完成信號,但是該計數器就可以為主狀態(tài)機節(jié)省n1個狀態(tài)。主從狀態(tài)機的一般結構如圖所示。主 狀 態(tài) 機子 狀 態(tài) 機 1子 狀 態(tài) 機 2子 狀 態(tài) 機 nSTART1START2STARTnDONE1DONE2DONEn輸 出輸 入.單片機技術基礎教程與實踐整理ppt5.狀態(tài)轉移條件狀態(tài)轉移的條件和輸入的信號數有關,n個輸入信號,將有2n個轉移條件,這些條件之間應該是互斥的,只能有一

8、個轉移條件有效。也就是只能轉移到另外一個狀態(tài),而不是一個以上的狀態(tài)。在狀態(tài)機設計過程中,對于狀態(tài)轉移的條件是容易給出的,但是使多個狀態(tài)轉移條件滿足互斥條件確是比較難的,因為這需要更深刻的考慮狀態(tài)、轉移條件之間的關系。一個狀態(tài)只向另外一個狀態(tài)轉移的狀態(tài)機是最簡單的狀態(tài)機,因為只有一個狀態(tài)轉移條件。有些狀態(tài)圖只給出本狀態(tài)向外狀態(tài)的轉移條件,而向自己轉移的條件未給出,這種情況可以理解為只要不向外狀態(tài)轉移就保持在本狀態(tài)不動。單片機技術基礎教程與實踐整理ppt6.狀態(tài)機的輸入信號狀態(tài)機的輸入信號往往使是按鍵信號,既然是按鍵信號,則按下去的時間長短是隨機的,可能是一個或幾個時鐘脈沖的時間,如果狀態(tài)機的狀態(tài)

9、轉移是在某輸入信號的作用之下連續(xù)轉移,例如,在狀態(tài)1,當按鍵第一次為0時,轉移到狀態(tài)2,第二次為0時轉移到狀態(tài)1,則會因為按鍵一直保持在0,引起狀態(tài)不斷的轉換,不能實現每按一次按鍵,轉換一次狀態(tài)的目的。解決的方法是設計邊沿微分電路,使按鍵按下時,只在下降沿輸出一個時鐘周期的低電平,保證只有一個狀態(tài)轉移。7.上電狀態(tài)機初始化在狀態(tài)機上電時,無論為何種輸入條件,都應該進入到一個確定的狀態(tài),該狀態(tài)稱為上電初始狀態(tài)。有些狀態(tài)機可以在上電時,自動進入上電初始狀態(tài),有些狀態(tài)機則不能,需要復位信號的幫助才能進入上電初始狀態(tài)。9.1.2狀態(tài)圖狀態(tài)圖狀態(tài)圖是用于小型、中型狀態(tài)機設計的一種方法,該方法的特點是簡單

10、。狀態(tài)圖中的狀態(tài)轉移是用一根弧線表示的,所以不管有多少輸入變量,也只能有一個轉移條件表達式,應該使現在狀態(tài)到所有次態(tài)的轉移條件互斥,也就是說只能轉移到一個次態(tài)。另外需要說明的是用于控制器的狀態(tài)機大部分都是摩爾狀態(tài)機,就是說這些狀態(tài)機的輸出僅僅與狀態(tài)有關。單片機技術基礎教程與實踐整理ppt例題9-1設計一個順序開關裝置,該開關裝置在按鍵k第一次按下時,三盞燈x、y和z同時點亮,當k再次按下時,x燈立刻熄滅;y燈15s后熄滅,在y燈熄滅后18s后,z燈熄滅。轉 移 條件說明狀態(tài)說明輸出說明k輸入按鍵z0三燈都滅t1515秒定時 起動td1515秒定時到信號z1三燈都亮t1818秒定時 起動td18

11、18秒定時到信號z2三燈都亮xx燈z3x燈滅,其他亮yy燈z4x、y燈滅,z燈亮zz燈單片機技術基礎教程與實踐整理pptz0z0z1z1z2z2z3z3z4z4k=0k=0k=1k=1td15=1td15=1td18=1td18=1k=0k=0.x=0y=0z=0 x=1y=1z=1x=1y=1z=1x=0y=1z=1x=0y=0z=1.單片機技術基礎教程與實踐整理ppt例題9-2試設計一個交通信號燈控制器,該交通燈的紅、黃、綠燈亮滅順序是如下:南北綠燈10秒南北黃燈3秒南北綠閃5秒東西綠燈10秒東西黃燈3秒東西綠閃5秒南北紅燈東西紅燈. . . . .轉移條件說明狀態(tài)說明輸出說明td1010

12、秒定時到信號a0南北綠、東西紅t1010秒定時起動td58秒定時到信號a1南北綠閃,東西紅t88秒定時起動td33秒定時到信號a2南北黃、東西紅t33秒定時起動a3南北紅、東西綠n1南北紅燈a4南北紅、東西綠閃n2南北黃燈a5南北紅、東西黃n3南北綠燈d1東西紅燈d2東西黃燈d3東西綠燈單片機技術基礎教程與實踐整理ppta0a0a1a1a2a2a3a3a4a4a5a5td10td10td5td5td3td3td10td10td5td5td3td3.單片機技術基礎教程與實踐整理ppt9.2.1 C語言描述狀態(tài)機的語句語言描述狀態(tài)機的語句intstate=S0;/初始狀態(tài)while(1)/無限循環(huán)

13、switch(state)caseS0:If(T0轉移條件滿足)狀態(tài)轉移到滿足T0條件的次態(tài);操作;If(T1轉移條件滿足)狀態(tài)轉移到滿足T1條件的次態(tài);操作;If(TN轉移條件滿足)狀態(tài)轉移到滿足TN條件的次態(tài);操作;break;caseS1:/插入S1的操作;/插入離開S1的轉移;break;caseSN:/插入SN的操作;/插入離開SN的轉移;break;通常將表示狀態(tài)轉移的一系列通常將表示狀態(tài)轉移的多個if語句寫成if-else語句,這樣可以使轉移條件形成互斥。單片機技術基礎教程與實踐整理ppt當然也可以直接使用if語句描寫狀態(tài)機,例如:if(state=S0)if(T0轉移條件滿足)

14、狀態(tài)轉移到滿足T0條件的次態(tài);操作;elseif(T1轉移條件滿足)狀態(tài)轉移到滿足T1條件的次態(tài);操作;elseif(TN轉移條件滿足)狀態(tài)轉移到滿足TN條件的次態(tài);操作;if(state=S1)/插入離開該狀態(tài)的條件語句/插入要轉移的次態(tài)/插入S1狀態(tài)的操作語句if(state=SN)/插入離開該狀態(tài)的條件語句/插入要轉移的次態(tài)/插入SN狀態(tài)的操作語句單片機技術基礎教程與實踐整理ppt9.2.2 描述狀態(tài)機的完整描述狀態(tài)機的完整C程序格式程序格式#include數碼管的譯碼表格設置定時器的定時變量設置狀態(tài)變量設置其他全局變量主程序:局部變量初始化定時器初始化語句中斷允許語句主程序無限循環(huán)中:

15、(1)輸入信號處理語句獲得所有的輸入信號狀態(tài)單片機技術基礎教程與實踐整理ppt(2)狀態(tài)機描述語句主要是描述狀態(tài)轉移、轉移條件、定時變量清零等該狀態(tài)下的輸出語句顯示該狀態(tài)的發(fā)光二極管(不是必須的,用于調試)(3)顯示處理語句將定時數據送到數碼管顯示(不是必須的,用于調試)(4)其他語句(5)若是在狀態(tài)描述語句中沒有描述輸出,可單獨將各個狀態(tài)下的輸出描述定時器中斷服務程序中:設置靜態(tài)局部變量根據定時器工作模式確定是否設置初值,若是需要精確定時,選擇不需要預置初值的工作方式2每中斷一次就增加數值的語句,獲得確定的中斷時間(例如1s)。按照確定的中斷時間,增加定時變量單片機技術基礎教程與實踐整理pp

16、t9.3 示例程序示例程序 在狀態(tài)機描述中,除了直接描述狀態(tài)機的語句外,還需要按鍵(鈕)輸入語句、定時器描述等語句,本節(jié)通過示例對按鍵、定時等的C描述給予介紹。示例程序1按鍵處理程序。P3口全部連接按鍵,P0口連接的數碼管顯示按鍵的值,程序中變量kk是按鍵的值,不同的按鍵按下,數碼管顯示不同的值。變量說明變量說明nn延遲時間循環(huán)變量kk按鍵值table共陽數碼管譯碼表單片機技術基礎教程與實踐整理ppt源程序如下:#includeAT89X51.hunsignedintcodetable=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,

17、0 x90;unsignedintkk=0 x08;voidmain()unsignedintnn;while(1)P3=0 xff;/P3口連接8個按鍵作為輸入if(P3|0 x00)!=0 xff)/如果有按鍵按下for(nn=0;nn1000;nn+);/延時if(P3|0 x00)!=0 xff)/按鍵還在按下狀態(tài)switch(P3)case0 xfe:/P3_0=0,fe=11111110kk=0;break;case0 xfd:/P3_1=0,fd=11111101kk=1;break;單片機技術基礎教程與實踐整理pptcase0 xfb:/P3_2=0,fb=11111011kk

18、=2;break;case0 xf7:/P3_3=0f7=11110111kk=3;break;case0 xef:/P3_4=0,ef=11101111kk=4;break;case0 xdf:/P3_5=0,df=11011111kk=5;break;case0 xbf:/P3_6=0,bf=10111111kk=6;break;case0 x7f:/P3_7=07f=01111111kk=7;break;default:kk=8;while(P3!=0 xff);/如果按鍵還在按下時,則停留在此,等待按鍵抬起P0=tablekk;/將鍵值送到P0口連接的數碼管顯示單片機技術基礎教程與實踐

19、整理ppt示例程序2按鍵控制秒計數(定時器0工作在方式1)。P3口引腳連接按鍵,按鍵按下后,P0口連接的數碼管顯示按鍵號,P1口循環(huán)顯示0按鍵號之間的值,P2_0連接的LED燈亮1s,滅1s。如下程序采用定時器0,方式1工作,由于預裝初值需要時間,所以不是精確計數。變量說明變量說明nn主函數內延遲時間循環(huán)變量kk按鍵值t0隨定時器中斷次數遞增變量nn局部靜態(tài)變量,隨定時器中斷次數增加table共陽數碼管譯碼表單片機技術基礎教程與實踐整理ppt源程序如下:#includeAT89X51.h/文件夾名yuzuo2unsignedintcodetable=0 xC0,0 xF9,0 xA4,0 xB

20、0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90;unsignedintkk=0 x08;unsignedintt0;voidmain()unsignedintnn;TMOD=0 x01;/定時器0,M1M0=01(模式1),gate=0(外中斷不起作用),C/T=0TH0=0 x3c;/設置TH初值0 x3cb0=65536-50000=15536,50ms中斷一次,每秒中斷20次TL0=0 xb0;/設置TL初值TR0=1;/啟動定時器0ET0=1;/設置中斷使能寄存器,允許定時器0中斷EA=1;/允許所有中斷源中斷while(1)P3=0 xff;/P3口連接8

21、個按鍵作為輸入if(P3)!=0 xff)/如果有鍵按下for(nn=0;nnkk)/由于kk是按鍵值,所以按鍵不同,kk不同,因此延遲時間也不同。t0=0;單片機技術基礎教程與實踐整理ppt示例程序3按鍵控制定時時間的程序(定時器0工作在方式2)。按鍵值kk不同,則t0值的循環(huán)周期不同,因此可以通過kk改變t0,進而改變與t0相關的周期長度。變量說明變量說明nn主函數內延時時間循環(huán)變量kk按鍵值t0隨定時器中斷次數遞增變量nn局部靜態(tài)變量,隨定時器中斷次數增加table共陽數碼管譯碼表單片機技術基礎教程與實踐整理ppt源程序如下:#includeAT89X51.hunsignedintcod

22、etable=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90;unsignedintkk=0 x08;unsignedintt0;voidmain()unsignedintnn;TMOD=0 x02;/定時器0,工作模式M1,M0=2(0000,0010),8位、自動重裝定時模式/gate=0(外中斷不起作用),C/T=0(取時鐘信號)TH0=0 x06;/預置初值6到定時器TH,預置250微秒溢出一次(12MHz)/0.25ms,若是需要定時1s,則需要乘以4000,TL0=0 x06;/預置TL0值TR0=1;/啟動定

23、時器0ET0=1;/允許定時器中斷EA=1;/允許總中斷單片機技術基礎教程與實踐整理pptwhile(1)P3=0 xff;/P3口連接8個按鍵作為輸入if(P3)!=0 xff)/有鍵按下for(nn=0;nnkk)/kk改變t0的循環(huán)周期t0=0;單片機技術基礎教程與實踐整理ppt示例程序4在使用如下的按鍵檢測程序時,可以根據需要按鍵的多少裁減程序。如果需要按鍵按下時起作用,則應該去掉等待按鍵抬起的語句,但是應該注意,若是在狀態(tài)轉移條件中,連續(xù)兩個轉移條件具有相同的鍵值,這可能引起狀態(tài)連續(xù)變化。P3口連接按鍵,P0口連接的數碼管顯示按鍵值。變量說明變量說明nn主函數內延遲時間循環(huán)變量kk按

24、鍵值n0,n1,n2n3,n4,n5,n6,n7各個按鍵按下標志t0隨定時器中斷次數遞增變量nn局部靜態(tài)變量,隨定時器中斷次數增加table共陽數碼管譯碼表單片機技術基礎教程與實踐整理ppt源程序如下:#includeAT89X51.hunsignedintcodetable=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90;unsignedintn0,n1,n2,n3,n4,n5,n6,n7;unsignedintkk=8;voidmain()unsignedintnn;while(1)P3=0 xff;/P3口連接8個按

25、鍵作為輸入if(P3_0=0)/P3_0鍵按下for(nn=0;nn1000;nn+);/延時if(P3_0=0)/如果還在按下狀態(tài),則n0=1,kk=0;否則n0=0,kk=8;n0=1;kk=0;P2_0=0;elsen0=0;while(!P3_0);/等待按鍵抬起單片機技術基礎教程與實踐整理pptif(P3_1=0)/P3_1連接的按鍵處理程序for(nn=0;nn1000;nn+);if(P3_1=0)n1=1;kk=1;elsen1=0;while(!P3_1);if(P3_2=0)/P3_2連接的按鍵處理程序for(nn=0;nn1000;nn+);if(P3_2=0)n2=1;

26、kk=2;elsen2=0;while(!P3_2);if(P3_3=0)/P3_3連接的按鍵處理程序for(nn=0;nn1000;nn+);if(P3_3=0)n3=1;kk=3;/P3_3連接的按鍵處理程序elsen3=0;while(!P3_3);if(P3_4=0)for(nn=0;nn1000;nn+);if(P3_4=0)n4=1;kk=4;/P3_4連接的按鍵處理程序elsen4=0;while(!P3_4);單片機技術基礎教程與實踐整理pptif(P3_5=0)/P3_5連接的按鍵處理程序for(nn=0;nn1000;nn+);if(P3_5=0)n5=1;kk=5;els

27、en5=0;while(!P3_5);if(P3_6=0)/P3_6連接的按鍵處理程序for(nn=0;nn1000;nn+);if(P3_6=0)n6=1;kk=6;elsen6=0;while(!P3_6);if(P3_7=0)/P3_7連接的按鍵處理程序for(nn=0;nn1000;nn+);if(P3_7=0)n7=1;kk=7;elsen7=0;while(!P3_7);P0=tablekk;/P0口連接的數碼管顯示按鍵值單片機技術基礎教程與實踐整理ppt9.4 燈開關類例題燈開關類例題例題例題9-3 設計一個開關燈裝置,該開關燈裝置在按鍵k(P3_0引腳)第一次按下時,三盞燈a、b和c同時點亮,當k再次按下時,a燈立刻熄滅;b燈15s后熄滅,在b燈熄滅18s后,c燈熄滅變量說明變量說明nn主函數內延時時間循環(huán)變量kk按鍵

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論