51單片機(jī)實(shí)現(xiàn)狀態(tài)機(jī)資料

上傳人:愛****1 文檔編號:248078457 上傳時(shí)間:2024-10-22 格式:PPT 頁數(shù):38 大小:164.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
51單片機(jī)實(shí)現(xiàn)狀態(tài)機(jī)資料_第1頁
第1頁 / 共38頁
51單片機(jī)實(shí)現(xiàn)狀態(tài)機(jī)資料_第2頁
第2頁 / 共38頁
51單片機(jī)實(shí)現(xiàn)狀態(tài)機(jī)資料_第3頁
第3頁 / 共38頁

下載文檔到電腦,查找使用更方便

20 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《51單片機(jī)實(shí)現(xiàn)狀態(tài)機(jī)資料》由會(huì)員分享,可在線閱讀,更多相關(guān)《51單片機(jī)實(shí)現(xiàn)狀態(tài)機(jī)資料(38頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

1、單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,電子工業(yè)出版社所有,*,單片機(jī)技術(shù)基礎(chǔ)教程與實(shí)踐,第9章 51單片機(jī)實(shí)現(xiàn)狀態(tài)機(jī),9.1 有限狀態(tài)機(jī),有限狀態(tài)機(jī)FSM與流程圖很相像,具有一組依據(jù)肯定路徑排列的狀態(tài),依據(jù)于狀態(tài)中的大事和動(dòng)作,一個(gè)狀態(tài)可以轉(zhuǎn)移到其他狀態(tài)。,狀態(tài)是時(shí)間中的一個(gè)點(diǎn),例如,當(dāng)你等火車的時(shí)候,你在等待狀態(tài)。一種狀態(tài)在一個(gè)狀態(tài)機(jī)中,只能消失一次。,大事是某時(shí)發(fā)生的事情,例如火車到達(dá),火車運(yùn)行。,動(dòng)作是當(dāng)大事消失時(shí),實(shí)現(xiàn)的任務(wù),例如,火車到達(dá)后,上車,轉(zhuǎn)移是兩個(gè)狀態(tài)之間的聯(lián)系,可以從一個(gè)狀態(tài)移動(dòng)到另外一個(gè)狀態(tài)。,狀態(tài)圖就是對一個(gè)事物在某個(gè)

2、大事發(fā)生后從一個(gè)源狀態(tài)到另外一個(gè)目的狀態(tài)轉(zhuǎn)移的圖形描述。,狀態(tài)圖中,使用圓圈表示狀態(tài),圓圈中的文字或數(shù)字表示該狀態(tài)的名字或是編碼,狀態(tài)轉(zhuǎn)移方向用箭頭表示,在箭頭旁寫的文字是轉(zhuǎn)移條件。對于梅里狀態(tài)圖,在箭頭旁用“輸入/輸出”的格式表示轉(zhuǎn)移條件與滿足該轉(zhuǎn)移條件下的輸出;而對于摩爾狀態(tài)機(jī),常將輸出放在狀態(tài)圓圈中。,由圖可知,當(dāng)k=0時(shí),狀態(tài)從a0轉(zhuǎn)移到a1,假設(shè)是k0=1,從狀態(tài)a1轉(zhuǎn)移到a2,等等,假設(shè)是reset=0,則無論在什么狀態(tài),都將轉(zhuǎn)移到a0狀態(tài)。,一個(gè)狀態(tài)機(jī)描述需要五個(gè)要素:狀態(tài)、輸入、輸出、狀態(tài)轉(zhuǎn)移函數(shù)、輸出函數(shù)。,假設(shè)在一個(gè)狀態(tài)中包含著另一個(gè)狀態(tài)序列,則稱該狀態(tài)為復(fù)合狀態(tài)。,狀態(tài)機(jī)

3、就是能夠依據(jù)狀態(tài)轉(zhuǎn)移條件進(jìn)展?fàn)顟B(tài)轉(zhuǎn)換和輸出狀態(tài)活動(dòng)的自動(dòng)機(jī)。狀態(tài)機(jī)可以使用數(shù)字電路實(shí)現(xiàn),或是單片機(jī)通過軟件編程實(shí)現(xiàn)。,假設(shè)狀態(tài)數(shù)量有限、輸入數(shù)量有限、輸出數(shù)量有限,則稱為有限狀態(tài)機(jī)FSM。,在數(shù)字電路中,有兩類根本的電路,它們是組合電路和時(shí)序電路,它們之間的區(qū)分是組合電路的構(gòu)造中沒有反響、輸入值直接打算輸出值,而時(shí)序電路的構(gòu)造中具有反響,其輸出由狀態(tài)和輸入打算。狀態(tài)機(jī)是時(shí)序電路的一種。,9.1.1 時(shí)鐘同步有限狀態(tài)機(jī),假設(shè)一個(gè)時(shí)序電路中的觸發(fā)器都使用同一個(gè)時(shí)鐘信號,則稱為同步狀態(tài)機(jī),1.構(gòu)造,時(shí)鐘同步狀態(tài)機(jī)的構(gòu)造如下圖。,其中次態(tài)規(guī)律由現(xiàn)態(tài)和輸入形成。狀態(tài)記憶是n個(gè)觸發(fā)器,用于記憶2n狀態(tài)。輸

4、出規(guī)律由現(xiàn)在狀態(tài)和輸入形成。,在時(shí)鐘的上升沿或是下降沿取決于觸發(fā)器構(gòu)造,觸發(fā)器在次態(tài)規(guī)律的掌握下動(dòng)作。,2.輸出規(guī)律,假設(shè)一個(gè)時(shí)序電路的輸出與現(xiàn)在狀態(tài)和輸入都有關(guān),則稱為梅里狀態(tài)機(jī),就是說,在某狀態(tài)下,滿足某輸入條件的輸出就是梅里輸出。值得留意的是梅里狀態(tài)機(jī)的輸入變化直接引起輸出的變化,而不是等到下一個(gè)狀態(tài)到來時(shí)輸出才變化。就是梅里狀態(tài)機(jī)。,與輸入無關(guān),輸出只與狀態(tài)有關(guān)的狀態(tài)機(jī),稱為摩爾狀態(tài)機(jī),所以摩爾狀態(tài)機(jī)的輸出與狀態(tài)變化同步。摩爾狀態(tài)機(jī)是使用廣泛的狀態(tài)機(jī),如下圖。,3.狀態(tài)編碼,具有n個(gè)狀態(tài)變量的狀態(tài)機(jī)具有2n個(gè)狀態(tài)。究竟一個(gè)狀態(tài)用什么樣的二進(jìn)制數(shù)表示,就是狀態(tài)編碼問題。狀態(tài)與它的編碼之間

5、不是唯一關(guān)系。最簡潔的狀態(tài)編碼就是承受自然二進(jìn)制整數(shù)挨次來表示狀態(tài),這樣的編碼雖然簡潔,但是最終的電路未必是最簡潔的。假設(shè)要得到最簡潔的結(jié)果,最好把各種編碼都試一試,但是太累人,一般狀況下承受閱歷編碼方法。,在狀態(tài)編碼時(shí)應(yīng)當(dāng)考慮的一些因素:,1選擇初始狀態(tài)的編碼與狀態(tài)機(jī)的復(fù)位狀態(tài)一樣,這樣就會(huì)使?fàn)顟B(tài)機(jī)復(fù)位時(shí)就回到狀態(tài)機(jī)的初始狀態(tài)。,2每一次狀態(tài)變化,應(yīng)當(dāng)使發(fā)生的狀態(tài)變量最少。,3假設(shè)有未使用的狀態(tài),則盡量選擇可以到達(dá)簡化規(guī)律設(shè)計(jì)的狀態(tài)編碼。設(shè)計(jì)中應(yīng)當(dāng)保證從未使用狀態(tài)肯定可以進(jìn)入初始狀態(tài)。,4.主從狀態(tài)機(jī),一個(gè)大的狀態(tài)機(jī)設(shè)計(jì)是特別簡單的,一般狀況下,最好將大的狀態(tài)機(jī)分解成小狀態(tài)機(jī)的集合。一般劃分

6、的原則是依據(jù)功能劃分,主要輸入、輸出和掌握算法由主狀態(tài)機(jī)完成,而幫助的、在主狀態(tài)機(jī)掌握下的算法由子狀態(tài)機(jī)完成,就是說主狀態(tài)機(jī)完成頂層算法,子狀態(tài)機(jī)完成底層算法。,最常見的劃分就是將計(jì)數(shù)器作為子狀態(tài)機(jī),這時(shí),主狀態(tài)機(jī)只要發(fā)出啟動(dòng)信號,而等待計(jì)數(shù)器返回的計(jì)數(shù)完成信號。雖然主狀態(tài)機(jī)增加了啟動(dòng)計(jì)數(shù)器的輸出信號和來自計(jì)數(shù)器的計(jì)數(shù)完成信號,但是該計(jì)數(shù)器就可以為主狀態(tài)機(jī)節(jié)省n1個(gè)狀態(tài)。,主從狀態(tài)機(jī)的一般構(gòu)造如下圖。,5.狀態(tài)轉(zhuǎn)移條件,狀態(tài)轉(zhuǎn)移的條件和輸入的信號數(shù)有關(guān),n個(gè)輸入信號,將有2n個(gè)轉(zhuǎn)移條件,這些條件之間應(yīng)當(dāng)是互斥的,只能有一個(gè)轉(zhuǎn)移條件有效。也就是只能轉(zhuǎn)移到另外一個(gè)狀態(tài),而不是一個(gè)以上的狀態(tài)。,在狀

7、態(tài)機(jī)設(shè)計(jì)過程中,對于狀態(tài)轉(zhuǎn)移的條件是簡潔給出的,但是使多個(gè)狀態(tài)轉(zhuǎn)移條件滿足互斥條件確是比較難的,由于這需要更深刻的考慮狀態(tài)、轉(zhuǎn)移條件之間的關(guān)系。,一個(gè)狀態(tài)只向另外一個(gè)狀態(tài)轉(zhuǎn)移的狀態(tài)機(jī)是最簡潔的狀態(tài)機(jī),由于只有一個(gè)狀態(tài)轉(zhuǎn)移條件。,有些狀態(tài)圖只給出本狀態(tài)向外狀態(tài)的轉(zhuǎn)移條件,而向自己轉(zhuǎn)移的條件未給出,這種狀況可以理解為只要不向外狀態(tài)轉(zhuǎn)移就保持在本狀態(tài)不動(dòng)。,6.狀態(tài)機(jī)的輸入信號,狀態(tài)機(jī)的輸入信號往往使是按鍵信號,既然是按鍵信號,則按下去的時(shí)間長短是隨機(jī)的,可能是一個(gè)或幾個(gè)時(shí)鐘脈沖的時(shí)間,假設(shè)狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移是在某輸入信號的作用之下連續(xù)轉(zhuǎn)移,例如,在狀態(tài)1,當(dāng)按鍵第一次為0時(shí),轉(zhuǎn)移到狀態(tài)2,其次次為0

8、時(shí)轉(zhuǎn)移到狀態(tài)1,則會(huì)由于按鍵始終保持在0,引起狀態(tài)不斷的轉(zhuǎn)換,不能實(shí)現(xiàn)每按一次按鍵,轉(zhuǎn)換一次狀態(tài)的目的。,解決的方法是設(shè)計(jì)邊沿微分電路,使按鍵按下時(shí),只在下降沿輸出一個(gè)時(shí)鐘周期的低電平,保證只有一個(gè)狀態(tài)轉(zhuǎn)移。,7.上電狀態(tài)機(jī)初始化,在狀態(tài)機(jī)上電時(shí),無論為何種輸入條件,都應(yīng)當(dāng)進(jìn)入到一個(gè)確定的狀態(tài),該狀態(tài)稱為上電初始狀態(tài)。有些狀態(tài)機(jī)可以在上電時(shí),自動(dòng)進(jìn)入上電初始狀態(tài),有些狀態(tài)機(jī)則不能,需要復(fù)位信號的幫助才能進(jìn)入上電初始狀態(tài)。,9.1.2狀態(tài)圖,狀態(tài)圖是用于小型、中型狀態(tài)機(jī)設(shè)計(jì)的一種方法,該方法的特點(diǎn)是簡潔。,狀態(tài)圖中的狀態(tài)轉(zhuǎn)移是用一根弧線表示的,所以不管有多少輸入變量,也只能有一個(gè)轉(zhuǎn)移條件表達(dá)式,

9、應(yīng)當(dāng)使現(xiàn)在狀態(tài)到全部次態(tài)的轉(zhuǎn)移條件互斥,也就是說只能轉(zhuǎn)移到一個(gè)次態(tài)。,另外需要說明的是用于掌握器的狀態(tài)機(jī)大局部都是摩爾狀態(tài)機(jī),就是說這些狀態(tài)機(jī)的輸出僅僅與狀態(tài)有關(guān)。,例題9-1 設(shè)計(jì)一個(gè)挨次開關(guān)裝置,該開關(guān)裝置在按鍵k第一次按下時(shí),三盞燈x、y和z同時(shí)點(diǎn)亮,當(dāng)k 再次按下時(shí),x燈馬上熄滅;y燈15s后熄滅,在y燈熄滅后18s后,z燈熄滅。,轉(zhuǎn)移條件,說明,狀態(tài),說明,輸出,說明,k,輸入按鍵,z0,三燈都滅,t15,15秒定時(shí)起動(dòng),td15,15秒定時(shí)到信號,z1,三燈都亮,t18,18秒定時(shí)起動(dòng),td18,18秒定時(shí)到信號,z2,三燈都亮,x,x燈,z3,x燈滅,其他亮,y,y燈,z4,x、

10、y燈滅,z燈亮,z,z燈,例題9-2 試設(shè)計(jì)一個(gè)交通信號燈掌握器,該交通燈的紅、黃、綠燈亮滅挨次是如下:,轉(zhuǎn)移條件,說明,狀態(tài),說明,輸出,說明,td10,10秒定時(shí)到信號,a0,南北綠、東西紅,t10,10秒定時(shí)起動(dòng),td5,8秒定時(shí)到信號,a1,南北綠閃,東西紅,t8,8秒定時(shí)起動(dòng),td3,3秒定時(shí)到信號,a2,南北黃、東西紅,t3,3秒定時(shí)起動(dòng),a3,南北紅、東西綠,n1,南北紅燈,a4,南北紅、東西綠閃,n2,南北黃燈,a5,南北紅、東西黃,n3,南北綠燈,d1,東西紅燈,d2,東西黃燈,d3,東西綠燈,9.2.1 C語言描述狀態(tài)機(jī)的語句,int state=S0;/初始狀態(tài),whil

11、e(1)/無限循環(huán),switch(state),case S0:,If(T0轉(zhuǎn)移條件滿足)狀態(tài)轉(zhuǎn)移到滿足T0條件的次態(tài);操作;,If(T1轉(zhuǎn)移條件滿足)狀態(tài)轉(zhuǎn)移到滿足T1條件的次態(tài);操作;,If(TN轉(zhuǎn)移條件滿足)狀態(tài)轉(zhuǎn)移到滿足TN條件的次態(tài);操作;,break;,case S1:,/插入S1的操作;,/插入離開S1的轉(zhuǎn)移;,break;,case SN:,/插入SN的操作;,/插入離開SN的轉(zhuǎn)移;,break;,通常將表示狀態(tài)轉(zhuǎn)移的一系列通常將表示狀態(tài)轉(zhuǎn)移的多個(gè)if語句寫成if-else語句,這樣可以使轉(zhuǎn)移條件形成互斥。,固然也可以直接使用if 語句描寫狀態(tài)機(jī),例如:,if(state=S0

12、),if(T0轉(zhuǎn)移條件滿足),狀態(tài)轉(zhuǎn)移到滿足T0條件的次態(tài);操作;,else,if(T1轉(zhuǎn)移條件滿足),狀態(tài)轉(zhuǎn)移到滿足T1條件的次態(tài);操作;,else,if(TN轉(zhuǎn)移條件滿足),狀態(tài)轉(zhuǎn)移到滿足TN條件的次態(tài);操作;,if(state=S1),/插入離開該狀態(tài)的條件語句,/插入要轉(zhuǎn)移的次態(tài),/插入S1狀態(tài)的操作語句,if(state=SN),/插入離開該狀態(tài)的條件語句,/插入要轉(zhuǎn)移的次態(tài),/插入SN狀態(tài)的操作語句,9.2.2 描述狀態(tài)機(jī)的完整C程序格式,#include,數(shù)碼管的譯碼表格,設(shè)置定時(shí)器的定時(shí)變量,設(shè)置狀態(tài)變量,設(shè)置其他全局變量,主程序:,局部變量初始化,定時(shí)器初始化語句,中斷允許語

13、句,主程序無限循環(huán)中:,1輸入信號處理語句,獲得全部的輸入信號狀態(tài),2狀態(tài)機(jī)描述語句,主要是描述狀態(tài)轉(zhuǎn)移、轉(zhuǎn)移條件、定時(shí)變量清零等,該狀態(tài)下的輸出語句,顯示該狀態(tài)的發(fā)光二極管不是必需的,用于調(diào)試,3顯示處理語句,將定時(shí)數(shù)據(jù)送到數(shù)碼管顯示不是必需的,用于調(diào)試,4其他語句,5假設(shè)是在狀態(tài)描述語句中沒有描述輸出,可單獨(dú)將各個(gè)狀態(tài)下的輸出描述,定時(shí)器中斷效勞程序中:,設(shè)置靜態(tài)局部變量,依據(jù)定時(shí)器工作模式確定是否設(shè)置初值,假設(shè)是需要準(zhǔn)確定時(shí),選擇不需要預(yù)置初值的工作方式2,每中斷一次就增加數(shù)值的語句,獲得確定的中斷時(shí)間例如1s。,依據(jù)確定的中斷時(shí)間,增加定時(shí)變量,9.3 例如程序,在狀態(tài)機(jī)描述中,除了直

14、接描述狀態(tài)機(jī)的語句外,還需要按鍵鈕輸入語句、定時(shí)器描述等語句,本節(jié)通過例如對按鍵、定時(shí)等的C描述賜予介紹。,例如程序1 按鍵處理程序。,P3口全部連接按鍵,P0口連接的數(shù)碼管顯示按鍵的值,程序中變量kk是按鍵的值,不同的按鍵按下,數(shù)碼管顯示不同的值。,變量,說明,變量,說明,nn,延遲時(shí)間循環(huán)變量,kk,按鍵值,table,共陽數(shù)碼管譯碼表,源程序如下:,#include“AT89X51.h“,unsigned int code table=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90;,unsigned int kk=

15、0 x08;,void main,unsigned int nn;,while(1),P3=0 xff;/P3口連接8個(gè)按鍵作為輸入,if(P3|0 x00)!=0 xff)/假設(shè)有按鍵按下,for(nn=0;nn1000;nn+);/延時(shí),if(P3|0 x00)!=0 xff)/按鍵還在按下狀態(tài),switch(P3),case 0 xfe:/P3_0=0,fe=1111 1110,kk=0;break;,case 0 xfd:/P3_1=0,fd=1111 1101,kk=1;break;,case 0 xfb:/P3_2=0,fb=1111 1011,kk=2;break;,case 0

16、 xf7:/P3_3=0 f7=1111 0111,kk=3;break;,case 0 xef:/P3_4=0,ef=1110 1111,kk=4;break;,case 0 xdf:/P3_5=0,df=1101 1111,kk=5;break;,case 0 xbf:/P3_6=0,bf=1011 1111,kk=6;break;,case 0 x7f:/P3_7=0 7f=0111 1111,kk=7;break;,default:kk=8;,while(P3!=0 xff);/假設(shè)按鍵還在按下時(shí),則停留在此,等待按鍵抬起,P0=tablekk;/將鍵值送到P0口連接的數(shù)碼管顯示,例如程序2 按鍵掌握秒計(jì)數(shù)定時(shí)器0工作在方式1。,P3口引腳連接按鍵,按鍵按下后,P0口連接的數(shù)碼管顯示按鍵號,P1口循環(huán)顯示0按鍵號之間的值,P2_0連接的LED燈亮1s,滅1s。如下程序承受定時(shí)器0,方式1工作,由于預(yù)裝初值需要時(shí)間,所以不是準(zhǔn)確計(jì)數(shù)。,變量,說明,變量,說明,nn,主函數(shù)內(nèi)延遲時(shí)間循環(huán)變量,kk,按鍵值,t0,隨定時(shí)器中斷次數(shù)遞增變量,nn,局部靜態(tài)變量,隨定時(shí)器中斷次數(shù)增加,t

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!