a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > PSoC Express 和石頭、剪刀、布

PSoC Express 和石頭、剪刀、布

——
作者:翁小平 時間:2007-12-04 來源:電子產品世界 收藏

翁小平    資深主任應用工程師       賽普拉斯半導體

關鍵詞: ,狀態機,無代碼應用開發
摘要: 本文通過用可視化無代碼開發工具PSoC 對一個簡單游戲的開發來介紹如何使用PSoC 的優先編碼器傳遞函數和狀態機傳遞函數。
Key word: PSoC, PSoC Express,Status machine,Codeless  Application Development
Abstract: The paper introduced how do use prior encode transfer function and status machine function of PSoC Express with a simple game, Rock ,Paper, Scissors,that was developed by visualize,code-free development tool PSoC Express.

  PSoC Express是可視化無代碼的PSoC開發工具,而是我們孩童時代玩的游戲,二者風馬牛不相及。然而我們的一位令人尊敬的美國同事卻用PSoC Express輕松地開發了的游戲,用三個輕觸按鍵加一顆低端的PSoC芯片和一個LCD顯示屏就可以實現人機石頭、剪刀、布的游戲,重溫童年的樂趣。
  PSoC(可編程片上系統)是Cypress半導體生產的包含有8位微處理器核和數字與模擬混合信號陣列的可編程片上系統。其應用領域與8位的MCU相同。區別于8位的MCU, PSoC的數字周邊資源(如定時器、PWM、UART等等)和模擬周邊資源(放大器、比較器、濾波器等等)以數字模塊和模擬模塊的方式給出。不同型號的PSoC芯片的差異主要在于其擁有的數字模塊和模擬模塊的數量的不同。用戶可以根據自己的需要來定義這些模塊。所有這些預定義的模塊被稱之為用戶模塊。PSoC Designer也為用戶提供這些用戶模塊的API函數供用戶編程時調用。在PSoC Express出現以前,開發PSoC的應用項目與MCU的應用開發相似,使用PSoC Designer集成開發環境根據項目的需要調用和配置資源(用戶模塊),編寫代碼(C或匯編),編譯,調試….
  現在由于PSoC Express可以在更高的抽象概念水平上運行,且無需匯編或C的軟件開發,因此設計人員只需要數小時或數天時間即可完成對PSoC器件的新設計開發、仿真及編程,而不再耗時數周乃至數月。由于其采用無縫多重處理器架構、具有設計可視化功能,包含豐富的驅動程序庫和多種傳輸函數的評估器以及軟仿真功能,因此系統開發工程師采用PSoC Express工具能夠更快地完成設計工作,并實現更高的可靠性。對于石頭、剪刀、布的游戲,由于它的輸入輸出非常簡單,設計的主要工作在于邏輯的判斷和狀態的轉換,所以用PSoC Express來開發這一類的項目是非常快捷和合適的。

一.PSoC Express的開發過程
  使用PSoC Express的開發過程主要有四個步驟。它們是:選擇輸入和輸出,定義輸出的行為,仿真、驗證和生成系統文件及十六進制文件編程。
1. 選擇輸入和輸出
  運行PSoC Express,選擇 Design選項夾,根據設計的需要選擇相應的輸入、輸出和接口驅動器。如果有的話,根據要求設定驅動器的參數。
2. 定義輸出的行為
  根據不同的輸入變化,來定義系統的輸出行為。系統的輸入輸出的關系相對比較簡單的直接使用輸出驅動器的傳輸函數來定義輸入和輸出的相應關系。通過鼠標右鍵點擊輸出驅動器選擇傳輸函數, 輸出驅動器提供三種傳輸函數:優先編碼器、狀態編碼器和表格對應器。通過使用這三種傳輸函數建立起輸入和輸出的關系。輸入輸出的關系相對比較復雜的則需要使用評估器(Valuator),評估器包含6個傳輸函數,它們除了輸出驅動器里提到的三種以外,還有環狀延時(LoopDelay)、狀態機和閾值(SetPointRegin)三種傳輸函數。選擇更合適的傳輸函數來產生中間結果作為輸出驅動器的輸入或其他評估器的輸入。
3. 仿真和驗證
  仿真為軟仿真。它主要通過交互式的方式,移動或單擊輸入器件旁的圖形或小窗口來改變輸入的值或狀態,輸出驅動器和評估器的狀態或數值顯示圖形塊中的參數值隨即發生相應的變化,通過觀察這個變化,用戶可以評估和驗證他的設計是否實現他所要的結果。
4. 生成系統文件及使用編程器下載十六進制編程文件到PSoC芯片。至此,可以在實驗板上驗證設計功能是否達到了設計的要求。

{{分頁}}

二.優先編碼器傳遞函數和狀態機傳遞函數
1.  優先編碼器傳遞函數
  優先編碼器傳遞函數是最常用的傳遞函數。它是基于表達式的實施一系列IF(…)Then(…)Else IF(…) Then(…)…的操作進而得到一個可以用作輸出的值。括號里的表達式類似C語言里的表達式。C里面的大多數算術運算符(+, -, *, /, %)和邏輯運算符(&, ||, ==, !=, <=, >=, !, <, >,^)  及位操作運算符(>>, <<, &, |, ~)在這里都是有效的。表達式里的變量來自輸入驅動器的輸出或其他評估器(Valuator)的輸出,優先編碼器傳遞函數的輸出可以作為其他評估器(Valuator)的輸入和輸出驅動器的輸入,如果這個優先編碼器傳遞函數是屬于輸出驅動器的,那么它的輸出也就是該輸出驅動器的輸出。對于實施一系列
IF(…)Then(…)
Else IF(…) Then(…)

的操作,從上到下,只要一遇到IF(…)里面的表達式為真,下面的語句將不再執行。由此可知,只有一個IF(…)Then(…)語句真正被執行。越是前面的語句優先級越高,第一個IF(…)Then(…)優先級最高。
 
2.狀態機傳遞函數
  通常一個系統中會有多個狀態,當滿足一定的條件或被某個事件觸發時會從一個狀態轉變到另一個狀態。在PSoC Express中,狀態機傳遞函數正是實施這一功能。僅有評估器才包含狀態機傳遞函數。而輸出驅動器是不包含狀態機傳遞函數的。
  為了實施這一功能,用鼠標右鍵點擊評估器圖標,選擇狀態機傳遞函數。首先要為所有可能的狀態定義狀態名,然后點擊任意一個狀態可以設置觸發條件并選擇該觸發條件之前和之后的狀態。這里也需要給每一個觸發條件命名不同的名字。一般地,觸發條件用表達式來表示。表達式里的變量是輸入驅動器的輸出或其他評估器(Valuator)的輸出,也可以是輸出驅動器的輸出。每設置一個觸發條件,就有一根帶尖頭的藍線將兩個轉換之前和之后的狀態連接起來。所有的觸發條件都設置好了以后,我們在屏幕上可以看到所熟悉的狀態轉換圖。狀態機傳遞函數的輸出就是某一個用狀態名表示的狀態。在所有的狀態中必須定義一個狀態為初始狀態,它以綠色表示。
 
三.石頭、剪刀、布
  石頭、剪刀、布游戲包括三個輸入驅動器、四個輸出驅動器和四個評估器。三個輸入驅動器就是三個輕觸按扭,分別代表石頭、剪刀、布用于用戶作竟猜選擇。四個輸出驅動器都是LCD,它們分別是一個16X2字符點陣LCD的四個部分,用于顯示每次竟猜的輸贏和狀態以及玩家的分數。四個評估器中的兩個用于產生隨機數1或2或3,分別代表石頭、布、剪刀參與和用戶的竟猜。一個評估器用于測試三個輕觸按扭是否處于空閑等待狀態,以便LCD的顯示從顯示竟猜的結果狀態返回到竟猜前的等待狀態。另一個評估器實施各種狀態的轉換,以便在不同的時刻給出一個正確的狀態。如圖所示。下面給予更詳細的介紹。
 
  輸入驅動器 Rock(石頭)、Paper(布)和Scissor(剪刀)三個輕觸按扭分別有四個可能的輸出狀態:上升沿、下降沿和ON、OFF,提供給評估器AllOff和m使用。Roll評估器和Pick評估器使用優先編碼器傳遞函數產生隨機數1或2或3。Roll的傳遞函數如下:
  if(m_state==m_state__WaitForYouToPlay)&&(Roll==0)  then Roll = 1
else if(m_state==m_state__WaitForYouToPlay)&&(Roll<128)  then Roll = Roll*2
else if(m_state==m_state__WaitForYouToPlay)  then Roll = ((Roll-128)*2^0x71

{{分頁}}
Pick的傳遞函數僅有一條語句:
  If(1)  then Pick = (Roll%3)+1
AllOff也使用優先編碼器傳遞函數測試三個輕觸按鈕是否處于空閑等待狀態:
  if(Rock==Rock__On)  then AllOff = 0
else if(Paper==Paper__On)  then AllOff = 0
else if(Scissors==Scissors__On)  then AllOff = 0
else if(1)  then AllOff = 1
 
  m評估器用狀態機傳遞函數實施9個狀態的轉換如圖。Start為初始狀態用綠顏色表示。如果任意一個按扭被按,觸發條件Go:
(Rock==Rock__Rising_Edge)||(Paper==Paper__Rising_Edge)||(Scissors==Scissors__Rising_Edge)
就被觸發,狀態便從初始狀態進入等待狀態 WaitForYouToPlay,等待用戶竟猜。一旦再有按鍵被按,就進入三個選擇狀態之一。如Rock鍵被按,便觸發條件RockPressed:
  Rock==Rock__Rising_Edge
  進入 YouSelectedRock狀態。接下來馬上實施三個判斷:Pick是等于1(Rock)還是2(Paper)或3(Scissors)?由于Pick評估器的輸出必然是這三個值之一,所以必然有一個條件滿足,如果Pick是等于2(Paper),便觸發rp進入IWin狀態;如果Pick是等于1(Rock)便觸發rr進入Draw狀態,表示平局;如果Pick是等于3(Scissors)便觸發rs進入YouWin狀態,表示用戶贏。無論是Iwin或Draw或YouWin狀態,都無條件地進入到Converge狀態,因為這三個狀態轉換到Converge的觸發條件rrr、ddd、sss都是1。實際上Converge狀態用于在按鍵還沒有被釋放時保持LCD顯示竟猜結果的狀態。當按鍵被釋放以后,Converge狀態便返回到等待狀態 WaitForYouToPlay,因為它的觸發條件是:
  AllOff == 1
  對于普遍使用的16X2字符點陣LCD模塊S01602,針對它的不同顯示方式PSoC Express有多個LCD的輸出驅動器。這里用這個LCD的四個四分之一(第一排左邊,第一排右邊,第二排左邊,第二排右邊)以字符和數字的方式來顯示不同的內容。它們都是用優先編碼器傳遞函數來實現狀態和結果顯示。第一個LCD驅動器LCDMyPick在第一排左邊顯示PSoC竟猜選擇的項目(Rock或Paper或Scissor),在開始狀態顯示Any Key,在等待狀態顯示Please。它的傳遞函數:
  if(m_state==m_state__Start)  then LCDMyPick=LCDMyPick__Label_4
else if(m_state==m_state__WaitForYouToPlay)  then LCDMyPick=LCDMyPick__Label_5
else if(m_state==m_state__YouSelectedRock)  then LCDMyPick = Pick
else if(m_state==m_state__YouSelectedPaper)  then LCDMyPick =Pick
else if(m_state==m_state__YouSelectedScissor)  then LCDMyPick = Pick
Label_4是Any Key, Label_5 是Please在驅動器的參數中設定。第二個LCD驅動器LCDResult在第一排右邊顯示PSoC竟猜結果。它的傳遞函數:
  if(m_state==m_state__Start)  then LCDResult = LDCResults__Label_1
else if(m_state==m_state__WaitForYouToPlay)  then LCDResult = LDCResults__Label_5
else if(m_state==m_state__Iwin)  then LCDResult = LDCResults__Label_3
else if(m_state==m_state__YouWin)  then LCDResult = LDCResults__Label_2
else if(m_state==m_state__Draw)  then LCDResult = LDCResults__Label_4
Label_1、 Label_2、 Label_3、 Label_4 和Label_5分別是To Play、You Win、My Win、Draw 和Chose在驅動器的參數中設定。第三和第四個LCD驅動器MyScore、YourScore使用LCD的第二排左邊和第二排右邊顯示我贏的分數和你贏的分數。如YourScore的傳遞函數:
  if(m_state==m_state__Start)  then YourScore = 0
else if(m_state==m_state__YouWin)  then YourScore = YourScore+1

五.結束語
  在 PSoC Expess的開發環境下用三個輸入驅動器、四個輸出驅動器和四個評估器實現石頭、剪刀、布的游戲,其中四個輸出驅動器和四個評估器中的三個使用了優先編碼器傳遞函數,而僅一個評估器使用了狀態機傳遞函數。狀態機傳遞函數的狀態轉換的觸發條件也是類似優先編碼器傳遞函數的if(…)then(…)語句。由此可以看到,使用無代碼的圖形化的PSoC芯片的集成開發環境PSoC Expess開發項目簡單而易行,快捷而有趣。

參考文獻:可編程系統在片(PSoC)芯片的設計構架  翁小平 《世界電子元器件》2006.1
  PSoC Express 開創嵌入式芯片編程新時代 翁小平 EDN China 2007.5


聯系方式:賽普拉斯半導體國際有限公司上海辦事處  翁小平
         上海張江半導體工業園張東路1387號50號樓
Tel:021-64482233-127,13002188281 Email:wengxp@citiz.net  Zip:200030



關鍵詞: PSoC Express 石頭 剪刀

評論


相關推薦

技術專區

關閉