所謂“時(shí)序”從字面意義上來(lái)理解,一是“時(shí)間問(wèn)題”,二是“順序問(wèn)題”。
先說(shuō)“順序問(wèn)題”,這個(gè)相對(duì)簡(jiǎn)單一些。我們?cè)趯W(xué) UART 串口通信的時(shí)候,先 1 位起始位,再 8 位數(shù)據(jù)位,最后 1 位停止位,這個(gè)先后順序不能錯(cuò)。我們?cè)趯W(xué) 1602 液晶的時(shí)候,比如寫(xiě)指令,RS=L,R/W=L,D0~D7=指令碼,這三者的順序是無(wú)所謂的,但是最終的 E=高脈沖,必須是在這三條程序之后,這個(gè)順序一旦錯(cuò)誤,寫(xiě)的數(shù)據(jù)也可會(huì)出錯(cuò)。
“時(shí)間問(wèn)題”內(nèi)容相對(duì)復(fù)雜。比如 UART 通信,每一位的時(shí)間寬度是 1/baud。我們初中就學(xué)過(guò)一個(gè)概念,世界上沒(méi)有絕對(duì)的準(zhǔn)確。那么每一位的時(shí)間寬度 1/baud 要求精確到什么范圍內(nèi)呢?
前邊教程我提到過(guò),單片機(jī)讀取 UART 的 RXD 引腳數(shù)據(jù)的時(shí)候,一位數(shù)據(jù),單片機(jī)平均分成了 16 份,取其中的 7、8、9 三次讀到的結(jié)果,這三次中有 2 次是高電平那這一位就是 1,有 2 次是低電平,那這一次就是 0。如果我們的波特率稍微有些偏差,只要累計(jì)下來(lái)到最后一位停止位,這 7、8、9 還在范圍內(nèi)即可。如圖 13-1 所示。
圖 13-1 UART 信號(hào)采集時(shí)序圖
我們用三個(gè)箭頭來(lái)表示 7、8、9 這三次的采集位置,大家可以注意到,當(dāng)采集到 D7 的時(shí)候,已經(jīng)有一次采集偏出去了,但是我們采集到的數(shù)據(jù)還是不會(huì)錯(cuò),因?yàn)橛?2 次采集正確。至于這個(gè)偏差允許多大,大家自己可以詳細(xì)算一下。實(shí)際上 UART 通信的波特率是允許一定范圍內(nèi)誤差存在的,但是不能過(guò)大,否則就會(huì)采集錯(cuò)誤。大家在計(jì)算波特率的時(shí)候,發(fā)現(xiàn)沒(méi)有整除,有小數(shù)部分的時(shí)候,就要特別小心了,因?yàn)樾?shù)部分是一概被舍掉的,于是計(jì)算誤差就產(chǎn)生了。我們用 11.0592M 晶振計(jì)算的過(guò)程中,11059200/12/32/9600 得到的是一個(gè)整數(shù),如果用 12M 晶振計(jì)算 12000000/12/32/9600 就會(huì)得到一個(gè)小數(shù),大家可以算一下誤差多少,是否在誤差范圍內(nèi)。
1602 的時(shí)序問(wèn)題,大家要學(xué)會(huì)通過(guò) LCD1602 的數(shù)據(jù)手冊(cè)提供的時(shí)序圖和時(shí)序參數(shù)表格來(lái)進(jìn)行研究,而且看懂時(shí)序圖是學(xué)習(xí)單片機(jī)所必須掌握的一項(xiàng)技能,如圖 13-2 所示。
圖 13-2 1602 時(shí)序圖
大家看到這種圖的時(shí)候,不要感覺(jué)害怕。說(shuō)句不過(guò)分的話,單片機(jī)這些邏輯上的問(wèn)題,只要小學(xué)畢業(yè)就可以理解的,很多時(shí)候是因?yàn)榇蠹野褑?wèn)題想象的太難才學(xué)不下去的。
我們先來(lái)看一下讀操作時(shí)序的 RS 引腳和 R/W 引腳,這兩個(gè)引腳先進(jìn)行變化,因?yàn)槭亲x操作,所以 R/W 引腳首先要置為高電平,而不管它原來(lái)是什么。讀指令還是讀數(shù)據(jù),都是讀操作,而且都有可能,所以 RS 引腳既有可能是置為高電平,也有可能是置為低電平,大家注意圖上的畫(huà)法。而 RS 和 R/W 變化了經(jīng)過(guò) Tsp1 這么長(zhǎng)時(shí)間后,使能引腳 E 才能從低電平到高電平發(fā)生變化。
而使能引腳 E 拉高經(jīng)過(guò)了 tD 這么長(zhǎng)時(shí)間后,LCD1602 輸出 DB 的數(shù)據(jù)就是有效數(shù)據(jù)了,我們就可以來(lái)讀取 DB 的數(shù)據(jù)了。讀完了之后,我們要先把使能 E 拉低,經(jīng)過(guò)一段時(shí)間后 RS、R/W 和 DB 才可以變化繼續(xù)為下一次讀寫(xiě)做準(zhǔn)備了。
而寫(xiě)操作時(shí)序和讀操作時(shí)序的差別,就是寫(xiě)操作時(shí)序中,DB 的改變是由單片機(jī)來(lái)完成的,因此要放到使能引腳 E 的變化之前進(jìn)行操作,其它區(qū)別大家可以自行對(duì)比一下。
細(xì)心的同學(xué)會(huì)發(fā)現(xiàn),這個(gè)時(shí)序圖上還有很多時(shí)間標(biāo)簽。比如 E 的上升時(shí)間 tR,下降時(shí)間時(shí)間 tF,使能引腳 E 從一個(gè)上升沿到下一個(gè)上升沿之間的長(zhǎng)度周期 tC,使能 E 下降沿后,R/W 和 RS 變化時(shí)間間隔 tHD1 等等很多時(shí)間要求,這些要求怎么看呢?放心,只要是正規(guī)的數(shù)據(jù)手冊(cè),都會(huì)把這些時(shí)間要求給大家標(biāo)記出來(lái)的。我們來(lái)看一下表 13-1。
大家要善于把手冊(cè)中的這個(gè)表格和時(shí)序圖結(jié)合起來(lái)看。表 13-1 中的數(shù)據(jù),都是時(shí)序參數(shù),本節(jié)課的所有時(shí)序參數(shù),我都一點(diǎn)點(diǎn)的給大家講出來(lái),以后遇到同類(lèi)時(shí)序圖,就不再講了,只是提一下,但是大家務(wù)必要學(xué)會(huì)自己看時(shí)序圖,這個(gè)很重要,此外,看以下解釋需要結(jié)合圖 13-2 來(lái)看。
tC:指的是使能引腳 E 從本次上升沿到下次上升沿的最短時(shí)間是 400ns,而我們單片機(jī)因?yàn)樗俣容^慢,一個(gè)機(jī)器周期就是 1us 多,而一條 C 語(yǔ)言指令肯定是一個(gè)或者幾個(gè)機(jī)器周期的,所以這個(gè)條件完全滿足。
tPW:指的是使能引腳 E 高電平的持續(xù)時(shí)間最短是 150ns,同樣由于我們的單片機(jī)比較慢,這個(gè)條件也完全滿足。
tR, tF:指的是使能引腳 E 的上升沿時(shí)間和下降沿時(shí)間,不能超過(guò) 25ns,別看這個(gè)數(shù)很小,其實(shí)這個(gè)時(shí)間限值是很寬裕的,我們實(shí)際用示波器測(cè)了一下開(kāi)發(fā)板的這個(gè)引腳上升沿和下降沿時(shí)間大概是 10ns 到 15ns 之間,完全滿足。
tSP1:指的是 RS 和 R/W 引腳使能后至少保持 30ns,使能引腳 E 才可以變成高電平,這個(gè)條件同樣也完全滿足。
tHD1:指的是使能引腳 E 變成低電平后,至少保持 10ns 之后,RS 和 R/W 才能進(jìn)行變化,這個(gè)條件也完全滿足。
tD:指的是使能引腳 E 變成高電平后,最多 100ns 后,1602 就把數(shù)據(jù)送出來(lái)了,那么我們就可以正常去讀取狀態(tài)或者數(shù)據(jù)了。
tHD2:指的是讀操作過(guò)程中,使能引腳 E 變成低電平后,至少保持 20ns,DB 數(shù)據(jù)總線才可以進(jìn)行變化,這個(gè)條件也完全滿足。
tSP2:指的是 DB 數(shù)據(jù)總線準(zhǔn)備好后,至少保持 40ns,使能引腳 E 才可以從低到高進(jìn)行使能變化,這個(gè)條件也完全滿足。
tHD2:指的是寫(xiě)操作過(guò)程中,要引腳 E 變成低電平后,至少保持 10ns,DB 數(shù)據(jù)總線才可以變化,這個(gè)條件也完全滿足。
好了,表 13-1 這個(gè) LCD1602 的時(shí)序參數(shù)表已經(jīng)解析完成了,看完之后,是不是感覺(jué)比你想象的要簡(jiǎn)單,沒(méi)有你想的那么困難。大家自己也得慢慢學(xué)會(huì)看這種時(shí)序圖和表格,在今后的學(xué)習(xí)中,這方面的能力尤為重要。如果以后換用了其它型號(hào)的單片機(jī),那么就根據(jù)單片機(jī)的執(zhí)行速度來(lái)評(píng)估你的程序是否滿足時(shí)序要求,整體上來(lái)說(shuō)器件都是有一個(gè)最快速度的限制,而沒(méi)有最慢限制,所以當(dāng)換用高速的單片機(jī)后通常都是靠在各步驟間插入軟件延時(shí)來(lái)滿足較慢的時(shí)序要求。
-
時(shí)序
+關(guān)注
關(guān)注
5文章
397瀏覽量
37793 -
LCD1602
+關(guān)注
關(guān)注
14文章
607瀏覽量
53339
原文標(biāo)題:簡(jiǎn)析單片機(jī)通信時(shí)序分析
文章出處:【微信號(hào):mcugeek,微信公眾號(hào):MCU開(kāi)發(fā)加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
基于51單片機(jī)的多功能萬(wàn)年歷設(shè)計(jì)
TLC5615與單片機(jī)通信時(shí)是不是用任意IO口都可以通信,只要時(shí)序和數(shù)據(jù)是按說(shuō)明書(shū)通信的?
使用ads1148制作的測(cè)溫電路中與430單片機(jī)通信,2.CKPH會(huì)使得不能正常通信嗎?
基于FPGA的LCD1602液晶顯示模塊驅(qū)動(dòng)設(shè)計(jì)

基于51單片機(jī)的二氧化碳濃度檢測(cè)報(bào)警系統(tǒng)仿真

基于51單片機(jī)的二氧化碳濃度檢測(cè)調(diào)節(jié)系統(tǒng)仿真

基于51單片機(jī)的光照及溫濕度檢測(cè)報(bào)警

基于51單片機(jī)的停車(chē)場(chǎng)管理系統(tǒng)

基于51單片機(jī)的遙控開(kāi)關(guān)仿真(雙機(jī)通信)

基于51單片機(jī)的智能防火GSM上報(bào)仿真

如何實(shí)現(xiàn)51單片機(jī)與PC機(jī)的串行通信
單片機(jī)WiFi模塊怎樣連接手機(jī)APP
單片機(jī)SPI通信實(shí)現(xiàn)
藍(lán)牙模塊如何實(shí)現(xiàn)單片機(jī)和手機(jī)端數(shù)據(jù)互傳

評(píng)論