51單片機教程:?jiǎn)纹瑱C尋址方式與指令系統
通過(guò)前面的學(xué)習,我們已經(jīng)了解了單片機內部的結構,并且也已經(jīng)知道,要控制單片機,讓它為我們干學(xué),要用指令,我們已學(xué)了幾條指令,但很零散,從現在開(kāi)始,我們將要系統地學(xué)習8051單片機的指令部份。
本文引用地址:http://dyxdggzs.com/article/171313.htm一、概述
1、指令的格式
我們已知,要讓計算機做事,就得給計算機以指令,并且我們已知,計算機很“笨”,只能懂得數字,如前面我們寫(xiě)進(jìn)機器的75H,90H,00H等等,所以指令的第一種格式就是機器碼格式,也說(shuō)是數字的形式。但這種形式實(shí)在是為難我們人了,太難記了,于是有另一種格式,助記符格式,如MOV P1,#0FFH,這樣就好記了。 這兩種格式之間的關(guān)系呢,我們不難理解,本質(zhì)上它們完全等價(jià),只是形式不一樣而已。
2、匯編
我們寫(xiě)指令使用匯編格式,而計算機和單片機只懂機器碼格式,所以要將我們寫(xiě)的匯編格式的指令轉換為機器碼格式,這種轉換有兩種辦法:手工匯編和機器匯編。手工匯編實(shí)際上就是查表,因為這兩種格式純粹是格式不一樣,所以是一一對應的,查一張表格就行了。不過(guò)手工查表總是嫌麻煩,所以就有了計算機軟件,用計算機軟件來(lái)替代手工查表,這就是機器匯編。
二、單片機的尋址
讓我們先來(lái)復習一下我們學(xué)過(guò)的一些指令:MOV P1,#0FFH,MOV R7,#0FFH這些指令都是將一些數據送到對應的位置中去,為什么要送數據呢?第一個(gè)因為送入的數能讓燈全滅掉,第二個(gè)是為了要實(shí)現延時(shí),從這里我們能看出來(lái),在用單片機的編程語(yǔ)言編程時(shí),經(jīng)常要用到數據的傳遞,事實(shí)上數據傳遞是單片機編程時(shí)的一項重要工作,一共有28條指令(單片機共111條指令)。下面我們就從數據傳遞類(lèi)指令開(kāi)始吧。
分析一下MOV P1,#0FFH這條指令,我們不難得出結論,第一個(gè)詞MOV是命令動(dòng)詞,也就是決定做什么事情的,MOV是MOVE少寫(xiě)了一個(gè)E,所以就是“傳遞”,這就是指令,規定做什么事情,后面還有一些參數,分析一下,數據傳遞必須要有一個(gè)“源”也就是你要送什么數,必須要有一個(gè)“目的”,也就是你這個(gè)數要送到什么地方去,顯然在上面那條單片機指令中,要送的數(源)就是0FFH,而要送達的地方(目的地)就是P1這個(gè)寄存器。在數據傳遞類(lèi)指令中,均將目的地寫(xiě)在指令的后面,而將源寫(xiě)在最后。
這條指令中,送給P1是這個(gè)數本身,換言之,做完這條指令后,我們能明確地知道,P1中的值是0FFH,但是并不是任何時(shí)候都能直接給出數本身的。例如,在我們前面給出的單片機延時(shí)程序例是這樣寫(xiě)的:
MAIN: SETB P1.0 ??;(1)
LCALL DELAY ;(2)
CLR P1.0 ;(3)
LCALL DELAY ??;(4)
AJMP MAIN ??;(5)
;以下子程序
DELAY: MOV R7,#250 ??;(6)
D1: MOV R6,#250 ??;(7)
D2: DJNZ R6,D2 ??;(8)
DJNZ R7,D1 ??;(9)
RET ??;(10)
END ??;(11)
表1
評論