單片機(jī)時(shí)序是指單片機(jī)執(zhí)行指令時(shí)應(yīng)發(fā)出的控制信號(hào)的時(shí)間序列。這些控制信號(hào)在時(shí)間上的相互關(guān)系就是CPU的時(shí)序。它是一系列具有時(shí)間順序的脈沖信號(hào)。
CPU發(fā)出的時(shí)序有兩類:一類用于片內(nèi)各功能部件的控制,它們是芯片設(shè)計(jì)師關(guān)注的問(wèn)題,對(duì)用戶沒(méi)有什么意義。另一類用于片外存儲(chǔ)器或I/O端口的控制,需要通過(guò)器件的控制引腳送到片外,這部分時(shí)序?qū)Ψ治?a href="http://m.xsypw.cn/v/tag/1751/" target="_blank">硬件電路的原理至關(guān)重要,也是軟件編程遵循的原則,需要認(rèn)真掌握。
CPU發(fā)出的時(shí)序有兩類:一類用于片內(nèi)各功能部件的控制,它們是芯片設(shè)計(jì)師關(guān)注的問(wèn)題,對(duì)用戶沒(méi)有什么意義。另一類用于單片機(jī)外部芯片的控制,這部分時(shí)序?qū)Ψ治鲇布娐返脑碇陵P(guān)重要,也是軟件編程遵循的原則。
操作時(shí)序永遠(yuǎn)使用是任何一片IC芯片的最主要的內(nèi)容。一個(gè)芯片的所有使用細(xì)節(jié)都會(huì)在它的官方器件手冊(cè)上包含。所以使用一個(gè)器件事情,要充分做好的第一件事就是要把它的器件手冊(cè)上有用的內(nèi)容提取,掌握其工作時(shí)序。
在這里我們以液晶1602為例,分析其操作時(shí)序。其基本時(shí)序有讀狀態(tài),寫指令,讀數(shù)據(jù)和寫數(shù)據(jù)。
1602的引腳定義
我們首先來(lái)看1602的引腳定義,1602的引腳是很整齊的SIP單列直插封裝,所以器件手冊(cè)只給出了引腳的功能數(shù)據(jù)表:
我們只需要關(guān)注以下幾個(gè)管腳:
3腳:VL,液晶顯示偏壓信號(hào),用于調(diào)整LCD1602的顯示對(duì)比度,一般會(huì)外接電位器用以調(diào)整偏壓信號(hào),注意此腳電壓為0時(shí)可以得到最強(qiáng)的對(duì)比度。
4腳:RS,數(shù)據(jù)/命令選擇端,當(dāng)此腳為高電平時(shí),可以對(duì)1602進(jìn)行數(shù)據(jù)字節(jié)的傳輸操作,而此腳為低電平時(shí),則是進(jìn)行命令字節(jié)的傳輸操作。命令字節(jié),即是用來(lái)對(duì)LCD1602的一些工作方式作設(shè)置的字節(jié);數(shù)據(jù)字節(jié),即使用以在1602上顯示的字節(jié)。值得一提的是,LCD1602的數(shù)據(jù)是8位的。
5腳:R/W,讀寫選擇端。當(dāng)此腳為高電平可對(duì)LCD1602進(jìn)行讀數(shù)據(jù)操作,反之進(jìn)行寫數(shù)據(jù)操作。筆者認(rèn)為,此腳其實(shí)用處不大,直接接地永久置為低電平也不會(huì)影響其正常工作。但是尚未經(jīng)過(guò)復(fù)雜系統(tǒng)驗(yàn)證,保留此意見(jiàn)。
6腳:E,使能信號(hào),其實(shí)是LCD1602的數(shù)據(jù)控制時(shí)鐘信號(hào),利用該信號(hào)的上升沿實(shí)現(xiàn)對(duì)LCD1602的數(shù)據(jù)傳輸。
7~14腳:8位并行數(shù)據(jù)口,使得對(duì)LCD1602的數(shù)據(jù)讀寫大為方便。
寫命令和寫數(shù)據(jù)
在此,我們分析兩個(gè)寫時(shí)序:寫命令和寫數(shù)據(jù)。
寫命令
當(dāng)我們要寫指令字,設(shè)置LCD1602的工作方式時(shí):需要把RS置為低電平,RW置為低電平,然后將數(shù)據(jù)送到數(shù)據(jù)口D0~D7,最后E引腳一個(gè)高脈沖將數(shù)據(jù)寫入。
voidWriteCommandLCD(unsignedcharWCLCD,BuysC)//BuysC為0時(shí)忽略忙檢測(cè)
{
if(BuysC)ReadStatusLCD();//根據(jù)需要檢測(cè)忙
LCD_Data=WCLCD;//將要寫的命令放在數(shù)據(jù)線上
LCD_RS=0;//RS為低表明要寫的為命令
LCD_RW=0;//RS為低表明執(zhí)行的是寫操作
LCD_E=0;
LCD_E=0;
LCD_E=1;//以上三條語(yǔ)句引入一個(gè)高脈沖
}
寫數(shù)據(jù)
當(dāng)我們要寫入數(shù)據(jù)字,在1602上實(shí)現(xiàn)顯示時(shí):需要把RS置為高電平,RW置為低電平,然后將數(shù)據(jù)送到數(shù)據(jù)口D0~D7,最后E引腳一個(gè)高脈沖將數(shù)據(jù)寫入。
voidWriteDataLCD(unsignedcharWDLCD)
{
ReadStatusLCD();//檢測(cè)忙
LCD_Data=WDLCD;//將要寫的命令放在數(shù)據(jù)線上
LCD_RS=1;//RS為高表明要寫的為數(shù)據(jù)
LCD_RW=0;//RS為低表明執(zhí)行的是寫操作
LCD_E=0;
LCD_E=0;
LCD_E=1;//以上三條語(yǔ)句引入一個(gè)高脈沖
}
寫指令和寫數(shù)據(jù),差別僅僅在于RS的電平不一樣而已。以下是LCD1602的時(shí)序圖,大家寫驅(qū)動(dòng)代碼的時(shí)候一定要充分理解器件的時(shí)序圖(配合文字說(shuō)明),否則寫不出合格的驅(qū)動(dòng)代碼,器件也就不能工作。大家可以將上面的代碼對(duì)照下圖,看是不是一回事。
看懂時(shí)序圖注意事項(xiàng)
1、注意時(shí)間軸,如果沒(méi)有標(biāo)明(其實(shí)大部分也都是不標(biāo)明的),那么從左往右的方向?yàn)闀r(shí)間正向軸,即時(shí)間在增長(zhǎng)。
2、上圖框出并注明了看懂此圖的一些常識(shí):
(1)時(shí)序圖最左邊一般是某一根引腳的標(biāo)識(shí),表示此行圖線體現(xiàn)該引腳的變化,上圖分別標(biāo)明了RS、R/W、E、DB0~DB7四類引腳的時(shí)序變化。
(2)有線交叉狀的部分,表示電平在變化,如上所標(biāo)注。
(3)應(yīng)該比較容易理解,如上圖右上角所示,兩條平行線分別對(duì)應(yīng)高低電平,也正好吻合(2)中電平變化的說(shuō)法。
(4)上圖下,密封的菱形部分,注意要密封,表示數(shù)據(jù)有效,Valid Data這個(gè)詞也顯示了這點(diǎn)。
3、需要十分嚴(yán)重注意的是,時(shí)序圖里各個(gè)引腳的電平變化,基于的時(shí)間軸是一致的。一定要嚴(yán)格按照時(shí)間軸的增長(zhǎng)方向來(lái)精確地觀察時(shí)序圖。要讓器件嚴(yán)格的遵守時(shí)序圖的變化。在類似于18B20這樣的單總線器件對(duì)此要求尤為嚴(yán)格。
4、以上幾點(diǎn),并不是LCD1602的時(shí)序圖所特有的,絕大部分的時(shí)序圖都遵循著這樣的一般規(guī)則,所以大家要慢慢的習(xí)慣于這樣的規(guī)則。
時(shí)序參數(shù)
時(shí)間的標(biāo)注,也是個(gè)十分重要的信息,這些時(shí)間的標(biāo)注表明了某些狀態(tài)所要維持的最短或最長(zhǎng)時(shí)間。因?yàn)槠骷墓ぷ魉俣纫彩怯邢薜模话愣几簧现骺匦酒乃俣龋运鼈冎苯又g要有時(shí)序配合。下面是時(shí)序參數(shù)表:
評(píng)論