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