999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于狀態機的IIC驅動算法及其應用

2020-12-24 07:59:09鄭安迪林偉敏富雅瓊
科技資訊 2020年21期

鄭安迪 林偉敏 富雅瓊

摘? 要:IIC總線設計自其誕生以來,由于其結構簡單、連線少,被廣泛運用于設備間的通信。針對現有的IIC驅動算法存在程序結構上的不足,無法勝任一些對時間控制精度較高的多任務工作的現狀,該文設計了基于狀態機原理的IIC驅動算法,該算法利用狀態轉換實現前臺接收、后臺處理,提高軟件運行效率,完成IIC通信,且不影響系統別的程式的運行。

關鍵詞:狀態機? IIC通信? 驅動算法? 分時操作

中圖分類號:TP336 ? ? ? ? ? 文獻標識碼:A 文章編號:1672-3791(2020)07(c)-0001-04

IIC Driving Algorithm Based on State Machine and Its Application

ZHENG Andi? LIN Weimin? FU Yaqiong

(College of Mechanical and Electrical Engineering, China Jiliang University, Hangzhou, Zhejiang Province, 310018 China)

Abstract: The IIC bus design, due to its simple structure and few connections, is widely used in the communication between devices since it was invented. The existing IIC driver algorithm has the deficiency of program structure, which is not competent for some multi-task work with high precision of time control. In this paper, we design the IIC driver algorithm which is based on state machines. This driver algorithm uses state transition to realize receiving frontend and processing background, this can improve the efficiency of the software, to complete IIC communication. It does not affect other programs in the system.

Key Words: State machine; IIC communication; Driving algorithm; Time-sharing operation

IIC是由飛利浦公司在1980年代為了使設備能夠連接低速周邊設備而發展出的一種串行通信總線。由于其結構簡單、連線少,簡化了硬件電路方面的設計,所以很多設備都采用該通信方式。軟件模擬IIC因為其可移植能力強,配置方便,使用過程簡單,在很多單片機程序設計中都用了軟件模擬IIC的編寫思路。因此,在不具備硬件IIC的單片機,一般采用軟件模擬IIC方法。目前常用的模擬IIC采用查詢式程序結構,其無法勝任一些對時間控制精確度較高的多任務工作。為了提高軟件模擬IIC的工作效率,該文設計了一種基于狀態機的IIC驅動算法。該文設計的基于狀態機的IIC驅動算法,通過狀態機狀態的改變運行相應的步驟程序,達到非占用式的多任務穿插運行,從而提高了效率,對于測量儀器和對時間要求高的任務尤其有效。

1? 算法設計

1.1 總體思路

IIC驅動算法由發送指令和接收指令兩個部分構成。

接收程序分前后臺,接收字符的(中斷)服務程序為前臺程序,處理主程序為后臺程序。前臺接收字符并存入緩沖區,后臺從緩沖區讀取字符并進行處理。前臺程序通過讀取和改變狀態機狀態來控制IIC通信,以達到完整的IIC接收部分。

發送部分中程序也分前后臺,發送字符的(中斷)服務程序為前臺程序,處理主程序為后臺程序。后臺程序將要發送的字符存入緩存區,前臺從緩沖區讀取字符并發送出去。

整個主程序采用時間片結構,每隔一段時間進入后臺程序進行任務處理,前臺程序主要由中斷觸發。該結構確保將空閑時間釋放給其他任務程序,以達到高效利用系統資源運行的目的。

1.2 前臺程序

在接收指令的前臺程序中,根據IIC通信協議,主機需先檢測總線狀態。如果總線空閑則產生START信號掌管總線,然后傳送7位地址加1位讀寫位(讀寫位為0表示寫),并等待從機檢測到發送的地址與自己的地址相匹配并反饋一個應答信號(ACK)。從機如檢測到發送地址與自己相匹配,則反饋應答信號(ACK),主機收到后會緊接著發送下一個START狀態,然后重復第一個地址字節并將讀寫位變為1,表示讀取;主機釋放數據總線,開始接收數據字節,主機接收每個數據字節后發送應答信號(ACK)表示繼續發送,無應答(NACK)表示傳輸數據結束。

發送指令的首字節與接收情況相同,主機首先要檢測總線狀態,如果總線空閑則產生START信號掌管總線,然后傳送器件7位地址加1位讀寫位(讀寫位為0表示寫)。等待從機檢測到發送的地址與自己的地址相匹配并反饋一個應答信號(ACK),區別是從機應答后主機繼續發送字節數據,如果從機發送無應答(NACK)則表示數據傳輸結束。主機發送完全部數據后,會發送一個停止位STOP,結束整個通信并且釋放總線。

基于狀態機的IIC驅動算法因此將IIC前臺程序分為空狀態、START信號發送、地址發送、等待應答、發送數據、接收數據、發送應答信號、STOP狀態。在每一部分進行完之后,通過改變狀態變量,在下一次進入前臺處理程序中,通過判斷狀態量來進入相應的程序部分,以達到完成IIC通信的效果。

1.3 后臺程序

IIC后臺程序也分為幾個狀態,以期完成各項功能。在具體的功能中,首先判斷總線是否繁忙。若總線為空閑狀態,可啟動相應的讀或寫的IIC任務,具體的任務設計可根據整套系統應用需求來設計,將任務交給前臺程序處理即可,即改變前臺狀態。接收到相應數據后就可進行數據處理,完成后臺程序數據處理的任務。

2? 算法應用

2.1 SHT20溫濕度傳感器介紹

SHT20是一款集成測量濕度和溫度為一體的傳感器,支持標準的IIC格式,采用數字輸出,優異的長期工作的穩定性。SHT20的分辨率可通過輸入命令進行改變,可選的分辨率有8/12bit乃至12/14bit的RH濕度/T溫度。

2.2 基于狀態機的SHT20通信程序

基于IIC狀態機的SHT20通 程序,前臺程序按照狀態相應的IIC通信協議完成其中的發送,接收程序部分的相應狀態編寫,并在每次狀態結束后更新狀態變量至新的狀態,使程序能在運行時達到轉換狀態的效果。后臺程序根據程序需求編寫,將目標任務、測量溫度、測量濕度、修正數值分成幾塊狀態進行編寫,在每塊任務中向前臺程序發送指定命令,并更新狀態變量轉換相應的下一個狀態。主程序采用時間片結構,每隔一段時間(通常這段時間是極短的)執行前臺程序和后臺程序,完成相應的IIC通信和前后臺程序的狀態轉換。

2.3 程序分析

前臺程序編寫根據IIC協議完成各個狀態的編寫,嚴格按照IIC時序來進行狀態轉換編寫;后臺程序也將溫濕度傳感器的測量任務主要分為若干個狀態部分,溫度與濕度測量同理,以溫度測量為例,分為啟動測量溫度、等待測量溫度、讀取測量溫度、等待讀取測量溫度、溫度值修正5個部分,通過狀態變量改變將5個部分串聯起來。啟動測量溫度這個狀態部分中是向前臺程序發送了IIC發送指令,將溫濕度傳感器SHT20的地址和所要測得的量以及讀寫位寫入了發送緩沖區,且改變了前臺程序的狀態,此時后臺程序狀態同時轉變,進入等待測量溫度。在下一次進入前臺程序時,會判定狀態變量的狀態,確定進行IIC通信。后臺等待測量溫度結束后會自動改變狀態進入讀取測量溫度的狀態,讀取測量溫度的狀態這個狀態部分中是向前臺程序發送了IIC接收指令,確定了溫濕度傳感器SHT20的地址和所要測得的量以及讀寫位,以及讀取的字節個數,且改變了前臺程序的狀態,此時后臺程序狀態同時改變,進入等待讀取測量溫度。在下一次進入前臺程序時,會判定狀態變量的狀態,確定進行IIC通信。后臺等待讀取測量溫度結束后會自動改變狀態進入溫度值修正的狀態。在后臺程序溫度值修正的狀態下,后臺程序從接收緩沖區中讀取數據后進行相應的修正處理。至此,整個測量溫度的過程結束。整個系統采用時間片的程序結構,在整個主程序中以20μs的間隔進入一次前臺程序,以1ms的間隔進入一次后臺程序,既可以保證溫濕度測量任務、IIC通信正常進行,且不會因為采用軟件延時過多地占用系統資源,同時系統還能以相同時間片結構的方式加入其他傳感器測量或者其他任務,相互之間能夠不受影響,且只需要一個前臺程序即可,后臺程序只需要在進入需要IIC通信時的狀態時先判定總線是否繁忙即可。

相比之下,若用普通的軟件IIC程序,的確簡單易懂,操作簡單,容易上手,且易于在不同型號的單片機上移植程序。但不適用于任務數量較多,對采集頻率有較高要求的工程;基于狀態機的IIC驅動算法可以適用于需要高頻次、復雜的IIC通信的任務,如溫濕度數據的采集,傳感器數據發送回主機,通過狀態機狀態的改變來判定IIC通信的情況,程序的穿插式運行,提高整個單片機系統的效率,能夠保證主機從傳感器獲取數據頻率且不影響自身其他程序運行,且同樣具有良好的可移植性;而普通軟件IIC由于其查詢法程序結構限制,軟件延時占用系統資源,難以達到相應高的數據獲取頻率,且會阻塞系統其他程序的進行。

3? 結語

基于狀態機的IIC驅動算法將整個單片機程序結構切分為類似時間片的結構,如驅動算法中將IIC的各個過程步驟模塊化處理,將一個IIC通信任務分割,把原先軟件模擬IIC所特有的軟件延時的時間節省下來進行其他程序的運行操作,較普通軟件IIC能夠避免軟件延時占用系統資源,節約程序資源,結構也并非復雜,通過狀態改變來進行相應操作。使用該算法能夠使單片機在各個場景下更加輕松、靈活地處理任務,提高單片機程序效率。我們可以將這種基于狀態機的IIC驅動算法,運用到一些對時間精度要求高、讀取頻率高,且需要進行多從機IIC讀寫工作的單片機中去。值得一提的是,面對現在現有的一些實時操作系統,如freeRTOS,也可以達到這種多任務系統設計。但大多數的RTOS的代碼量都是有一定規模的,在引入RTOS時不得不去考慮會不會帶入RTOS所附有的一些程序陷阱。若只是在一些任務種類簡單的單片機上使用RTOS的話,無疑需要權衡大量代碼可能帶來的問題和RTOS所帶來的效益之間的平衡。相比之下,基于狀態機的IIC驅動算法填補了RTOS在一定場合下的適用性的空缺,更能廣泛地應用于需要高可靠性的場合,單片機處理性能有限的場合,對程序編寫者來說也更加友好,程序可讀性也更好。

參考文獻

[1] 張毅剛,趙光權,劉旺.單片機原理及應用[M].北京:高等教育出版社,2016:301-312.

[2] Stephen Prata.C Primer Plus[M].北京:北京人民郵電出版社,2005:152-180.

[3] SENSIRION.Datasheet SHT20[EB/OL].https://www.sensirion.com.

[4] 李興建,李琨,馬文玲.分時操作系統思想在單片機中的具體應用[J].電子設計應用,2003(Z1):56-58.

[5] 唐飛,楊偉.基于多任務機制的STM32系統程序設計[J].安慶師范大學學報:自然科學版,2019,25(4):70-74.

[6] 王洪生.單片機的延時與中斷問題及解決方法[J].科技創新導報,2019,16(34):54-55.

[7] 關鑫.基于C語言的計算機編程技術分析[J].科技資訊,2019,17(16):16-17.

[8] 杜隆胤,方冰,鄭軍.51單片機循環輪詢多任務編程[J].計算機時代,2018(10):1-4.

[9] 楊旭.單片機編程中有限狀態機的應用[J].科技風,2017(15):71.

[10] 郭兆正,于鵬,于震.基于有限狀態機建模的單片機編程方法研究[J].渤海大學學報:自然科學版,2016,37(3):266-270.

主站蜘蛛池模板: 欧美狠狠干| 国产欧美一区二区三区视频在线观看| 色哟哟国产精品| 波多野结衣在线se| 伊人福利视频| 91精品日韩人妻无码久久| 中文字幕免费在线视频| 日韩专区第一页| 国产视频入口| 国产女人喷水视频| 国产呦视频免费视频在线观看| 影音先锋丝袜制服| 亚洲成av人无码综合在线观看| Jizz国产色系免费| 国产成人1024精品| 色婷婷综合在线| 欧美一区二区精品久久久| 国产精品区网红主播在线观看| 久久人人妻人人爽人人卡片av| 亚洲va在线∨a天堂va欧美va| 成人综合在线观看| 欧美va亚洲va香蕉在线| 原味小视频在线www国产| 国产精品福利尤物youwu| 国产精品网址你懂的| 日本免费一级视频| 国产一级视频在线观看网站| 99无码中文字幕视频| 欧美、日韩、国产综合一区| 国产91丝袜在线播放动漫 | 久久亚洲高清国产| 高h视频在线| 四虎成人免费毛片| 亚洲国产精品一区二区第一页免| 91av国产在线| 亚洲国产第一区二区香蕉| 免费A级毛片无码无遮挡| 99er这里只有精品| 日韩视频精品在线| 色噜噜综合网| 亚洲男人天堂2020| 亚洲无码四虎黄色网站| 欧美激情第一区| 91香蕉视频下载网站| 偷拍久久网| 欧美在线国产| 日韩精品资源| 国产va免费精品观看| 成人无码区免费视频网站蜜臀| 久久99国产乱子伦精品免| 欧美a在线看| 日本www在线视频| 国产精品亚洲综合久久小说| 国产高清在线丝袜精品一区| 国产乱人激情H在线观看| 91在线播放免费不卡无毒| 曰韩人妻一区二区三区| 毛片视频网址| 秘书高跟黑色丝袜国产91在线 | 日韩精品成人在线| 不卡视频国产| 91蜜芽尤物福利在线观看| 国产网站免费看| 在线看AV天堂| 亚洲人成日本在线观看| 亚洲美女一区| 人妻丰满熟妇AV无码区| 国产成人精品一区二区免费看京| 亚洲精品成人福利在线电影| 国产福利免费视频| 在线观看国产小视频| 国产XXXX做受性欧美88| 亚洲成年人片| 国产在线精品99一区不卡| 亚洲国产精品不卡在线| 在线观看免费AV网| 波多野结衣久久高清免费| 欧美午夜小视频| A级毛片无码久久精品免费| 亚洲午夜福利精品无码不卡 | 亚洲免费黄色网| 日韩福利视频导航|