下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、項(xiàng)目二 簡(jiǎn)易小彩燈的實(shí)現(xiàn),一、知識(shí)目標(biāo) 1了解單片機(jī)存儲(chǔ)器和寄存器的概念及分類,理解地址的概念及寄存器的地址分配,知道單片機(jī)的尋址方式; 2熟悉指令格式及相關(guān)控制指令; 3知道LED燈的硬件結(jié)構(gòu)和基本電路; 4. 掌握單片機(jī)控制LED燈的基本方法。,項(xiàng)目學(xué)習(xí)目標(biāo),二、技能目標(biāo) 1.利用位修正指令、數(shù)據(jù)傳送指令、調(diào)用和返回指令、循環(huán)轉(zhuǎn)移指令、邏輯運(yùn)算指令及查表指令等完成程序編寫。 2.會(huì)計(jì)算延時(shí)時(shí)間,能編寫延時(shí)程序,會(huì)進(jìn)行子程序的調(diào)用。 3能建立單片機(jī)的軟件環(huán)境, 會(huì)建立工程,會(huì)使用keil軟件進(jìn)行簡(jiǎn)單程序的編寫和調(diào)試。 4能正確連接實(shí)驗(yàn)箱、仿真器及電腦,能下載程序并觀察結(jié)果。,在數(shù)字電路中可用
2、電平的高和低控制一盞燈的亮和滅。,任務(wù)一 點(diǎn)亮一個(gè)LED燈,活動(dòng)1:了解單片機(jī)的基本概念,一、數(shù)碼和物理現(xiàn)象的關(guān)系,亮表示高電平,用“1”表示,滅表示低電平,用“0”表示,如果現(xiàn)在有兩盞燈,規(guī)定亮為1,滅為0,那它會(huì)有幾種狀態(tài)呢?,不同的數(shù)碼可以代表不同數(shù)量燈的電平高或低,控制燈的亮或滅的狀態(tài)。,00,01,10,11就是我們學(xué)過(guò)的的二進(jìn)制數(shù),因此可以用二進(jìn)制數(shù)中的“0”、“1”表示電路輸出的高、低電平信號(hào),從而控制燈的亮和滅。,位:在二進(jìn)制系統(tǒng)中,位記為bit,也稱為比特,每個(gè)0或1就是一個(gè)位(bit),位是數(shù)據(jù)存儲(chǔ)的最小單位。 字節(jié):8個(gè)位稱為一個(gè)字節(jié),用 byte 表示。 在單片機(jī)中,一
3、盞燈有兩種狀態(tài)“亮”和“滅”,分別用“0”和“1”表示 ,可以用一位數(shù)碼表示。8盞燈可以用8位數(shù)碼即用一個(gè)字節(jié)的數(shù)碼表示。 在單片機(jī)中,即可以對(duì)位進(jìn)行操作控制一盞燈的狀態(tài),也可以對(duì)字節(jié)進(jìn)行操作,同時(shí)控制8盞燈的狀態(tài)。,二、位與字節(jié)的含義,1. 半導(dǎo)體存儲(chǔ)器的工作原理 存儲(chǔ)器就是用來(lái)存放數(shù)據(jù)的地方。,三、半導(dǎo)體存儲(chǔ)器,存儲(chǔ)器的內(nèi)部結(jié)構(gòu)圖,一個(gè)存儲(chǔ)單元,一個(gè)字節(jié),一個(gè)位,01010010,四個(gè)存儲(chǔ)單元,( 1)字節(jié)和位之間的關(guān)系; (2)1個(gè)字節(jié)和一個(gè)位哪個(gè)存儲(chǔ)空間大? (3)圖中存放的數(shù)據(jù)是十進(jìn)制數(shù)多少?十六進(jìn)制數(shù)多少?, EPROM(紫外線擦除的可編程只讀存儲(chǔ)器):寫入內(nèi)容后可以用紫外線照射的
4、方法擦除后重寫。 EEPROM(電可擦寫可編程只讀存儲(chǔ)器)是可用戶更改的只讀存儲(chǔ)器(ROM),其可通過(guò)高于普通電壓的作用來(lái)擦除和重編程(重寫)。,2.半導(dǎo)體存儲(chǔ)器的分類 半導(dǎo)體存儲(chǔ)器按功能可以分為只讀和隨機(jī)存取存儲(chǔ)器兩大類。 (1)只讀存儲(chǔ)器ROM(READ ONLY MEMORY) ROM 就是單片機(jī)中用來(lái)存放程序的地方,下載到單片機(jī)中的指令就是保存在ROM中的。 ROM可分為: Flash ROM(快速存儲(chǔ)式只讀存儲(chǔ)器):既可以電擦寫,而且掉電后程序還能保存。 PROM(可編程存儲(chǔ)器):只允許數(shù)據(jù)寫入一次,如果數(shù)據(jù)燒入錯(cuò)誤只能報(bào)廢。,只可以從存儲(chǔ)器里讀數(shù)據(jù),而不能將數(shù)據(jù)寫進(jìn)去,(2)隨機(jī)存
5、取存儲(chǔ)器RAM(READ RANDOM MEMORY) RAM是存放運(yùn)算過(guò)程中數(shù)據(jù)的地方。,隨時(shí)可以改寫,也可以讀出里面的數(shù)據(jù),無(wú)論是單片機(jī)的程序存儲(chǔ)器還是數(shù)據(jù)存儲(chǔ)器,都有很多的存儲(chǔ)單元,為區(qū)別存儲(chǔ)單元,必須使每個(gè)存儲(chǔ)單元具有唯一的地址,地址和存儲(chǔ)單元有一一對(duì)應(yīng)的關(guān)系,這些地址一般由十六進(jìn)制表示,編排為00H-7FH。 數(shù)據(jù)存儲(chǔ)器和程序存儲(chǔ)器的地址有一部分是重合的,也就是說(shuō)有些地址被用了兩次,為區(qū)分清楚,人們?cè)诰幊虝r(shí)根據(jù)需要必須用不同的指令。,四、存儲(chǔ)器的地址,用MOVC指令訪問(wèn)ROM空間,用MOV指令訪問(wèn)內(nèi)部RAM,用MOVX指令訪問(wèn)外部RAM。,1. 指令的一般格式 標(biāo)號(hào):操作碼助記符(目
6、的操作數(shù)),(源操作數(shù));注釋。 例:MAIN: MOV A, #70H;把數(shù)據(jù)70H(立即數(shù))送到累加器A中,五、單片機(jī)中指令的編寫格式,標(biāo)號(hào),操作碼助記符,目的操作數(shù),源操作數(shù),注釋,指令的符號(hào)地址,一般用英文字母、數(shù)字表示,在其它語(yǔ)句的操作數(shù)中就可以直接引用該標(biāo)號(hào),以便控制程序的轉(zhuǎn)移或?qū)ぶ贰?;隔開(kāi),空格隔開(kāi),隔開(kāi),注釋是對(duì)指令的解釋,之前用;隔開(kāi),2. 匯編 程序員寫指令時(shí)使用匯編格式,而計(jì)算機(jī)只識(shí)別機(jī)器碼格式,將匯編格式轉(zhuǎn)換為機(jī)器碼格式有兩種方法:手工匯編和機(jī)器匯編。本書采用Keil軟件作為編譯軟件進(jìn)行機(jī)器匯編。,尋址方式就是單片機(jī)指令中提供的操作數(shù)的形式。也就是尋找操作數(shù)或操作數(shù)所
7、在地址的方式。 一般的尋址方式主要有7種:立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址、相對(duì)尋址和位尋址。本任務(wù)主要學(xué)習(xí)立即尋址和直接尋址。,六、單片機(jī)的尋址方式,1.立即尋址 例:MOV A, #80H ;80HA 指令中直接給出操作數(shù)的尋址方式稱為立即數(shù)尋址。,2.直接尋址 例:MOV A, 25H ;內(nèi)部RAM的(25H)A MOV P0, #45H ;45HP0 ,P0為直接尋址的SFR MOV 30H,20H ;內(nèi)部RAM的(20H)(30H) 指令中直接給出操作數(shù)地址的尋址方式稱為直接尋址。 尋址對(duì)象一般為:內(nèi)部數(shù)據(jù)存儲(chǔ)器(在指令中以直接地址表示);特殊功能寄存器SFR
8、(在指令中用寄存器名稱表示)。,發(fā)光二極管,又稱為L(zhǎng)ED。它是半導(dǎo)體二極管的一種,可以把電能轉(zhuǎn)化成光能。發(fā)光二極管具有單向?qū)щ娦?。?dāng)給發(fā)光二極管加上正向電壓后,就產(chǎn)生自發(fā)輻射的熒光。 常用的發(fā)光二極管是發(fā)紅光、綠光或黃光的二極管。,活動(dòng)2:任務(wù)分析,一、發(fā)光二級(jí)管,二、LED的應(yīng)用電路,限流作用,圖2-1-5 二極管工作電路,開(kāi)關(guān)閉合,LED發(fā)光,開(kāi)關(guān)斷開(kāi),LED熄滅,高電位,LED截止,不放光,低電位,LED導(dǎo)通,放光,三、LED燈的控制,思考:P1.0引腳信號(hào)如何時(shí),LED發(fā)光?,P1.0引腳為低電平時(shí),LED發(fā)光,高電平時(shí),LED熄滅,四、單片機(jī)中8個(gè)LED燈的控制電路,限流電阻,圖2-
9、1-7 八只發(fā)光二極管共陽(yáng)極連接,共陽(yáng)極接法下,發(fā)光二極管發(fā)光的實(shí)質(zhì)是給它的陰極提供低電平。通過(guò)單片機(jī)控制P1口的數(shù)據(jù),可實(shí)現(xiàn)8盞燈不同的狀態(tài)要求。,CLR C;使Cy=0 CLR bit;使指定的位地址等于0. 例:CLR P1.0;使P1.0變?yōu)?.,活動(dòng)3:學(xué)習(xí)相關(guān)控制指令,一、位清零指令,英文狀態(tài)下輸入;,1.起始偽指令ORG(Origination) 規(guī)定它下面的程序的起始地址的指令。 一般格式:ORG 16位地址,二、偽指令,注意 一個(gè)程序可以有多個(gè)ORG偽指令,但他們后面的16位地址是從小到大排列的,并且兩條ORG指令之間存放的指令不能超過(guò)他們之間的地址范圍。,2.結(jié)束偽指令EN
10、D 是匯編語(yǔ)言程序結(jié)束的標(biāo)志。,點(diǎn)睛 END必須放在程序的最后,并且在程序中只能有一個(gè)有效的END.,1.長(zhǎng)轉(zhuǎn)移指令LJMP 一般格式:LJMP addr16 轉(zhuǎn)移范圍:64KB空間內(nèi)的任意位置。 2.短轉(zhuǎn)移指令A(yù)JMP 一般格式:AJMP addr11 轉(zhuǎn)移范圍:2KB空間內(nèi)的任意位置。 3.相對(duì)轉(zhuǎn)移指令SJMP 一般格式:SJMP rel ;,三、無(wú)條件轉(zhuǎn)移指令,偏移量,范圍為-128+127,點(diǎn)睛 三種無(wú)條件轉(zhuǎn)移指令在使用時(shí)均可表示原地踏步,即一直等待,以AJMP指令為例,實(shí)現(xiàn)如下:AJMP $ ,等價(jià)于H: AJMP H,1.安裝Keil軟件 2.編寫和調(diào)試程序 (1)建立新工程 雙擊
11、Keil Vision2的圖標(biāo) 顯示提示信息后出現(xiàn)主界面 單擊菜單“Project(工程)” “New Project(新建工程)” 選擇保存路徑及文件名 選擇器件Atmel公司的AT89S51型CPU 在彈出的對(duì)話框中單擊“否”完成新工程的建立。,活動(dòng)4:任務(wù)實(shí)施,一、建立軟件環(huán)境,項(xiàng)目窗口,輸出窗口,文件編輯窗口,標(biāo)題欄,快捷工具按鈕,下拉菜單,文件選項(xiàng)卡,圖2-1-9 Keil Vision2的主界面,返回,圖2-1-11 保存工程,返回,選擇廠家,圖2-1-12 選擇器件生產(chǎn)廠家,返回,圖2-1-14 提示框選擇,返回,(2) 建立源文件 新建源文件 保存源文件 將源文件加入項(xiàng)目,選擇
12、File New,或點(diǎn)擊“New File”的快捷鍵,選擇File Save,或點(diǎn)擊“保存”快捷鍵,文件取名時(shí)加上擴(kuò)展名.a,右擊Source Group1單擊“Add Files to GroupSource Group1 彈出對(duì)話框,選擇路徑,雙擊要加入的文件,“新建”快捷鍵文件,圖2-1-15 新建源文件,返回,“保存”快捷鍵文件,源文件名,圖2-1-16 文件保存,返回,圖2-1-18 選擇要添加的源文件,返回,(3)編寫程序 任務(wù)分析 單燈控制的電路原理圖:,本任務(wù)要用單片機(jī)控制一只發(fā)光二極管發(fā)光,將LED與P1.0引腳相連,當(dāng)P1.0引腳是高電平時(shí)LED不亮,當(dāng) P1.0引腳是低電
13、平時(shí)LED才發(fā)光,因此需要控制P1.0引腳來(lái)控制LED的亮滅。,編寫程序 CLR P1.0;對(duì)P1.0位清零,即點(diǎn)亮LED0 AJMP $;程序原地踏步 END ;程序結(jié)束,源程序編寫完畢,必須要用END結(jié)束程序,(4)調(diào)試程序,單擊“建立目標(biāo)文件”按鈕,開(kāi)始/停止調(diào)試,全速運(yùn)行,進(jìn)入函數(shù)內(nèi)部的單步執(zhí)行,不進(jìn)入函數(shù)內(nèi)部的單步執(zhí)行,跳出函數(shù),單擊“開(kāi)始/停止調(diào)試”或單擊“Debug”菜單下的相應(yīng)選項(xiàng),進(jìn)入程序調(diào)試環(huán)境,單擊“全速運(yùn)行”按鈕后,通過(guò)“Peripherals” “I/O-Ports” “Port1”選項(xiàng)打開(kāi)P1口,可實(shí)時(shí)查看程序運(yùn)行結(jié)果,單擊“停止運(yùn)行”退出軟件仿真。,1. 連接計(jì)算
14、機(jī)、單片機(jī)仿真器與單片機(jī)實(shí)驗(yàn)箱,二、硬件仿真,仿真器從電腦的 USB接口取電,數(shù)據(jù)線與仿真器連接,數(shù)據(jù)線與計(jì)算機(jī)的連接,圖2-1-26 仿真器接到實(shí)驗(yàn)箱,2. 實(shí)驗(yàn)箱電源操作 打開(kāi)試驗(yàn)箱總電源和模塊電源。,3. 設(shè)置工程目標(biāo) 右擊項(xiàng)目窗口下的Target1 點(diǎn)擊Option for target target1, Target選項(xiàng)卡中Xtal后晶振數(shù)據(jù)設(shè)置為12MHz Output選項(xiàng)卡設(shè)置 Debug選項(xiàng)卡設(shè)置,圖2-1-28 Target選項(xiàng)卡,返回,圖2-1-29 Output選項(xiàng)卡,返回,圖2-1-30 Debug選項(xiàng)卡,返回,作業(yè),P73: 1、2、3、4、5、6,任務(wù)二 航標(biāo)燈的設(shè)
15、計(jì),任務(wù)介紹,本任務(wù)就是利用單片機(jī)控制燈的閃爍,模擬航標(biāo)燈。在單片機(jī)的P1.0引腳上接一個(gè)發(fā)光二極管L0,使L0在不停地一亮一滅。,活動(dòng)1 任務(wù)分析,CLR P1.0 SETB P1.0 AJMP $ END,討論下面指令是否可實(shí)現(xiàn)航標(biāo)燈的模擬?,點(diǎn)亮燈,熄滅燈,原地踏步,程序調(diào)試現(xiàn)象:沒(méi)有燈被點(diǎn)亮,原因: 第一,計(jì)算機(jī)執(zhí)行指令的時(shí)間很快,執(zhí)行完CLR P1.0后,燈亮了,但在極短時(shí)間后(微秒級(jí))后,計(jì)算機(jī)又執(zhí)行了SETB P1.0,燈又滅了,所以根本分辨不出燈曾經(jīng)亮過(guò)。 第二,執(zhí)行完SETB P1.0后,程序原地踏步,不會(huì)返回去繼續(xù)執(zhí)行CLR P1.0指令了,所以燈一直滅不會(huì)再有機(jī)會(huì)被點(diǎn)亮了
16、。,第一,執(zhí)行完CLR P1.0后,延時(shí)一段時(shí)間(幾秒或零點(diǎn)幾秒),本任務(wù)中暫定延時(shí)0.2秒,再去執(zhí)行第二條指令,就可以分辨出燈曾亮過(guò)了。 第二,在執(zhí)行完第二條指令并延時(shí)后,讓計(jì)算機(jī)再返回去執(zhí)行第一條指令,不斷地在執(zhí)行燈亮延時(shí)燈滅延時(shí)燈亮,我們稱之為循環(huán),這樣就可以完成任務(wù)要求了。,程序改進(jìn):,半導(dǎo)體存儲(chǔ)器從功能上分為ROM和RAM兩大類,其中ROM是單片機(jī)中用來(lái)存放程序的地方,而RAM是單片機(jī)中存放數(shù)據(jù)的地方,也稱為片內(nèi)數(shù)據(jù)存儲(chǔ)器。,活動(dòng)2 認(rèn)識(shí)單片機(jī)的片內(nèi)數(shù)據(jù)存儲(chǔ)器,單片機(jī)的內(nèi)部 RAM 共有256 個(gè)字節(jié),尋址范圍為00H-FFH(即16*16),結(jié)構(gòu)為:,工作寄存器,位尋址區(qū),堆棧和數(shù)
17、據(jù)緩沖區(qū),存放中間結(jié)果的一塊區(qū)域,地址為00H1FH,共32個(gè)單元,分為工作寄存器區(qū)0、工作寄存器區(qū)1、工作寄存器區(qū)2和工作寄存器區(qū)3。每個(gè)區(qū)有8個(gè)8位工作寄存器,稱為一組,編號(hào)均 為R0R7。見(jiàn)表2-2-1。,一、工作寄存器區(qū),表2-2-1 工作寄存器和RAM地址對(duì)應(yīng)表,在同一時(shí)刻,CPU只能用其中的一組工作寄存器,具體是哪組工作寄存器,由程序狀態(tài)字PWS中的RS0、RS1決定,如表2-2-2所示。,表2-2-2 工作寄存器選擇,位尋址區(qū)的主要用途是存放各種標(biāo)志位信息和位數(shù)據(jù)。位尋址區(qū)共有16個(gè)存儲(chǔ)單元,每個(gè)單元就是一個(gè)字節(jié),即8位,地址從20H2FH。 CPU可以整體訪問(wèn)每個(gè)存儲(chǔ)單元,也可
18、以對(duì)每一位進(jìn)行訪問(wèn)。表2-2-3中看出,地址2AH出現(xiàn)了兩次,一個(gè)表示地址為2AH的存儲(chǔ)單元,一個(gè)表示地址為25H的存儲(chǔ)單元中D2位的位地址。,二、位尋址區(qū),三、堆棧和數(shù)據(jù)緩沖區(qū),片內(nèi)數(shù)據(jù)存儲(chǔ)器RAM中的30H3FH為堆棧、數(shù)據(jù)緩沖區(qū),共80 個(gè)字節(jié),是可以給用戶使用的RAM單元,也稱為直接尋址RAM。,一般格式: SETB C; C即PSW中的Cy,本條指令置Cy=1 SETB bit;使指定的位地址等于1. 例:SETB P1.0;使P1.0變?yōu)?,活動(dòng)3 學(xué)習(xí)相關(guān)控制指令,一、位置1指令,一般格式: CPL C;使Cy等于原來(lái)的相反的值,即由1變?yōu)?,由0變?yōu)?. CPL bit;使指定
19、的位的值等于原來(lái)相反的值,即由1變?yōu)?,由0變?yōu)?. 例:CPL P1.0;若原來(lái)P1.0為0,則變?yōu)?,若原來(lái)P1.0為1,則變?yōu)?.,二、位取反指令,指令形式:MOV Rn ,#data 這個(gè)指令是將立即數(shù)送到工作寄存器R0R7中的一個(gè),Rn下標(biāo)“n”是1,這個(gè)立即數(shù)就送到R1;若是2,這個(gè)立即數(shù)就送到R2,以此類推。,三、將立即數(shù)送到工作寄存器的指令,指令形式: DJNZ Rn rel 指令是將工作寄存器中的數(shù)減1,如果結(jié)果為0就繼續(xù)執(zhí)行,如果結(jié)果不為0,則轉(zhuǎn)移,轉(zhuǎn)移到rel指示的指令。 這是一種相對(duì)尋址方式。,四、減1不為0的循環(huán)轉(zhuǎn)移指令,1.調(diào)用指令 (1)長(zhǎng)調(diào)用指令LCALL 一般
20、形式:LCALL addr16;用于調(diào)用子程序,子程序可在64KB空間內(nèi)任意位置。Addr16一般為標(biāo)號(hào),代表調(diào)用子程序的入口地址。,五、調(diào)用與返回指令,(2)短調(diào)用指令A(yù)CALL 一般形式:ACALL addr11;用于調(diào)用子程序,Addr11一般為標(biāo)號(hào),代表調(diào)用子程序的入口地址。,2.返回指令RET 在子程序結(jié)束后,執(zhí)行該指令程序?qū)⒎祷氐秸{(diào)用子程序處繼續(xù)向下執(zhí)行。,1.延時(shí)時(shí)間的確定 D0:MOV R6,#0FFH;將0FFH送到工作寄存器R6中,一個(gè)機(jī)器周期 D1:DJNZ R6,D1;(R6)0,轉(zhuǎn)移到D1,即繼續(xù)執(zhí)行本指令,兩個(gè)機(jī)器周期 END 若晶振頻率為12MHz,則執(zhí)行時(shí)間為多
21、少? 255*2+1=511 us,六、延時(shí)程序與延時(shí)時(shí)間,2.延時(shí)程序設(shè)計(jì) 在上述延時(shí)程序上再加一個(gè)外循環(huán),使它循環(huán)執(zhí)行255次,就可以達(dá)到延時(shí)255*511us0.13s的目的。程序設(shè)計(jì)如下:,MOV R7,#0FFH ;(1) D0: MOV R6,#0FFH ;(2) D1: DJNZ R6,D1 ;(3) DJNZ R7,D0 ;(4) END ;(5),點(diǎn)睛 由上面兩個(gè)延時(shí)程序分析可知,單重循環(huán)可實(shí)現(xiàn)短暫延時(shí),多重循環(huán)可實(shí)現(xiàn)長(zhǎng)時(shí)間延時(shí)。,3. 1s延時(shí)程序的設(shè)計(jì),源程序 機(jī)器周期數(shù) 執(zhí)行時(shí)間 MOV R5, #50 1 1us ACALL DELAY 2 2us DELAY: MO
22、V R6, #100 1 1us DL1: MOV R7, #100 1 1us DJNZ R7, $ 2 2us DJNZ R6, DL1 2 2us DJNZ R5, DELAY 2 2us RET 2 2us 延時(shí)時(shí)間T=1+2+(1+(1+2*100+2)*100+2)*50+2=1015155us1s,改進(jìn)后的延時(shí)程序,我們?cè)谑褂脮r(shí),保持R7、R6值不變,通過(guò)改變R5的值,即改變外循環(huán)次數(shù)來(lái)改變延時(shí)時(shí)間。例如,要延時(shí)5s,只要改變R5的值為250即可。注意使用時(shí)R5不要超出255。,1.建立新工程、源文件 按照任務(wù)一中介紹的方法新建工程“任務(wù)二”、新建文件“任務(wù)二.a”,并將文件添加
23、到工程中。,活動(dòng)4 任務(wù)實(shí)施,一、建立軟件環(huán)境,(1)分析任務(wù) 電路連接:,2、編寫程序,程序流程圖:,延時(shí),延時(shí),延時(shí)子程序,(2)編寫程序 ;主程序 MAIN:SETB P1.0 ;置P1.0為1,即熄滅LED0 LCALL DELAY ;調(diào)用延時(shí)子程序 CLR P1.0 ;對(duì)P1.0清位,即點(diǎn)亮LED0 LCALL DELAY ;調(diào)用延時(shí)子程序 LJMP MAIN ;跳轉(zhuǎn)到主程序的第一條指令,又將燈熄滅.如此循環(huán) ;延時(shí)子程序 DELAY:MOV R7,#0FFH ;給R7一個(gè)常數(shù)255 D0: MOV R6,#0FFH ;給R6一個(gè)常數(shù)255 D1: DJNZ R6,D1 ;內(nèi)循環(huán)執(zhí)行
24、255次 DJNZ R7,D0 ;外循環(huán)執(zhí)行255次 RET ;子程序返回 END ;程序結(jié)束,(3)分析程序 LCALL是一個(gè)子程序調(diào)用指令,RET是子程序執(zhí)行完的返回指令,所以LCALL在主程序中,而RET在子程序中。兩條指令的作用是,當(dāng)執(zhí)行LCALL指令時(shí),程序轉(zhuǎn)到LCALL后面的標(biāo)號(hào)所指示的程序行處執(zhí)行,也就是調(diào)用了子程序,如果在執(zhí)行的子程序的指令過(guò)程中遇到了RET指令,則程序就返回到LCALL指令下面的一條指令繼續(xù)執(zhí)行。,除了可以用位修正指令對(duì)P1.0進(jìn)行置1,清0外,也可以通過(guò)數(shù)據(jù)傳送指令MOV對(duì)整個(gè)P1口賦值,使P1. 0為1或0。例:MOV P1,#3EH; 即使P1=(001
25、11110),P1口各位狀態(tài)可以確定。,試用數(shù)據(jù)傳送指令編程,實(shí)現(xiàn)任務(wù)二要求。,;主程序 MAIN:SETB P1.0 ;置P1.0為1,即熄滅LED0 LCALL DELAY ;調(diào)用延時(shí)子程序 CLR P1.0 ;對(duì)P1.0清位,即點(diǎn)亮LED0 LCALL DELAY ;調(diào)用延時(shí)子程序 LJMP MAIN ;跳轉(zhuǎn)到主程序的第一條指令,又將燈熄滅.如此循環(huán) ;延時(shí)子程序 DELAY:MOV R7,#0FFH ;給R7一個(gè)常數(shù)255 D0: MOV R6,#0FFH ;給R6一個(gè)常數(shù)255 D1: DJNZ R6,D1 ;內(nèi)循環(huán)執(zhí)行255次 DJNZ R7,D0 ;外循環(huán)執(zhí)行255次 RET ;
26、子程序返回 END ;程序結(jié)束,MOV P1,#FFH,MOV P1,#FEH,3、編譯程序,編譯或匯編當(dāng)前文件,建立目標(biāo)文件,編譯結(jié)果,在調(diào)試前先設(shè)置相關(guān)參數(shù),選擇主菜單“Project”子菜單“Option for target target1”彈出參數(shù)設(shè)置窗口,選擇標(biāo)簽“Debug”項(xiàng),又彈出窗口如圖2-2-7所示。選擇軟件模擬仿真。,4、調(diào)試程序,選擇軟件模擬方式進(jìn)行仿真,單擊主菜單Debug,彈出子菜單,單擊第一行Start/Stop Debug session,或單擊工具欄中 圖標(biāo),進(jìn)入調(diào)試環(huán)境,程序調(diào)試窗口如圖2-2-9所示。,調(diào)試啟動(dòng)后,項(xiàng)目窗口自動(dòng)切換到Regs標(biāo)簽項(xiàng),用于顯
27、示程序調(diào)試過(guò)程中單片機(jī)內(nèi)部寄存器狀態(tài)的變化情況;其上部顯示工作寄存器 R0-R7的內(nèi)容,下部顯示累加器A、寄存器B、堆棧指針SP等的內(nèi)容。圖中觀察窗口、存儲(chǔ)器窗口可通過(guò)主菜單View的子菜單” Memory Window”“Watch 將A化為二進(jìn)制為00010010逐位左移后為0010100即24H這里把第7位移到了第0,第0位移到了第1位,第1位移到了第2位,其余的依次類推。,二、對(duì)累加器A的左移指令,指令形式:RR A 該指令將累加器A的內(nèi)容循環(huán)右移1位,D0位移入D7,不影響標(biāo)志位,如圖2-3-8所示。,三、對(duì)累加器A的右移指令,思考: A=12H; RL A; 后A的值為多少?,功能
28、是源操作數(shù)和目的操作數(shù)按位與,結(jié)果送回目的操作數(shù)中,源操作數(shù)不變,這個(gè)操作會(huì)改變奇偶校驗(yàn)標(biāo)志位。 1. ANL A, Rn ; A與Rn中的值按位與,結(jié)果送入A中 例:A=39H, R6=9CH ANL A, R6; 將A和R6的值化為二進(jìn)制后按位求與,即(00111001)與(10011100),結(jié)果為(00011000)=18H,送入A中。,四、邏輯與指令,2. ANL A , direct; A與direct中的值按位與,結(jié)果送入A中 例:A=39H,存儲(chǔ)單元30H中的數(shù)是9CH ANL A, 30H;將A和30H中的值化為二進(jìn)制后按位求與,即(00111001)與(10011100),
29、結(jié)果為(00011000)=18H,送入A中。,3. ANL A, Ri ; A與間址尋址單元Ri中的值按位與,結(jié)果送入A中 例:A=39H,R0中放的是30H,存儲(chǔ)單元30H中的數(shù)是9CH ANL A,R0;將A和R0中的值30H地址中的數(shù)9CH化為二進(jìn)制后按位求與,即(00111001)與(10011100),結(jié)果為(00011000)=18H,送入A中。,4. ANL A, #data ; A與立即數(shù)data按位與,結(jié)果送入A中 例:A=39H ANL A,#9CH;將A和立即數(shù)9CH的值化為二進(jìn)制后按位求與,即(00111001)與(10011100),結(jié)果為(00011000)=18
30、H,送入A中。,5.ANL direct, A ; direct中值與A中的值按位與,結(jié)果送入direct中 例:A=39H,存儲(chǔ)單元30H中的數(shù)是9CH ANL 30H, A;將30H和A中的值化為二進(jìn)制后按位求與,即(00111001)與(10011100),結(jié)果為(00011000)=18H,送入30H中。,6.ANL direct, #data; direct中的值與立即數(shù)data按位與,果送入direct中 例:存儲(chǔ)單元30H中的數(shù)是9CH ANL 30H, #39H;將30H中的數(shù)和立即數(shù)39H的值化為二進(jìn)制后按位求與,即(10011100)與(00111001),結(jié)果為(0001
31、1000)=18H,送入30H中。,功能是將源操作數(shù)和目的操作數(shù)按位相或,結(jié)果送回到目的操作數(shù)中,源操作數(shù)中內(nèi)容不變,這個(gè)操作會(huì)改變奇偶校驗(yàn)標(biāo)志位。 1.ORL A, Rn ;A與Rn中的值按位或,結(jié)果送入A中 例:A=39H, R6=9CH ORL A, R6; 將A和R6的值化為二進(jìn)制后按位求或,即(00111001)或(10011100),結(jié)果為(10111101)=BDH,送入A中。,五、邏輯或指令,2. ORL A, direct; A與direct中的值按位或,結(jié)果送入A中 例: A=39H,存儲(chǔ)單元30H中的數(shù)是9CH ORL A, 30H; 3. ORL A, Ri; A與間址
32、尋址單元Ri中的值按位或,結(jié)果送入A中 例:A=39H,R0中放的是30H,存儲(chǔ)單元30H中的數(shù)是9CH ORL A,R0;,4. ORL A, #data; A與立即數(shù)data按位或,結(jié)果送入A中 例:A=39H ORL A,#9CH; 5.direct, A; direct中值與A中的值按位或,結(jié)果送入direct中 例:A=39H,存儲(chǔ)單元30H中的數(shù)是9CH ORL 30H, A; 6. ORL direct, #data; direct中的值與立即數(shù)data按位或,結(jié)果送入direct中。 例:存儲(chǔ)單元30H中的數(shù)是9CH ORL 30H, #39H;,指令形式:XCH A,Rn 這
33、條指令的作用是將后一個(gè)操作數(shù)的內(nèi)容與累加器A的內(nèi)容交換。 例: A=39H, R6=9CH XCH A, R6; 將A和R6的值互相交換,即(00111001)(10011100),結(jié)果為A=9CH, R6=39H。,六、字節(jié)交換指令,1.建立新工程、源文件 按照任務(wù)一中介紹的方法新建工程“任務(wù)三”和源文件“任務(wù)三.a”,并將此文件添加到項(xiàng)目中。,活動(dòng)3 任務(wù)實(shí)施,一、建立軟件環(huán)境,2.編寫實(shí)現(xiàn)流水燈效果的程序 (1)從右到左輪流點(diǎn)亮 任務(wù)分析:程序流程圖如圖2-3-9所示。由任務(wù)二可知,使P1.0引腳上的燈L0亮,可用兩種方法, 一種使用位修正指令實(shí)現(xiàn):SETB P1.0。 一種用數(shù)據(jù)傳送指
34、令實(shí)現(xiàn):MOV P1 #0FEH。,圖2-3-9 程序流程圖,編寫程序: 方法一:位修正指令編程 若編寫程序如下: ;主程序 MAIN: CLR P1.0 ;(1)置P1.0為0,即點(diǎn)亮L0 LCALL DELAY;(2)延時(shí),保持L0亮的狀態(tài) CLR P1.1 ;(3)置P1.1為0,即點(diǎn)亮L1 LCALL DELAY;(4)延時(shí),保持L1亮的狀態(tài) CLR P1.1 ;(5)置P1.2為0,即點(diǎn)亮L2 LCALL DELAY;(6)延時(shí),保持L2亮的狀態(tài) CLR P1.1 ;(7)置P1.3為0,即點(diǎn)亮L3 LCALL DELAY;(8)延時(shí),保持L3亮的狀態(tài) CLR P1.1 ;(9)置P
35、1.4為0,即點(diǎn)亮L4 LCALL DELAY;(10)延時(shí),保持L4亮的狀態(tài) CLR P1.1 ;(11)置P1.5為0,即點(diǎn)亮L5 LCALL DELAY;(12)延時(shí),保持L5亮的狀態(tài) CLR P1.1 ;(13)置P1.6為0,即點(diǎn)亮L6 LCALL DELAY;(14)延時(shí),保持L6亮的狀態(tài) CLR P1.1 ;(15)置P1.7為0,即點(diǎn)亮L7 LCALL DELAY;(16)延時(shí),保持L7亮的狀態(tài) LJMP MAIN ;跳轉(zhuǎn)到主程序的第一條指令,循環(huán),;延時(shí)子程序 DELAY:MOV R7,#0FFH D0: MOV R6,#0FFH D1: DJNZ R6,D1 DJNZ R7
36、,D0 RET END,上述程序能否實(shí)現(xiàn)任務(wù)要求?為什么?應(yīng)如何修改?,通過(guò)程序分析后,請(qǐng)寫出正確的程序。,方法二:數(shù)據(jù)傳送指令編程,;主程序 MAIN:MOV P1,#0FEH;給P1口賦值FEH,即(11111110),即點(diǎn)亮L0,其余滅 LCALL DELAY ;延時(shí),保持L0亮的狀態(tài) MOV P1,#0FDH;給P1口賦值FDH,即點(diǎn)亮L1,其余滅 LCALL DELAY ;延時(shí),保持L1亮的狀態(tài) MOV P1,#0FBH;給P1口賦值FBH,即點(diǎn)亮L2,其余滅 LCALL DELAY ;延時(shí),保持L2亮的狀態(tài) MOV P1,#0F7H;給P1口賦值F7H,即點(diǎn)亮L3,其余滅 LCAL
37、L DELAY ;延時(shí),保持L3亮的狀態(tài) MOV P1,#0EFH;給P1口賦值EFH,即點(diǎn)亮L4,其余滅 LCALL DELAY ;延時(shí),保持L4亮的狀態(tài) MOV P1,#0DFH;給P1口賦值DFH,即點(diǎn)亮L5,其余滅 LCALL DELAY ;延時(shí),保持L5亮的狀態(tài) MOV P1,#0BFH;給P1口賦值BFH,即點(diǎn)亮L6,其余滅 LCALL DELAY ;延時(shí),保持L6亮的狀態(tài) MOV P1,#07FH;給P1口賦值7FH,即點(diǎn)亮L7,其余滅 LCALL DELAY ;延時(shí),保持L7亮的狀態(tài) LJMP MAIN ;跳轉(zhuǎn)到主程序的第一條指令,循環(huán) ;延時(shí)子程序,方法三:左移指令編程 程序
38、分析: 程序編寫首先保證P1口的最低位為0,其余為1,保證最右邊燈亮,所示寫入的數(shù)字為0FEH;還要考慮P1低位的0要逐個(gè)向左移,所以要用到左移指令,但左移指令只對(duì)累加器A起作用,所以必須將P1口的數(shù)據(jù)送到累加器A,每一次移位后,都要將A 中的數(shù)反送至P1。程序流程圖如圖2-3-12所示。,圖2-3-12 左移指令程序流程圖,;主程序 MOV P1, #0FEH ;(1) MAIN1: MOV A, P1 ;(2) LCALL DELAY ;(3) RL A ;(4) MOV P1,A ;(5) LCALL DELAY ;(6) LJMP MAIN1 ;(7) ;延時(shí)子程序 前面的延時(shí)程序,此
39、處省略。,(2)從左到右輪流點(diǎn)亮 程序分析: 程序編寫時(shí)首先考慮燈是從右邊開(kāi)始亮的,所以送到P1口的數(shù)據(jù)應(yīng)為7FH;與上段程序相反,現(xiàn)要用右移指令。同樣必須由累加器A進(jìn)行轉(zhuǎn)接。,;主程序 MOV P1, #7FH MAIN2: MOV A, P1 LCALL DELAY RR A MOV P1,A LCALL DELAY LJMP MAIN2 ;延時(shí)子程序: 用前面的延時(shí)程序,(3)從右到左逐一輪流點(diǎn)亮 程序分析: 送入P1的數(shù)據(jù)首先是“11111110”,第二個(gè)數(shù)據(jù)是“11111100”,第三個(gè)數(shù)據(jù)是“11111000”等等,經(jīng)分析可知,上一個(gè)數(shù)先左移得到的數(shù)再跟上一個(gè)數(shù)相“與”便下一個(gè)數(shù)。
40、逐一輪流全部點(diǎn)亮后,還要重新開(kāi)始,所以程序中還必須設(shè)置一個(gè)計(jì)數(shù)的工作寄存器,當(dāng)計(jì)到8次,再重新從第一只燈點(diǎn)亮。,;主程序 MOV P1, #0FEH H51: MOV R2, #08H MAIN3: LCALL DELAY MOV A, P1 RL A ANL A, P1 MOV P1, A DJNZ R2, MAIN3 MOV P1, #0FEH LJMP H51 ;延時(shí)子程序 用前面的延時(shí)程序,(4)八位LED燈閃爍 程序分析: 八位LED燈閃爍,即八位LED燈同時(shí)亮,延時(shí),同時(shí)滅。,;主程序 MAIN4: MOV P1, #00H LCALL DELAY MOV P1,#FFH LCAL
41、L DELAY LJMP MAIN4 ;延時(shí)子程序 用前面的延時(shí)程序,(5)從左右兩邊逐一向中間輪流點(diǎn)亮;再由中央向兩邊逐一點(diǎn)亮,;主程序 H5: MOV A,#7EH ;燈亮的初值 MOV R0, #04H ;次數(shù)設(shè)置 MAIN5:MOV P1, A ;將A的數(shù)據(jù)送到P1 LCALL DELAY ;調(diào)用延時(shí)程序 MOV R1, A ;將A的數(shù)據(jù)送到R1 ORL A, #0F0H ;或運(yùn)算,用于將高四位清除 RL A ;左移,實(shí)現(xiàn)燈向左依次顯示 XCH A,R1 ;交換 ORL A,#0FH ;或運(yùn)算,用于將低四位清除 RR A ;右移,實(shí)現(xiàn)燈向右依次顯示 ANL A,R1 ;組成一個(gè)完整的字
42、節(jié) DJNZ R0, MAIN5 ;R0不為零,則循環(huán) MOV A, #0FFH ;初始值 MOV P1, A ;8個(gè)發(fā)光管全亮 LCALL DELAY ;延時(shí) LJMP H5 ;子程序: 用前面的延時(shí)程序。,程序編寫后,進(jìn)行調(diào)試,用軟件觀察P1口的輸出情況。下載程序,觀察流水燈的效果。,1.硬件連接 按操作規(guī)范連接計(jì)算機(jī)、單片機(jī)仿真器、單片機(jī)實(shí)驗(yàn)箱,打開(kāi)單片機(jī)實(shí)驗(yàn)箱電源,并進(jìn)行復(fù)位操作。將仿真器的仿真頭插入實(shí)驗(yàn)箱單片機(jī)緊鎖插座中,并用扁平數(shù)據(jù)線連接P1端口及八位邏輯電平顯示模塊。,二、硬件仿真,2.參數(shù)設(shè)置 參照任務(wù)二,對(duì)相關(guān)參數(shù)進(jìn)行設(shè)置。 3.硬件仿真 利用KeiL軟件重新對(duì)各程序進(jìn)行編譯,直至調(diào)試窗口出現(xiàn)“0 Errors,0 Warnings”表示程序無(wú)誤后點(diǎn)擊開(kāi)始調(diào)試按扭 ,點(diǎn)擊RUN按鈕 運(yùn)行程序,觀察發(fā)光二極管顯示情況。若需修改程序,首先按下仿真器上的RESET按鈕,等待2S,再點(diǎn)擊 ,退出調(diào)試狀態(tài),重新編程再
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高職(稅務(wù)籌劃基礎(chǔ))方案構(gòu)思測(cè)試試題及答案
- 2026年銷售工程師培訓(xùn)考試題集
- 2026年誠(chéng)通控股銷售部經(jīng)理銷售部團(tuán)隊(duì)建設(shè)考核含答案
- 2026年融資租賃業(yè)務(wù)拓展經(jīng)理筆試題及解析
- 2026年新聞出版單位編輯部副主任招聘考試題目集錄
- 2026年廣告公司創(chuàng)意總監(jiān)職位的招聘面試題及答案
- 2026年外包公司項(xiàng)目管理職位的招聘策略及題目設(shè)計(jì)
- 2026年中電科海洋備考題庫(kù)技術(shù)研究院有限公司招聘?jìng)淇碱}庫(kù)有答案詳解
- 2026年黃金集團(tuán)電氣工程師專業(yè)技能考核題含答案
- 2026年三明市清流縣應(yīng)急管理局公開(kāi)招聘縣森林消防大隊(duì)勞務(wù)派遣人員的備考題庫(kù)及參考答案詳解1套
- 2025至2030中國(guó)細(xì)胞存儲(chǔ)行業(yè)調(diào)研及市場(chǎng)前景預(yù)測(cè)評(píng)估報(bào)告
- 《中華人民共和國(guó)危險(xiǎn)化學(xué)品安全法》解讀
- 水暖施工員考試及答案
- 2025年省級(jí)行業(yè)企業(yè)職業(yè)技能競(jìng)賽(老人能力評(píng)估師)歷年參考題庫(kù)含答案
- 黑龍江省哈爾濱市第九中學(xué)校2024-2025學(xué)年高二上學(xué)期期末考試生物試題 含解析
- 國(guó)家開(kāi)放大學(xué)電大《國(guó)際私法》形考任務(wù)1-5題庫(kù)及答案
- 紅色繪本小故事愛(ài)國(guó)教育-長(zhǎng)征路上的紅小丫課件
- 樁基礎(chǔ)負(fù)摩阻計(jì)算表格(自動(dòng)版)
- T-CCMI 20-2022 乘用車發(fā)動(dòng)機(jī)曲軸鍛造毛坯件 技術(shù)條件
- 九年級(jí)上英語(yǔ)復(fù)習(xí)句型轉(zhuǎn)換
- 茶藝師培訓(xùn)教材ppt課件
評(píng)論
0/150
提交評(píng)論