歡迎大家來到C語言單片機(jī)編程課堂。前面一課我們了解了單片機(jī)編程與嵌入式開發(fā)內(nèi)容,這節(jié)課我們來學(xué)習(xí)單片機(jī)開發(fā)環(huán)境Keil,并使用keil完成單片機(jī)編程第一個實驗任務(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é)果。硬件仿真可以接入外部仿真器仿真實際運(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)試,需要單獨安裝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ī)實驗
實驗?zāi)康?/strong>
使用keil創(chuàng)建單片機(jī)開發(fā)項目,添加C文件到項目,編寫C代碼控制單片機(jī)I/O口輸出低電平,掌握代碼的仿真調(diào)試,查看單片機(jī)I/O電平變化。
實驗相關(guān)知識
TTL電平
實驗用單片機(jī)為STC89C52RC,實驗涉及到單片機(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(低電平)。
實驗過程
創(chuàng)建單片機(jī)開發(fā)項目
啟動keil開發(fā)工具,展開“Project”菜單,選擇“New μVision Project ……”命令,在彈出的“Create New Project”對話框內(nèi),選擇項目保存位置,輸入項目名稱。
在彈出的“Select Device for target”對話框內(nèi),選擇列表框內(nèi)的“STC MCU Database”項,在單片機(jī)類型列表框內(nèi)選擇“STC89C52RC”單片機(jī),然后單擊“OK”按鈕。
添加C文件到項目
單片機(jī)項目創(chuàng)建成功后,需要添加C文件到項目,項目工作窗口如下圖所示。
選擇項目文件窗口“Source Group 1”節(jié)點,單擊鼠標(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”已添加到項目節(jié)點“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è)置斷點,如下圖所示。
展開“Debug”菜單,選擇“Start/Stop Debug Session”命令,或按下Ctrl+F5鍵,或單擊工具條上的啟動調(diào)試圖標(biāo),都可以啟動程序的仿真調(diào)試。
程序啟動后,執(zhí)行到斷點后暫停運(yùn)行,仿真調(diào)試窗口如下圖所示。
通過寄存器窗口可以查看程序執(zhí)行過程中寄存器狀態(tài)的變化,關(guān)于單片機(jī)的寄存器,在后面的實驗中會陸續(xù)講解。匯編指令窗口顯示了程序編譯后的匯編指令,通過該窗口可以查看匯編指令。在代碼窗口可以查看代碼,也可以繼續(xù)執(zhí)行程序,或單步執(zhí)行,或執(zhí)行代碼行,或執(zhí)行到光標(biāo)所在行。
本實驗重點查看仿真單片機(jī)的I/O口狀態(tài),展開“peripherals”菜單,選擇“I/O-Ports”菜單項,再彈出的子菜單中選擇“Port 1”項。
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。
實驗小結(jié)
通過這次實驗,掌握了Keil編寫單片機(jī)程序的過程,以及如何仿真調(diào)試單片機(jī)程序。實際上,在沒有硬件單片機(jī)的情況下,應(yīng)用Keil仿真調(diào)試工具,完全可以監(jiān)控程序在仿真單片機(jī)中的運(yùn)行狀態(tài)。
本次實驗主要完成單片機(jī)I/O口單個位的控制。下次實驗應(yīng)用EDA仿真工具proteus,設(shè)計單片機(jī)第一個應(yīng)用,使用單片機(jī)I/O口控制發(fā)光二極管。
-
單片機(jī)
+關(guān)注
關(guān)注
6037文章
44558瀏覽量
635298 -
嵌入式
+關(guān)注
關(guān)注
5082文章
19126瀏覽量
305197 -
C語言
+關(guān)注
關(guān)注
180文章
7604瀏覽量
136824 -
keil
+關(guān)注
關(guān)注
68文章
1213瀏覽量
166876 -
開發(fā)環(huán)境
+關(guān)注
關(guān)注
1文章
225瀏覽量
16617
發(fā)布評論請先 登錄
相關(guān)推薦
如何在Linux環(huán)境下搭建51單片機(jī)的開發(fā)燒寫環(huán)境
![如何在Linux<b class='flag-5'>環(huán)境</b>下<b class='flag-5'>搭建</b>51<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>開發(fā)</b>燒寫<b class='flag-5'>環(huán)境</b>](https://file.elecfans.com/web1/M00/A3/B4/pIYBAF1VC4mAISYKAAKGhSHvY3c470.png)
STM32單片機(jī)如何進(jìn)行開發(fā)環(huán)境的搭建
![STM32<b class='flag-5'>單片機(jī)</b>如何進(jìn)行<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>的<b class='flag-5'>搭建</b>](https://file.elecfans.com/web1/M00/93/BF/pIYBAFzsr3CATtubAANiale0zls513.png)
C51單片機(jī)學(xué)習(xí)筆記(一)——搭建開發(fā)環(huán)境及燒寫工具
![C51<b class='flag-5'>單片機(jī)</b>學(xué)習(xí)筆記(一)——<b class='flag-5'>搭建</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>及燒寫工具](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
VSCode搭建STM32單片機(jī)開發(fā)環(huán)境
![VSCode<b class='flag-5'>搭建</b>STM32<b class='flag-5'>單片機(jī)</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
單片機(jī)優(yōu)雅的開發(fā)Clion環(huán)境搭建
![<b class='flag-5'>單片機(jī)</b>優(yōu)雅的<b class='flag-5'>開發(fā)</b>Clion<b class='flag-5'>環(huán)境</b><b class='flag-5'>搭建</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
入門51單片機(jī)(一):開發(fā)環(huán)境的搭建
![入門51<b class='flag-5'>單片機(jī)</b>(一):<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>的<b class='flag-5'>搭建</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
GD32單片機(jī)開發(fā)環(huán)境搭建(Keil5安裝)
![GD32<b class='flag-5'>單片機(jī)</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b><b class='flag-5'>搭建</b>(<b class='flag-5'>Keil</b>5安裝)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
單片機(jī)集成開發(fā)環(huán)境Keil5的使用
![<b class='flag-5'>單片機(jī)</b>集成<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b><b class='flag-5'>Keil</b>5的使用](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
"【51單片機(jī)授課筆記】(0)開發(fā)環(huán)境搭建,Keil的下載,安裝與授權(quán),固件燒錄方法(史上最詳細(xì),win10系統(tǒng)
!["【51<b class='flag-5'>單片機(jī)</b>授課筆記】(0)<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b><b class='flag-5'>搭建</b>,<b class='flag-5'>Keil</b>的下載,安裝與授權(quán),固件燒錄方法(史上最詳細(xì),win10系統(tǒng)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
合泰單片機(jī)HT32之keil5開發(fā)環(huán)境搭建(一)
![合泰<b class='flag-5'>單片機(jī)</b>HT32之<b class='flag-5'>keil</b>5<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b><b class='flag-5'>搭建</b>(一)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論