1.keil軟件的介紹和安裝
1.1晃酒、IDE概念
(1)IDE就是集成開發(fā)環(huán)境,就是一套用來開發(fā)的完整軟件系統(tǒng)
(2)keil是美國keil Software出的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng)娩井。包括C編譯器算芯、宏匯編努咐、鏈接器嫂侍、庫管理、仿真測試
1.2漏设、keil uvision
(1)發(fā)展
(2)版本:1.2墨闲、1.3、1.4√(keil 4)郑口、1.5
(3)安裝包:https://pan.baidu.com/s/1shbyJBNnclmNoV3d-p0xNw 提取碼:aosw
1.3鸳碧、安裝和破解
win7版本以上的系統(tǒng)要用管理員身份運(yùn)行keil軟件和注冊(cè)機(jī)
破解:把注冊(cè)機(jī)打開盾鳞,在keil軟件的文件,license management賦值CID到注冊(cè)機(jī)上生成序列碼在復(fù)制到keil軟件杆兵。這種有注冊(cè)機(jī)的破解方式是公司為了更多人使用這個(gè)軟件而采取的一種方式雁仲。
1.4、keil和MDK
(1)本來只能用來開發(fā)51單片機(jī)琐脏,叫keil
(2)后來ARM公司受夠了keil軟件,基于keil擴(kuò)展了ARM的開發(fā)缸兔,主要用來開發(fā)ARM Cortex-M系列的單片機(jī)的程序(STM32)日裙,軟件名改成了MDK。
(3)上面keil 4的C51惰蜜,只能用來開發(fā)51單片機(jī)程序。如果要開發(fā)ARM Cortex-M系列的單片機(jī)還要擴(kuò)展安裝MDK安裝包抛猖。
2.keil的基本使用演示
2.1格侯、使用keil打開已有工程項(xiàng)目
(1)IDE(keil)來開發(fā)軟件,需要首先創(chuàng)建一個(gè)工程項(xiàng)目(project)财著,keil軟件需要一些工程項(xiàng)目文件來管理項(xiàng)目中的代碼联四。
(2)別人事先創(chuàng)建好的工程項(xiàng)目,我們可以使用直接打開撑教。打開的方式有2個(gè):
①進(jìn)入項(xiàng)目中雙擊(項(xiàng)目名.uvproj)項(xiàng)目文件打開
②keil軟件→project→open project→找到要打開的uvproj朝墩。(后綴名uv開頭的文件都是工程文件,軟件自動(dòng)生成)
2.2伟姐、編譯工程
(1)工程項(xiàng)目中有很多文件收苏,分3類:工程文件、源文件愤兵、目標(biāo)文件
①工程文件:就是keil軟件工作需要的文件鹿霸,后綴名由uv開頭,和我們寫程序無關(guān)秆乳;
②源文件:我們寫的源代碼懦鼠,就是我們變成編出來的;
③目標(biāo)文件:就是keil中的編譯器等工具把我們?cè)次募幾g后生成的文件矫夷,最終向單片機(jī)燒錄時(shí)需要目標(biāo)文件來燒錄進(jìn)去葛闷。
(2)我們工程剛創(chuàng)建好(空工程)時(shí)只有工程文件,此時(shí)我們要去編寫添加源代碼双藕,代碼寫好后就有了工程文件和源文件淑趾,此時(shí)編譯操作就可以得到目標(biāo)文件。
(3)編譯的時(shí)候可能會(huì)報(bào)錯(cuò)(errors)和報(bào)警告(warmings)忧陪,報(bào)錯(cuò)則排除錯(cuò)誤重新編譯扣泊,警告則可以適當(dāng)忽略近范。
(4)建議編譯時(shí)按rebuild按鈕。
2.3延蟹、keil中建立新工程
(1)建立新工程前建議先關(guān)閉之前的工程
(2)菜單欄:Project→new uVision Project评矩,選擇一個(gè)合適的目錄用來保存將來的工程項(xiàng)目,并輸入一個(gè)項(xiàng)目名阱飘。
(3)選CPU斥杜,選Atmel→AT89C51(無STC89C51)但兼容。點(diǎn)擊OK沥匈,彈出來選擇“是否添加標(biāo)準(zhǔn)的8051的起始代碼”蔗喂,選擇是,確定高帖。
(4)現(xiàn)在可以自己寫代碼缰儿,或者直接復(fù)制一個(gè)已經(jīng)寫好的代碼文件進(jìn)來,并且添加到我們的工程項(xiàng)目中(右鍵項(xiàng)目工程散址,add Source file)乖阵,編譯预麸。
(5)編譯完成后,發(fā)現(xiàn)一個(gè)問題:沒有可以用來燒錄的.hex文件师崎。編譯時(shí)生成的文件有很多,但是只有.hex文件是我們需要的齐蔽,其他很多是中間文件含滴。
(6)解決方案是再多配置一項(xiàng)配置丐巫,打開快速菜單欄中的“Target Options”,在彈出的多選框里碑韵,點(diǎn)擊output菜單祝闻,點(diǎn)選下面的create HEX file,然后關(guān)閉菜單联喘,重新rebuild。
3.C語言基本介紹
3.1叭喜、匯編語言與C語言
(1)匯編語言編程比C語言難
(2)用匯編或者C語言都能完成任務(wù)蓖谢,寫出程序
(3)推薦路線:先用C語言入門學(xué)會(huì)單片機(jī)闪幽,然后去擴(kuò)展學(xué)習(xí)匯編。
3.2、標(biāo)準(zhǔn)C語言和keil C51的C語言
(1)C語言并不是專門為51單片機(jī)發(fā)明的腊嗡,C語言的用途是很廣的拾酝。
(2)標(biāo)準(zhǔn)C語言就是獨(dú)立于各種應(yīng)用領(lǐng)域稱為標(biāo)準(zhǔn)C語言,和各種平臺(tái)的具體的C語言有微小差異客们。
4.C語言基本概念
關(guān)鍵字底挫、函數(shù)脸侥、變量、頭文件官边、源文件注簿、可執(zhí)行程序诡渴、注釋
5.整體流程梳理
5.1、程序開發(fā)過程
(1)源代碼編寫
(2)編譯生成可執(zhí)行程序
(3)燒錄
5.2玩徊、單片機(jī)工作流程
(1)單片機(jī)上電
(2)時(shí)鐘模塊起振恩袱,CPu有了時(shí)鐘節(jié)拍,單片機(jī)內(nèi)部各模塊開始工作
(3)CPU從ROM中逐條讀取可執(zhí)行程序指令來執(zhí)行潭辈,RAM存儲(chǔ)變量(對(duì)應(yīng)C語言程序中定義的變量)把敢,配合程序執(zhí)行谅辣。直到關(guān)機(jī)桑阶。
5.3蚣录、程序是調(diào)出來的(邏輯思維很重要)
(1)程序不可能一次寫好達(dá)到要求
(2)先解決編譯時(shí)錯(cuò)誤
(3)在解決運(yùn)行時(shí)問題
6.跟著數(shù)據(jù)手冊(cè)學(xué)單片機(jī)
6.1、STC90C51介紹
(1)12T荔泳、6T和1T的問題:典型的51單片機(jī)都是12T的玛歌,12T的意思就是51單片機(jī)加內(nèi)部會(huì)對(duì)外部時(shí)鐘頻率進(jìn)行12分頻后再給CPU(如果外部晶振是12MHZ,則外部時(shí)鐘頻率就是112MHZ沾鳄,內(nèi)部CPU主頻就是12MHZ/12=1MHZ)译荞,6T的含義就是CPU時(shí)鐘頻率=外部時(shí)鐘頻率/6休弃,1T的含義就是CPU時(shí)鐘頻率=外部時(shí)鐘頻率/1,。所以1T單片機(jī)是最快的篙骡。
6.2糯俗、STC90C51內(nèi)部結(jié)構(gòu)框圖
(1)總線,單片機(jī)內(nèi)部模塊與模塊之間的通信線
(2)模塊杖玲,單片機(jī)內(nèi)部各自獨(dú)立具有一定功能的單元
(3)要求:能看到懂圖例摆马,知道圖中分別表示的是什么鸿吆。當(dāng)我們對(duì)CPU內(nèi)部元件模塊理解很少的時(shí)候惩淳,其實(shí)從框圖看不出什么思犁。框圖中實(shí)際上傳達(dá)了很多信息,將來回顧的時(shí)候能看懂就行托呕。
6.3项郊、單片機(jī)管腳圖
(1)DIP封裝和SMD封裝
(2)引腳編號(hào)和名字
每一個(gè)引腳都有個(gè)編號(hào)斟赚,這個(gè)編號(hào)主要看文檔時(shí)文檔里用來描述這個(gè)引腳的作用時(shí)做標(biāo)記用的拗军,跟編程是無關(guān)的发侵。所以一般引腳編號(hào)并不重要刃鳄。每一個(gè)引腳除了編號(hào)外還有名字,這個(gè)引腳的名字比較重要挪鹏。(如p01讨盒、p02這些就是CPU延伸出來的引腳)因?yàn)檫@些引腳名字和我們將來在編程中控制這個(gè)引腳時(shí)的名字是一樣的,所以引腳名字和編程有關(guān)肮蛹。
6.4伦忠、關(guān)于仿真器和ISP
(1)仿真器稿辙。早期開發(fā)單片機(jī)軟件時(shí)的輔助設(shè)備邻储。早期的單片機(jī)很多只能燒錄一次赋咽,或者不提供調(diào)試功能脓匿,軟件開發(fā)難度很大陪毡。后來單片機(jī)廠商就專門發(fā)明了一個(gè)設(shè)備叫仿真器毡琉,仿真器能夠仿真出單片機(jī)的效果桅滋,可以用來調(diào)試程序丐谋。所以那時(shí)候買了單片機(jī)之后還要買仿真器笋鄙,用仿真器來開發(fā)萧落,好了后燒錄到單片機(jī)中運(yùn)行践美。
(2)缺陷:
①一個(gè)仿真器對(duì)應(yīng)1個(gè)單片機(jī)型號(hào)
②仿真器很貴
(3)因?yàn)榉抡嫫骱苜F,所以有些公司開發(fā)出了軟件仿真器找岖,叫做軟仿真陨倡。比如keil中就自帶了軟件仿真功能。
(4)后來仿真器被放棄了许布,升級(jí)成了調(diào)試器兴革。調(diào)試器的思路是:程序開發(fā)還是在單片機(jī)中,只不過我們用一個(gè)專用的調(diào)試器可以在單片機(jī)中直接完成仿真蜜唾。典型的調(diào)試器如Jlink調(diào)試器比仿真器來說更加便宜杂曲,所以是更好的解決辦法。現(xiàn)在的單片機(jī)都支持調(diào)試器方案袁余。
(5)有時(shí)候開發(fā)程序并不使用調(diào)試器進(jìn)行單步調(diào)試擎勘,而是直接開發(fā)了程序后通過串口將程序下載到單片機(jī)中去運(yùn)行,然后根據(jù)運(yùn)行現(xiàn)象來直接判斷定位問題颖榜,然后解決問題,最后完成程序軟件開發(fā)欣硼。這種方式下不需要專用的硬件仿真器和調(diào)試器存淫,有時(shí)候會(huì)配合使用軟件仿真功能岩饼。還可以配合使用串口打印或者LED燈的指示等方式來進(jìn)行調(diào)試。
(6)總結(jié):3和4是我們現(xiàn)在開發(fā)軟件的主流方法。相對(duì)來說俭茧,沒經(jīng)驗(yàn)的人更喜歡3(有經(jīng)驗(yàn)的喜歡4)毡们;越往后(單片機(jī)到嵌入式到物聯(lián)網(wǎng))3用的越少,4用的越多。51單片機(jī)階段軟件仿真結(jié)合ISP下載方式來調(diào)試程序,STM32學(xué)習(xí)階段是調(diào)試器和ISP下載兩種方式結(jié)合,到了嵌入式階段就又返回到4的方式,以后都不會(huì)再用Jlink等調(diào)試器了庄敛。
6.4头滔、選型表瀏覽
6.5、單片機(jī)最小系統(tǒng)介紹
(1)單片機(jī)最小系統(tǒng)倾芝,就是指的單片機(jī)加上最少的外圍電路,然后還可以工作。
(2)最小系統(tǒng)中有3部分電路:供電電路、上電復(fù)位電路、晶振電路。
6.6疼邀、管腳定義
(1)電源等管腳拐袜、單片機(jī)上面有一些管腳是用來支持單片機(jī)工作的甜攀,比如VCC和GND啡捶、RST等,這些引腳和編程無關(guān),程序也無法操控這些引腳袄秩。這些引腳軟件工程師不用管背稼,硬件工程師很在意俯树。
(2)IO端口聘萨。IO端口是單片機(jī)和外部電路進(jìn)行交互的窗口,外部電路通過IO向單片機(jī)內(nèi)部輸入(input)信息狸页,單片機(jī)通過IO端口向外部輸出(output)信息址遇。單片機(jī)中大部分的引腳都是IO(p開頭的引腳都是IO)倔约,將來單片機(jī)內(nèi)部的程序運(yùn)行就會(huì)通過操作這些IO來和外部電路交互钾军,從而實(shí)現(xiàn)程序目的。
(3)管腳復(fù)用唇礁。普通引腳時(shí)一個(gè)引腳只有一個(gè)名字,一種作用漠另;有些引腳有2個(gè)名字(比如P3.0/RxD)性湿,這種引腳就有2中作用(意思不是說這個(gè)引腳同時(shí)做2件事情,而是說這個(gè)引腳在不同的時(shí)候可以工作在不同的2中模式下)满败,可以通過軟件編程讓這個(gè)引腳在某個(gè)時(shí)候工作在某種模式下肤频。一個(gè)引腳的2種模式之間沒有關(guān)聯(lián),配置在A模式下則和B模式下一點(diǎn)關(guān)系都沒有算墨。為什么要管腳復(fù)用宵荒?純粹是為了省引腳。
7.二進(jìn)制和IO端口
7.1、二進(jìn)制和bit位
7.2骇扇、位(bit,b)和字節(jié)(byte面粮,B)
1字節(jié) = 8位
7.3少孝、初始IO
(1)什么是IO,單片機(jī)的IO物理上表現(xiàn)為單片機(jī)的引腳熬苍。
(2)IO對(duì)單片機(jī)的重要意義稍走。
(3)單片機(jī)有多少IO。
(4)IO的組織形式柴底。首先一個(gè)單片機(jī)的眾多IO分為多個(gè)端口(port)婿脸,一個(gè)端口由若干個(gè)IO引腳(很多時(shí)候都是8個(gè))組成”ぃ可以理解為一個(gè)端口就是一組IO引腳狐树。
(5)如何編程控制IO。