




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、【精品文檔】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學(xué)習(xí)與交流Keil軟件使用手冊.精品文檔.Keil軟件使用手冊(本手冊參考keil 4版本)一 安裝到網(wǎng)上下載一個安裝包,里面必須包含以下內(nèi)容:1:(安裝包文件,圈選的文件為安裝說明,請務(wù)必仔細(xì)閱讀)2:(打開安裝文件)3:(點擊下一步)4:(勾選同意,并點擊下一步) 5:(瀏覽選擇到你想安裝的地方,然后選擇下一步) 6:(兩個空可以隨便打,不重要,填完后點擊下一步) 7:(正在安裝中) 8:(點擊完成) 9:(進(jìn)入安裝的文件夾,點擊UV4)10:(打開Keil4的執(zhí)行文件)11:(點擊File,再選擇License Management)Pic 12
2、:(復(fù)制右上角的ID號)12:(打開注冊機文件)13:(將復(fù)制的ID號粘貼在此處)14:(點擊Generate,在上方會生成一組ID,復(fù)制下來)15:(將復(fù)制好的ID粘貼在圈選出,并點擊Add LIC) 16:(當(dāng)你看見這兩組單詞,那么恭喜你,注冊成功,準(zhǔn)備開始你的奇妙程序之旅吧?。┒?新建工程1. 單擊Project,選擇New Project2 選擇保存位置,輸入工程的名字3 選擇CPU。緊接著,Keil C51提示您選擇CPU器件。8051內(nèi)核片機最早是由Intel公司發(fā)明的,后來其他廠商如Philips、Atmel、Winbond等先后推出其兼容產(chǎn)品,并在8051的基礎(chǔ)上擴展了許多增強
3、功能,根據(jù)芯片的實際情況,選擇相應(yīng)的器件(本例程選擇Atmel公司下的AT89C52),如圖:注:選擇8051也可以,8051與8052有一點的差別,可以說8052是8051的升級版,主要有以下不同:1. 內(nèi)部RAM,8051單片機為128Byte(00H-7FH),8052單片機為56 Byte (00H-0FFH)2.內(nèi)部ROM,8051單片機為4KB,8052單片機為8KB3.8051有兩個Timer:T0和T1。8052除了有T0和T1以外,還有一個Timer24.8051有5個中斷源 8052有6個。關(guān)于單片機的知識我們將在后面做詳細(xì)介紹。4. 選擇C語言啟動代碼 如果使用匯編來編程
4、,請選擇“否”。 如果使用C51來編程,請選擇“是”。 如果不出現(xiàn)本提示,請檢查是否將安裝是否出錯。5. 源程序文件 選擇File菜單,選擇New,然后單擊保存按鈕本例程保存為test.c,如果是用匯編寫的程序保存的后綴名應(yīng)該寫成.asm右鍵工程項目,選擇Add Fliles to 將剛才保存的test.c 添加到工程里面去以上就是工程的搭建,剩下的就是寫程序程序?qū)懲昃幾g通過后,設(shè)置生成HEX文件右鍵單擊Target 1,選擇Option for Target 1或者直接點擊工具欄上面的按鈕彈出的窗口選擇Output,選上Create HEX編譯生成HEX文件單擊工具欄的“Rebuild al
5、l target files”按鈕果程序有錯,則會顯示錯誤所在的文件及行號。如下圖,表示test.c文件的第35行有錯誤,雙擊則可定位到該位如果程序沒有錯誤則會生成HEX文件。Data后面的數(shù)據(jù)表示使用片內(nèi)RAM的大小,xdata表示使用外部數(shù)據(jù)大小,code表示程序的大小三 軟件調(diào)試調(diào)試一般都是在發(fā)生錯誤與意外的情況下使用的。如果程序能正常執(zhí)行,調(diào)試很多時候都是用不上的。所以,最高效率的程序開發(fā)還是程序員自己做好規(guī)范,而不是指望調(diào)試來解決問題。 單片機的程序調(diào)試分為兩種,一種是使用軟件模擬調(diào)試,第二種是硬件調(diào)試。 使用軟件模擬調(diào)試,就是用計算機去模擬單片機的指令執(zhí)行,并虛擬單片機片內(nèi)資源,從
6、而實現(xiàn)調(diào)試的目的。但是軟件調(diào)試存在一些問題,不可能像真正的單片機運行環(huán)境那樣執(zhí)行的指令能在同一個時間完成(往往比單片機慢)。軟件調(diào)試只能是一種初步的,小型工程的調(diào)試,比如一個只有幾百上千行的代碼的程序,軟件調(diào)試能很好的完成。 硬件調(diào)試其實也需要計算機軟件的配合,大致過程是這樣的:計算機軟件把編譯好的程序通過串行口、并行口或者USB口傳輸?shù)椒抡嫫?,然后與單片機一樣執(zhí)行。仿真器仿真全部的單片機資源(所有的單片機接口,并且有真實的引腳輸出)。仿真器會將單片機內(nèi)部內(nèi)存與時序等情況返回給計算機,這樣 就可以在計算機里看到單片機程序真實的執(zhí)行情況。不僅如此,還可以通過計算機的軟件實現(xiàn)單步、全速、運行到光標(biāo)
7、的常規(guī)調(diào)試手段。仿真器可以接入實際的電路中仿真器以下介紹軟件模擬調(diào)試調(diào)試的重要性前面我們學(xué)習(xí)了如何建立工程,編寫C源文件,連接工程,并獲取生成的目標(biāo)代碼,但是坐到這些僅僅代表你的源程序沒有語法錯誤,至于程序中存在其它錯誤必須通過調(diào)試才能解決。事實上,除了一小部分極其簡單的程序絕大部分程序都要通過多次調(diào)試才能得到正確結(jié)果,調(diào)試是單片機開發(fā)過程中一個非常重要的環(huán)節(jié)。常用調(diào)試命令在對工程成功地進(jìn)行匯編、連接以后,按Ctrl+F5或者使用菜單Debug->Start/Stop Debug Session即可進(jìn)入調(diào)試狀態(tài),Keil內(nèi)建了一個仿真CPU用來模擬執(zhí)行程序,該仿真CPU功能強大,可以在沒
8、有硬件和仿真機的情況下進(jìn)行程序的調(diào)試工具欄上從左到右依次為:查找(find out),第二個幾乎不用,開始停止調(diào)試,后面幾個帶圈的都和斷點相關(guān)具體可將鼠標(biāo)移到圖標(biāo)上查看,和工程窗口相關(guān)的幾個小幫助最后一個是配置,可以修改各個窗口的字體,short cut key等等。單擊中的調(diào)試按鈕可以進(jìn)入或者退出調(diào)試,單擊進(jìn)入進(jìn)入調(diào)試狀態(tài)后,界面與編緝狀態(tài)相比有明顯的變化,Debug菜單項中原來不能用的命令現(xiàn)在已可以使用了,工具欄會多出一個用于運行和調(diào)試的工具條,如圖所示,Debug菜單上的大部份命令可以在此找到對應(yīng)的快捷按鈕,從左到右依次是:復(fù)位、運行、暫停、單步、過程單步、執(zhí)行完當(dāng)前子程序、運行到當(dāng)前行
9、、命令窗口(command window)、匯編窗口(disassembly window)、控制特殊功能寄存器顯示窗口(Symble window)、寄存器窗口(工程窗口那塊)(register window)、堆棧調(diào)用窗口(Call stack)、監(jiān)視窗口(watch window)、子窗口是locals watch1 watc2、存儲器窗口(memory window)、串行口調(diào)試窗口(serial window)、分析窗口(包含邏輯分析儀,性能分析儀),工具按鈕等命令。全速執(zhí)行,復(fù)位重新開始執(zhí)行,逐語句執(zhí)行,跟蹤進(jìn)函數(shù)內(nèi)部,先設(shè)置一個斷點,全速運行程序如下:出現(xiàn)幾個工作區(qū)間,以下介紹這
10、幾個區(qū)域:1 左側(cè)是單片機內(nèi)寄存器的狀態(tài)區(qū)域,給出了常用的寄存器r0r7以及a,b,sp,dptr,pc,psw等特殊功能寄存器的值,這些值會隨著程序的執(zhí)行發(fā)生相應(yīng)的變化。(涉及單片機內(nèi)存,若未學(xué)過匯編語言,建議了解);其中Regs是片內(nèi)內(nèi)存的相關(guān)情況值;Sys是系統(tǒng)一些累加器、計數(shù)器等。具體介紹一下Sys:a 累加器ACC,往往在運算前暫存一個操作數(shù)(如被加數(shù)),而運算后又保存其結(jié)果(如代數(shù)和)。b 寄存器B,主要用于乘法和除法操作。spsp_maxdptr 數(shù)據(jù)指針DPTR。PC $states 執(zhí)行指令的數(shù)量。sec 執(zhí)行指令的時間累計(單位:秒)。psw 程序狀態(tài)標(biāo)志寄存器PSW,八位
11、寄存器,用來存放運算結(jié)果的一些特征量,如有無進(jìn)位、借位等。p 奇偶標(biāo)志P。反映累加器ACC內(nèi)容的奇偶性,如果ACC中的運算結(jié)果有偶數(shù)個1(如11001100B,其中有4個1),則P為0,否則,P=1。f1ov 溢出標(biāo)志位OV。MCS51反映帶符號數(shù)的運算結(jié)果是否有溢出,有溢出時,此位為1,否則為0。rsf0ac 輔助進(jìn)位標(biāo)志AC。又稱半進(jìn)位標(biāo)志,它反映了兩個八位數(shù)運算低四位是否有半進(jìn)位,即低四位相加(或減)有否進(jìn)位(或借位),如有則AC為1狀態(tài),否則為0。cy 進(jìn)位標(biāo)志CY(PSW 7)。它表示運算是否有進(jìn)位(或借位)。如果操作結(jié)果在最高位有進(jìn)位(加法)或者借位(減法),則該位為1,否則為0。
12、由于PSW存放程序執(zhí)行中的狀態(tài),故又叫程序狀態(tài)字。運算器中還有一個按位(bit)進(jìn)行邏輯運算的邏輯處理機(又稱布爾處理機)。根據(jù)指令執(zhí)行的不同,上述值會有相應(yīng)的變化,程序員可以監(jiān)測這些在單片機中看不到的值而達(dá)到調(diào)試的目的2 C語言源代碼區(qū)域3 反匯編指令區(qū)域這個是Disassembly Windows ,按下后可以把C51 Disassembly 轉(zhuǎn)化為相應(yīng)的匯編語言,如果有匯編語言知識的話,就可以對比C51程序與匯編程序了。由于匯編語言的效率高很多,這也可以作為查看C51執(zhí)行效率的一個方法??梢钥闯觯珻51 代碼是如何被解釋為匯編的。4 查看變量的值5 查看存儲器的值選擇View Memor
13、y Window存儲器窗口的地址欄處輸入0000H后回車,則可以查看單片機內(nèi)程序存儲器的內(nèi)容,單元地址前有”C:”表示程序存儲器。如果在存儲器窗口的地址欄處輸入D:00H后回車,則可以查看單片機內(nèi)數(shù)據(jù)存儲器的內(nèi)容,單元地址前有“D:”表示數(shù)據(jù)存儲器,單元地址前有”X:”表示片外數(shù)據(jù)區(qū),冒號后面表示要查看的數(shù)據(jù)地址。6 雖然軟件調(diào)試無法實現(xiàn)硬件調(diào)試那樣的信號輸出,但是軟件調(diào)試也可以在軟件窗口監(jiān)測輸出信號的高低電平,以及單片機相關(guān)端口的變化,實現(xiàn)模擬監(jiān)測輸出信號的目的。在主菜單欄:peripherals可以查看定時器,和IO口的數(shù)值,中斷,串行通信上圖所示,Port0,Port1,Port2,Po
14、rt3就對應(yīng)于51單片機的四個P0,P1,P2,P3 口,共32個針腳查看輸出波形單擊,然后選setup可以輸入想要觀察的引腳。全速運行并單擊圖中的all,可以看到以下效果,單擊圖中的out或者in可以對單位時間進(jìn)行修改。選擇合適的時間可以清楚得觀察高低電平變化及占空比下面我們來看一個實例:Keil C51程序調(diào)試過程用Keil C51編寫程序時,經(jīng)常需要調(diào)試,如果不是經(jīng)常用這個軟件的話,很容易忘記這些調(diào)試步驟,現(xiàn)在舉一個例子“驗證延遲函數(shù)delay()使其延遲的時間為500ms”說明。源程序?qū)懲旰?,就可以調(diào)試了,按照圖1所示,先進(jìn)行第一步和第二步操作,使界面切換到圖2的狀態(tài),可以看到在文本編
15、輯窗口中,有一個黃色箭頭指向13行的位置,說明程序從這個位置開始執(zhí)行。左上角有一些跟調(diào)試相關(guān)的按鈕,如“全速執(zhí)行”、“單步進(jìn)入”。對于這個例子,目的是驗證delay()函數(shù)的延遲時間,使其大約為500ms。按照下列方法可以達(dá)到這個目的:圖1 編譯界面圖2 調(diào)試界面點擊“單步跳出”按鈕(或功能鍵F10),黃色箭頭從第13行往下移一行(14),再單擊“單步跳出”,則箭頭移到15行那邊,表示程序從第13行執(zhí)行到第15行(注:這種方式是一步一步執(zhí)行程序。如果要同時執(zhí)行幾行,比如從第13行一下子執(zhí)行到15行,可以作如下操作:先用鼠標(biāo)在第15行的位置處點擊兩下會出現(xiàn)一個圖2所示的紅色圖標(biāo);然后
16、點擊“全速執(zhí)行”按鈕,則黃色的箭頭會從第13行快速移到15行。即:這兩行同時被執(zhí)行)。此時左邊寄存器窗口中的sec有一個數(shù)值,表示程序執(zhí)行的時間,即delay()函數(shù)的延遲時間。如果延遲時間不是500ms,可改變delay()函數(shù)中x,y的數(shù)值,再點擊圖1的第二步所對應(yīng)的按鈕切換到圖1所示的編譯界面,點擊“重新構(gòu)造所有對象文件”編譯程序,然后再切換到圖2的界面上來進(jìn)行調(diào)試。重復(fù)上面的步驟,直到左邊寄存器窗口中的sec(單位秒)數(shù)值大約為0.50s,即可說明delay()延遲時間為500ms。(注:這種方法比較麻煩,而且延遲時間不會很精確,如果要精確延遲的話可采用定時器的方式。)Keil C調(diào)試
17、案例-優(yōu)化導(dǎo)致的問題如下是一個簡單的Keil C中的小程序:#include <reg52.h>void main()unsigned char i,j;i = 0xf0;j = 0x0f;P0 = i;P1 = j;while (1); 編譯OK后,進(jìn)入Debug session,按F11單步執(zhí)行,發(fā)現(xiàn)"i = 0xf0"和"j = 0x0f"這兩句沒有執(zhí)行。如下圖:很多初學(xué)者百思不得其解,其實,這是由于Keil C本身的8級優(yōu)化導(dǎo)致的。解決的方法有兩種:1、降底優(yōu)化級別,如下圖,可降至級別2。2、在局部變量i,j定義前加上Volatile
18、,禁止Keil C優(yōu)化這兩個變量。如下:volatile unsigned char i,j; 調(diào)試OK!KEIL-C調(diào)試點滴問:用KEIL寫C代碼,做完以后的調(diào)試工作應(yīng)該如何開展?只有PC機,沒有任何的硬件設(shè)備。用自帶的編譯功能然后查錯誤。寫完代碼后,F(xiàn)7編譯,Alt+F5調(diào)試,F(xiàn)10單步運行??梢圆榭醇拇嫫鞯闹狄约癛AM的內(nèi)容。還可以改變P0P3口的輸入。KEIL就是一個開發(fā)仿真一體的。Keil C本身就是編譯與仿真一體的。當(dāng)不要外部數(shù)據(jù)時很方便,可以使用Keil C自帶的軟件調(diào)試器(軟件仿真器),有單步運行,設(shè)置斷點等功能。當(dāng)要外部輸入時(比如用定時器作計數(shù)器用),有
19、兩種處理方法:(1)做產(chǎn)品時最好是用硬件仿真器調(diào)試。(2)學(xué)習(xí)時可用以下方法:Keil C提供了幾個調(diào)試輸入用的窗口,可用它們來模擬輸入;調(diào)試函數(shù)由自己根據(jù)需要按特定的格式來編輯,再按KEIL C的要求調(diào)入即可。下面給出用定時器作外部事件計數(shù)時模擬外部輸入的調(diào)試函數(shù),并寫出Keil C調(diào)用的步驟如下:步驟一:編寫如下信號函數(shù):single void t0_singal(void)while(1)PORT3|=0x10; /pull INT0(P3.4) high againPORT3&=0x10; /pull INT0(P3.4) lo
20、w and generate interruptPORT3|=0x10; /pull INT0(P3.4) high againtwatch(CLOCK); /wait for 1 second步驟二:在DEBUG狀態(tài)下選擇:DEBUG“Function Editor(Open Ini File)",這時,將彈出兩個新屏幕,將其中的“打開”窗口關(guān)閉;保留“Function Editor窗口;步驟三:在Function Editor窗口中輸入上面的函數(shù):single void
21、t0_singal(void)步驟四:保存(注意:擴展名為.ini),編譯該程序,成功后關(guān)閉Function Editor窗口;步驟五:執(zhí)行用戶程序(必須連續(xù)執(zhí)行);步驟六:在屏幕左下腳的命令窗口中,鍵入t0_singl()后(必須回車),Keil C便可向P3.4源源不斷地提供脈沖信號。四 基于8051+Proteus仿真案例Protues簡介Protues軟件是英國Labcenter electronics公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機及外圍器件。它是目前最好的仿真單片機及外圍器件的工具。雖然目前國內(nèi)推廣剛起步,但已受到
22、單片機愛好者、從事單片機教學(xué)的教師、致力于單片機開發(fā)應(yīng)用的科技工作者的青睞。Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計,真正實現(xiàn)了從概念到產(chǎn)品的完整設(shè)計其處理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年增加Cortex和DSP系列處理器,并持續(xù)增加其他系列處理器模型。在編譯方面,它也支持IAR、Keil和MPLAB等多種編譯。這里請讀者自行安裝好Proteus,雙擊已安裝好的Proteus,我們將簡單的介紹該軟件,要深入
23、學(xué)習(xí)請查閱其它資料。Protues軟件界面左側(cè)的工具欄提供豐富的硬件資源用Protues搭建單片機系統(tǒng)第一步,新建設(shè)計。單擊“File”“New Design”命令(或單擊圖標(biāo)命令 ),在 Protues中打開了一個空白的新電路圖紙。 第二步,添加所需器件。單擊“Library”“Pick Device/Symbol”命令(或單擊圖標(biāo)命令 ),單擊左側(cè)的,然后點擊打開器件選擇對話框,如圖3-1所示,在對話框左上角有個關(guān)鍵字“Keyword” 搜索文字框,如果我們知道器件型號可輸入其中,Protues將自動幫我們找到所需器件首 先,輸入“AT89C51”點擊Ok選中器件,在電路繪制區(qū)中央單擊鼠標(biāo)
24、,AT89C51單片機就被放置到了電路圖中。參考單片機的放置方法把其它器件如晶振、電容、電阻、發(fā)光二極管等也放置到電路圖中的適當(dāng)位置。這幾個器件在器件選擇對話框中的關(guān)鍵詞分別為:res(電阻)、crystal(晶體振蕩器)、cap(電容)、led-red、7seg(數(shù)碼管)(關(guān)鍵字不唯一)。其它器件添加進(jìn)去后,連接各器件構(gòu)成原理圖。所有元器件都放置到電路圖后的效果如圖接下來就是將寫好的程序下載到CPU里面去,雙擊CPU會彈出下面的窗口點擊將生成的Hex文件燒錄到CPU即可開始仿真依次是,運行、單步運行、暫停、停止開始仿真按鈕,退出仿真在仿真中,紅色代表高電平,藍(lán)色代表低電平,灰色代表不確定。下
25、面介紹幾個簡單案例:1閃爍的LED/* 名稱:閃爍的LED說明:LED按設(shè)定的時間間隔閃爍#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P10;/延時void DelayMS(uint x)uchar i;while(x-)for(i=0;i<120;i+);/主程序void main()LED=0;while(1)LED=LED;DelayMS(150);2 單只數(shù)碼管循環(huán)顯示09/*名稱:單只數(shù)碼管循環(huán)顯示09說明:主程序中的循環(huán)語句反復(fù)將09的段碼送至P0口,使
26、數(shù)字09循環(huán)顯示#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/延時void DelayMS(uint x)uchar t;while(x-) for(t=0;t<120;t+);/主程序void main()uchar i=0;P0=0x00;while(1)P0=DSY_CODEi;i
27、=(i+1)%10;DelayMS(300);3數(shù)碼管顯示4X4矩陣鍵盤按鍵號/*名稱:數(shù)碼管顯示4X4矩陣鍵盤按鍵號說明:按下任意鍵時,數(shù)碼管都會顯示其鍵的序號,掃描程序首先判斷按鍵發(fā)生在哪一列,然后根據(jù)所發(fā)生的行附加不同的值,從而得到按鍵的序號。#include<reg51.h>#define uchar unsigned char#define uint unsigned int/段碼uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x
28、8e,0x00;sbit BEEP=P37;/上次按鍵和當(dāng)前按鍵的序號,該矩陣中序號范圍015,16表示無按鍵uchar Pre_KeyNo=16,KeyNo=16;/延時void DelayMS(uint x)uchar i;while(x-) for(i=0;i<120;i+);/矩陣鍵盤掃描void Keys_Scan()uchar Tmp;P1=0x0f;/高4位置0,放入4行DelayMS(1);Tmp=P10x0f;/按鍵后0f變成0000XXXX,X中一個為0,3個仍為1,通過異或把3個1變?yōu)?,唯一的0變?yōu)?switch(Tmp)/判斷按鍵發(fā)生于03列的哪一列case 1
29、:KeyNo=0;break;case 2:KeyNo=1;break;case 4: KeyNo=2;break;case 8:KeyNo=3;break;default:KeyNo=16;/無鍵按下P1=0xf0; /低4位置0,放入4列DelayMS(1);Tmp=P1>>40x0f;/按鍵后f0變成XXXX0000,X中有1個為0,三個仍為1;高4位轉(zhuǎn)移到低4位并異或得到改變的值switch(Tmp)/對03行分別附加起始值0,4,8,12case 1:KeyNo+=0;break;case 2:KeyNo+=4;break;case 4:KeyNo+=8;break;ca
30、se 8:KeyNo+=12;/蜂鳴器void Beep()uchar i;for(i=0;i<100;i+)DelayMS(1);BEEP=BEEP;BEEP=0;/主程序void main()P0=0x00;BEEP=0;while(1)P1=0xf0;if(P1!=0xf0) Keys_Scan(); /獲取鍵序號if(Pre_KeyNo!=KeyNo)P0=DSY_CODEKeyNo;Beep();Pre_KeyNo=KeyNo;DelayMS(100);4 100 000s以內(nèi)的計時程序/*名稱:100 000s以內(nèi)的計時程序說明:在6只數(shù)碼管上完成099 999.9s。#in
31、clude<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int/段碼uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/6只數(shù)碼管上顯示的數(shù)字uchar Digits_of_6DSY=0,0,0,0,0,0;uchar Count;sbit Dot=P07;/延時void DelayMS(uint ms)uchar t;while(ms-) for(t=0;t<120;
32、t+);/主程序void main()uchar i,j;P0=0x00; P3=0xff;Count=0;TMOD=0x01;/計數(shù)器T0方式1TH0=(65536-50000)/256;/50ms定時TL0=(65536-50000)%256;IE=0x82;TR0=1;/啟動T0while(1)j=0x7f;/顯示Digits_of_6DSY5Digits_of_6DSY0的內(nèi)容/前面高位,后面低位,循環(huán)中i!=-1亦可寫成i!=0xfffor(i=5;i!=-1;i-)j=_crol_(j,1);P3=j;P0=DSY_CODEDigits_of_6DSYi;if(i=1) Dot=1
33、;/加小數(shù)點DelayMS(2);/T0中斷函數(shù)void Timer0() interrupt 1uchar i;TH0=(65536-50000)/256;/恢復(fù)初值TL0=(65536-50000)%256;if(+Count!=2) return;Count=0;Digits_of_6DSY0+;/0.1s位累加for(i=0;i<=5;i+)/進(jìn)位處理if(Digits_of_6DSYi=10)Digits_of_6DSYi=0;if(i!=5) Digits_of_6DSYi+1+; /如果04位則分別向高一位進(jìn)位else break;/若某低位沒有進(jìn)位,怎循環(huán)提前結(jié)束5 單片
34、機之間雙向通信/*名稱:甲機串口程序說明:甲機向乙機發(fā)送控制命令字符,甲機同時接收乙機發(fā)送的數(shù)字,并顯示在數(shù)碼管上。#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED1=P10;sbit LED2=P13;sbit K1=P17;uchar Operation_No=0;/操作代碼/數(shù)碼管代碼uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/延時void DelayMS(uint ms)u
35、char i;while(ms-) for(i=0;i<120;i+);/向串口發(fā)送字符void Putc_to_SerialPort(uchar c)SBUF=c;while(TI=0);TI=0;/主程序void main()LED1=LED2=1;P0=0x00;SCON=0x50;/串口模式1,允許接收TMOD=0x20;/T1工作模式2PCON=0x00;/波特率不倍增TH1=0xfd;TL1=0xfd;TI=RI=0;TR1=1;IE=0x90;/允許串口中斷while(1)DelayMS(100);if(K1=0)/按下K1時選擇操作代碼0,1,2,3while(K1=0)
36、;Operation_No=(Operation_No+1)%4;switch(Operation_No)/根據(jù)操作代碼發(fā)送A/B/C或停止發(fā)送case 0:Putc_to_SerialPort('X');LED1=LED2=1;break;case 1:Putc_to_SerialPort('A');LED1=LED1;LED2=1;break;case 2:Putc_to_SerialPort('B');LED2=LED2;LED1=1;break;case 3:Putc_to_SerialPort('C');LED1=LED
37、1;LED2=LED1;break;/甲機串口接收中斷函數(shù)void Serial_INT() interrupt4if(RI)RI=0;if(SBUF>=0&&SBUF<=9) P0=DSY_CODESBUF;else P0=0x00;/*名稱:乙機程序接收甲機發(fā)送字符并完成相應(yīng)動作說明:乙機接收到甲機發(fā)送的信號后,根據(jù)相應(yīng)信號控制LED完成不同閃爍動作。#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED1=P10;sbit LED2=P13;sbit
38、 K2=P17;uchar NumX=-1;/延時void DelayMS(uint ms)uchar i;while(ms-) for(i=0;i<120;i+);/主程序void main()LED1=LED2=1;SCON=0x50;/串口模式1,允許接收TMOD=0x20;/T1工作模式2TH1=0xfd;/波特率9600TL1=0xfd;PCON=0x00;/波特率不倍增RI=TI=0;TR1=1;IE=0x90;while(1)DelayMS(100);if(K2=0)while(K2=0);NumX=+NumX%11;/產(chǎn)生010范圍內(nèi)的數(shù)字,其中10表示關(guān)閉SBUF=Nu
39、mX;while(TI=0);TI=0;void Serial_INT() interrupt 4if(RI)/如收到則LED則動作RI=0;switch(SBUF)/根據(jù)所收到的不同命令字符完成不同動作case 'X':LED1=LED2=1;break;/全滅case 'A':LED1=0;LED2=1;break;/LED1亮case 'B':LED2=0;LED1=1;break;/LED2亮case 'C':LED1=LED2=0;/全亮五 拓展keil for armJ-LINK 驅(qū)動安裝安裝驅(qū)動很簡單,只要將下載的ZIP 包解壓,然后直接安裝即可,默認(rèn)安裝,一路點擊“NEXT”即可:安裝完成后, 請插入 JLINK 硬件,
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司月度小活動方案
- 公司爬泰山活動方案
- 公司水上樂園活動方案
- 公司節(jié)日海報活動方案
- 公司直播健身活動方案
- 公司節(jié)前大清掃活動方案
- 公司老員工慶生活動方案
- 公司父親節(jié)晚會策劃方案
- 公司火鍋活動策劃方案
- 公司端午節(jié)慰問活動方案
- 星載終端抗輻照設(shè)計-洞察及研究
- 2025年湖南省中考生物試卷真題(含標(biāo)準(zhǔn)答案)
- 2025年河北省物流產(chǎn)業(yè)集團招聘筆試參考題庫含答案解析
- 2025年衛(wèi)生系統(tǒng)招聘考試(護理學(xué)專業(yè)知識)新版真題卷(附詳細(xì)解析)
- 吉林省“BEST合作體”2023?2024學(xué)年高一下學(xué)期期末考試 數(shù)學(xué)試題(含解析)
- 2025山西航空產(chǎn)業(yè)集團有限公司校園招聘(第一批)43人筆試參考題庫附帶答案詳解
- 2025年文物保護工程師職業(yè)資格考試試題及答案
- (高清版)DB13∕T 5834-2023 化工建設(shè)項目安裝工程質(zhì)量技術(shù)資料管理規(guī)范
- 2025年煤礦從業(yè)人員安全培訓(xùn)考試題庫
- 機械制圖-形成性任務(wù)2-國開(ZJ)-參考資料
- 協(xié)議回款承諾書
評論
0/150
提交評論