我們都知道在學校是通過鈴聲來控制所有班級的上下課時間,那個單片機是通過什么樣的辦法進行取指令,執行指令和其它操作的呢?在這里引入了一個時序的概念:
一、時鐘電路 單片機時鐘電路有三種方式: 1、單片機內部有一個用于構成振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是此放大器的輸入端和輸出端,XTAL1和XTAL2需外接上晶體和合適的電容。 
2、有的單片機內部也自帶時鐘電路,用于產生時鐘信號。 3、單片機管腳XTAL2直接接晶振。

二、周期 1、時鐘周期 時鐘電路產生時鐘信號的周期我們叫時鐘周期(振蕩周期)。 單片機通電后就產生了固定標稱值的脈沖信號,單片機就是在脈沖信號的驅動下順序地從ROM中(程序存儲器)取出指令一條一條的順序執行,然后進行一系列的微操作控制,來完成各種指定的動作。 2、機器周期 單片機每訪問一次存儲器的時間我們把它稱為一個機器周期,它是一個時間基準就象我們日常生活中使用的秒一樣。單片機中一個機器周期包括12個振蕩周期。振蕩周期就是振蕩源的周期也就是我們使用的晶振的時間周期。一個12M的晶振它的時間周期是1/12微秒,那么使用12M晶振的單片機它的一個機器周期就應該等于12*1/12微秒,也就是1微秒。 3、指令周期 單片機中有些指令只要一個機器周期而有些指令則需要兩個或三個機器周期另外還有兩條指令需要4個機器周期。如何衡量指令執行時間的長短我們就要用到一個新的概念:指令周期,即執行一條指令所需的機器周期。
三、時序 單片機時序是指單片機執行指令時應發出的控制信號的時間序列。這些控制信號在時間上的相互關系就是CPU的時序。它是一系列具有時間順序的脈沖信號。 CPU發出的時序有兩類:一類用于片內各功能部件的控制,它們是芯片設計師關注的問題,對用戶沒有什么意義。另一類用于片外存儲器或I/O端口的控制,需要通過器件的控制引腳送到片外,這部分時序對分析硬件電路的原理至關重要,也是軟件編程遵循的原則,需要認真掌握。
CPU發出的時序有兩類:一類用于片內各功能部件的控制,它們是芯片設計師關注的問題,對用戶沒有什么意義。另一類用于單片機外部芯片的控制,這部分時序對分析硬件電路的原理至關重要,也是軟件編程遵循的原則。
操作時序永遠使用是任何一片IC芯片的最主要的內容。一個芯片的所有使用細節都會在它的官方器件手冊上包含。所以使用一個器件事情,要充分做好的第一件事就是要把它的器件手冊上有用的內容提取,掌握其工作時序。 在這里我們以液晶1602為例,分析其操作時序。其基本時序有讀狀態,寫指令,讀數據和寫數據。
這里,我們需要關注1602的幾個管腳,分別是RS,RW,E,D0...D7。由上面的說明我們可以知道: RS:數據/命令(狀態)選擇端,當此腳為高電平時,可以對1602進行數據字節的傳輸操作,而此腳為低電平時,進行命令(狀態)字節的傳輸操作。 RW:讀寫選擇端,當此腳為高電平可對LCD1602進行讀數據操作,反之進行寫數據操作。 E:使能信號,其實是LCD1602的數據控制時鐘信號,利用該信號的上升沿實現對LCD1602的數據傳輸。 D0...D7:8位并行數據口。 在此,我們分析兩個寫時序:寫命令和寫數據。 1、當我們要寫指令字,設置LCD1602的工作方式時:需要把RS置為低電平,RW置為低電平,然后將數據送到數據口D0~D7,最后E引腳一個高脈沖將數據寫入。
void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC為0時忽略忙檢測 { if (BuysC) ReadStatusLCD(); //根據需要檢測忙 LCD_Data = WCLCD; //將要寫的命令放在數據線上 LCD_RS = 0; //RS為低表明要寫的為命令 LCD_RW = 0; //RS為低表明執行的是寫操作 LCD_E = 0; LCD_E = 0; LCD_E = 1; //以上三條語句引入一個高脈沖 } 2、當我們要寫入數據字,在1602上實現顯示時:需要把RS置為高電平,RW置為低電平,然后將數據送到數據口D0~D7,最后E引腳一個高脈沖將數據寫入。
void WriteDataLCD(unsigned char WDLCD) { ReadStatusLCD(); //檢測忙 LCD_Data = WDLCD; //將要寫的命令放在數據線上 LCD_RS = 1; //RS為高表明要寫的為數據 LCD_RW = 0; //RS為低表明執行的是寫操作 LCD_E = 0; LCD_E = 0; LCD_E = 1; //以上三條語句引入一個高脈沖 }
寫指令和寫數據,差別僅僅在于RS的電平不一樣而已。以下是LCD1602的時序圖,大家寫驅動代碼的時候一定要充分理解器件的時序圖(配合文字說明),否則寫不出合格的驅動代碼,器件也就不能工作。大家可以將上面的代碼對照下圖,看是不是一回事。 看時序圖需要注意的問題: 1、注意時間軸,從左往右的方向為時間正向軸,即時間在增長。 2、時序圖最左邊一般是某一根引腳的標識,表示此行圖線體現該引腳的變化,上圖分別標明了RS、R/W、E、DB0~DB7四類引腳的時序變化。 3、有線交叉狀的部分,表示電平在變化。 4、兩條平行線分別對應高低電平,如上圖右上角所示。 5、密封的菱形部分,表示數據有效,Valid Data這個詞也顯示了這點。 6、時序圖里各個引腳的電平變化,基于的時間軸是一致的。一定要嚴格按照時間軸的增長方向來精確地觀察時序圖。要讓器件嚴格的遵守時序圖的變化。
7、時間的標注,也是個十分重要的信息,這些時間的標注表明了某些狀態所要維持的最短或最長時間。因為器件的工作速度也是有限的,一般都跟不上主控芯片的速度,所以它們直接之間要有時序配合。下面是時序參數表: |