版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
項(xiàng)目1流水燈設(shè)計(jì)1.1項(xiàng)目要求
1.2理論知識
1.3項(xiàng)目分析及實(shí)施
1.4項(xiàng)目拓展
1.5項(xiàng)目總結(jié)習(xí)題
1.1項(xiàng)目要求
本項(xiàng)目通過單片機(jī)控制8只并排的發(fā)光二極管,使其能有序的點(diǎn)亮與熄滅,呈現(xiàn)流水燈的效果。
項(xiàng)目重難點(diǎn):
(1)51單片機(jī)的內(nèi)部結(jié)構(gòu);
(2)51單片機(jī)引腳功能;
(3)51單片機(jī)最小系統(tǒng)硬件電路;
(4)51單片機(jī)與LED燈的接口設(shè)計(jì)。
技能培養(yǎng):
(1)熟練掌握Proteus軟件的應(yīng)用;
(2)熟練掌握KeilC51軟件的應(yīng)用;
(3)能夠進(jìn)行51單片機(jī)與LED燈接口電路的分析與設(shè)計(jì),并能熟練編寫簡單的單片機(jī)程序;
(4)掌握51單片機(jī)程序下載的過程。
1.2理論知識
1.2.1
MCS-51單片機(jī)的結(jié)構(gòu)
1.MCS-51單片機(jī)的內(nèi)部結(jié)構(gòu)
把中央處理器(CPU)、存儲器(RAM、ROM)、定時/計(jì)數(shù)器,以及輸入/輸出(I/O)接口電路等集成在一塊芯片上,這樣組成芯片級的微型控制器稱為單片機(jī)(MicroControllerUnit,MCU)。單片機(jī)雖然只是一個芯片,但從組成和功能上看,它已具備微機(jī)系統(tǒng)的含義。圖1-1為MCS-51單片機(jī)的內(nèi)部結(jié)構(gòu)圖。
MCS-51單片機(jī)的基本結(jié)構(gòu)包括:
(1)一個8位算術(shù)邏輯單元CPU;
(2)32個I/O口;
(3)4組8位端口可單獨(dú)尋址;
(4)兩個16位定時/計(jì)數(shù)器;
(5)全雙工串行通信;
(6)6個中斷源(5個中斷向量);
(7)兩個中斷優(yōu)先級;
(8)128B內(nèi)置RAM;
(9)獨(dú)立的64KB可尋址數(shù)據(jù)和代碼區(qū)。圖1-1
MCS-51單片機(jī)的內(nèi)部結(jié)構(gòu)圖
2.MCS-51單片機(jī)的外部引腳
常見51系列單片機(jī)有PDIP、PLCC、TQFP三種封裝方式,其中最常見的就是采用40Pin封裝的雙列直插PDIP封裝,其外觀及封裝引腳如圖1-2和1-3所示。引腳的排列順
序和其他雙列直插塑料封裝定義一樣,都是從靠芯片的缺口左邊那列引腳逆時針數(shù)起,依次為第1、2、3、4…40腳,其中芯片的1腳頂上有個凹點(diǎn)。
在40個引腳中,電源引腳有2根,外接晶體振蕩器引腳有2根,控制引腳有4根,4組8位可編程I/O引腳有32根,各引腳的功能如下:
1)主電源引腳(2根)
VCC(Pin40):電源輸入,接直流5V電源。
GND(Pin20):電源地。圖1-2
STC89C52外觀圖圖1-3
PDIP封裝引腳圖
2)外接晶振引腳(2根)
XTAL1(Pin19):片內(nèi)振蕩電路的輸入端。
XTAL2(Pin18):片內(nèi)振蕩電路的輸出端。
3)控制引腳(4根)
RST(Pin9):復(fù)位引腳,引腳上出現(xiàn)至少2個機(jī)器周期的高電平將使單片機(jī)復(fù)位。
PSEN(Pin29):外部存儲器讀選通信號,低電平有效。CPU由外部程序存儲器取指令期間,每個機(jī)器周期兩次PSEN有效,但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的PSEN信號將不出現(xiàn)。
ALE/PROG(Pin30):地址鎖存允許信號。當(dāng)訪問外部存儲器時,ALE的輸出用于鎖存地址的低位字節(jié)。在不訪問外部存儲器時,ALE端仍以不變的頻率輸出脈沖信號(此頻率為振蕩器頻率的1/6)。在FLASH編程期間,PROG用于輸入編程脈沖。
EA/VPP(Pin31):程序存儲器的內(nèi)外部選通腳。接低電平時,CPU直接從外部程序存儲器讀指令;接高電平時,CPU先從內(nèi)部程序存儲器讀指令,內(nèi)部存儲器取完之后,自動轉(zhuǎn)向外部存儲器。對于片內(nèi)含有EPROM的機(jī)型(8751),在編程期間,此引腳用作21V編程電源VPP的輸入端。一般我們都會選擇多于實(shí)際代碼需求的單片機(jī)來設(shè)計(jì),所以不需要擴(kuò)展外部程序存儲器,此時管腳應(yīng)當(dāng)連接高電平。
4)可編程輸入/輸出引腳(32根)
P0口(Pin39~Pin32):P0口為一個雙向8位三態(tài)I/O口,名稱為P0.0~P0.7,每一位可獨(dú)立控制。51單片機(jī)P0口內(nèi)部沒有上拉電阻,為高阻狀態(tài),所以不能正常輸出高電平,因此該組I/O口在使用時務(wù)必要外接上拉電阻,一般我們選擇接入10kΩ的上拉電阻。此外,在訪問外部程序和外部數(shù)據(jù)存儲器時,P0口是分時轉(zhuǎn)換的低8位地址(A0~A7)/數(shù)據(jù)總線(D0~D7)。
P1口(Pin1~Pin8):P1口是一個準(zhǔn)雙向8位I/O口,名稱為P1.0~P1.7,每一位可獨(dú)立控制,內(nèi)部帶有上拉電阻。這種接口輸出沒有高阻狀態(tài),輸入也不能鎖存,故不是真正的雙向I/O口。(對于52單片機(jī),P1.0引腳的第二功能為T2定時器/計(jì)數(shù)器的外部輸入,P1.1引腳的第二功能為T2EX捕捉、重裝觸發(fā),即T2的外部控制端。)
P2口(Pin21~Pin28):P2口是一個準(zhǔn)雙向8位I/O口,名稱為P2.0~P2.7,每一位可獨(dú)立控制,內(nèi)部帶上拉電阻,與P1口相似。此外,在訪問外部存儲器時,P2口送出高8位地址(A8~A15)。
P3口(Pin10~Pin17):P3口是一個準(zhǔn)雙向8位I/O口,名稱為P3.0~P3.7,每一位可獨(dú)立控制,內(nèi)部帶上拉電阻。作為第一功能使用時就當(dāng)作普通I/O口,與P1口相似;作為第二功能時,各引腳定義如表1-1所示。
值得強(qiáng)調(diào)的是:P3口的每一個引腳均可獨(dú)立定義為第一功能的輸入/輸出或第二功能。P3口的第二功能如表1-1所示。表1-1
P3口第二功能
3.MCS-51單片機(jī)的I/O口結(jié)構(gòu)及功能
MCS-51系列單片機(jī)有4個8位的并行I/O接口:P0、P1、P2和P3口。這4個口既可以作輸入,也可以作輸出;既可按字節(jié)處理,也可按位方式使用。其輸出時具有鎖存能力,輸入時具有緩沖功能。
1)P0口結(jié)構(gòu)
P0口是一個三態(tài)雙向口,可作為地址/數(shù)據(jù)分時復(fù)用口,也可作為通用的I/O接口。它包括一個輸出鎖存器、兩個三態(tài)緩沖器、一個輸出驅(qū)動電路和一個輸出控制電路,如圖1-4所示。圖1-4
P0口內(nèi)部結(jié)構(gòu)
2)P1口結(jié)構(gòu)
P1口是準(zhǔn)雙向口,它只能作通用I/O接口使用。P1口的結(jié)構(gòu)與P0口不同,它的輸出只由一個場效應(yīng)管V1與內(nèi)部上拉電阻組成,如圖1-5所示。
P1口的輸入輸出原理特性與P0口作為通用I/O口使用時一樣,當(dāng)其輸出時,可以提供電流負(fù)載,不必像P0口那樣需要外接上拉電阻。P1口具有驅(qū)動4個TTL負(fù)載的能力。圖1-5
P1口內(nèi)部結(jié)構(gòu)
3)P2口結(jié)構(gòu)
P2口也是準(zhǔn)雙向口,它有兩種用途:通用I/O接口和高8位地址線。它的一位的結(jié)構(gòu)如圖1-6所示。與P1口相比,它只在輸出驅(qū)動電路上比P1口多了一個模擬轉(zhuǎn)換開關(guān)MUX和反相器3。
當(dāng)控制信號為高電平“1”時,轉(zhuǎn)換開關(guān)接內(nèi)部地址線,P2口用作高8位地址線使用。
當(dāng)控制信號為低電平“0”時,轉(zhuǎn)換開關(guān)接鎖存器Q端,P2口用作準(zhǔn)雙向通用I/O接口,其工作原理與P1相同,只是P1口輸出端由鎖存器Q接V1,而P2口是由鎖存器Q端經(jīng)反相器3接V1。P2口具有輸入、輸出、端口操作三種工作方式,負(fù)載能力也與P1相同。圖1-6
P2口內(nèi)部結(jié)構(gòu)(一位)
4)P3口結(jié)構(gòu)
P3口一位的結(jié)構(gòu)如圖1-7所示。它的輸出驅(qū)動由與非門3、V1組成,輸入比P0、P1、P2口多了一個緩沖器4。圖1-7
P3口內(nèi)部結(jié)構(gòu)
4.MCS-51單片機(jī)的內(nèi)部存儲器配置
存儲器是單片機(jī)內(nèi)部一個非常重要的資源,我們知道單片機(jī)是要靠指令(程序)來工作的,將寫好的程序燒錄到單片機(jī)中,單片機(jī)上電后,在時鐘脈沖的作用下,按順序一條條執(zhí)行指令,這些程序就存儲在單片機(jī)內(nèi)部的存儲器里。單片機(jī)內(nèi)部的存儲器主要包含程序存儲器和數(shù)據(jù)存儲器。
51單片機(jī)程序存儲器的地址分配圖如圖1-8所示。
在程序存儲器中,0003H~002AH是具有特殊用途的單元,這40個單元均勻地分成五段,其功能如表1-2所示(有關(guān)中斷的知識將在項(xiàng)目2中介紹)。圖1-8程序存儲器分配圖表1-2專用存儲器單元及功能表單片機(jī)內(nèi)部的數(shù)據(jù)存儲器(RAM)要比程序存儲器小得多,主要用來存放程序中變量的值。51單片機(jī)內(nèi)部的數(shù)據(jù)存儲器容量為128B,地址為00H~7FH;52單片機(jī)內(nèi)部的數(shù)據(jù)
存儲器容量為256B,地址為00H~FFH。數(shù)據(jù)存儲器從功能上分為三部分。第一部分為00H~1FH的通用寄存器區(qū),每個區(qū)包含8個單元,分別為R0~R7,每個單元8位??梢酝ㄟ^程序狀態(tài)字寄存器(PSW)中RS0和RS1兩位的值來選中某一個區(qū)。第二部分為20H~2FH單元的位尋址區(qū),定義的位變量(bit型變量)存放在這個區(qū)域,字節(jié)變量也可以存放在這里。第三部分為30H~7FH單元,是用戶RAM區(qū)(52單片機(jī)此區(qū)域地址為30H~FFH),這個區(qū)域沒有限制和規(guī)定。當(dāng)內(nèi)部數(shù)據(jù)存儲器不夠用時,可以擴(kuò)展外部數(shù)據(jù)存儲器。51單片機(jī)內(nèi)部數(shù)據(jù)存儲器分配如圖1-9所示。圖1-9
51單片機(jī)內(nèi)部RAM地址分配圖程序狀態(tài)字寄存器(PSW)各位的含義如表1-3所示。表1-3程序狀態(tài)字各位含義
51單片機(jī)內(nèi)部有21個特殊功能寄存器(SpecialFunctionRegisters,SFR),離散地分布在地址為80H~FFH之間的區(qū)域中,特殊功能寄存器實(shí)質(zhì)上是一些具有特殊功能的RAM單元。這些SFR專用于控制、管理片內(nèi)算術(shù)邏輯部件、并行I/O口、串行I/O口、定時器/計(jì)數(shù)器、中斷系統(tǒng)等功能模塊的工作,用戶在編程時可以置數(shù)設(shè)定。
每個SFR的名稱及地址如表1-4所示。表1-4最后一列,“可位尋址”的含義是這些SFR不僅可以對其內(nèi)部8位以“字節(jié)”的方式一起讀寫,也可以以“位”的形式單獨(dú)進(jìn)行讀寫。例如,在程序中寫“P0=0xaa”,表示將P0口各位的電平依次設(shè)置為高電平、低電平交替;寫“P0_1=1”,表示將P0口第1位的狀態(tài)改為高電平,其余位狀態(tài)不改變。表1-4特殊功能寄存器一覽表1.2.2
MCS-51單片機(jī)的時序
單片機(jī)是根據(jù)指令來工作的,每一條指令的執(zhí)行時間有長有短,但是都是按照一定的節(jié)拍一步一步來執(zhí)行的,這里的節(jié)拍就是時鐘電路提供的時鐘信號。一條指令可以分解為若干基本的微操作,而這些微操作所對應(yīng)的脈沖信號,在時間上有嚴(yán)格的先后次序,這些次序就是單片機(jī)的時序。時序是非常重要的概念,它指明了單片機(jī)內(nèi)部以及內(nèi)部與外部互相聯(lián)系所遵守的規(guī)律。在單片機(jī)系統(tǒng)中通常有振蕩周期、時鐘周期、機(jī)器周期、指令周期。圖1-10表明了各種周期的相互關(guān)系。圖1-10
MCS-51單片機(jī)各種周期的相互關(guān)系
1.3項(xiàng)目分析及實(shí)施
1.3.1任務(wù)1——單片機(jī)控制單個LED燈閃爍
1.任務(wù)要求和分析
1)任務(wù)要求
利用單片機(jī)控制一只LED燈,使其以一定的時間間隔閃爍。
2)任務(wù)分析
以單片機(jī)為核心的電子設(shè)計(jì)中,包含兩方面的任務(wù):硬件設(shè)計(jì)和軟件設(shè)計(jì)。硬件設(shè)計(jì)主要是電路原理圖的設(shè)計(jì),但是僅僅有原理圖只是完成了任務(wù)的一半,必須將寫好的程序燒寫到單片機(jī)中,通過程序控制單片機(jī)引腳的電平狀態(tài),從而改變外圍電路的狀態(tài),才能最終完成我們的設(shè)計(jì)。
不管單片機(jī)做任何工作,首先必須保證單片機(jī)可以正常工作,單片機(jī)要正常運(yùn)行,必須具備一定的硬件條件,其中最主要的就是以下三個基本條件。
(1)電源。不同型號單片機(jī)應(yīng)接入對應(yīng)的電源,常壓為+5V,低壓為+3.3V,實(shí)際使用時查看芯片資料。此處AT89C52單片機(jī)使用的是+5V電源,40腳(VCC)電源引腳工作時接+5V電源,20腳(GND)為接地線。
(2)時鐘電路。時鐘電路為單片機(jī)產(chǎn)生時序脈沖,單片機(jī)所有運(yùn)算與控制過程都是在統(tǒng)一的時序脈沖的驅(qū)動下進(jìn)行的,時鐘電路就好比人的心臟,如果單片機(jī)的時鐘電路停止工作(晶振停振),那么單片機(jī)也就停止運(yùn)行了。51單片機(jī)時鐘電路有兩種方式,一種是內(nèi)部時鐘方式,就是利用晶振和電容構(gòu)成振蕩電路,產(chǎn)生時鐘信號,連接方法如圖1-11所示。在時鐘引腳XTAL1(19腳)和XTAL2(18腳)引腳之間接入一個晶振,兩個引腳對地分別再接入一個電容即可產(chǎn)生所需的時鐘信號,電容的容量一般是10pF~30pF。另一種是外部時鐘方式,當(dāng)有現(xiàn)成的時鐘信號時,可直接將時鐘信號從XTAL2接入,XTAL1接地即可。單片機(jī)系統(tǒng)中多采用內(nèi)部時鐘方式。圖1-11內(nèi)部時鐘電路
(3)復(fù)位電路。在復(fù)位引腳(9腳)持續(xù)出現(xiàn)至少24個振蕩器脈沖周期(即2個機(jī)器周期)的高電平信號將使單片機(jī)復(fù)位。復(fù)位以后單片機(jī)從頭開始執(zhí)行程序,并初始化一些專用寄存器為復(fù)位狀態(tài)值。常見復(fù)位電路有上電復(fù)位和按鍵復(fù)位兩種,如圖1-12(a)和(b)所示。
在軟件方面,需要通過程序,控制與發(fā)光二極管相連的I/O引腳的電平狀態(tài),使其持續(xù)一段時間的高電平,再持續(xù)一段時間的低電平,高低交替,就可以達(dá)到使LED閃爍的效果。圖1-12復(fù)位電路
2.器件及設(shè)備選擇
保證了單片機(jī)正常運(yùn)行的條件之后,在本任務(wù)中還需要加入發(fā)光二極管(LED),發(fā)光二極管的原理和普通二極管一樣,都具有單向?qū)щ娦?,通過5mA左右電流即可發(fā)光,電流越大,其亮度越強(qiáng),但若電流過大會燒毀二極管,因此一般控制在3mA~20mA之間。要控制發(fā)光二極管的正向電流,就必須知道發(fā)光二極管的一個重要參數(shù):工作電壓。在二極管發(fā)光時(接反了就不會發(fā)光),測量出的發(fā)光二極管兩端的電壓就是它的工作電壓。電流增大,這個工作電壓不會明顯增加,直至發(fā)光二極管電流過大而燒毀。不同顏色的發(fā)光二極管有不同的工作電壓值,紅色發(fā)光二極管工作電壓最低,約1.7~2.5V,綠色發(fā)光二極管約2.0~2.4V,黃色發(fā)光二極管約1.9~2.4V,藍(lán)/白色發(fā)光二極管約3.0~3.8V。
圖1-13為直插式發(fā)光二極管的實(shí)物圖。發(fā)光二極管有兩個電極,其正極又稱陽極,負(fù)極又稱陰極,電流只能從陽極流向陰極。直插式發(fā)光二極管長腳為陽極,短腳為陰極。圖1-13直插式發(fā)光二極管發(fā)光二極管在使用過程中一般要串聯(lián)一個電阻,目的是為了限制通過發(fā)光二極管的電流,以免燒毀二極管,因此該電阻也稱為限流電阻。
假設(shè)發(fā)光二極管與單片機(jī)I/O引腳的連接如圖1-14所示。圖中電阻R1的作用是限流,發(fā)光二極管的陽極接+5V電壓,當(dāng)P1.7引腳輸出低電平時,發(fā)光二極管點(diǎn)亮,可以構(gòu)成回路。
限流電阻的選擇方法為:假設(shè)電源電壓為VCC,發(fā)光二極管的導(dǎo)通壓降為VDD,導(dǎo)通時流過二極管的電流為I,則限流電阻R為R=(VCC-VDD)/I。圖1-14發(fā)光二極管回路
3.任務(wù)實(shí)施
1)單片機(jī)控制單個LED燈硬件原理圖設(shè)計(jì)
本任務(wù)中硬件原理圖的繪制在Proteus軟件中完成,Proteus軟件是英國Labcenterelectronics公司推出的EDA工具軟件。它不僅具有其他EDA工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件。它是目前最好的仿真單片機(jī)及外圍器件的工具。該軟件打開時工作界面如圖1-15所示。圖1-15
ProteusISIS的工作界面下面以該任務(wù)為例簡單介紹其繪制原理圖的具體方法。
(1)添加元件到編輯窗口。單擊圖1-15中元件選擇器按鈕P,出現(xiàn)器件選取(PickDevices)窗口,如圖1-16所示。圖1-16器件選取窗口在器件選取窗口中選擇器件的方法有兩種,可以根據(jù)器件所屬的類別選擇,比如本任務(wù)中用到的單片機(jī)屬于“MicroprocessorICs”類,鼠標(biāo)點(diǎn)擊選中之后,在“Result”區(qū)域中就會出現(xiàn)“MicroprocessorICs”類中所有的元器件??衫瓌訚L動條選擇所需器件,也可以在“Keywords”窗口中直接輸入器件型號關(guān)鍵字進(jìn)行搜索,并從“Result”區(qū)域中出現(xiàn)的搜索結(jié)果中選取。選中所需器件,點(diǎn)擊“OK”,再到圖形編輯窗口點(diǎn)擊鼠標(biāo),元件就會出現(xiàn)在編輯窗口中。按照此方法將本任務(wù)中的元件AT89C52、電容、晶振、電阻、發(fā)光二極管加入到編輯窗口中,如圖1-17所示。圖1-17放置元件到圖形編輯窗口若對象位置需要移動,應(yīng)將鼠標(biāo)移到該對象上,單擊鼠標(biāo)右鍵選取該對象,該對象的顏色變至紅色,表明該對象已被選中,此時按下鼠標(biāo)左鍵,拖動鼠標(biāo),就可以將對象移至新位置,松開鼠標(biāo),完成移動操作。
圖1-17中電阻和電容的值都可以通過“EditComponent”(編輯元件)窗口修改。例如用鼠標(biāo)點(diǎn)擊電阻元件,出現(xiàn)如圖1-18所示的窗口,可以在“Resistance”后面修改電阻的阻值。圖1-18編輯元件窗口如圖1-19所示,電源和地的模型在“模型選擇工具欄”的“Terminalsmode”項(xiàng)里。圖1-19“Terminalsmode”電源選擇好之后,需要給出電源的電壓。左擊電源模型,彈出如圖1-20所示的“EditTerminalLabel”(編輯終端標(biāo)簽)窗口,在“string”框里輸入電源電壓,這里輸入“+5V”。圖1-20“編輯終端標(biāo)簽”窗口
(2)連接元器件。首先要連接單片機(jī)的時鐘電路和復(fù)位電路,將元件擺放好之后,當(dāng)鼠標(biāo)靠近元件的接線端時,鼠標(biāo)就會變成筆的樣子,同時在元件的連接點(diǎn)會出現(xiàn)一個紅色“口”,單擊鼠標(biāo)左鍵,移動鼠標(biāo)(不用拖動鼠標(biāo)),當(dāng)鼠標(biāo)靠近另一個元件的連接點(diǎn)時,也會出現(xiàn)一個紅色“口”,此時點(diǎn)擊鼠標(biāo)左鍵,就可以完成一次連線。連接好的原理圖如圖1-21所示。圖1-21單片機(jī)控制單個LED燈原理圖
2)單片機(jī)控制單個LED燈軟件程序設(shè)計(jì)
在軟件程序設(shè)計(jì)中,我們只要編寫程序,讓與發(fā)光二極管相接的P1.7引腳為低電平,二極管就可以被點(diǎn)亮。
目前51單片機(jī)軟件程序的開發(fā)環(huán)境主要有偉福和KeilC51軟件。這里使用KeilC51軟件編寫程序。
KeilC51單片機(jī)集成開發(fā)軟件是目前最流行的MCS-51單片機(jī)開發(fā)軟件,提供了包括C編譯器、宏匯編、連接器、庫管理及一個功能強(qiáng)大的仿真調(diào)試器在內(nèi)的完整開發(fā)方案,并通過一個集成開發(fā)環(huán)境(μVisoin2)將這些部分組合在一起。Keil單片機(jī)集成開發(fā)軟件可以運(yùn)行在Win98、NT、Win2000、WinXP等操作系統(tǒng),它的工作界面如圖1-22所示。圖1-22
KeilC51軟件工作界面下面以編寫點(diǎn)亮一個發(fā)光二極管的程序?yàn)槔f明KeilC51的使用過程。
(1)建立一個新工程。單擊“Project”菜單,在彈出的下拉菜單中選中“NewProject”選項(xiàng),如圖1-23所示。圖1-23選擇創(chuàng)建工程菜單
(2)保存工程名。點(diǎn)擊“NewProject”子菜單之后,會彈出如圖1-24所示的窗口,選擇需要保存工程的路徑,并輸入工程名。圖1-24創(chuàng)建工程
(3)選擇目標(biāo)單片機(jī)型號。保存工程之后,會彈出如圖1-25所示的窗口,要求選擇單片機(jī)的型號。KeilC51幾乎支持所有的51內(nèi)核的單片機(jī),由于在Proteus中選用AT89C52繪制的原理圖,因此這里也選擇了AT89C52。選中AT89C52之后,右側(cè)Description窗口是對這個單片機(jī)的基本的說明,點(diǎn)擊確定即可。圖1-25選擇單片機(jī)的型號
(4)完成以上步驟后,工程到此就已經(jīng)創(chuàng)建起來了。其屏幕如圖1-26所示。圖1-26已創(chuàng)建好的工程
(5)新建源程序文件。到此已經(jīng)建立了一個工程來管理流水燈項(xiàng)目,但我們還沒有編寫程序,因此還需要建立相應(yīng)的C文件或匯編文件。單擊“File”菜單,在下拉菜單中單擊“New”選項(xiàng)新建一個源程序文件。此時,工作窗口如圖1-27所示。圖1-27新建C文件后的界面這時可以在編輯窗口中鍵入用戶的應(yīng)用程序了,但建議首先保存該空白的文件,單擊菜單上的“File”,在下拉菜單中選中“SaveAs”選項(xiàng)單擊,彈出如圖1-28所示的窗口,在“文件名”欄右側(cè)的編輯框中,鍵入欲使用的文件名,同時,必須鍵入正確的擴(kuò)展名,然后單擊“保存”按鈕。如果用C語言編寫程序,則擴(kuò)展名為(.c);如果用匯編語言編寫程序,則擴(kuò)展名必須為(.asm)。圖1-28保存C文件
(6)添加文件到工程?;氐骄庉嫿缑婧?,單擊“Target1”前面的“+”號,然后在“SourceGroup1”上單擊右鍵,彈出如圖1-29所示窗口,點(diǎn)擊“AddFilestoGroup‘SourceGroup1’”,彈出圖1-30所示的窗口,此時默認(rèn)路徑為剛才創(chuàng)建工程時保存的路徑,窗口中有剛才保存的“l(fā)ed.c”文件。選中“l(fā)ed.c”之后單擊“Add”,回到工作界面,在工程窗口中可以看到“l(fā)ed.c”文件已經(jīng)被添加到剛才新建的工程中,如圖1-31所示。至此,一個新的工程建立完畢,現(xiàn)在可以在編輯窗口中編寫程序了。圖1-29添加文件到工程圖1-30添加C文件的界面圖1-31添加“l(fā)ed.c”文件后的工程窗口在編輯區(qū)輸入點(diǎn)亮一個發(fā)光二極管的程序,如圖1-32所示。圖1-32輸入源代碼輸入程序時,KeilC51會自動識別關(guān)鍵字,并以不同的顏色提示用戶加以注意,這樣會使用戶少犯錯誤,有利于提高編程效率。若新建的文件沒有事先保存的話,Keil就不會自動識別關(guān)鍵字,也不會有不同顏色出現(xiàn)。
程序輸入完畢后,點(diǎn)擊圖1-32中的編譯按鈕,對編寫的程序進(jìn)行編譯,這里有三個編譯按鈕。
如果不對工程修改一些設(shè)置,無論按哪個按鈕都不能產(chǎn)生可以下載到單片機(jī)中的程序文件,所以我們還需要對剛才的工程做一些設(shè)置。
右擊工程窗口中的“Target1”,如圖1-33所示。圖1-33選擇工程設(shè)置窗口在“Target”標(biāo)簽頁面中,更改晶振頻率(本例仿真時使用12MHz晶振),如圖1-34所示。這里更改晶振頻率的目的是使晶振的頻率與實(shí)驗(yàn)板上的頻率一致,這樣在進(jìn)行軟件調(diào)試或仿真時,就可以看到與程序下載到實(shí)驗(yàn)板上之后一樣的現(xiàn)象。接下來在“Output”標(biāo)簽頁面中勾選“CreateHEXFile”選項(xiàng),如圖1-35所示,目的是使程序編譯后生成硬件可執(zhí)行的目標(biāo)代碼,因?yàn)閱纹瑱C(jī)只能運(yùn)行HEX文件或BIN文件,HEX文件是十六進(jìn)制的,BIN文件是二進(jìn)制的,這兩種文件可以互相轉(zhuǎn)換,但其內(nèi)容是一樣的。圖1-34修改晶振頻率圖1-35選擇生成HEX文件圖1-34中,“MemoryModel”是對變量存儲類型進(jìn)行選擇。在C51中,在定義變量時可以通過添加存儲器類型來決定該變量存放在哪個區(qū)域,變量存儲器類型如表1-5所示。
定義格式為:
[數(shù)據(jù)類型][存儲器類型][變量名]
圖1-34中,“CodeRomSize”是設(shè)置ROM空間大小的,也有三種選項(xiàng):Small表示只能用低于2KB的程序存儲空間;Compact表示每個子函數(shù)大小不超過2KB,整個工程可以有64KB;Large表示程序或子函數(shù)都可以用到64KB。表1-5
C51存儲器類型與存儲空間對照表
3)軟硬件聯(lián)合調(diào)試
在程序下載到實(shí)驗(yàn)板上之前,有兩種方法觀察程序效果,第一種是在Keil的調(diào)試狀態(tài)下觀察I/O口狀態(tài);第二種是將HEX文件添加到Proteus軟件繪制了原理圖的單片機(jī)上,仿真運(yùn)行。
在Keil的“Debug”菜單下選擇“Start/StopDebugSession”子菜單,或者點(diǎn)擊快捷圖標(biāo),工作界面將如圖1-36所示。此時可以發(fā)現(xiàn)一些快捷圖標(biāo)被激活了,程序處于準(zhǔn)備運(yùn)行的狀態(tài),程序編輯區(qū)的黃色箭頭表示將要執(zhí)行的語句。選擇“Peripherals”菜單下的“I/O-ports”,如圖1-37所示,選中“Port1”后,會彈出圖1-38所示的Port1調(diào)試窗口。圖1-36進(jìn)入調(diào)試之后的工作界面圖1-37調(diào)試狀態(tài)下的“Peripherals”菜單圖1-38
Port1調(diào)試窗口觀察程序效果的第二種方法是在Proteus軟件中仿真運(yùn)行,單擊Proteus原理圖中的AT89C52,會彈出如圖1-39所示的窗口,單擊“ProgramFile”后面的文件夾圖標(biāo),彈出圖1-40所示的窗口,找到所要添加HEX文件的路徑,選中HEX文件并打開它。圖1-39
Proteus中添加HEX文件窗口圖1-40選擇HEX文件窗口點(diǎn)擊仿真運(yùn)行按鈕 ,可以看到發(fā)光二極管已經(jīng)被點(diǎn)亮,如圖1-41所示。圖1-41中可以看到每個引腳都有紅色、藍(lán)色或灰色的小方塊,紅色表示引腳為高電平,藍(lán)色表示引腳為低電平,灰色表示高阻。
最后,我們可以將調(diào)試通過的程序下載到實(shí)驗(yàn)板上觀察效果,實(shí)驗(yàn)板上的單片機(jī)為STC89C52,可直接使用STC-ISP下載軟件將程序燒些到單片機(jī)上。圖1-41
Proteus中仿真運(yùn)行后的效果
STC-ISP軟件的打開界面如圖1-42所示。按照界面中操作步驟,依次選擇單片機(jī)型號、打開HEX文件、選擇串口、點(diǎn)擊下載就可以將程序下載到單片機(jī)中。圖1-42
STCISP下載界面在圖1-32中看到點(diǎn)亮一個發(fā)光二極管的程序如下:
上述程序分析如下:
(1)“#include"AT89X51.h"”語句是頭文件包含,包含這個頭文件的目的是在后面編寫程序時,可以直接對單片機(jī)內(nèi)部的特殊功能寄存器操作,因?yàn)檫@個頭文件中已經(jīng)對51單片機(jī)內(nèi)部的特殊功能寄存器進(jìn)行了聲明?!癆T89X51.h”頭文件的內(nèi)容如下。頭文件中“sfrP0=0x80;”語句的含義是賦予地址為0x80的特殊功能寄存器單元一個符號名稱叫“P0”,這樣在寫程序時,就可以直接使用“P0”了。比如:在點(diǎn)亮一個發(fā)光二極管的程序中,寫成“P0=0x7f”,就表示將0x7f這個數(shù)據(jù)放入了地址為0x80的地址單元中。sfr并不是標(biāo)準(zhǔn)C語言的關(guān)鍵字,而是KeilC51為能直接訪問51單片機(jī)內(nèi)部的SFR而提供的一個新關(guān)鍵字。“sbitP0_0=0x80;”表示對P0.0引腳重新給一個符號名稱叫P0_0,有時候我們只想對I/O口中的某一位進(jìn)行操作時,比如要從P0.0位送出低電平,如果直接寫“P0.0=0”,則C編譯器是不能識別的,而且P0.0也不是一個合法的C語言變量名,所以需要起一個合法的名字,在頭文件中通過“sbit”來對特殊功能寄存器中的位進(jìn)行聲明?!皊bit”也是KeilC51的關(guān)鍵字?!皊bit”的用法有三種:
第一種:sbit位變量名=變量位地址值。
第二種:sbit位變量名=SFR名稱^變量位地址值。
第三種:sbit位變量名=SFR地址值^變量位地址值。在這個頭文件中,使用第一種方法對位變量做了聲明,編程者也可以根據(jù)自己的意愿在程序中使用“sbit”對SFR中的位重新聲明,即重新起個名字,那么在程序中就可以用這個新名字了。
我們在程序的第二行,使用了“sbitled=P1^7;”相當(dāng)于給P1.7位重新起名為“l(fā)ed”,這里的名稱只要符合C語言標(biāo)識符的規(guī)定就行。此處需要注意的是,P1不可隨意寫,“P”是大寫,若寫成小寫“p”,編譯程序時將報(bào)錯,因?yàn)樵陬^文件中聲明P1口時用的是大寫“P”。對單片機(jī)編寫程序,離不開對內(nèi)部特殊功能寄存器的操作,所以每次在寫程序之前,首先將關(guān)于對特殊功能寄存器聲明的頭文件包含進(jìn)來。KeilC51中自帶的頭文件還有“reg52.h”、“reg51.h”等??梢栽贙eil安裝路徑下“INC”文件夾里打開查看。
(2)在主函數(shù)中,“l(fā)ed=0;”語句的含義是置P1.7引腳為低電平,數(shù)字電路中,“1”表示高電平,“0”表示低電平,程序中之所以將P1.7引腳置低,是因?yàn)橛布娐分形覀儗l(fā)光二極管的陽極接+5V電源,而陰極與P1.7端相連,所以當(dāng)P1.7端輸出低電平時會使發(fā)光二極管導(dǎo)通,進(jìn)而點(diǎn)亮發(fā)光二極管。
(3)“while(1)”語句是讓CPU一直執(zhí)行這個無限循環(huán),其實(shí)目的是讓程序計(jì)數(shù)器PC的值不再增加。由于單片機(jī)上電后,只要晶振工作,單片機(jī)就會持續(xù)運(yùn)行,每來一個機(jī)器周期,程序計(jì)數(shù)器就會自動加1,在本任務(wù)的程序中,只做了點(diǎn)亮發(fā)光二極管的工作,所以我們加“while(1)”相當(dāng)于讓CPU處于等待狀態(tài)。
到這里,點(diǎn)亮一個發(fā)光二極管的任務(wù)就完成了,我們可以感覺到,僅僅幾行的程序,簡單的硬件原理圖,卻包含了單片機(jī)應(yīng)用中很多基礎(chǔ)知識。
如果想讓剛才的發(fā)光二極管閃爍,則可以在點(diǎn)亮之后,添加一個有限循環(huán)的語句(作用是延時),之后再關(guān)掉發(fā)光二極管,再延時,只要讓程序不斷地在點(diǎn)亮→延時→熄滅→延時之間執(zhí)行就可以了。在上面程序中,for循環(huán)的循環(huán)體語句為空,變量i從0增加到20000就退出循環(huán),這樣就可以起到延時的效果。采用循環(huán)延時的延時時間不能做到非常精確,如果需要精確延時就要用單片機(jī)內(nèi)部定時/計(jì)數(shù)器來實(shí)現(xiàn)。
循環(huán)延時時間的長短可以在KeilC51的調(diào)試狀態(tài)下分析。點(diǎn)擊“Debug”菜單,選中“Insert/RemoveBreakPoint”子菜單或點(diǎn)擊圖標(biāo),在上面程序中第一個for循環(huán)的位置添加一個斷點(diǎn)(斷點(diǎn)表示程序執(zhí)行到這一行時會停止,需要點(diǎn)擊“運(yùn)行”圖標(biāo)才會繼續(xù)執(zhí)行下去),在“l(fā)ed=1;”這一行也添加一個斷點(diǎn),當(dāng)對某一行添加斷點(diǎn)之后,在這行前面會出現(xiàn)一個紅色的小方塊,如圖1-43所示。圖1-43添加斷點(diǎn)測試程序運(yùn)行時間圖1-43中黃色箭頭停在中間的方塊上,是因?yàn)辄c(diǎn)擊了“全速運(yùn)行”之后,程序執(zhí)行到斷點(diǎn)處停了下來,這時我們可以看到寄存器窗口sec里的值和窗口下方t1的值為0.00042318s,表示從程序開始到斷點(diǎn)位置(斷點(diǎn)處語句未執(zhí)行)花掉了0.42318ms,再次點(diǎn)擊“全速運(yùn)行”,黃色箭頭下移一行,停在下一個斷點(diǎn)處,如圖1-44所示,sec的值變?yōu)?.10908963s,這兩個數(shù)據(jù)的差值就是for循環(huán)花掉的時間,約為108ms。程序編輯區(qū)的綠色長條表示已經(jīng)執(zhí)行過的程序。圖1-44測試循環(huán)執(zhí)行時間1.3.2任務(wù)2——單片機(jī)控制多個LED燈
1.任務(wù)要求和分析
1)任務(wù)要求
利用單片機(jī)I/O口控制八只發(fā)光二極管,使其按照一定的規(guī)律點(diǎn)亮,形成流水燈的效果。
2)任務(wù)分析
硬件電路設(shè)計(jì)方面,只需要增加發(fā)光二極管的個數(shù)就可以了,每只二極管占用一根I/O引線。
軟件程序設(shè)計(jì)方面,由于有八只發(fā)光二極管需要控制,考慮使用循環(huán)實(shí)現(xiàn)。
2.器件及設(shè)備選擇
由于用到的發(fā)光二極管較多,每個發(fā)光二極管都需要限流電阻,硬件電路會顯得比較復(fù)雜,所以我們這里使用了排阻。排阻就是若干個參數(shù)完全相同的電阻,它們的一個引腳都連接到一起,作為公共引腳,其余引腳正常引出。所以如果一個排阻是由n個電阻構(gòu)成的,那么它就有n+1只引腳,一般來說,最左邊的那個是公共引腳。它在排阻上一般用一個色點(diǎn)標(biāo)出來,排阻的實(shí)物封裝如圖1-45所示。排阻一般應(yīng)用在數(shù)字電路上,比如作為某個并行口的上拉或者下拉電阻用。使用排阻比用若干只固定電阻更方便。圖1-45排阻封裝另外,可以給單片機(jī)I/O口接鎖存器,增加單片機(jī)可以控制的外圍電路。與本書配套的實(shí)驗(yàn)板上,由于單片機(jī)的外圍電路較多,所以使用了鎖存器。
所謂鎖存器,就是當(dāng)鎖存信號有效時,輸出端的狀態(tài)會跟隨輸入端狀態(tài)的變化而變化,當(dāng)鎖存信號無效時,輸出端的狀態(tài)會保持鎖存信號消失前一時刻的狀態(tài),不再跟隨輸入端的狀態(tài)而變化。圖1-46為74HC573的引腳分布圖,其功能表如表1-6所示。圖1-46
74HC573引腳圖表1-6
74HC573功能表
3.任務(wù)實(shí)施
1)單片機(jī)控制多個LED燈硬件原理圖設(shè)計(jì)
在任務(wù)1的基礎(chǔ)上,我們在P1口其余位再添加發(fā)光二極管,與教材配套的實(shí)驗(yàn)板上的原理圖如圖1-47所示。圖1-47單片機(jī)控制多個發(fā)光二極管硬件原理圖
2)單片機(jī)控制多個LED燈軟件程序設(shè)計(jì)
在這個任務(wù)中,我們通過程序控制,讓八個LED燈依次逐個點(diǎn)亮,感覺像流水一樣,所以叫做流水燈。在寫程序之前,首先要有構(gòu)思,先讓第一個LED燈點(diǎn)亮一段時間之后,再熄滅;接著讓第二個LED燈點(diǎn)亮一段時間之后再熄滅,依次類推,就可以實(shí)現(xiàn)流水燈的效果。完成之后的程序如下:程序分析:
(1)由于這里我們要控制八個LED燈,如果像任務(wù)1中一樣,對P1口每一位聲明之后,逐位去控制LED燈,那程序會顯得非常復(fù)雜。當(dāng)需要對某個I/O口的八位一起操作時,一般采用整體操作的方式,即總線的方式。在while(1)循環(huán)中,首先對變量recy賦值為0x01,由于要點(diǎn)亮八個LED燈,所以使用了一個for循環(huán),循環(huán)執(zhí)行八次,就可以依次點(diǎn)亮八個LED燈?!癙1=~recy;”語句是將變量recy按位取反之后從P1口送出去,符號“~”是位運(yùn)算符,表示按位取反,recy的起始值為0x01(00000001B),按位取反后變?yōu)?xfe(11111110B),這樣相當(dāng)于置P1.0位為低電平,其余位為高電平,這就點(diǎn)亮了第一個LED燈。延時是讓剛剛點(diǎn)亮的燈亮一段時間。
(2)“recy=recy<<1;”語句表示將變量recy的值左移一位,“<<”是左移運(yùn)算符,當(dāng)需要對某個變量進(jìn)行移位運(yùn)算時,“<<”運(yùn)算符左側(cè)是需要移位的變量,右側(cè)寫上數(shù)字表示移幾位。程序?qū)ecy左移一位之后,變?yōu)?x02(00000010B);在for循環(huán)的第二次再將這個移位之后的值按位取反從P1口送出,這樣也就點(diǎn)亮了第二個LED燈,同時剛才點(diǎn)亮的第一個LED燈熄滅。如此,for循環(huán)八次,就可以逐個點(diǎn)亮LED燈了。退出for循環(huán)之后,由于程序處于while(1)的大循環(huán)中,再次為recy賦起始值,開始下一輪點(diǎn)亮LED燈。位運(yùn)算符如表1-7所示。表1-7位運(yùn)算符
3)軟硬件聯(lián)合調(diào)試
本任務(wù)調(diào)試中,主要是軟件程序的調(diào)試,可以分步調(diào)試,即先調(diào)試第一種點(diǎn)亮方式,通過之后,再調(diào)試第二種點(diǎn)亮方式。這個過程,可以在Keil的調(diào)試功能下查看I/O口的狀態(tài),也可以直接將HEX文件加到Proteus軟件下觀察硬件電路的狀態(tài)。
1.4項(xiàng)目拓展
1.4.1改變流水燈花式和點(diǎn)亮頻率
在任務(wù)2中設(shè)計(jì)的流水燈為八個LED按一個方向循環(huán)點(diǎn)亮,我們可以通過編程控制LED燈,使它以我們想要的各種方式點(diǎn)亮,而且LED燈點(diǎn)亮頻率可以通過改變延時時間來實(shí)現(xiàn)。下面的程序?yàn)閱纹瑱C(jī)控制八個發(fā)光二極管并使其以1s的時間間隔以各種形式循環(huán)點(diǎn)亮的例程:程序分析:
這個程序中,根據(jù)LED燈點(diǎn)亮的方式,將需要送向P1口的數(shù)據(jù)預(yù)先存放到數(shù)組中,程序運(yùn)行中,只要按照順序?qū)⑦@些數(shù)組元素送向P1口,就可以實(shí)現(xiàn)不同花式的流水燈。數(shù)組定義時寫“code”的含義是告訴單片機(jī),定義的數(shù)組要放在ROM(程序存儲區(qū))里面,寫入后就不能再更改。程序可以簡單的分為code(程序)區(qū)和data
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025機(jī)械設(shè)備的買賣合同
- 洛陽理工學(xué)院《工科大學(xué)化學(xué)-物理化學(xué)(二)》2023-2024學(xué)年第一學(xué)期期末試卷
- 污水處理廠導(dǎo)向鉆進(jìn)施工合同
- 墻繪施工合同范本
- 教育培訓(xùn)機(jī)構(gòu)勞務(wù)管理
- 食品企業(yè)財(cái)務(wù)健康檢查
- 2024年動力煤進(jìn)口清關(guān)共享成功之道!3篇
- 廣西壯族自治區(qū)河池市2023-2024學(xué)年高一上學(xué)期1月期末考試數(shù)學(xué)試題(解析版)
- 醫(yī)療器械招投標(biāo)管理規(guī)范
- 醫(yī)藥招投標(biāo)項(xiàng)目招標(biāo)文件編制
- 國家開放大學(xué)電大《建筑制圖基礎(chǔ)》機(jī)考三套標(biāo)準(zhǔn)題庫及答案3
- 降低故障工單回復(fù)不合格率
- 可涂色簡筆畫打印(共20頁)
- 燈光架介紹及使用說明
- 十一學(xué)校行動綱要
- GB 1886.6-2016 食品安全國家標(biāo)準(zhǔn) 食品添加劑 硫酸鈣(高清版)
- 關(guān)于房屋征收及土地收儲過程中的稅收政策(僅供參考)
- 唯一住房補(bǔ)貼申請書(共2頁)
- 單面多軸鉆孔組合機(jī)床動力滑臺液壓系統(tǒng)課程設(shè)計(jì)
- 中醫(yī)養(yǎng)生脾胃為先PPT文檔
- 門窗工程成品保護(hù)方案(附圖)
評論
0/150
提交評論