歡迎大家來到C語言單片機(jī)編程課堂。前面一課我們了解了單片機(jī)編程與嵌入式開發(fā)內(nèi)容,這節(jié)課我們來學(xué)習(xí)單片機(jī)開發(fā)環(huán)境Keil,并使用keil完成單片機(jī)編程第一個實(shí)驗(yàn)任務(wù)。
Keil是由美國Keil Software公司研發(fā)的嵌入式開發(fā)工具,它支持使用匯編語言和C語言開發(fā)單片機(jī)嵌入式程序。Keil提供了不同的工具包用于支持不同指令架構(gòu)的單片機(jī),在課程中我們主要學(xué)習(xí)51單片機(jī)和ARM指令架構(gòu)的單片機(jī)嵌入式開發(fā),Keil完全支持51和ARM指令架構(gòu)的單片機(jī)開發(fā)。
Keil開發(fā)工具沒有發(fā)布中文版,但絕大多數(shù)嵌入式開發(fā)工程師都在使用Keil開發(fā)工具,它內(nèi)置了CC++編譯器、匯編編譯器、軟件仿真和硬件仿真。軟件仿真在程序運(yùn)行調(diào)試狀態(tài)下,可以查看模擬單片機(jī)的寄存器、存儲器、I/O口狀態(tài),也可以查看程序在單片機(jī)內(nèi)部執(zhí)行過程中內(nèi)存的狀態(tài)。有了軟件仿真調(diào)試功能,開發(fā)者在沒有單片機(jī)的情況下,也可以開發(fā)單片機(jī)程序,并查看程序運(yùn)行結(jié)果。硬件仿真可以接入外部仿真器仿真實(shí)際運(yùn)行的單片機(jī)。
搭建Keil開發(fā)環(huán)境
安裝Keil開發(fā)工具
搜索Keil官網(wǎng),進(jìn)入Keil官網(wǎng)網(wǎng)站,在Keil官網(wǎng)我們主要下載MDK-Arm和C51兩個安裝包,C51用于51系列單片機(jī)開發(fā),MDK-Arm用于ARM指令架構(gòu)的系列單片機(jī)開發(fā)。
分別下載C51和MDK-Arm到本地,先安裝C51開發(fā)工具,C51安裝完成后,再安裝MDK-Arm(安裝路徑選擇C51的安裝路徑)。
安裝STC51系列單片機(jī)仿真包
Keil安裝完成后,并不支持STC51系列單片機(jī)的仿真調(diào)試,需要單獨(dú)安裝STC51系列單片機(jī)仿真包。進(jìn)入STC(宏晶科技)官網(wǎng),下載STC-ISP安裝包,STC-ISP是宏晶公司提供的單片機(jī)下載燒錄軟件,是針對STC系列單片機(jī)而設(shè)計的,可下載程序到STC89、12C2052和12C5410等系列的STC單片機(jī)ROM內(nèi)。
下載后解壓縮包,運(yùn)行stc-isp程序,選擇“Keil仿真設(shè)置”標(biāo)簽頁,單擊“添加STC仿真器驅(qū)動到Keil中”按鈕,在彈出的目錄選擇對話框選擇keil的安裝目錄,單擊確定即可完成STC仿真器驅(qū)動。
第一個單片機(jī)實(shí)驗(yàn)
實(shí)驗(yàn)?zāi)康?/strong>
使用keil創(chuàng)建單片機(jī)開發(fā)項(xiàng)目,添加C文件到項(xiàng)目,編寫C代碼控制單片機(jī)I/O口輸出低電平,掌握代碼的仿真調(diào)試,查看單片機(jī)I/O電平變化。
實(shí)驗(yàn)相關(guān)知識
TTL電平
實(shí)驗(yàn)用單片機(jī)為STC89C52RC,實(shí)驗(yàn)涉及到單片機(jī)I/O口的TTL電平檢測。TTL電平信號規(guī)定+5V等價于邏輯“1”,0V等價于邏輯“0”,使用Keil進(jìn)行仿真調(diào)試時,若I/O口某位輸出“0”,則為低電平,輸出“1”則為高電平。
單片機(jī)I/O口
單片機(jī)I/O口用于單片機(jī)與外部設(shè)備的連接并控制外部設(shè)備。STC89C52RC有4個8位的雙向I/O口,即可用于外部設(shè)備輸入數(shù)據(jù)到單片機(jī),也可以用于單片機(jī)向外部設(shè)備輸出數(shù)據(jù)或控制指令。
上圖的P0、P1、P2、P3為單片機(jī)的I/O口,每個I/O可以進(jìn)行位控制,按位進(jìn)行操作,每個位的初始邏輯狀態(tài)為1(高電平),使用程序可以改變每個I/O為的邏輯狀態(tài),從而控制對應(yīng)的外部設(shè)備。例如通過程序?qū)1.0位置為0(低電平)。
實(shí)驗(yàn)過程
創(chuàng)建單片機(jī)開發(fā)項(xiàng)目
啟動keil開發(fā)工具,展開“Project”菜單,選擇“New μVision Project ……”命令,在彈出的“Create New Project”對話框內(nèi),選擇項(xiàng)目保存位置,輸入項(xiàng)目名稱。
在彈出的“Select Device for target”對話框內(nèi),選擇列表框內(nèi)的“STC MCU Database”項(xiàng),在單片機(jī)類型列表框內(nèi)選擇“STC89C52RC”單片機(jī),然后單擊“OK”按鈕。
添加C文件到項(xiàng)目
單片機(jī)項(xiàng)目創(chuàng)建成功后,需要添加C文件到項(xiàng)目,項(xiàng)目工作窗口如下圖所示。
選擇項(xiàng)目文件窗口“Source Group 1”節(jié)點(diǎn),單擊鼠標(biāo)右鍵,在彈出的菜單中選擇“ADD New Item to Group ‘Source Group 1’……”命令,如下圖所示。
在彈出的“Add New Item to Group ‘Source Group 1’”對話框內(nèi),在文件類型列表框選擇C文件類型,在Name輸入域輸入C文件名稱,這里輸入的是“controllio.c”,輸入完成后,單擊“Add”按鈕。如下圖所示。
C文件“controllio.c”已添加到項(xiàng)目節(jié)點(diǎn)“Source Group 1”節(jié)。
在“controllio.c”編輯窗口,輸入下面的C代碼:
#include
sbit led1 = P1^0;
void main()
{
led1=0;
}
reg51.h是通用80C51和80C31單片機(jī)的頭文件。頭文件有兩個keil定義的關(guān)鍵字sbit和sfr,sbit用來定義位變量,sfr用來定義地址變量。
sbit的用法:
sbit X = A^n
其中X是位變量,A是一個可進(jìn)行位尋址的變量,n表示變量A的第n位,注意這里的^不是C語言的異或操作符,是keil定義的一個特殊符號,用于確定可進(jìn)行位尋址變量的第幾位。例如代碼:
sbit led1 = P1^0;
sbit定義了led1變量,該變量指向P1口的第0位,若執(zhí)行語句led1=0; 則P1口的第0位被置為低電平。
sfr的用法:
sfr X = 0x80
其中X是地址變量,0x80是一個地址。例如代碼:
sfr P0 = 0x80;
sfr定義了P0變量,該變量指向0x80地址,該地址為單片機(jī)P0口的地址。
C程序仿真調(diào)試
Keil提供了仿真調(diào)試功能,即使在沒有單片機(jī)硬件的情況下,我們也可以判斷C程序在單片機(jī)內(nèi)是否運(yùn)行正常,并跟蹤和調(diào)試C程序完整的執(zhí)行過程。
設(shè)置仿真
在進(jìn)行仿真調(diào)試之前,需要查看Keil是否已設(shè)置了仿真調(diào)試,展開Project菜單,選擇“Options for Targets”命令,在彈出的對話框中,選擇“Debug”標(biāo)簽頁,確定“Use Simulator”被選中。
仿真調(diào)試過程
展開“Debug”菜單,選擇“Insert/Remove Breakpoint”命令,或者用鼠標(biāo)雙擊語句左側(cè)的灰色區(qū)域設(shè)置斷點(diǎn),如下圖所示。
展開“Debug”菜單,選擇“Start/Stop Debug Session”命令,或按下Ctrl+F5鍵,或單擊工具條上的啟動調(diào)試圖標(biāo),都可以啟動程序的仿真調(diào)試。
程序啟動后,執(zhí)行到斷點(diǎn)后暫停運(yùn)行,仿真調(diào)試窗口如下圖所示。
通過寄存器窗口可以查看程序執(zhí)行過程中寄存器狀態(tài)的變化,關(guān)于單片機(jī)的寄存器,在后面的實(shí)驗(yàn)中會陸續(xù)講解。匯編指令窗口顯示了程序編譯后的匯編指令,通過該窗口可以查看匯編指令。在代碼窗口可以查看代碼,也可以繼續(xù)執(zhí)行程序,或單步執(zhí)行,或執(zhí)行代碼行,或執(zhí)行到光標(biāo)所在行。
本實(shí)驗(yàn)重點(diǎn)查看仿真單片機(jī)的I/O口狀態(tài),展開“peripherals”菜單,選擇“I/O-Ports”菜單項(xiàng),再彈出的子菜單中選擇“Port 1”項(xiàng)。
Keil彈出P1口狀態(tài)對話框,如下圖所示。
從圖中可以看到,當(dāng)前P1口0~7位邏輯狀態(tài)都為1,繼續(xù)執(zhí)行程序,再次查看P1口狀態(tài)。
P1口第0位的邏輯狀態(tài)已經(jīng)發(fā)生了變化,其邏輯狀態(tài)為0。
實(shí)驗(yàn)小結(jié)
通過這次實(shí)驗(yàn),掌握了Keil編寫單片機(jī)程序的過程,以及如何仿真調(diào)試單片機(jī)程序。實(shí)際上,在沒有硬件單片機(jī)的情況下,應(yīng)用Keil仿真調(diào)試工具,完全可以監(jiān)控程序在仿真單片機(jī)中的運(yùn)行狀態(tài)。
本次實(shí)驗(yàn)主要完成單片機(jī)I/O口單個位的控制。下次實(shí)驗(yàn)應(yīng)用EDA仿真工具proteus,設(shè)計單片機(jī)第一個應(yīng)用,使用單片機(jī)I/O口控制發(fā)光二極管。
-
單片機(jī)
+關(guān)注
關(guān)注
6030文章
44489瀏覽量
631960 -
嵌入式
+關(guān)注
關(guān)注
5059文章
18973瀏覽量
302006 -
C語言
+關(guān)注
關(guān)注
180文章
7594瀏覽量
135850 -
keil
+關(guān)注
關(guān)注
68文章
1210瀏覽量
166575 -
開發(fā)環(huán)境
+關(guān)注
關(guān)注
1文章
218瀏覽量
16567
發(fā)布評論請先 登錄
相關(guān)推薦
評論