單片機(jī)實(shí)驗(yàn)課題有助于單片機(jī)的學(xué)習(xí)
實(shí)驗(yàn)一 Keil Vision的使用一、實(shí)驗(yàn)?zāi)康恼莆誎eil Vision的使用;掌握單片機(jī)匯編程序的調(diào)試方法。二、實(shí)驗(yàn)原理Keil Vision是美國(guó)Keil Software公司出品的單片機(jī)集成開發(fā)環(huán)境,具有單片機(jī)C語(yǔ)言或匯編語(yǔ)言程序編輯、編譯或匯編、連接、調(diào)試等功能,允許設(shè)置斷點(diǎn),查看程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器和SFR的內(nèi)容,以圖形的方式顯示SFR或變量?jī)?nèi)容隨時(shí)間的變化,是目前單片機(jī)開發(fā)最常用的軟件工具。運(yùn)行Keil Vision后,程序窗口如圖1-1所示。其中項(xiàng)目窗口用于管理工程項(xiàng)目所包含的文件,源程序窗口用于程序編輯,編譯信息窗口輸出編譯或匯編的狀態(tài)信息。各個(gè)窗口可以懸?。‵loating)在主窗口之上,也可以停泊(Docking)在主窗口中,單擊程序主窗口Window菜單的Rest View to Defaults命令,將窗口恢復(fù)成默認(rèn)狀態(tài)。編譯信息窗口源程序窗口項(xiàng)目窗口圖1-1 Keil Vision程序窗口三、實(shí)驗(yàn)環(huán)境Windows XP;Keil Vision 4;四、實(shí)驗(yàn)內(nèi)容1建立項(xiàng)目雙擊桌面Keil Vision圖標(biāo)或單擊開始菜單的Keil Vision命令運(yùn)行程序,出現(xiàn)圖1-1所示的程序窗口。在主程序菜單欄單擊Project菜單的New Vision Project命令,出現(xiàn)創(chuàng)建新文件對(duì)話框,為項(xiàng)目文件命名并選擇存放路徑(建議為每一個(gè)項(xiàng)目建立獨(dú)立的文件夾)。單擊保存按鈕,出現(xiàn)圖1-2所示器件選擇對(duì)話框,在Data base列表中選擇Atmel公司的AT89C52,作為項(xiàng)目使用的單片機(jī)。當(dāng)出現(xiàn)如圖1-3所示的添加啟動(dòng)代碼對(duì)話框時(shí),單擊否。圖1-2 器件選擇對(duì)話框圖1-3 添加啟動(dòng)代碼對(duì)話框2程序編輯單擊File菜單的New命令,出現(xiàn)源程序編輯窗口,在源程序編輯窗口中輸入?yún)R編程序并保存(擴(kuò)展名為asm)。ORG 0000Hmain:MOV P1,#00Hloop:INC P1SJMP loopEND在項(xiàng)目窗口中用鼠標(biāo)右鍵單擊Source Group 1,在彈出的快捷菜單中選擇Add Files to Group Source Group 1命令,將剛才保存的源程序文件添加到項(xiàng)目中。3程序調(diào)試在項(xiàng)目窗口中用鼠標(biāo)右鍵單擊Target 1,在彈出的快捷菜單中選擇Options for Target Target 1命令,出現(xiàn)圖1-4項(xiàng)目選項(xiàng)對(duì)話框。在選項(xiàng)對(duì)話框中,將晶振頻率改為12MHz。單擊主程序窗口的Build工具或按快捷鍵F7,對(duì)源程序進(jìn)行匯編。如果程序有錯(cuò),根據(jù)輸出信息修改源程序,重新進(jìn)行匯編,直到錯(cuò)誤為零。單擊主程序窗口Debug菜單的Start/Stop Debug Session命令,進(jìn)入調(diào)試狀態(tài)。調(diào)試狀態(tài)的主程序窗口如圖1-5所示。寄存器窗口可以查看和修改寄存器的值,反匯編窗口可以查看指令代碼及其在程序存儲(chǔ)器中的地址。單擊主程序窗口View菜單的Analysis Windows子菜單的Logic Analyzer命令,打開Logic Analyzer窗口,可以觀察SFR或變量的值隨時(shí)間的變化,各個(gè)子窗口排列可以通過鼠標(biāo)拖動(dòng)或右鍵單擊標(biāo)題欄選擇彈出的子菜單命令加以改變。單擊Logic Analyzer窗口的Setup按鈕,出現(xiàn)Setup Logic Analyzer對(duì)話框(如圖1-6),在對(duì)話框中單擊右上角的Insert按鈕,將P1添加到待分析信號(hào)中。圖1-4 項(xiàng)目選項(xiàng)對(duì)話框在主程序窗口中單擊Run工具或按快捷鍵F5運(yùn)行程序,然后單擊Stop工具或Debug菜單的Stop命令,停止程序運(yùn)行,觀察邏輯分析窗口中P1寄存器內(nèi)容隨時(shí)間的變化,應(yīng)如圖1-5所示呈鋸齒形變化。五、思考題1修改程序,使P1的值在0100之間變化。2修改程序,使P1的值隨時(shí)間呈三角形變化(如圖1-7所示)。圖1-5 調(diào)試狀態(tài)主程序窗口New(Insert)按鈕圖1-6 設(shè)置待分析信號(hào)圖1-7 P1隨時(shí)間呈三角形變化實(shí)驗(yàn)二 匯編語(yǔ)言程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康氖煜纹瑱C(jī)指令、偽指令的使用;掌握單片機(jī)匯編程序的設(shè)計(jì)、調(diào)試方法。二、實(shí)驗(yàn)原理1匯編語(yǔ)言匯編程序由指令語(yǔ)句、偽指令語(yǔ)句和宏指令語(yǔ)句構(gòu)成。指令語(yǔ)句即機(jī)器指令,由標(biāo)號(hào)、指令助記符、操作數(shù)和注釋四部分組成,單片機(jī)的指令長(zhǎng)度為13個(gè)字節(jié),大部分為單周期指令,少部分為雙周期指令,只有乘法、除法指令為四周期指令。偽指令語(yǔ)句定義程序結(jié)構(gòu)和符號(hào),在程序中起指示或說明作用,不產(chǎn)生機(jī)器碼。宏指令是通過將一段指令序列定義成一個(gè)宏,每次用到該指令序列可以用宏名代替。適當(dāng)使用宏指令,可以大大簡(jiǎn)化程序設(shè)計(jì),增強(qiáng)程序的可讀性。2兩字節(jié)乘除運(yùn)算單片機(jī)字長(zhǎng)8位,一次只能完成8位乘8位或8位除8位運(yùn)算,要進(jìn)行16位乘除運(yùn)算,需按運(yùn)算規(guī)則編程實(shí)現(xiàn)。16位乘法運(yùn)算如圖2-1所示,由四次8位乘法運(yùn)算組成,四次乘法運(yùn)算的乘積經(jīng)錯(cuò)位相加,形成32位乘積。R1(8位)R0(8位)R3(8位)R2(8位)R2R0(16位)R3R0(16位)R2R1(16位)R3R1(16位)Product(32位)圖2-1 兩字節(jié)乘法運(yùn)算16位除16位無符號(hào)整數(shù)除法運(yùn)算如圖2-2所示。設(shè)除數(shù)有n位前導(dǎo)0,則對(duì)除數(shù)循環(huán)左移n次,商為n+1位。被除數(shù)減除數(shù),夠減時(shí)商為1,不夠減時(shí)商為零,每減一次,除數(shù)右移一位,重復(fù)n+1次。三、實(shí)驗(yàn)環(huán)境Windows XP;Keil Vision 4;四、實(shí)驗(yàn)內(nèi)容1程序設(shè)計(jì)雙擊桌面Keil Vision圖標(biāo)或單擊開始菜單的Keil Vision命令運(yùn)行程序,在主程序中單擊Project菜單的New Vision Project命令,為項(xiàng)目文件命名并選擇存放路徑,選擇Atmel89C52作為項(xiàng)目所使用的單片機(jī)。單擊File菜單的New命令,出現(xiàn)源程序編輯窗口,在源程序編輯窗口中輸入?yún)R編程序并保存(擴(kuò)展名為asm)。被除數(shù)<除數(shù)?商=0,余數(shù)=被除數(shù)求除數(shù)前導(dǎo)0的個(gè)數(shù)n,并循環(huán)左移n次重復(fù)次數(shù)=n+1被除數(shù)-除數(shù)>0?上商=1上商=0除數(shù)右移重復(fù)次數(shù)=0?圖2-2 兩字節(jié)除法流程16位乘法運(yùn)算用R3、R2存放16位被乘數(shù),R1、R0存放16位乘數(shù),R7、R6、R5、R4存放32位乘積。ORG 0000HLJMP MAINMULT MACRO X,Y;宏定義MOV A,XMOV B,YMUL ABENDMMAIN:MULT R2,R0;R2R0 MOV R4,A MOV R5,B MULT R3,R0;R3R0 ADD A,R5 MOV R5,A MOV A,B ADDC A,#0 MOV R6,A MOV A,#0 ADDC A,#0 MOV R7,A MULT R2,R1;R2R1 ADD A,R5 MOV R5,A MOV A,B ADDC A,R6 MOV R6,A MOV A,R7 ADDC A,#0 MOV R7,A MULT R3,R1;R3R1 ADD A,R6 MOV R6,A MOV A,B ADDC A,,R7 MOV R7,,A END2程序調(diào)試單擊主程序窗口的Build工具或按快捷鍵F7,對(duì)源程序進(jìn)行匯編。單擊主程序窗口Debug菜單的Start/Stop Debug Session命令,進(jìn)入調(diào)試狀態(tài)。在寄存器窗口通過雙擊工作寄存值,將被乘數(shù)R3、R2設(shè)為B754H,乘數(shù)R1、R0設(shè)為A360H,通過按F10單步運(yùn)算程序。程序執(zhí)行后,檢查乘積R7、R6、R5、R4的值,應(yīng)為74FF3B80H。修改被乘數(shù)和乘數(shù),重新運(yùn)行程序,檢查結(jié)果是否正確。五、思考題1不用宏指令MULT,原程序該如何寫?2分析下列16位除法程序,用不同的被除數(shù)和除數(shù)驗(yàn)證運(yùn)算結(jié)果是否正確。ORG 0000HLJMP MAIN被除數(shù)高8位被除數(shù)低8位除數(shù)高8位除數(shù)低8位42H商高8位商低8位40H44Hdividend DATA 40H;存放被除數(shù)和余數(shù)division DATA 42H;存放除數(shù)quotient DATA 44H;存放商RRC16 MACRO TEMP;兩字節(jié)右移宏定義MOV A,TEMPRRC A;高字節(jié)右移MOV TEMP,AMOV A,TEMP+1RRC A;低字節(jié)右移MOV TEMP+1,AENDMRLC16 MACRO TEMP;兩字節(jié)左移宏定義MOV A,TEMP+1RLC A;低字節(jié)左移MOV TEMP+1,AMOV A,TEMPRLC A;高字節(jié)左移MOV TEMP,AENDMMAIN: MOV dividend,#0FEHMOV dividend+1,#1AH;設(shè)被除數(shù)為FE1AH(65050)MOV division,#00HMOV division+1,#0E6H;設(shè)除數(shù)為00E6H(230)MOV quotient,#00HMOV quotient+1,#00H;商清零MOV B,#00HMOV A,divisionADD A,division+1JNZ L0SETB OVSJMP EXIT;除數(shù)為零,則退出L0:MOV A,division;計(jì)算除數(shù)前導(dǎo)0的位數(shù)JB ACC.7,L1CLR CRLC16 division;兩字節(jié)除數(shù)左移1位INC BSJMP L0L1:INC BL2:CLR CMOV A,dividend+1SUBB A,division+1MOV A,dividendSUBB A,divisionJC L3 ;不夠減,商為0MOV A,dividend+1SUBB A,division+1MOV dividend+1,AMOV A,dividendSUBB A,divisionMOV dividend,ASETB C;夠減,商為1SJMP L4L3:CLR CL4:RLC16 quotient;兩字節(jié)商左移1位CLR CRRC16 division;兩字節(jié)除數(shù)右移1位DJNZ B,L2EXIT:SJMP $END實(shí)驗(yàn)三 C51程序設(shè)計(jì)與Proteus仿真一、實(shí)驗(yàn)?zāi)康恼莆誄51程序設(shè)計(jì)調(diào)試方法;掌握Proteus仿真軟件的使用;加深對(duì)單片機(jī)工作原理及外部引腳的理解。二、實(shí)驗(yàn)原理1Proteus簡(jiǎn)介Proteus ISIS是英國(guó)Labcenter公司開發(fā)的電路分析與仿真軟件。該軟件將單片機(jī)仿真和SPICE電路仿真相結(jié)合,支持單片機(jī)程序的編輯、匯編和調(diào)試,可以全速、單步、帶斷點(diǎn)運(yùn)行程序,可以查看各個(gè)寄存器、變量的值,同時(shí)支持第三方的編譯和調(diào)試軟件,如Keil Vision。目前支持的單片機(jī)有:68000系列、8051系列、AVR系列、PIC系列、HC11系列、以及ARM7TDMI系列。Proteus ISIS具有原理圖繪制功能。通過在原理圖設(shè)計(jì)窗口放置元件,利用鼠標(biāo)操作,實(shí)現(xiàn)元件之間的連線,完成原理圖設(shè)計(jì)。Proteus ISIS提供各種虛擬儀器,如示波器、信號(hào)發(fā)生器、邏輯分析儀等,方便電路的分析和仿真。計(jì)算機(jī)安裝了Proteus后,在“開始”菜單中增加了Proteus 7 Professional程序項(xiàng),單擊ISIS 7 Professional啟動(dòng)程序后,出現(xiàn)圖3-1所示的程序窗口。庫(kù)管理按鈕原理圖設(shè)計(jì)窗口器件選擇按鈕圖3-1 Proteus程序窗口2C51存儲(chǔ)器類型匯編語(yǔ)言產(chǎn)生的代碼少、速度快,但程序可讀性差,編程困難。C語(yǔ)言具有良好的可讀性、可移植性和基本的硬件操作能力,利用C51進(jìn)行程序設(shè)計(jì),可以專注于程序的邏輯結(jié)構(gòu)和算法實(shí)現(xiàn),大大提高程序設(shè)計(jì)的效率。C51根據(jù)單片機(jī)存儲(chǔ)器的結(jié)構(gòu),將存儲(chǔ)器分為不同的類型(如表3-1所示)。C51在定義變量時(shí),可以指定存儲(chǔ)器類型。如:unsigned char data i;表3-1 C51存儲(chǔ)器類型類別存儲(chǔ)器類型地址范圍code程序存儲(chǔ)器0000HFFFFHdata內(nèi)部可直接尋址數(shù)據(jù)存儲(chǔ)器00H7FHidata內(nèi)部可間接尋址數(shù)據(jù)存儲(chǔ)器00HFFHbdata內(nèi)部可位尋址數(shù)據(jù)存儲(chǔ)器20H2FHxdata外部數(shù)據(jù)存儲(chǔ)器0000HFFFFHpdata外部數(shù)據(jù)存儲(chǔ)器(一頁(yè))00HFFHsfr內(nèi)部特殊功能寄存器80HFFH由于單片機(jī)字長(zhǎng)只有8位,運(yùn)算能力較弱,因此變量盡量采用無符號(hào)字符型(unsigned char),存儲(chǔ)器類型盡量使用片內(nèi)數(shù)據(jù)存儲(chǔ)器(data、idata、bdata),以提高程序執(zhí)行速度。3LED掃描顯示LED數(shù)碼管是單片機(jī)最常見的數(shù)據(jù)顯示器。當(dāng)數(shù)碼管位數(shù)較多時(shí),一般采用動(dòng)態(tài)掃描方式,以節(jié)省單片機(jī)的I/O引腳,降低LED顯示功耗。單片機(jī)每次輸出七段顯示碼,同時(shí)使1位數(shù)碼管的公共端為有效電平(共陽(yáng)數(shù)碼管為高電平,共陰數(shù)碼管為低電平),則該顯示碼所對(duì)應(yīng)數(shù)字顯示在所選中的1位LED上。適當(dāng)延時(shí),輸出下一位顯示碼,實(shí)現(xiàn)掃描顯示。為使顯示穩(wěn)定無閃爍,延時(shí)時(shí)間一般為幾毫秒或十幾毫秒。三、實(shí)驗(yàn)環(huán)境Windows XP;Keil Vision 4;Proteus 7.8。四、實(shí)驗(yàn)內(nèi)容1電路設(shè)計(jì)啟動(dòng)ISIS 7 Professional,在主程序器件選擇窗口單擊器件選擇按鈕或在原理圖設(shè)計(jì)窗口單擊右鍵選擇Place “放置”命令,選擇Component“元件”子命令,出現(xiàn)圖3-2所示器件選擇對(duì)話框。在Microprocessor ICs類別中選擇80C52,在原理圖設(shè)計(jì)窗口中單擊鼠標(biāo),將單片機(jī)放入設(shè)計(jì)窗口,在Optoelectronics類別中選擇7SEG-MPX4-CC,將4位共陰數(shù)碼管放入設(shè)計(jì)窗口。通過單擊器件引腳,完成電路連線(如圖3-1所示)。單片機(jī)P2口輸出七段顯示碼,P3.0P3.3用于選擇顯示位,當(dāng)P3.0為低電平時(shí),最左邊的數(shù)碼管亮,P3.3為低電平時(shí),最右邊的數(shù)碼管亮。為實(shí)驗(yàn)新建一個(gè)文件夾,將電路設(shè)計(jì)文件保存在新建的文件夾中。實(shí)際電路設(shè)計(jì)時(shí)單片機(jī)P2.0P2.7需串聯(lián)限流電阻,否則可能因電流過大損壞單片機(jī),LED數(shù)碼管的位選擇1、2、3、4需采用緩沖器(四個(gè)三極管或74LS07),仿真時(shí)可省略。圖3-2 器件選擇對(duì)話框2程序設(shè)計(jì)啟動(dòng)Keil Vision,單擊Project菜單的New Vision Project命令,出現(xiàn)創(chuàng)建新文件對(duì)話框,為項(xiàng)目文件命名并選擇存放路徑(選擇與Proteus文件相同的文件夾),并選擇Atmel公司的AT89C52作為本項(xiàng)目使用的單片機(jī)。單擊File菜單的New命令,出現(xiàn)源程序編輯窗口,在源程序編輯窗口中輸入C語(yǔ)言程序并保存(擴(kuò)展名為.c)。主程序完成四位數(shù)字的顯示,子程序?qū)崿F(xiàn)延時(shí)。#include <reg51.h>void Delay(unsigned char);unsigned char code dispcode=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;void main()unsigned char minute=12,second=0;while(1) P3=0xF7; P2=dispcodesecond%10; Delay(5); P3=0xFB; P2=dispcodesecond/10; Delay(5); P3=0xFD; P2=dispcodeminute%10; Delay(5); P3=0xFE; P2=dispcodeminute/10; Delay(5); void Delay(unsigned char time)unsigned char j;while(time>0) for(j=0;j<255;j+);time-;單擊Keil Vision程序窗口Project菜單的Options for Target “Target 1”命令,在出現(xiàn)的Options for Target“Target 1”對(duì)話框中選擇Output選項(xiàng)卡,選中Create HEX File。單擊Build工具或Project菜單的Build命令,編譯源程序。如編譯出現(xiàn)錯(cuò)誤,根據(jù)輸出信息修改程序,重新編譯,直至錯(cuò)誤為零。3程序仿真在Proteus程序窗口雙擊單片機(jī)原理圖符號(hào),出現(xiàn)圖3-3編輯元件屬性對(duì)話框。單擊Program File的打開文件按鈕,選擇編譯生成的HEX文件作為單片機(jī)的程序文件。單片機(jī)的主頻設(shè)為12MHz。單擊Proteus窗口左下角的程序運(yùn)行按鈕,運(yùn)行單片機(jī)程序,觀察數(shù)碼管的顯示。打開文件按鈕圖3-3 編輯元件屬性對(duì)話框五、思考題1頭文件reg51.h有哪些內(nèi)容?2修改程序,實(shí)現(xiàn)動(dòng)態(tài)顯示兩位數(shù)的分和兩位數(shù)的秒。實(shí)驗(yàn)四 中斷與定時(shí)/計(jì)數(shù)器一、實(shí)驗(yàn)?zāi)康恼莆諉纹瑱C(jī)中斷結(jié)構(gòu);掌握單片機(jī)定時(shí)/計(jì)數(shù)器的應(yīng)用。二、實(shí)驗(yàn)原理1中斷源和中斷控制寄存器MCS-51單片機(jī)有五個(gè)中斷源,每個(gè)中斷源可通過編程設(shè)為高優(yōu)先級(jí)或低優(yōu)先級(jí),各中斷源名稱及對(duì)應(yīng)的中斷入口地址如表4-1所示。表4-1 中斷入口地址中斷序號(hào)中斷源入口地址0INT00003H1T0000BH2INT10013H3T1001BH4串行口0023H單片機(jī)與中斷相關(guān)的特殊功能寄存器是中斷允許寄存器IE和中斷優(yōu)先級(jí)寄存器IP。中斷允許寄存器IE的字節(jié)地址為A8H,其各位的定義如下:EA-ESET1EX1ET0EX0中斷優(yōu)先級(jí)寄存器IP的字節(jié)地址為B8H,其各位的定義如下:-PSPT1PX1PT0PX02定時(shí)/計(jì)數(shù)器的工作方式與控制寄存器MCS-51單片機(jī)內(nèi)部包含兩個(gè)十六位的定時(shí)/計(jì)數(shù)器T0和T1,當(dāng)被設(shè)為定時(shí)方式時(shí),實(shí)際上是對(duì)機(jī)器周期計(jì)數(shù),每個(gè)機(jī)器周期計(jì)數(shù)器加1。當(dāng)被設(shè)為計(jì)數(shù)方式時(shí),是對(duì)T0(P3.4)或T1(P3.5)引腳上的外部脈沖計(jì)數(shù)。單片機(jī)中與定時(shí)/計(jì)數(shù)器相關(guān)的特殊功能寄存器是定時(shí)/計(jì)數(shù)器控制寄存器TCON和定時(shí)/計(jì)數(shù)器模式寄存器TMOD。模式寄存器TMOD的字節(jié)地址為89H(不可位尋址),其各位的定義如下: GATEC/TM1M0GATEC/TM1M0T1控制T0控制M1M0工作模式00模式013位定時(shí)/計(jì)數(shù)方式01模式116位定時(shí)/計(jì)數(shù)方式10模式28位自動(dòng)重裝載方式11模式3對(duì)T0:分為一個(gè)8位的定時(shí)/計(jì)數(shù)器TL0和一個(gè)8位的定時(shí)器TH0對(duì)T1:停止計(jì)數(shù)C/=0,為定時(shí)器方式;C/=1,為計(jì)數(shù)器方式。GATE=0,定時(shí)/計(jì)數(shù)器的啟動(dòng)和停止完全由TCON的TR位控制。GATE=1,只有當(dāng)TR=1并且引腳為高電平時(shí)才啟動(dòng)計(jì)數(shù)器??刂萍拇嫫鱐CON的字節(jié)地址為88H,其各位的定義如下:TF1TR1TF0TR0IE1IT1IE0IT0定時(shí)/計(jì)數(shù)器外中斷控制TRx:定時(shí)/計(jì)數(shù)器啟??刂?,TRx=1啟動(dòng)定時(shí)/計(jì)數(shù)器(當(dāng)GATE=0時(shí))。TFx:定時(shí)/計(jì)數(shù)器溢出標(biāo)志,當(dāng)定時(shí)/計(jì)數(shù)器溢出時(shí),由硬件置位,CPU響應(yīng)中斷時(shí),自動(dòng)清零。3定時(shí)初值的計(jì)算當(dāng)單片機(jī)的振蕩頻率為fOSC,則機(jī)器周期為12/fosc,設(shè)定時(shí)初值為TC,則定時(shí)周期t為:其中L為計(jì)數(shù)器的位數(shù),模式0時(shí)L=13,模式1時(shí)L=16,模式2、模式3時(shí)L=8。三、實(shí)驗(yàn)環(huán)境Windows XP;Keil Vision 4;Proteus 7.8。四、實(shí)驗(yàn)內(nèi)容1定時(shí)器的應(yīng)用利用定時(shí)/計(jì)數(shù)器T0的定時(shí)功能(工作方式1),使P1.0輸出1KHz的方波,并用虛擬示波器觀測(cè)輸出波形。啟動(dòng)Proteus仿真軟件,在原理圖設(shè)計(jì)窗口放置AT89C52單片機(jī),右擊原理圖設(shè)計(jì)窗口,在彈出的快捷菜單中選擇Place命令的Virtual Instrument子命令,選擇OSCILLOSCOPE,將虛擬示波器放入設(shè)計(jì)窗口,將P1.0輸出信號(hào)送示波器A通道(如圖4-1所示)。圖4-1 定時(shí)器應(yīng)用實(shí)驗(yàn)原理圖設(shè)單片機(jī)的振蕩頻率為12MHz,定時(shí)初值為:15匯編參考程序如下(請(qǐng)自行補(bǔ)充完整):ORG 0000HLJMP MAINORG 000BH;T0中斷入口地址CPL P1.0MOV TH0,#0FEHMOV TL0,#0CHRETIORG 0100HMAIN:MOV IE,#82H;允許T0中斷MOV TMOD,#01;T0方式1定時(shí)MOV TH0,#0FEHMOV TL0,#0CHSETB TR0SJMP $ENDC語(yǔ)言參考程序如下:#include <reg51.h>sbit P10=P10;void main ()IE=0x82;TMOD=0x1;TH0=0xFE;TL0=0x0C;TR0=1;while(1);void T0_isr () interrupt 1TH0=0xFE;TL0=0x0C;P10=!P10;用匯編語(yǔ)言設(shè)計(jì)程序,可以單擊Proteus程序窗口Source菜單的Add/Remove Source file命令,出現(xiàn)圖4-2所示對(duì)話框,在對(duì)話框中單擊New按鈕,為單片機(jī)建立匯編源程序,然后編輯、編譯程序。用C語(yǔ)言設(shè)計(jì)程序,可使用Keil編輯和編譯源程序,最后生成HEX文件,在Proteus程序窗口雙擊單片機(jī)原理圖符號(hào),將編譯生成的HEX文件作為單片機(jī)的程序文件。最后運(yùn)行程序,出現(xiàn)圖4-3所示虛擬示波器窗口,觀察示波器中的波形并讀取周期和頻率。圖4-2 添加/移除匯編源程序?qū)υ捒驁D4-3 虛擬示波器2實(shí)時(shí)時(shí)鐘單片機(jī)外接四位LED數(shù)碼管用于顯示分和秒(如圖4-4所示),定時(shí)/計(jì)數(shù)器T0設(shè)為工作方式2,定時(shí)時(shí)間200S,當(dāng)單片機(jī)主頻為12MHz時(shí)定時(shí)初值為56,每5000次中斷秒加1,每60秒分加1。用匯編或C語(yǔ)言寫出相應(yīng)的程序(LED掃描顯示可參照實(shí)驗(yàn)三)。圖4-4 實(shí)時(shí)時(shí)鐘電路編譯運(yùn)行程序,觀察LED顯示的時(shí)間和Proteus窗口的ANIMATING時(shí)間,比較兩者的誤差。五、思考題1影響實(shí)時(shí)時(shí)種計(jì)時(shí)精度的因素有哪些,如何進(jìn)一步提高計(jì)時(shí)精度?實(shí)驗(yàn)五 串行口一、實(shí)驗(yàn)?zāi)康恼莆諉纹瑱C(jī)串行口的內(nèi)部結(jié)構(gòu)和工作方式;掌握單片機(jī)串行口的應(yīng)用;二、實(shí)驗(yàn)原理1串行口的工作方式及其控制寄存器MCS-51系列單片機(jī)內(nèi)含一個(gè)16位全雙工串行口,有四種工作方式,既可以用于擴(kuò)展單片機(jī)的輸入/輸出口,也可以實(shí)現(xiàn)單片機(jī)與單片機(jī)、單片機(jī)與微機(jī)的串行通信。與串行口相關(guān)的特殊功能寄存器(SFR)有串行口控制寄存器SCON、串行口數(shù)據(jù)寄存器SBUF及電源控制寄存器PCON。串行口控制寄存器SCON的字節(jié)地址為98H,其各位的定義如下:SM0SM1SM2RENTB8RB8TIRISM0SM0SM1工作模式00方式0同步移位寄存器方式(波特率為fosc/12)01方式110位異步通信方式(UART)(波特率可編程)10方式211位異步通信方式(UART)(波特率為fosc/64或fosc/32)11方式311位異步通信方式(UART)(波特率可編程)SM2在方式2和方式3時(shí),作為多機(jī)通信的使能位,SM2=1時(shí),只有當(dāng)收到的第九個(gè)數(shù)據(jù)位為1時(shí),才會(huì)使RI置位。REN為接收允許位。REN=1時(shí)允許接收。TB8為方式2或方式3時(shí)發(fā)送的第九個(gè)數(shù)據(jù)位。RB8為方式2或方式3時(shí)接收的第九個(gè)數(shù)據(jù)位。TI為發(fā)送中斷標(biāo)志。由硬件置位,需由軟件清除。RI為接收中斷標(biāo)志。由硬件置位,需由軟件清除。串行口數(shù)據(jù)寄存器SBUF實(shí)際上包含兩個(gè)獨(dú)立的寄存器:發(fā)送數(shù)據(jù)寄存器和接收數(shù)據(jù)寄存器。寫SBUF訪問發(fā)送數(shù)據(jù)寄存器并啟動(dòng)一次串行發(fā)送;讀SBUF訪問接收數(shù)據(jù)寄存器,它們的字節(jié)地址均為99H。電源控制寄存器PCON的字節(jié)地址為87H,其最高位為波特率系數(shù)控制位,當(dāng)SMOD=1時(shí),波特率加倍。PCON各位的定義如下:SMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMODSMOD-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-SM2-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-REN-RENGF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF1TB8GF0PDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIPDTIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIIDLRIGF1、GF0為通用標(biāo)志位。PD為掉電方式位,PD=1進(jìn)入掉電方式。IDL為待機(jī)方式位,IDL=1進(jìn)入待機(jī)方式。2串行口波特率的計(jì)算當(dāng)單片機(jī)的振蕩頻率為fOSC、定時(shí)/計(jì)數(shù)器的溢出速率為F時(shí),串行口的波特率分別為:方式0:波特率=方式2:波特率=方式1和方式3:波特率=若定時(shí)器工作在8位自動(dòng)重裝載方式(方式2),定時(shí)初值為TC,則溢出速率F=3串行口的應(yīng)用方式0主要用于輸入/輸出口的擴(kuò)展,方式1主要用于單片機(jī)與單片機(jī)之間、單片機(jī)與微機(jī)之間的串行通信(每次通信傳輸8個(gè)數(shù)據(jù)位),方式2和方式3主要用于多機(jī)通信或一次通信需要9個(gè)數(shù)據(jù)位(如帶奇偶校驗(yàn))的情況。三、實(shí)驗(yàn)環(huán)境Windows XP;Proteus7.5。四、實(shí)驗(yàn)內(nèi)容1串行口方式0實(shí)驗(yàn)串行口工作在方式0時(shí),可通過外接移位存儲(chǔ)器實(shí)現(xiàn)串并行轉(zhuǎn)換。在這種方式下,數(shù)據(jù)為8位,只能從RXD端輸入輸出,TXD端總是輸出移位同步時(shí)鐘信號(hào),其波特率固定為晶振頻率1/12。由軟件置位串行控制寄存器SCON的REN后才能啟動(dòng)串行接收,在CPU將數(shù)據(jù)寫入SBUF寄存器后,立即啟動(dòng)發(fā)送。待8位數(shù)據(jù)傳輸完后,硬件將SCON寄存器的TI位置1,TI必須由軟件清零。實(shí)驗(yàn)連線如圖5-1所示,圖中數(shù)碼管采用“7SEG-COM-ANODE”共陽(yáng)數(shù)碼管。圖5-1 串并轉(zhuǎn)換實(shí)驗(yàn)電路圖使數(shù)碼管輪流顯示0-9的數(shù)字的參考程序如下:ORG 0000MOV SCON,#00H;串行口方式0,禁止接收。MOV DPTR,#CDATALOOP:MOV R0,#0LP: MOV A,R0 MOVC A,A+DPTR MOV SBUF,A JNB TI,$ CLR TI INC R0 LCALL DELAY CJNE R0,#0AH,LP SJMP LOOPDELAY:MOV R5,#5DE2: MOV R6,#0DE1: MOV R7,#0 DJNZ R7,$ DJNZ R6,DE1 DJNZ R5,DE2 RETCDATA: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H END寫出C語(yǔ)言程序并運(yùn)行,觀察并記錄結(jié)果。2雙機(jī)串行通信實(shí)驗(yàn)實(shí)驗(yàn)原理圖如圖5-2所示,要求單片機(jī)U1的外接開關(guān)DIPSW_8可控制單片機(jī)U2的外接LED燈LED-BARGRAPH-GRN的亮暗。圖5-2 雙機(jī)串行通信實(shí)驗(yàn)原理圖單片機(jī)U1發(fā)送數(shù)據(jù)參考程序如下:ORG 0LJMP MAINORG 23HCLR TIMOV A,P1MOV SBUF,ARETIORG 30HMAIN: MOV SCON,#40H;串行口方式1,禁止接收MOV TMOD,#20HMOV TL1,#0E0HMOV TH1,#0E0HSETB TR1MOV IE, #90HMOV A,P1MOV SBUF,ASJMP $END單片機(jī)U2接收參考程序如下:ORG 0LJMP MAINORG 23HCLR RIMOV A,SBUFMOV P2,ARETIORG 30HMAIN: MOV SCON,#50H;串行口方式1,允許接收MOV TMOD,#20HMOV TL1,#0E0HMOV TH1,#0E0HSETB TR1MOV IE, #90HSJMP $END寫出C語(yǔ)言程序,編譯后分別添加到單片機(jī)U1和U2。(如果用匯編編程,可直接選擇單片機(jī)U1,單擊源代碼菜單的添加/刪除源文件命令,為U1添加源程序。選擇單片機(jī)U2,再次單擊源代碼菜單的添加/刪除源文件命令,為U2添加源程序)。運(yùn)行程序,單擊DIP開關(guān),改變U1單片機(jī)P1口的輸入狀態(tài),觀察U2單片機(jī)P2口LED的變化。五、思考題1實(shí)驗(yàn)內(nèi)容1不使用延時(shí)程序,而利用定時(shí)器實(shí)現(xiàn)1秒定時(shí),程序應(yīng)如何修改?2實(shí)驗(yàn)內(nèi)容2通信的波特率為多少?