在線調試器(ICD)是一種非常強大且有效的工具,可以在硬件級別對基于微控制器的系統進行實時調試,它允許您在目標微控制器運行,停止和單步執行程序被嵌入到實際電路中。暫停后,可以實時檢查和修改程序變量,特殊功能寄存器(SFR),RAM和EEPROM的位置,從而幫助設計人員一起調試固件和硬件。在本文中,我將描述PIC單片機中的在線調試技術,并通過使用PIC16F887單片機的測試項目演示調試過程。盡管大多數ICD的操作是相似的,但在這里我將結合使用mikroICD器件的mikroElektronika的PICFlash以及用于PIC編譯器的mikroC Pro進行說明。
ICD在調試PIC編程中
理論
ICD是硬件連接在PC和目標微控制器之間的設備,可以快速,輕松地調試實時應用程序。 ICD由PC上運行的調試應用程序工具控制。調試工具允許設計人員通過將斷點插入到程序0r中來單步執行程序,從而減慢微控制器的運行速度。在執行了一條指令或一組指令之后,可以檢查程序變量和內部寄存器的值,并在需要時進行修改。這有助于快速識別源代碼中的錯誤和錯誤,從而加快項目的開發過程。
PICMicro中的ICD
在PIC單片機中,可通過與在線串行編程(ICSP)相同的引腳(即ICSPDAT(或PGD),ICSPCLK(或PGC),V PP)來實現在線調試。 sub》/MCLR(編程模式電壓),V DD (電源電壓)和V SS (地)。這使制造商可以將ISCP編程和在線調試功能集成到單個設備中。在調試過程中,ICD設備會向目標微控制器的程序存儲器中添加額外的代碼塊(以及用戶應用程序),該代碼塊與調試應用程序進行交互。并通過同一條編程電纜將變量值,內部寄存器值和其他詳細信息發送到PC。
例如,Microchip的MPLAB ICD2和ICD3既是選定PIC MCU和dsPIC DSC的編程器又是實時調試器。 ICD的功能由PC上運行的MPLAB集成開發環境(IDE)應用軟件控制。在調試期間,可通過MPLAB IDE界面以交互方式訪問目標微控制器的所有可用功能。這些功能使您能夠以單步模式運行程序,將斷點插入程序,檢查寄存器和變量,并根據需要修改它們。
盡管ICD是一種非常有價值的調試工具,但它并不是不惜一切代價。 ICD的兩個主要缺點是:1)它使用目標微控制器的一些內存,并且2)它占用目標微控制器的一些I/O引腳以與PC通信。因此,在調試時,目標微控制器的PGD,PGC和MCLR引腳不能用于任何其他目的。
帶有mikroICD的PICFlash
帶有mikroICD的PICFlash是用于PIC12,PIC16和PIC18系列微控制器的編程器和在線調試器。它由mikroElektronika制造,并受其所有PIC編譯器(mikroC,mikroBasic和mikroPascal)支持。設備通過USB接口與PC通信,該接口還為ICD提供必要的電源。它通過PGC,PGD,V PP /MCLR和電源引腳連接到目標PIC微控制器。當該器件用作獨立編程器時,在將HEX文件加載到目標PIC微控制器之后,釋放前三個引腳。但是,如果將其用于在線調試,則這三個引腳用于與PC進行通信,因此不能用于任何其他目的。
帶有mikroICD的PICFlash :程序員+在線調試器
使用mikroICD安裝PICFlash的軟件
您可以找到詳細信息有關此信息,請參見mikroICD手冊。設置該器件的最簡單方法是首先下載PIC編譯器。請注意,此設備無法與任何其他方的編譯器一起使用,因此您需要使用mikroElektronika編譯器之一才能使其正常工作。以下步驟介紹了用于mikroC Pro for PIC編譯器的帶有mikroICD的PICFlash的軟件安裝和設置。
首先,從HERE下載適用于PIC編譯器的mikroC Pro并將其安裝在PC上。/span》
安裝完成后,它將詢問您是否要安裝mikroProg Suite for PIC。同意,然后安裝。
下一步,它將詢問您是否要安裝驅動程序formikroProgprogrammer。說是,然后選擇適合您的操作系統的驅動程序文件,然后安裝它。您完成了!
使用帶有mikroICD的PICFlash進行調試
第一步使用mikroICD正在用所選的編譯器編寫應用程序,例如mikroC Pro for PIC。編譯器的IDE提供了調試功能,例如逐步運行程序,使用斷點暫停程序執行,檢查內部寄存器的狀態,跟蹤程序中變量的值等。請閱讀mikroICD手冊以獲取更多詳細信息。我將在我們的測試項目中說明調試過程,該項目使用PIC16F887微控制器和LM34DZ傳感器測量環境溫度并將其顯示在LCD上。該項目的電路圖如下所示,這是不言自明的。每次讀取溫度時,它的工作方式都是如此。按下開關,微控制器從LM34DZ讀取溫度樣本并將其顯示在LCD上。您可以看到,在默認情況下,開關輸出為高,按下開關時輸出為低。我正在為此實驗設置使用mikroElektronika的PIC Ready 1板。它是用于28和40引腳PIC微控制器的快速原型板。該開發板配有PIC16F887微控制器,預裝了串行引導加載程序,但實際上不適用于我們的情況。但是,該開發板也確實包含帶有mikroICD的PICFlash連接器。 PIC Ready 1板上的用戶手冊描述了有關板上連接的更多信息。
用于調試PIC16F887單片機系統的電路圖
實驗設置:帶有mikroICD的PIC-Ready1板和PICFlash
所以讓我再次簡要描述整個場景,以便更清楚地了解我們正在嘗試在這里做。我們有一個PIC16F887微控制器電路,該電路可以讀取LM34DZ傳感器的模擬輸出,將其轉換為溫度(°F),并在LCD上顯示。該微控制器通過ICSP引腳連接到mikroICD(PIC編程器+ ICD)。 mikroICD也通過USB端口連接到PC。 mikroICD調試工具已嵌入PIC編譯器的mikroC Pro中,因此可以從那里進行操作。我們將使用調試工具對加載到微控制器中的程序進行單步調試,并觀察變量值。同時,隨著每條指令的執行,其效果也可以在真實的硬件電路中觀察到。
mikroICD調試過程
首先,使用以下源代碼創建一個新項目,以讀取LM34DZ輸出并在LCD屏幕上顯示測得的溫度。如果您是首次使用mikroC編譯器,請閱讀在mikroC Pro for PIC中創建第一個項目,以了解如何在mikroC Pro for PIC中創建新項目。編譯之前,請轉到“編輯項目”窗口,然后將生成類型選擇為ICD Debug。該選項將使mikroICD將調試代碼與用戶應用程序一起加載到微控制器中。
/*
* Project name:
Testing mikroICD debugging tool with PIC16F887
* Copyright:
(c) Rajendra Bhatt
* Test configuration:
MCU: PIC16F887
Oscillator: HS, 10.0000 MHz
*/
// LCD module connections
sbit LCD_RS at RC3_bit;
sbit LCD_EN at RC2_bit;
sbit LCD_D4 at RC4_bit;
sbit LCD_D5 at RC5_bit;
sbit LCD_D6 at RC6_bit;
sbit LCD_D7 at RC7_bit;
sbit LCD_RS_Direction at TRISC3_bit;
sbit LCD_EN_Direction at TRISC2_bit;
sbit LCD_D4_Direction at TRISC4_bit;
sbit LCD_D5_Direction at TRISC5_bit;
sbit LCD_D6_Direction at TRISC6_bit;
sbit LCD_D7_Direction at TRISC7_bit;
// End LCD module connections
char txt[] = “Temp = F”;
char *temp = “000.0”;
sbit PressSwitch at RC0_bit;
unsigned int ADC_Value;
void main() {
ANSEL = 0x01; // Configure RA0 as Analog input
ANSELH = 0x00;
TRISA = 0xff;
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;
TRISC = 0x01; // RC0 is input
TRISD = 0x00;
TRISB = 0xFF;
txt[11] = 223; // ASCII value for degree symbol
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,1,txt); // Write text in first row
do {
if (!PressSwitch) { // Detect logical 0
Delay_ms(300);
ADC_Value = ADC_Read(0);
ADC_Value = ADC_Value*4.88; // Convert to temperature in F
temp[0] = adc_value/1000 + 48;
temp[1] = (adc_value/100)%10 + 48;
temp[2] = (adc_value/10)%10 + 48;
temp[4] = adc_value%10 + 48;
Lcd_Out(1,7,temp);
}
} while(1); // Endless loop
}
下載mikroC項目文件
為構建類型選擇ICD調試可進行在線調試
您保存此方案,然后單擊 Build + Program (或按F4鍵)來編譯編程并將其加載到目標微控制器中。 mikroICD必須連接到PC的USB端口以及目標微控制器。它會自動啟動 PIC的mikroProg Suite ,這是PC上將HEX文件傳輸到micrcontroller中所需的應用程序軟件。現在已經加載了應用程序和調試代碼,是時候使用調試功能了,看看它如何工作。
要開始調試,請從菜單中選擇 Start Debugger 選項。 運行下拉菜單或使用功能鍵[F9]。現在,您可以通過按[F8]鍵逐行執行程序。在執行過程中,默認情況下將以藍色突出顯示下一步執行的程序行(請參見下圖)。
要執行的下一條指令將以藍色突出顯示
可以在監視窗口上監視程序的實時執行。您可以選擇要監視的任何寄存器和變量,并將它們添加到監視窗口。轉到查看-》調試Windows-》監視窗口選項以獲取“監視”窗口。從變量列表中選擇要觀察的變量,然后通過單擊顯示的+號將它們添加到窗口中。在下圖中,我正在調試期間監視四個變量。它們是 ADC_Value,PressSwitch,ADRESH 和 ADRESL 。 ADC_Value 是用戶定義的整數變量,用于存儲10位A/D結果。 PressSwitch 是輸入端口RC0,因為輕觸開關處于打開狀態,所以它為高。 ADRESH 和 ADRESL 是8位內部寄存器,用于存儲10位A/D轉換結果。最低有效8位存儲在 ADRESL 中,其余2個最高有效位存儲在 ADRESH 中。
將寄存器和變量添加到監視窗口
正如我之前提到的,在在線調試中,只要執行一條指令,在實際的硬件電路中也會觀察到其效果。例如,當執行 LCD_Init()例程時,LCD屏幕上會出現一個閃爍的光標。這表明您 LCD_Init()例程和您的LCD硬件接口都正常工作。
當LCD_Init例程處于運行狀態時,會出現一個閃爍的光標。執行
按住[F8]鍵,直到執行 Lcd_Out(1,1,txt),您將看到顯示的“ txt”字符串在液晶顯示屏上。繼續按下[F8]功能鍵,單步執行將繼續直到達到 if(!PressSwitch)條件。默認情況下,讀取溫度開關處于打開狀態,而 PressSwitch 為“ 1”,因此不滿足 If條件。因此,如果再次按下[F8]鍵,執行將跳至 while(1)語句。它將繼續在 if 和 while 語句之間來回移動,直到您按下電路板上的Read Temp開關。
等待直到按下Read Temp鍵
當 if(!PressSwitch)指令以藍色突出顯示時,按 Read Temp 切換并點擊[F8],執行將進入if語句內。按[F8]鍵將再次執行單步執行。當執行 ADC_Read(0)時, ADC_Value , ADRESH 和 ADRESL 的值也會改變。 監視窗口。
在if語句中的執行從按下“讀取溫度”按鈕(PressSwitch = 0)開始執行
監視窗口中的ADC_Value顯示ADC結果
接下來,顯示 ADC_Value 和 temp Lcd_Out(1、7,temp)時,將更新em》變量并在LCD上以°F為單位顯示溫度。
運行到光標 [F4]和 breakpoint 功能,以加快調試過程。使用[F4]功能鍵,可以讓程序執行直到到達光標位置。類似地,使用斷點允許將故意停止放置在所需的程序行上。下表顯示了mikroICD中各種調試功能鍵的摘要。此外,在調試過程中,您還可以從監視窗口修改程序變量的值。 用戶手冊中描述了mikroICD調試工具的更高級功能。
mikroICD調試工具中的主要功能鍵
責任編輯:wv
-
單片機
+關注
關注
6043文章
44621瀏覽量
638570 -
PICMicro
+關注
關注
0文章
27瀏覽量
12425
發布評論請先 登錄
相關推薦
評論