所謂“時序”從字面意義上來理解,一是“時間問題”;二是“順序問題”。
先說一下“順序問題”,這個相對簡單一些。我們在學UART串口通信的時候,先1位起始位,再8位數(shù)據(jù)位,最后1位停止位,這個先后順序不能錯。我們在學1602液晶的時候,比如寫指令,RS=L,R/W=L,D0~D7=指令碼,這三者的順序是無所謂的,但是最終的E=高脈沖,必須是在這三條程序之后,這個順序一旦錯誤,寫的數(shù)據(jù)也可會出錯。
而“時間問題”內(nèi)容相對復雜,比如UART通信,每一位的時間寬度是1/baud。我們初中就學過一個概念,世界上沒有絕對的準確。那么每一位的時間寬度1/baud要求精確到什么范圍內(nèi)呢?
單片機讀取UART的RXD引腳數(shù)據(jù)的時候,一位數(shù)據(jù),單片機平均分成了16份,取其中的7、8、9三次讀到的結(jié)果,這三次中有2次是高電平那這一位就是1,有2次是低電平,那這一次就是0。如果我們的波特率稍微有些偏差,只要累計下來到最后一位停止位,這7、8、9還在范圍內(nèi)即可。如下圖所示:
UART信號采集時序圖
我們用三個箭頭來表示7、8、9這三次的采集位置,大家可以看到,當采集到 D7的時候,已經(jīng)有一次采集偏出去了,但我們采集到的數(shù)據(jù)還是不會錯,因為有2次采集正確。至于這個偏差允許多大,大家自己可以詳細算一下。實際上UART通信的波特率是允許一定范圍內(nèi)誤差存在的,但不能過大,否則就會采集錯誤。
大家在計算波特率的時候,發(fā)現(xiàn)沒有整除,有小數(shù)部分的時候,就要特別小心了,因為小數(shù)部分是一概被舍掉的,于是計算誤差就產(chǎn)生了。我們用11.0592M晶振計算的過程中,11059200/12/32/9600得到的是一個整數(shù),如果用12M晶振計算12000000/12/32/9600就會得到一個小數(shù),大家可以算一下誤差多少,是否在誤差范圍內(nèi)。
1602的時序問題,大家要學會通過LCD1602的數(shù)據(jù)手冊提供的時序圖和時序參數(shù)表格來進行研究,而且看懂時序圖是學習單片機所必須掌握的一項技能,如下圖所示:
1602時序圖
大家看到這種圖的時候不要感覺害怕,說句不過分的話,單片機這些邏輯上的問題,只要小學畢業(yè)就可以理解的,很多時候是因為大家把問題想象的太難才學不下去的。
我們先來看一下讀操作時序的RS引腳和R/W引腳,這兩個引腳先進行變化,因為是讀操作,所以R/W引腳首先要置為高電平,而不管它原來是什么。讀指令還是讀數(shù)據(jù),都是讀操作,而且都有可能,所以RS引腳既有可能是置為高電平,也有可能是置為低電平,大家注意上圖的畫法。而RS和R/W變化了經(jīng)過Tsp1這么長時間后,使能引腳E才能從低電平到高電平發(fā)生變化。
而使能引腳E拉高經(jīng)過了tD這么長時間后,LCD1602輸出DB的數(shù)據(jù)就是有效數(shù)據(jù)了,我們就可以來讀取DB的數(shù)據(jù)了。讀完了之后,我們要先把使能E拉低,經(jīng)過一段時間后RS、R/W和DB才可以變化繼續(xù)為下一次讀寫做準備了。
而寫操作時序和讀操作時序的差別,就是寫操作時序中,DB的改變是由單片機來完成的,因此要放到使能引腳E的變化之前進行操作,其它區(qū)別大家可以自行對比一下。
細心的話就會發(fā)現(xiàn),這個時序圖上還有很多時間標簽。比如E的上升時間tR,下降時間時間tF,使能引腳E從一個上升沿到下一個上升沿之間的長度周期tC,使能E下降沿后,R/W和RS變化時間間隔tHD1等等很多時間要求,這些要求怎么看呢?放心,只要是正規(guī)的數(shù)據(jù)手冊,都會把這些時間要求給大家標記出來的。
大家要善于把手冊中的這個表格和時序圖結(jié)合起來看,上面表中的數(shù)據(jù)都是時序參數(shù),大家務必要學會自己看時序圖,這個很重要。此外,看以下解釋也需要結(jié)合時序圖來看。
tC: 指的是使能引腳E從本次上升沿到下次上升沿的最短時間是400ns,而我們單片機因為速度較慢,一個機器周期就是1us多,而一條C語言指令肯定是一個或者幾個機器周期的,所以這個條件完全滿足。
tPW: 指的是使能引腳E高電平的持續(xù)時間最短是150ns,同樣由于我們的單片機比較慢,這個條件也完全滿足。
tR,tF: 指的是使能引腳E的上升沿時間和下降沿時間,不能超過25ns,別看這個數(shù)很小,其實這個時間限值是很寬裕的,我們實際用示波器測了一下開發(fā)板的這個引腳上升沿和下降沿時間大概是10ns到15ns之間,完全滿足。
tSP1: 指的是RS和R/W引腳使能后至少保持30ns,使能引腳E才可以變成高電平,這個條件同樣也完全滿足。
tHD1: 指的是使能引腳E變成低電平后,至少保持10ns之后,RS和R/W才能進行變化,這個條件也完全滿足。
tD: 指的是使能引腳E變成高電平后,最多100ns后,1602就把數(shù)據(jù)送出來了,那么我們就可以正常去讀取狀態(tài)或者數(shù)據(jù)了。
tHD2: 指的是讀操作過程中,使能引腳E變成低電平后,至少保持20ns,DB數(shù)據(jù)總線才可以進行變化,這個條件也完全滿足。
tSP2: 指的是DB數(shù)據(jù)總線準備好后,至少保持40ns,使能引腳E才可以從低到高進行使能變化,這個條件也完全滿足。
tHD2: 指的是寫操作過程中,要引腳E變成低電平后,至少保持10ns,DB數(shù)據(jù)總線才可以變化,這個條件也完全滿足。
好了,LCD1602的時序參數(shù)表已經(jīng)解析完成了,看完之后,是不是感覺比你想象的要簡單,沒有你想的那么困難。大家自己也得慢慢學會看這種時序圖和表格,在今后的學習中,這方面的能力尤為重要。如果以后換用了其它型號的單片機,那么就根據(jù)單片機的執(zhí)行速度來評估你的程序是否滿足時序要求。整體來說,器件都是有一個最快速度的限制,而沒有最慢限制,所以當換用高速的單片機后,通常都是靠在各步驟間插入軟件延時來滿足較慢的時序要求。
免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!