freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

51單片機(jī)教程-資料下載頁

2025-08-12 10:34本頁面

【導(dǎo)讀】ROM、輸入/輸出設(shè)備。在個人計算機(jī)上這些部份被分成若干塊芯。片,安裝一個稱之為主板的印刷線路板上。而在單片機(jī)中,這些部份,全部被做到一塊集成電路芯片中了,所以。就稱為單片(單芯片)機(jī),而且有一些單片機(jī)中除了上述部份外,還集成了其它部份如A/D,D/A等。PC中的CPU一塊就要賣幾千塊錢,這么多東西做在一起,還不得買個天價!再說這塊芯片也得非常大了。引腳比較多的,如68引腳,功能少的只有10多個或20多個引腳,有的甚至只8只引腳。話不能這樣說,實(shí)際工作中并不是任何需要計算機(jī)的場合都要求計算機(jī)有很高。以8051出來十多年,依然沒有被淘汰,還在不斷的發(fā)展中。MCS51是指由美國INTEL公司生產(chǎn)的一系列單片機(jī)。公司將MCS51的核心技術(shù)授權(quán)給了很多其它公司,所以有很多公司在做以8051為核心的單片機(jī),當(dāng)然,功能。公司開發(fā)生產(chǎn)的。振蕩器,使用晶體振蕩器,接18、19腳。腳接到正電源端。

  

【正文】 自學(xué)單片機(jī) 第 16 頁 共 60 頁 16 (A)=30H (34H)=34H MOV 45H,34H MOV DPTR,6712H MOV 12H,DPH MOV R0,DPL MOV A,@R0 (45H)=34H (DPTR)=6712H (12H)=67H (R0)=12H (A)=67H 說明:用括號括起來代表內(nèi)容,如( 23H)則代表內(nèi)部 RAM23H單元中的值,( A)則代表累加器 A單元中的值。 上機(jī)練習(xí): 進(jìn)入 DOS狀態(tài),進(jìn)入 WAVE所在的目錄,例 D:\WAVE 鍵入 MCS51,出現(xiàn)如下畫面 圖 1 按 FileOpen,出現(xiàn)對話框后,在 Name處輸入一個文件名(見圖 2),如果是下面列表中已存在的,則打開這個文件,如果不存在這個文件,則新建一個文件(見圖 3) 圖 2 在空白處將上面的程序輸入。見圖 4。用 ALT+A 匯編通過。用 F8 即可單步執(zhí)行,在執(zhí)行過程中注意觀察屏幕左邊的工作寄存器及 A累加器中的值的變化。 圖 4 內(nèi)存中值的變化在此是看不到的,可以用如下方法觀察(看圖 5):將鼠標(biāo)移到 DATA,雙擊,則光標(biāo)進(jìn)入此行,此時可以鍵盤上的上下光標(biāo)鍵上下翻動來觀察內(nèi)存值的變化。本行的最前面 DATA 后面的數(shù)據(jù)代表的是 “一段 ”的開 始地址,如現(xiàn)在為 20H,再看屏幕的最上方,數(shù)字從 0到 F,顯示兩者相加就等于真正的地址值,如現(xiàn)在圖上所示的內(nèi)存 20H、 21H、 22H、 23H中的值分別是 FBH 、 0EH、 E8H、 30H。 圖 5當(dāng)運(yùn)行完程序后,即進(jìn)入它的反匯編區(qū),不是我們想要的東西。為了再從頭開始,可以用 CTRL+F2 功能鍵復(fù)位 PC 值。注意此時不會看到原來的窗口,為看到原來的窗口,請用 ALT+4或 ALT+5 等來切換。當(dāng)然以上操作也可以菜單進(jìn)行。 CTRL+F2是程序復(fù)位,用 RUN菜單。窗口用 WINDOWS菜單。 此次大家就用用熟這個軟件吧,說 實(shí)話,我并不很喜歡它,操作起來不方便,但給我的機(jī)器只能上這個,沒辦法,下次再給網(wǎng)友單獨(dú)介紹一個好一點(diǎn)的吧。 本頁圖片較多,如果大家無法忍受它的等待,請下載 單片機(jī)教程第十課數(shù)據(jù)傳遞類指令指令 累加器 A與片外 RAM 之間的數(shù)據(jù)傳遞類指令 MOVX A,@Ri MOVX @Ri,A MOVX A,@DPTR MOVX @DPTR,A 說明: 1)在 51 中,與外部存儲器 RAM 打交道的只可以是 A累加器。所有需要送入外部 RAM 的數(shù)據(jù)必需要通過 A送去,而所有要讀入的外部 RAM 中的數(shù)據(jù)也必需通過 A 讀入。在此我們可以看出內(nèi)外 部 RAM 的區(qū)別了,內(nèi)部RAM 間可以直接進(jìn)行數(shù)據(jù)的傳遞,而外部則不行,比如,要將外部 RAM 中某一單元(設(shè)為 0100H單元的數(shù)據(jù))送入另一個單元(設(shè)為 0200H 單元),也必須先將 0100H 單元中的內(nèi)容讀入 A,然后再送到 0200H 單元中去。 要讀或?qū)懲獠康?RAM,當(dāng)然也必須要知道 RAM 的地址,在后兩條指令中,地址是被直接放在 DPTR 中的。而平凡的單片機(jī)教程 自學(xué)單片機(jī) 第 17 頁 共 60 頁 17 前兩條指令,由于 Ri(即 R0 或 R1)只是一個 8 位的寄存器,所以只提供低 8位地址。因?yàn)橛袝r擴(kuò)展的外部 RAM的數(shù)量比較少,少于或等于 256 個,就只需要提供 8 位地址就夠了。 使用時 應(yīng)當(dāng)首先將要讀或?qū)懙牡刂匪腿?DPTR 或 Ri 中,然后再用讀寫命令。 例:將外部 RAM 中 100H 單元中的內(nèi)容送入外部 RAM 中 200H 單元中。 MOV DPTR, 0100H MOVX A, @DPTR MOV DPTR,0200H MOVX @DPTR,A 程序存儲器向累加器 A傳送指令 MOVC A, @A+DPTR 本指令是將 ROM 中的數(shù)送入 A 中。本指令也被稱為查表指令,常用此指令來查一個已做好在 ROM中的表格 說明: 此條指令引出一個新的尋址方法:變址尋址。本指令是要在 ROM 的一個地址單 元中找出數(shù)據(jù),顯然必須知道這個單元的地址,這個單元的地址是這樣確定的:在執(zhí)行本指令立腳點(diǎn) DPTR 中有一個數(shù), A中有一個數(shù),執(zhí)行指令時,將 A和 DPTR 中的數(shù)加起為,就成為要查找的單元的地址。 查找到的結(jié)果被放在 A中,因此,本條指令執(zhí)行前后, A中的值不一定相同。 例:有一個數(shù)在 R0 中,要求用查表的方法確定它的平方值(此數(shù)的取值范圍是 05) MOV DPTR, TABLE MOV A, R0 MOVC A, @A+DPTR TABLE: DB 0,1,4,9,16,25 設(shè) R0 中的值為 2,送入 A 中,而 DPTR 中 的值則為 TABLE,則最終確定的 ROM 單元的地址就是 TABLE+2,也就是到這個單元中去取數(shù),取到的是 4,顯然它正是 2 的平方。其它數(shù)據(jù)也可以類推。 標(biāo)號的真實(shí)含義:從這個地方也可以看到另一個問題,我們使用了標(biāo)號來替代具體的單元地址。事實(shí)上,標(biāo)號的真實(shí)含義就是地址數(shù)值。在這里它代表了, 0, 1, 4, 9, 16, 25 這幾個數(shù)據(jù)在 ROM 中存放的起點(diǎn)位置。而在以前我們學(xué)過的如 LCALL DELAY 指令中, DELAY 則代表了以 DELAY 為標(biāo)號的那段程序在 ROM 中存放的起始地址。事實(shí)上, CPU 正是通過這個地址才找到這段 程序的。 可以通過以下的例子再來看一看標(biāo)號的含義: MOV DPTR, 100H MOV A, R0 MOVC A, @A+DPTR ORG 0100H. DB 0,1,4,9,16,25 如果 R0 中的值為 2,則最終地址為 100H+2 為 102H,到 102H 單元中找到的是 4。這個可以看懂了吧? 那為什么不這樣寫程序,要用標(biāo)號呢?不是增加疑惑嗎? 如果這樣寫程序的話,在寫程序時,我們就必須確定這張表格在 ROM中的具體的位置,如果寫完程序后,又想在這段程序前插入一段程序,那么這張表格的位置就又要變了,要改 ORG 100H 這句話了,我們是經(jīng)常需要修改程序的,那多麻煩,所以就用標(biāo)號來替代,只要一編譯程序,位置就自動發(fā)生變化,我們把這個麻煩事交給計算機(jī) 指 PC 機(jī)去做了。 堆棧操作 PUSH direct POP direct 第一條指令稱之為推入,就是將 direct 中的內(nèi)容送入堆棧中,第二條指令稱之為彈出,就是將堆棧中的內(nèi)容送回到 direct 中。推入指令的執(zhí)行過程是,首先將 SP 中的值加 1,然后把 SP 中的值當(dāng)作地址,將 direct 中的值送進(jìn)以 SP 中的值為地址的 RAM 單元中。例: MOV SP, 5FH 平凡的單片機(jī)教程 自學(xué)單片機(jī) 第 18 頁 共 60 頁 18 MOV A, 100 MOV B, 20 PUSH ACC PUSH B 則執(zhí)行第一條 PUSH ACC 指令是這樣的:將 SP 中的值加 1,即變?yōu)?60H,然后將 A中的值送到 60H單元中,因此執(zhí)行完本條指令后, 內(nèi)存 60H單元的值就是 100,同樣,執(zhí)行 PUSH B 時,是將 SP+1,即變?yōu)?61H,然后將B 中的值送入到 61H 單元中,即執(zhí)行完本條指令后, 61H 單元中的值變?yōu)?20。 POP 指令的執(zhí)行是這樣的,首先將 SP 中的值作為地址,并將此地址中的數(shù)送到 POP 指令后面的那個 direct 中,然后 SP 減 1。 接上例: POP B POP ACC 則執(zhí)行過程是:將 SP 中的值(現(xiàn)在是 61H)作為地址,取 61H 單元中的數(shù)值(現(xiàn)在是 20),送到 B中,所以執(zhí)行完本條指令后 B中的值是 20,然后將 SP 減 1,因此本條指令執(zhí)行完后, SP 的值變?yōu)?60H,然后執(zhí)行 POP ACC,將 SP 中的值( 60H)作為地址,從該地址中取數(shù)(現(xiàn)在是 100),并送到 ACC 中,所以執(zhí)行完本條指令后, ACC中的值是 100。 這有什么意義呢? ACC 中的值本來就是 100, B 中的值本來就是 20,是的,在本例中,的確沒有意義,但在實(shí)際工作中,則在 PUSH B 后往往要執(zhí)行其他指令, 而且這些指令會把 A 中的值, B 中的值改掉,所以在程序的結(jié)束,如果我們要把 A和 B 中的值恢復(fù)原值,那么這些指令就有意義了。 還有一個問題,如果我不用堆棧,比如說在 PUSH ACC 指令處用 MOV 60H, A,在 PUSH B處用指令 MOV 61H,B,然后用 MOV A, 60H, MOV B, 61H 來替代兩條 POP 指令,不是也一樣嗎?是的,從結(jié)果上看是一樣的,但是從過程看是不一樣的, PUSH 和 POP 指令都是單字節(jié),單周期指令,而 MOV指令則是雙字節(jié),雙周期指令。更何況,堆棧的作用不止于此,所以一般的計算機(jī)上都設(shè)有堆棧,而 我們在編寫子程序,需要保存數(shù)據(jù)時,通常也不采用后面的方法,而是用堆棧的方法來實(shí)現(xiàn)。 例:寫出以下程序的運(yùn)行結(jié)果 MOV 30H, 12 MOV 31H, 23 PUSH 30H PUSH 31H POP 30H POP 31H 結(jié)果是 30H 中的值變?yōu)?23,而 31H 中的值則變?yōu)?12。也就兩者進(jìn)行了數(shù)據(jù)交換。從這個例子可以看出:使用堆棧時,入棧的書寫順序和出棧的書寫順序必須相反,才能保證數(shù)據(jù)被送回原位,否則就要出錯了。 作業(yè):在 MCS51 下執(zhí)行上面的例程,注意觀察內(nèi)存窗口和堆棧的變化。 單片機(jī)教程第十一課 : 算術(shù) 運(yùn)算類指令 不帶進(jìn)位位的加法指令 ADD A,DATA 。例: ADD A, 10H ADD A,direct 。例: ADD A, 10H ADD A,Rn 。例: ADD A, R7 ADD A,@Ri 。例: ADD A, @R0 用途:將 A中的值與其后面的值相加,最終結(jié)果否是回到 A中。 例: MOV A, 30H ADD A, 10H 則執(zhí)行完本條指令后, A中的值為 40H。 下面的題目自行練習(xí) 平凡的單片機(jī)教程 自學(xué)單片機(jī) 第 19 頁 共 60 頁 19 MOV 34H, 10H MOV R0, 13H MOV A, 34H ADD A, R0 MOV R1, 34H ADD A, @R1 帶進(jìn)位位的加法指令 ADDC A, Rn ADDC A,direct ADDC A,@Ri ADDC A,data 用途:將 A中的值和其后面的值相加,并且加上進(jìn)位位 C 中的值。 說明:由于 51 單片機(jī)是一種 8 位機(jī),所以只能做 8 位的數(shù)學(xué)運(yùn)算,但 8位運(yùn)算的范圍只有 0255,這在實(shí)際工作中是不夠的,因此就要進(jìn)行擴(kuò)展,一般是將 2 個 8 位的數(shù)學(xué)運(yùn)算合起來,成為一個 16 位的運(yùn)算,這樣,可以表達(dá)的數(shù)的范圍就可以達(dá)到 065535。如何合并呢?其實(shí)很簡單,讓我們看一個 10 進(jìn)制數(shù)的例子: 66+78。 這兩個數(shù)相 加,我們根本不在意這的過程,但事實(shí)上我們是這樣做的:先做 6+8(低位),然后再做 6+7,這是高位。做了兩次加法,只是我們做的時候并沒有刻意分成兩次加法來做罷了,或者說我們并沒有意識到我們做了兩次加法。之所以要分成兩次來做,是因?yàn)檫@兩個數(shù)超過了一位數(shù)所能表達(dá)的范置( 09)。 在做低位時產(chǎn)生了進(jìn)位,我們做的時候是在適當(dāng)?shù)奈恢命c(diǎn)一下,然后在做高位加法是將這一點(diǎn)加進(jìn)去。那么計算機(jī)中做 16 位加法時同樣如此,先做低 8 位的,如果兩數(shù)相加產(chǎn)生了進(jìn)位,也要“點(diǎn)一下”做個標(biāo)記,這個標(biāo)記就是進(jìn)位位 C,在 PSW 中。在進(jìn)行高位加法 是將這個 C 加進(jìn)去。例: 1067H+10A0H,先做 67H+A0H=107H,而 107H 顯然超過了 0FFH,因此最終保存在 A 中的是 7,而 1 則到了 PSW 中的 CY 位了,換言之, CY 就相當(dāng)于是 100H。然后再做 10H+10H+CY,結(jié)果是 21H,所以最終的結(jié)果是 2107H。 帶借位的減法指令 SUBB A, Rn SUBB A,direct SUBB A,@Ri SUBB A,data 設(shè)(每個 H,( R2) =55H, CY=1,執(zhí)行指令 SUBB A, R2 之后, A中的值為 73H。 說明:沒有不帶借位的減法指令,如果需 要做不帶位的減法指令(在做第一次相減時),只要將 CY 清零即可。 乘法指令 MUL AB 此指令的功能是將 A和 B 中的兩個 8位無符號數(shù)相乘,兩數(shù)相乘結(jié)果一般比較大,因此最終結(jié)果用 1 個 16 位數(shù)來表達(dá),其中高 8位放在 B中,低 8位放在 A中。在乘積大于 FFFFFH( 65535)時, 0V置 1(溢出),否則 OV為 0,而 CY 總是 0。 例:( A) =4EH,(
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1