




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