Keil uVision中的Logic Analyzer(邏輯分析儀)簡單使用
寫給從小白開始的我
近日在學習微控制器,由於在這方面目前處於小白階段,因此好多東西都是摸索著前進。當然了,學習就得有資料,本人買的是《21天學會51微控制器》。其中不乏有好多例子。鑑於自己的C語言開發能力還算可以(一直從事C的開發,還算得上箇中等水平),因此前邊好些章節就直接跳過,直接看中斷和定時器的部分。但是在看定時器時,對於書中的教學例子的執行結果無法理解。比如出現瞭如下圖的執行結果:
其結果就是,我懵了!這個到底是怎麼出來的呢,而還好執行視窗的左上角有個"Logic Anylyzer "的字樣。功夫不負有心人,終於讓我在Keil中找到了這個視窗,但是我的執行結果是這個窗口裡面什麼都沒有,一片空白,唯一讓我覺得當前程式碼在執行過程中的是左上角的Time裡面跑得比劉翔還快的時間跳字。但是始終就是沒有波形出來。難道是我的程式碼有問題???我還是比較謙虛的嘛,先從自我批評開始。其結果是程式碼和書上的一模一樣。就在我絕望的時候,靈光一現,百度一下,結果有關的介紹真是少的可憐(主要是針對想我這種小白的太少了)。最後終於從Google中找點資訊。在再加上自己的琢磨,算是能用了,終於也出現了個像模像樣的波形圖出來。現就將我的整個過程“小白式”地呈現給“小白”們。
第一:完成一段確認無誤的程式碼,哪怕是最簡單的也行。我的原始碼如下:
#include <reg51.h>
#include <stdio.h>/* Test Timer0 */
sbit b = P1^2;
sbit c = P1^3;
void Timer_zero(void) interrupt 1
{
/* reset timer0 start value */
TL0 = 0x18;
TH0 = 0x1C;/* revese b */
b = ~b;
c = ~c;
}void main()
{
b = 0;
c = 1;
PT0 = 0; //timer0終端優先順序為低階
EA = 1; //開啟中斷允許
ET0 = 1; //開啟中斷timer0中斷
TMOD = 0x00;
TL0 = 0x18;
TH0 = 0x1C;
TR0 = 1;while(1)
{
}
}
程式碼的大概意思就是定義b和c分別為P1引腳的2和3腳,產生一個定時器,當定時器觸發時分別將b和c的值取反。
第二: 編譯無誤後,執行程式碼。點選工具欄的Debug按鈕,開啟Logic Analyzer(邏輯分析儀)。
第三: 這一步是最為關鍵的,否則就會出現我的小白現象,程式碼在瘋狂地跑著,但是Logic Analyzer視窗中沒有任何波形圖。首先,點選Logic Analyzer視窗左上角的Setup按鈕,進入如下視窗。
在Current Logic Analyzer Signals:中新增要監視的訊號。此處只能添加當前工程中定義的訊號,例如P1埠,b和c。因為我們要檢視的波形圖是b和c的輸出,因此在此處新增b和c。具體的新增方法是:點選右側的新增按鈕(就兩個按鈕一看便知叉叉是刪除,那麼前邊那個就是新增),在輸入框中輸入b,回車,b訊號新增好了。同理新增c訊號。如果新增的不是工程中已經定義的,那麼就會有UnKown Signal的提示。關閉視窗。
第四: 執行程式(F5):則可在Logic Analyzer視窗中看到波形輸出,如果沒有點選Logic Analyzer視窗上側"Zoom"中的All按鈕,此時應該有輸出了,如果還是沒有,那本人無能為力了!!!不過可能現在看到的將是一片純色,並沒有看到任何波形。點選"Zoom"中的In按鈕(作用是縮小顯示的時間精度,當然了Out也就是增大顯示的時間精度),此時就可以清晰的看到具體的波形輸出了,具體如本文第一圖所示。如果讀者細心的話,將會發現在調整顯示的時間精度時(也就是單擊In或者Out按鈕時)其前方Grid一欄中顯示的時間在變化,對了這就是當前波形顯示視窗中的時間精度。這也就解釋了為什麼剛開始時一片純色,因為預設的時間精度設定太大,導致對於頻率太快的波形輸出就是一片純色。
介紹到此結束,其他使用方法繼續摸索。第一次寫部落格,如有問題還請及時指正。