亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于狀態(tài)機的IIC驅動算法及其應用

        2020-12-24 07:59:09鄭安迪林偉敏富雅瓊
        科技資訊 2020年21期
        關鍵詞:狀態(tài)機

        鄭安迪 林偉敏 富雅瓊

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

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

        1? 算法設計

        1.1 總體思路

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

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

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

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

        1.2 前臺程序

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

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

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

        1.3 后臺程序

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

        2? 算法應用

        2.1 SHT20溫濕度傳感器介紹

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

        2.2 基于狀態(tài)機的SHT20通信程序

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

        2.3 程序分析

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

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

        3? 結語

        基于狀態(tài)機的IIC驅動算法將整個單片機程序結構切分為類似時間片的結構,如驅動算法中將IIC的各個過程步驟模塊化處理,將一個IIC通信任務分割,把原先軟件模擬IIC所特有的軟件延時的時間節(jié)省下來進行其他程序的運行操作,較普通軟件IIC能夠避免軟件延時占用系統(tǒng)資源,節(jié)約程序資源,結構也并非復雜,通過狀態(tài)改變來進行相應操作。使用該算法能夠使單片機在各個場景下更加輕松、靈活地處理任務,提高單片機程序效率。我們可以將這種基于狀態(tài)機的IIC驅動算法,運用到一些對時間精度要求高、讀取頻率高,且需要進行多從機IIC讀寫工作的單片機中去。值得一提的是,面對現(xiàn)在現(xiàn)有的一些實時操作系統(tǒng),如freeRTOS,也可以達到這種多任務系統(tǒng)設計。但大多數(shù)的RTOS的代碼量都是有一定規(guī)模的,在引入RTOS時不得不去考慮會不會帶入RTOS所附有的一些程序陷阱。若只是在一些任務種類簡單的單片機上使用RTOS的話,無疑需要權衡大量代碼可能帶來的問題和RTOS所帶來的效益之間的平衡。相比之下,基于狀態(tài)機的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] 李興建,李琨,馬文玲.分時操作系統(tǒng)思想在單片機中的具體應用[J].電子設計應用,2003(Z1):56-58.

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

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

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

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

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

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

        猜你喜歡
        狀態(tài)機
        FPGA狀態(tài)機綜合可靠性探究 ①
        基于有限狀態(tài)機的交會對接飛行任務規(guī)劃方法
        基于Spring StateMachine的有限狀態(tài)機應用研究
        三段式狀態(tài)機在單片機中的實現(xiàn)
        河北農機(2016年12期)2017-01-12 03:29:18
        基于單片機運行的多線程任務狀態(tài)機
        基于狀態(tài)機比對的狀態(tài)機推斷方案
        江蘇通信(2015年5期)2015-03-16 01:16:51
        雙口RAM讀寫正確性自動測試的有限狀態(tài)機控制器設計方法
        FPGA設計中狀態(tài)機安全性研究
        黑龍江科學(2011年2期)2011-03-14 00:39:36
        基于反熔絲FPGA的有限狀態(tài)機加固設計
        μC/OS 的層次式狀態(tài)機在人機界面中的應用
        亚洲中文字幕乱码第一页| 国产午夜精品视频观看| 欧美精品中文| 色妞色视频一区二区三区四区| 午夜理论片日本中文在线| 国产成人亚洲合集青青草原精品| 青青草视频免费观看| 一区二区三区美女免费视频| 久草视频在线视频手机在线观看| 免费在线视频一区 | 久久精品人人做人人爱爱| 中文字幕一区二区网址| 亚洲阿v天堂2018在线观看| 久久国产精品-国产精品| 中文字幕无码乱人伦| 精品亚洲国产亚洲国产| 国产精品27页| 激情 人妻 制服 丝袜| 亚洲av综合av一区| 亚洲中文字幕日韩综合| 亚洲传媒av一区二区三区| 亚洲另类欧美综合久久图片区| 无码中文字幕日韩专区视频| 少妇被又大又粗又爽毛片久久黑人 | 亚洲日本一区二区在线| 亚洲国产色图在线视频| 精品少妇大屁股白浆无码| 精品亚洲欧美无人区乱码| 亚洲国产精品无码中文字| 日韩人妖视频一区二区| 国产av大片久久中文字幕| 亚洲区偷拍自拍29p| 车上震动a级作爱视频| 无码国产精品一区二区免费式直播| 国产视频自拍一区在线观看| 婷婷久久亚洲中文字幕| 蜜桃在线观看免费高清完整版 | 亚洲av午夜福利精品一区不卡| 亚洲av噜噜狠狠蜜桃| 国产乱色国产精品免费视频| 亚洲欧美精品aaaaaa片|