單片機(jī)是通過什么樣的辦法進(jìn)行取指令,,執(zhí)行指令和其它操作的呢,? 在這里引入了一個(gè)時(shí)序的概念。
時(shí)鐘電路
單片機(jī)時(shí)鐘電路有三種方式:
1、單片機(jī)內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反相放大器,,引腳XTAL1和XTAL2分別是此放大器的輸入端和輸出端,XTAL1和XTAL2需外接上晶體和合適的電容,。
2,、有的單片機(jī)內(nèi)部也自帶時(shí)鐘電路,用于產(chǎn)生時(shí)鐘信號,。
3,、單片機(jī)管腳XTAL2直接接晶振。
周期1 時(shí)鐘周期
時(shí)鐘電路產(chǎn)生時(shí)鐘信號的周期我們叫時(shí)鐘周期(振蕩周期),。 單片機(jī)通電后就產(chǎn)生了固定標(biāo)稱值的脈沖信號,,單片機(jī)就是在脈沖信號的驅(qū)動下順序地從ROM中(程序存儲器)取出指令一條一條的順序執(zhí)行,然后進(jìn)行一系列的微操作控制,,來完成各種指定的動作,。
2 機(jī)器周期
單片機(jī)每訪問一次存儲器的時(shí)間我們把它稱為一個(gè)機(jī)器周期,它是一個(gè)時(shí)間基準(zhǔn)就象我們?nèi)粘I钪惺褂玫拿胍粯?。單片機(jī)中一個(gè)機(jī)器周期包括12個(gè)振蕩周期,。振蕩周期就是振蕩源的周期也就是我們使用的晶振的時(shí)間周期。一個(gè)12M的晶振它的時(shí)間周期是1/12微秒,,那么使用12M晶振的單片機(jī)它的一個(gè)機(jī)器周期就應(yīng)該等于12*1/12微秒,,也就是1微秒。
3 指令周期
單片機(jī)中有些指令只要一個(gè)機(jī)器周期而有些指令則需要兩個(gè)或三個(gè)機(jī)器周期另外還有兩條指令需要4個(gè)機(jī)器周期,。如何衡量指令執(zhí)行時(shí)間的長短我們就要用到一個(gè)新的概念:指令周期,,即執(zhí)行一條指令所需的機(jī)器周期,。
時(shí)序
對于芯片開發(fā)使用來說,時(shí)序圖是較為核心也較為重要的一個(gè)知識點(diǎn),。在廠家給出的芯片數(shù)據(jù)手冊中,,時(shí)序圖也是非常重要的參數(shù)細(xì)節(jié)。開發(fā)者拿到一款芯片時(shí),,首先需要做的就是閱讀其數(shù)據(jù)手冊,,對上面的內(nèi)容進(jìn)行提取和掌握。因此能夠順利的閱讀并了解到單片機(jī)時(shí)序圖想要傳達(dá)的意思是非常關(guān)鍵的,。 單片機(jī)時(shí)序是指單片機(jī)執(zhí)行指令時(shí)應(yīng)發(fā)出的控制信號的時(shí)間序列,。這些控制信號在時(shí)間上的相互關(guān)系就是CPU的時(shí)序。它是一系列具有時(shí)間順序的脈沖信號,。
CPU發(fā)出的時(shí)序有兩類:一類用于片內(nèi)各功能部件的控制,,它們是芯片設(shè)計(jì)師關(guān)注的問題,對用戶沒有什么意義,。另一類用于片外存儲器或I/O端口的控制,,需要通過器件的控制引腳送到片外,這部分時(shí)序?qū)Ψ治鲇布娐返脑碇陵P(guān)重要,,也是軟件編程遵循的原則,,需要認(rèn)真掌握。
CPU發(fā)出的時(shí)序有兩類:一類用于片內(nèi)各功能部件的控制,,它們是芯片設(shè)計(jì)師關(guān)注的問題,,對用戶沒有什么意義。另一類用于單片機(jī)外部芯片的控制,,這部分時(shí)序?qū)Ψ治鲇布娐返脑碇陵P(guān)重要,,也是軟件編程遵循的原則。 操作時(shí)序永遠(yuǎn)使用是任何一片IC芯片的最主要的內(nèi)容,。一個(gè)芯片的所有使用細(xì)節(jié)都會在它的官方器件手冊上包含,。所以使用一個(gè)器件事情,要充分做好的第一件事就是要把它的器件手冊上有用的內(nèi)容提取,,掌握其工作時(shí)序,。 在這里我們以液晶1602為例,分析其操作時(shí)序,。其基本時(shí)序有讀狀態(tài),,寫指令,讀數(shù)據(jù)和寫數(shù)據(jù),。 為了方便大家理解,,這里以1602為例進(jìn)行講解,1602的引腳是很整齊的SIP單列直插封裝,,所以器件手冊只給出了引腳的功能數(shù)據(jù)表:
這里,,我們需要關(guān)注1602的幾個(gè)管腳,,分別是RS,RW,,E,,D0.。,。D7,。由上面的說明我們可以知道: RS:數(shù)據(jù)/命令(狀態(tài))選擇端,當(dāng)此腳為高電平時(shí),,可以對1602進(jìn)行數(shù)據(jù)字節(jié)的傳輸操作,,而此腳為低電平時(shí),進(jìn)行命令(狀態(tài))字節(jié)的傳輸操作,。 RW:讀寫選擇端,,當(dāng)此腳為高電平可對LCD1602進(jìn)行讀數(shù)據(jù)操作,反之進(jìn)行寫數(shù)據(jù)操作,。 E:使能信號,,其實(shí)是LCD1602的數(shù)據(jù)控制時(shí)鐘信號,利用該信號的上升沿實(shí)現(xiàn)對LCD1602的數(shù)據(jù)傳輸,。 D0.,。。D7:8位并行數(shù)據(jù)口,。 在此,我們分析兩個(gè)寫時(shí)序:寫命令和寫數(shù)據(jù),。
1,、當(dāng)我們要寫指令字,設(shè)置LCD1602的工作方式時(shí):需要把RS置為低電平,,RW置為低電平,,然后將數(shù)據(jù)送到數(shù)據(jù)口D0~D7,最后E引腳一個(gè)高脈沖將數(shù)據(jù)寫入,。
2,、當(dāng)我們要寫入數(shù)據(jù)字,在1602上實(shí)現(xiàn)顯示時(shí):需要把RS置為高電平,,RW置為低電平,,然后將數(shù)據(jù)送到數(shù)據(jù)口D0~D7,最后E引腳一個(gè)高脈沖將數(shù)據(jù)寫入,。
開發(fā)者只需要關(guān)注以下幾個(gè)管腳: 3腳:VL,,液晶顯示偏壓信號,用于調(diào)整LCD1602的顯示對比度,,一般會外接電位器用以調(diào)整偏壓信號,,注意此腳電壓為0時(shí)可以得到最強(qiáng)的對比度,。 4腳:RS,數(shù)據(jù)/命令選擇端,,當(dāng)此腳為高電平時(shí),,可以對1602進(jìn)行數(shù)據(jù)字節(jié)的傳輸操作,而此腳為低電平時(shí),,則是進(jìn)行命令字節(jié)的傳輸操作,。命令字節(jié),即是用來對LCD1602的一些工作方式作設(shè)置的字節(jié),;數(shù)據(jù)字節(jié),,即使用以在1602上顯示的字節(jié)。值得一提的是,,LCD1602的數(shù)據(jù)是8位的,。 5腳:R/W,讀寫選擇端,。當(dāng)此腳為高電平可對LCD1602進(jìn)行讀數(shù)據(jù)操作,,反之進(jìn)行寫數(shù)據(jù)操作。筆者認(rèn)為,,此腳其實(shí)用處不大,,直接接地永久置為低電平也不會影響其正常工作。但是尚未經(jīng)過復(fù)雜系統(tǒng)驗(yàn)證,,保留此意見,。 6腳:E,使能信號,,其實(shí)是LCD1602的數(shù)據(jù)控制時(shí)鐘信號,,利用該信號的上升沿實(shí)現(xiàn)對LCD1602的數(shù)據(jù)傳輸。 7~14腳:8位并行數(shù)據(jù)口,,使得對LCD1602的數(shù)據(jù)讀寫大為方便,。
LCD1602的操作時(shí)序
在此,可以先不讀出它的數(shù)據(jù)的狀態(tài)或者數(shù)據(jù)本身,,所以只需要看兩個(gè)寫時(shí)序: ①當(dāng)要寫指令字,,設(shè)置LCD1602的工作方式時(shí):需要把RS置為低電平,RW置為低電平,,然后將數(shù)據(jù)送到數(shù)據(jù)口D0~D7,,最后E引腳一個(gè)高脈沖將數(shù)據(jù)寫入。 ②當(dāng)要寫入數(shù)據(jù)字,,在1602上實(shí)現(xiàn)顯示時(shí):需要把RS置為高電平,,RW置為低電平,然后將數(shù)據(jù)送到數(shù)據(jù)口D0~D7,,最后E引腳一個(gè)高脈沖將數(shù)據(jù)寫入,。 實(shí)際上寫指令和寫數(shù)據(jù),,差別僅僅在于RS的電平不一樣而已。以下是LCD1602的時(shí)序圖:
只要慢慢學(xué)會看時(shí)序圖,,要知道操作一個(gè)器件的精華便蘊(yùn)藏在其中,,看懂看準(zhǔn)了時(shí)序,再操控這個(gè)芯片就是非常容易的事了,。這里使用1602作為例子主要是因?yàn)?602的時(shí)序是目前最簡單的時(shí)序之一,。 看時(shí)序圖需要注意的問題:
1、注意時(shí)間軸,,從左往右的方向?yàn)闀r(shí)間正向軸,,即時(shí)間在增長。
2,、時(shí)序圖最左邊一般是某一根引腳的標(biāo)識,,表示此行圖線體現(xiàn)該引腳的變化,上圖分別標(biāo)明了RS,、R/W,、E、DB0~DB7四類引腳的時(shí)序變化,。
3,、有線交叉狀的部分,表示電平在變化,。
4,、兩條平行線分別對應(yīng)高低電平,如上圖右上角所示,。
5,、密封的菱形部分,表示數(shù)據(jù)有效,,Valid Data這個(gè)詞也顯示了這點(diǎn)。
6,、時(shí)序圖里各個(gè)引腳的電平變化,,基于的時(shí)間軸是一致的。一定要嚴(yán)格按照時(shí)間軸的增長方向來精確地觀察時(shí)序圖,。要讓器件嚴(yán)格的遵守時(shí)序圖的變化,。
7、時(shí)間的標(biāo)注,,也是個(gè)十分重要的信息,,這些時(shí)間的標(biāo)注表明了某些狀態(tài)所要維持的最短或最長時(shí)間。因?yàn)槠骷墓ぷ魉俣纫彩怯邢薜?,一般都跟不上主控芯片的速度,,所以它們直接之間要有時(shí)序配合,。下面是時(shí)序參數(shù)表: 需要十分嚴(yán)重注意的是,時(shí)序圖里各個(gè)引腳的電平變化,,基于的時(shí)間軸是一致的,,一定要嚴(yán)格按照時(shí)間軸的增長方向來精確地觀察時(shí)序圖,要讓器件嚴(yán)格的遵守時(shí)序圖的變化,,在類似于18B20這樣的單總線器件對此要求尤為嚴(yán)格,。
時(shí)間標(biāo)注: 細(xì)心的朋友或許注意到了文中關(guān)于時(shí)間的標(biāo)注,這也是個(gè)十分重要的信息,,這些時(shí)間的標(biāo)注表明了某些狀態(tài)所要維持的最短或最長時(shí)間,。因?yàn)槠骷墓ぷ魉俣纫彩怯邢薜模话愣几簧现骺匦酒乃俣?,所以它們直接之間要有時(shí)序配合,。下面是時(shí)序參數(shù)表: 開發(fā)者要注意估計(jì)主控芯片的指令時(shí)間,可以在官方數(shù)據(jù)手冊上查到MCU的一些級別參數(shù),。比如現(xiàn)在用AVRM16做為主控芯片,,外部12MHz晶振,(1/12MHz)s是振蕩周期,,而不是時(shí)鐘周期,,因?yàn)闀r(shí)鐘周期(狀態(tài)周期)等于兩個(gè)振蕩周期,換句話說就是對振動頻率進(jìn)行“二分頻”的振蕩信號,,所以(2/12MHz)s才是晶振為12MHz時(shí)的時(shí)鐘周期,。
以上給的時(shí)間參數(shù)全部是ns級別的,所以即便在程序里不加延時(shí)程序,,也應(yīng)該可以很好的配合LCD1602的時(shí)序要求了,。怎么看這個(gè)表呢?很簡單,,在時(shí)序圖里可以找到TR1,,對應(yīng)時(shí)序參數(shù)表,可以查到這個(gè)是E上升沿/下降沿時(shí)間,,最大值為25ns,,表示E引腳上的電平變化,必須在最大為25ns之內(nèi)的時(shí)間完成,。
以上介紹的這些內(nèi)容,,雖然是以LCD1602為例,但這僅僅是為了幫助大家進(jìn)行理解,,其中提到的參數(shù)是大部分單片機(jī)都會有的,,因此大家可以通過本文中給予的解讀方式來套用到其他單片機(jī)當(dāng)中,大部分的單片機(jī)時(shí)序圖都會遵循文中給出的規(guī)則,當(dāng)大家漸漸掌握其中的內(nèi)容后,,就可以發(fā)現(xiàn)其實(shí)看懂單片機(jī)的時(shí)序圖其實(shí)并不難,。 現(xiàn)在我來解讀我對這個(gè)時(shí)序圖的理解: 當(dāng)要寫命令字節(jié)的時(shí)候,時(shí)間由左往右,,RS變?yōu)榈碗娖?,R/W變?yōu)榈碗娖剑⒁饪词荝S的狀態(tài)先變化完成,。然后這時(shí),,DB0~DB7上數(shù)據(jù)進(jìn)入有效階段,接著E引腳有一個(gè)整脈沖的跳變,,接著要維持時(shí)間最小值為tpw=400ns的E脈沖寬度,。然后E引腳負(fù)跳變,RS電平變化,,R/W電平變化,。這樣便是一個(gè)完整的LCD1602寫命令的時(shí)序。
更多信息可以來這里獲取==>>電子技術(shù)應(yīng)用-AET<<