




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、通過前面的學(xué)習(xí),我們已經(jīng)了解了單片機內(nèi)部的結(jié)構(gòu),并j1也已經(jīng)知道,要控制單片機,讓 它為我們干學(xué),要用指令,我們已學(xué)了幾條指令,但很零散,從現(xiàn)在開始,我們將要系統(tǒng)地 學(xué)習(xí)8051單片機的指令部份。一、概述1、指令的格式我們已知,要讓計算機做事,就得給計算機以指令,并且我們已知,計算機很“笨”,只能 懂得數(shù)字,如前面我們寫進(jìn)機器的75h, 90h, 00h等等,所以指令的笫一種格式就是機器 碼格式,也說是數(shù)字的形式。但這種形式實在是為難我們?nèi)肆?,太難記了,于是有另一種格 式,助記符格式,如mov pl, #0ffh,這樣就好記了。這兩種格式之間的關(guān)系呢,我們 不難理解,本質(zhì)上它們完全等價,只是形
2、式不一樣而已。2、匯編我們寫指令使用匯編格式,而計算機和單片機只懂機器碼格式,所以要將我們寫的匯編格 式的指令轉(zhuǎn)換為機器碼格式,這種轉(zhuǎn)換有兩種辦法:手工匯編和機器匯編。手工匯編實際上 就是査表,因為這兩種格式純粹是格式不一樣,所以是一一對應(yīng)的,查一張表格就行了。不 過手工查表總是嫌麻煩,所以就有了計算機軟件,用計算機軟件來替代手工查表,這就是機 器匯編。二、單片機的尋址讓我們先來復(fù)習(xí)一下我們學(xué)過的一些指令:mov pl, #0ffh, mov r7, #0ffh這些指 令都是將一些數(shù)據(jù)送到對應(yīng)的位置中去,為什么耍送數(shù)據(jù)呢?第一個因為送入的數(shù)能止燈全 滅掉,第二個是為了要實現(xiàn)延時,從這里我們能看
3、出來,在用單片機的編程語言編程時,經(jīng) 常要用到數(shù)據(jù)的傳遞,事實上數(shù)據(jù)傳遞是單片機編程時的一項重要工作,一共有28條指令 (單片機共111條指令)。卜面我們就從數(shù)據(jù)傳遞類指令開始吧。分析一下mov pl, #0ffh這條指令,我們不難得出結(jié)論,第一個詞mov是命令動詞, 也就是決定做什么事情的,mov是move少寫了一個e,所以就是“傳遞”,這就是指令, 規(guī)定做什么事情,后面還有一些參數(shù),分析一下,數(shù)據(jù)傳遞必須要有一個“源”也就是你要送 什么數(shù),必須要有一個“冃的”,也就是你這個數(shù)耍送到什么地方去,顯然在上面那條單片機 指令中,要送的數(shù)(源)就是offh,而要送達(dá)的地方(冃的地)就是p1這個寄存
4、器。在 數(shù)據(jù)傳遞類指令中,均將目的地寫在指令的麻面,而將源寫在最后。這條指令中,送給p1是這個數(shù)本身,換言z,做完這條指令后,我們能明確地知道,p1 中的值是offh,但是并不是任何時候都能直接給出數(shù)木身的。例如,在我們前面給出的單 片機延時程序例是這樣寫的:main: setb p1.0;( 1 )lcall delay ;( 2 )clr p1.0;( 3 )lcall delay ;( 4 )ajmp main;( 5 );以f子程序delay: mov r7, #250;( 6 )di: mov r6, #250;( 7 )d2: djnz r6, d2;( 8 )djnz r7, d
5、i;( 9 )ret;(10)end;(11)mov 30h, #255lcall delay ;clr p1.0;( 3 )mov 30h,#200lcall delay ;( 4 )ajmp main;( 5 );以下子程序delay: mov r7, 30h;( 6 )di: mov r6, #250;( 7 )d2: djnz r6, d2;( 8 )djnz r7, di ;( 9 )ret:(10)end;(11)表2這樣一來,我侮次調(diào)用延時程序延時的時間都是相同的(大致都是0.13s),如果我提出這 樣的要求:燈亮后延時時間為0.13s燈滅,燈滅后延時0.1秒燈亮,如此循環(huán),這樣
6、的程序 還能滿足要求嗎?不能,怎么辦?我們能把延時程序改成這樣(見表2):調(diào)用則見表2中的 主程,也就是先把一個數(shù)送入30h,在子程序中r7中的值并不固定,而是根據(jù)30h單元屮 傳過來的數(shù)確定。這樣就能滿足要求。從這里我們能得出結(jié)論,在數(shù)據(jù)傳遞屮要找到被傳遞的數(shù),很多時候,這個數(shù)并不能直接 給出,需要變化,這就引出了一個概念:如何尋找操作數(shù),我們把尋找操作數(shù)所在單元的地 址稱z為尋址。在這里我們直接使用數(shù)所在單元的地址找到了操作數(shù),所以稱這種辦法為直 接尋址。除了這種辦法z外,還冇一種,如果我們把數(shù)放在工作寄存器中,從工作寄存器中 尋找數(shù)據(jù),則稱之為寄存器尋址。例:mov a, r()就是將r
7、()工作寄存器屮的數(shù)據(jù)送到累 加器a屮去。提一個問題:我們知道,工作寄存器就是內(nèi)存單元的一部份,如果我們選擇 工作寄存器組0,則r0就是ram的00h單元,那么這樣一來,mov a, 00h,和mov a, ro不就沒什么區(qū)別了嗎?為什么要加以區(qū)別呢?的確,這兩條指令執(zhí)行的結(jié)果是完全 相同的,都是將00h單元中的內(nèi)容送到a中去,但是執(zhí)行的過程不一樣,執(zhí)行第一條指令 需要2個周期,而第二條則只需要1個周期,第一條指令變成最終的目標(biāo)碼要兩個字節(jié)(e 5h 00h),而第二條則只耍一個字節(jié)(e8h)就能了。這么斤斤計較!不就差了一個周期嗎,如果是12m的晶體震蕩器的話,也就1個微秒時 間了,一個字節(jié)
8、乂能有多少?不對,如果這條指令只執(zhí)行一次,也許無所謂,但一條指令如果執(zhí)行上10()()次,就是1 毫秒,如果要執(zhí)行1000000萬次,就是1s的誤差,這就很可觀了,單片機做的是實時控制 的事,所以必須如此“斤斤計較二字節(jié)數(shù)同樣如此。再來提一個問題,現(xiàn)在我們已知,尋找操作數(shù)能通過直接給的方式(立即尋址)和直接給出 數(shù)所在單元地址的方式(直接尋址),這就夠了嗎?看這個問題,要求從30h單元開始,取20個數(shù),分別送入a累加器。就我們目前掌握的辦法而言,要從30h單元取數(shù),就用mov a, 30h,那么下一個數(shù)呢? 是31h單元的,怎么収呢?還是只能用mov a, 31h,那么20個數(shù),不是得20條指
9、令才 能寫完嗎?這里只有20個數(shù),如果要送200個或2000個數(shù),那豈不耍寫上200條或2000 條命令?這未免太笨了吧。為什么會出現(xiàn)這樣的狀況?是因為我們只會把地址寫在指令中,所以就沒辦法了,如果我們不是把地址直接寫在指令中,陽是把地址放在另外一個寄存器單 元中,根據(jù)這個寄存器單元中的數(shù)值決定該到哪個單元中取數(shù)據(jù),比如,當(dāng)前這個寄存器中 的值是30h,那么就到30h單元中去取,如果是31h就到31h單元中去取,就能解決這個 問題了。怎么個解決法呢?既然是看的寄存器小的值,那么我們就能通過一定的辦法讓這里 而的值發(fā)生變化,比如収完一個數(shù)后,將這個寄存器單元中的值加1,還是執(zhí)行同-條指令, 可是
10、取數(shù)的對彖卻不一樣了,不是嗎。通過例程來說明吧。mov r7, #20mov ro, #30hloop: mov a, r0inc rodjnz r7,loop這個例程中大部份指令我們是能看懂的,第一句,是將立即數(shù)20送到r7中,執(zhí)行完后 r7中的值應(yīng)當(dāng)是20。第二句是將立即數(shù)30h送入r0工作寄存器中,所以執(zhí)行完后,r0 單元中的值是30h,第三句,這是看一下r0單元屮是什么值,把這個值作為地址,取這個 地址單元的內(nèi)容送入a中,此時,執(zhí)行這條指令的結(jié)果就相當(dāng)于mov a, 30ho第四句, 沒學(xué)過,就是把r0中的值加1,因此執(zhí)行完后,r0中的值就是31h,第五句,學(xué)過,將r 7中的值減1,看是否等于0,不等于0,則轉(zhuǎn)到標(biāo)號loop處繼續(xù)執(zhí)行,因此,執(zhí)行完這 句后,將轉(zhuǎn)去執(zhí)行mov a, r0這句話,此時相當(dāng)于執(zhí)行t mov a,
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 防水修繕合同范本
- 借款融資居間服務(wù)合同范本
- 加梯安裝合同范例
- 醫(yī)生技術(shù)股協(xié)議合同范本
- 單位燈具購買合同范本
- 修車合同范本模板
- 農(nóng)村建房買房合同范本
- 農(nóng)村豬場合同范本
- 人事專員勞務(wù)合同范本
- 勞務(wù)供銷合同范例
- 09式 新擒敵拳 教學(xué)教案 教學(xué)法 圖解
- 《網(wǎng)店運營與管理》整本書電子教案全套教學(xué)教案
- 打印版 《固體物理教程》課后答案王矜奉
- CAD術(shù)語對照表
- 學(xué)術(shù)論文的寫作與規(guī)范課件
- 香港牛津新魔法Newmagic3AUnit4Mycalendar單元檢測試卷
- 中考《紅星照耀中國》各篇章練習(xí)題及答案(1-12)
- Q∕GDW 11612.43-2018 低壓電力線高速載波通信互聯(lián)互通技術(shù)規(guī)范 第4-3部分:應(yīng)用層通信協(xié)議
- 自動化物料編碼規(guī)則
- 第1本書出體旅程journeys out of the body精教版2003版
- [英語考試]同等學(xué)力英語新大綱全部詞匯
評論
0/150
提交評論