大家好,很高興和各位一起分享我第 44 篇原創(chuàng)文章,喜歡和支持我的工程師,一定記得給我點贊、收藏、分享喲。
加微信【jiyuyun18】與作者溝通交流。
作為國貨之光,STC 單片機以其價格便宜、內(nèi)置接口多等特性在一些大廠不屑一顧的角落茁壯成長。今天我們來學(xué)習(xí)一下基于 Keil C51 的開發(fā)環(huán)境搭建,然后編寫一個簡單的閃燈程序。
先對一些術(shù)語去魅:
- Microcontroller Unit(MCU)微控制器單元,又稱單片機(Single-chip Microcomputer)。
- Integrate Development Environment(IDE)集成開發(fā)環(huán)境,一種集成了代碼編輯器、編譯器、鏈接器等的開發(fā)工具。
- In System Programming(ISP)在系統(tǒng)可編程,一種在不移除的前提下燒錄程序到已經(jīng)焊接在電路板上的 MCU 的方法。
- In Circuit Serial Programming(ICSP)串口在系統(tǒng)可編程,ISP 的一種。
燒錄軟件
我們使用 STC-ISP 作為燒錄軟件。
STC-ISP 下載地址如下:http://www.stcmicro.com/rjxz.html 。STC-ISP 我沒有從 STC 官網(wǎng)下載,那個網(wǎng)站實在是太那個啥了,一言難盡。我選擇的是 v6.86E 版本,最新的版本我的瀏覽器不讓下,說是有毒,官網(wǎng)也是如此。
下載解壓完后,不用安裝,直接運行,界面如下:
界面非常的樸實無華,正好是酷炫吊炸天的反面。
STC-ISP 這個軟件除了燒錄程序,還有它用,等會兒我們再說。
Keil 軟件
IDE 我們使用 Keil C51, 下載地址如下:https://www.keil.com/demo/eval/c51.htm
下載 Keil 的時候,Keil 網(wǎng)站可能會要求你填入姓名、電子郵件等信息,不愿意填的話可以胡編點填上。這點,STC 的官網(wǎng)比國外芯片商的官網(wǎng)好,下載軟件時不用填入姓名電話等信息。
下載完了 不用破解,評估版本一樣用,就是會對編譯后的文件的大小做限制,不能超過一定的大小。學(xué)習(xí)用的話,可以先用著,等到代碼超限了后再破解。破解的時候得需要讓你關(guān)閉殺毒軟件,還得管理員權(quán)限運行,風(fēng)險相當(dāng)高。如果你不怕這些風(fēng)險,破解了,保存破解后生成的那個 .LIC 文件,以后同一臺機器就不用再次破解了。
帝國主義的軟件一向是不把我們中國人造的小小單片機看在眼里的,在 Keil 軟件中新建工程默認(rèn)是沒有 STC 單片機的:
這時候就輪到我們前面的 STC-ISP 這個軟件出馬了。非精簡版的 STC-ISP 軟件有一個功能 Keil 仿真設(shè)置:
點那個 添加型號和頭文件到Keil中 按鈕,然后選擇 Keil 的安裝目錄點擊確定按鈕就可以了。我的安裝目錄如下:
剛才那個添加型號和頭文件到 Keil 中主要是替我們干了下面兩件事:
- 添加 stc.cdb 文件到 Keil 安裝目錄中。
- 我的安裝目錄是“D:\Keil_v5\UV4”, 你的可能是“C:\Keil_v5\UV4” 或者其他目錄,你可以進(jìn)去看下。
- 更改 TOOLS.INI 文件。
- 更改 “D:\Keil_v5” 目錄下的 TOOLS.INI 文件:
在 TOOLS.INI 文件中添加如下內(nèi)容“CDB0=UV4\STC.CDB ("STC MCU Database")”:
閃燈程序
新建工程
現(xiàn)在,在 Keil 中新建工程,點擊 Device 就可以愉快地選擇 STC MCU 了:
在電腦上找個地方新建一個文件夾 blink-demo, 你也可以起個其他的名字。然后在 Keil 里依次點擊菜單 Project-> new uVision Project 新建工程, 新建工程時選擇我們剛才新建的 blink-demo 文件夾作為工程目錄:
我的單片機型號是 STC15W408AS ,你可以根據(jù)你的單片機型號做相應(yīng)選擇:
新建工程時,如果問你是否復(fù)制,你選是:
新建工程后,Project 窗口中內(nèi)容如下:
把 Target 1 改為我們工程的名字 blink-demo。
把 SourceGroup 1 改為 Source。
如果你不知道咋改名,選中目標(biāo),點一下鍵盤上的 F2 就可以改名了。
改名后 Project 窗口內(nèi)容如下:
你也可以不改名,一樣編譯沒問題。但我習(xí)慣改,這樣看著舒心一些。
生成頭文件
下面添加工程所需頭文件。
在 STC-ISP 軟件中,打開 頭文件 選項卡,在單片機 系列下拉列表中選擇你的單片機型號,點擊 保存文件 按鈕將頭文件保存到工程目錄中,頭文件的名字可以命名為 STC89xxx.h 或者任何其他你喜歡的名字:
工程基本設(shè)置
在工程屬性中做如下設(shè)置。
將系統(tǒng)頻率設(shè)置為 12MHz, 你也可以設(shè)置成其他的,我的單片機最高可以支持到35MHz, 但對于小項目來說,一般 12MHz 就夠用了:
在 Output 選項中勾選 Hex文件,讓系統(tǒng)編譯后生成 .hex 文件:
設(shè)置頭文件路徑。在 C51 選項卡中點擊 ... 按鈕,選中頭文件所在目錄,此處,我們選擇工程所在目錄。
添加 main.c 文件
在 Project 窗口 的 Source 文件夾上點一下鼠標(biāo)右鍵選擇 Add New item to Group ‘Source' :
給文件起名為 main.c:
新建完成后 Project 窗口 內(nèi)容如下:
生成延時函數(shù)
閃燈程序需要一個延時函數(shù),可以讓 STC-ISP 這個軟件給我們生成。
填入相應(yīng)的參數(shù),點擊 生成C代碼 即可生成延時函數(shù):
這里我想要的延時時間為 500ms。系統(tǒng)頻率要與前面的設(shè)置的頻率一致。
將生成的延時函數(shù)復(fù)制到 main.c 中:
void Delay500ms() //@12MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 23;
j = 205;
k = 120;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
完整的閃燈程序
完整的 main.c 代碼如下:
#include <intrins.h> // fix _nop_() error
#include "STC89xxx.h"
void Delay500ms(); //@12MHz
void main(void)
{
while(1)
{
P1 = 0xFF;
Delay500ms();
P1 = 0x00;
Delay500ms();
}
}
void Delay500ms() //@12MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 23;
j = 205;
k = 120;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
其中頭文件“intrins.h” 用于包含延時函數(shù)中的 _nop()__ 函數(shù),不加的話會出現(xiàn)編譯錯誤。
點擊工具欄中的 Build 按鈕或者按一下鍵盤上的 F7 鍵開始編譯。編譯結(jié)果如下:
零錯誤、零警告,Perfect!
燒錄程序
接下來,我們使用 STC-ISP 這個軟件將我們辛苦編譯出來的程序燒寫到單片機中。
STC 單片機支持串口在線可編程(ICSP),可以通過串口燒錄程序。電腦中插入一個 USB 轉(zhuǎn)串口適配器。電腦中會多出一個串口。在 STC-ISP 中選擇這個串口:
點擊 打開程序文件 選擇工程目錄下 Objects 文件夾中的 blink-demo.hex 文件作為燒錄文件:
內(nèi)部晶振頻率還是選擇 12MHz。
設(shè)置是否使用復(fù)位引腳,這里選擇使用,因此去掉了 復(fù)位腳作I/O口 的勾選。
下載的時候,需要手動復(fù)位或重啟單片機。否則會一直顯示 正在檢測目標(biāo)單片機:
總結(jié)
今天我們學(xué)習(xí)了基于Keil C51 的 STC 單片機開發(fā)環(huán)境搭建。
主要知識點如下:
- 如何向 Keil 軟件中添加 STC 單片機
- 如何生成給定型號單片機的頭文件
- 如何生成延時函數(shù)
各軟件下載地址如下:
Keil C51: https://www.keil.com/demo/eval/c51.htm
STC-ISP: http://www.stcmicro.com/rjxz.html