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

正文內(nèi)容

8051單片機(jī)教程(doc77)-管理培訓(xùn)-文庫(kù)吧在線文庫(kù)

  

【正文】 。第二在執(zhí)行完第二條指令后,讓計(jì)算機(jī)再去執(zhí)行第一條指令,不斷地在原地兜圈,我們稱之為 循環(huán) ,這樣就可以完成任務(wù)了。在執(zhí)行第二條指令后,將轉(zhuǎn)去執(zhí)行第6條指令,而在執(zhí)行完 6,7,8,9條指令后將遇到第10條令: RET,執(zhí)行該條指令后,程序?qū)⒒貋?lái)執(zhí)行第三條指令,即將 P10 清零,使燈亮,然后又是第四條指令,執(zhí)行第四條指令就是轉(zhuǎn)去執(zhí)行第 6, 7,8, 9, 10條指令,然后回來(lái)執(zhí)行第 5 條指令,第 5 條指令就是讓程序回到第 1 條開始執(zhí)行,如此周而復(fù)始,燈就在不斷地亮、滅了。 DELAY: MOV R7, 250 ;(6) D1: MOV R6, 250 ;(7) D2: DJNZ R6, D2 ;(8) DJNZ R7, D1 ;(9) RET ;(10) MOV:這是一條指令,意思是傳遞數(shù)據(jù)。標(biāo)號(hào)的用途是什么呢?就是給本行起一個(gè)名字。(鈴聲)校長(zhǎng)可以出差,老師可以休息,但學(xué)校一日無(wú)鈴聲必定大亂。 一個(gè)機(jī)器周期包括 12 個(gè)時(shí)鐘周期。所謂指令周期就是指執(zhí)行一條指令的時(shí)間。 如何分配兩個(gè)數(shù)。 中國(guó)最大的管理資料下載中心 (收集 \整理 . 部分版權(quán)歸原作者 所有 ) 第 10 頁(yè) 共 68 頁(yè) 單片機(jī)教程第六課 : 單片機(jī)的內(nèi)外部結(jié)構(gòu)分析(四) 上兩次我們做過(guò)兩個(gè)實(shí)驗(yàn),都是讓 這個(gè)引腳使燈亮,我們可以設(shè)想:既然 燈亮,那么其它的引腳可不可以呢?看一下圖 1,它是 8031 單片機(jī)引腳的說(shuō)明,在 邊有 , …. ,它們是否都可以讓燈亮呢?除了以 P1開頭的外,還有以 P0, P2,P3開頭的,數(shù)一下,一共是 32 個(gè)引腳,前面我們以學(xué)過(guò) 7個(gè)引腳,加上這 32 個(gè)這 39個(gè)了。 二、第四個(gè)實(shí)驗(yàn) 除了可以作為輸出外,這 32 個(gè)引腳還可以做什么呢?下面再來(lái)做一個(gè)實(shí)驗(yàn),程序如下: MAIN: MOV P3, 0FFH LOOP: MOV A, P3 MOV P1, A LJMP LOOP 先看一下實(shí)驗(yàn)的結(jié)果:所有燈全部不亮,然后我按下一個(gè)按鈕,第()個(gè)燈亮了,再按下另一個(gè)按鈕,第()個(gè)燈亮了,松開按鈕燈就滅了。這 32 個(gè)引腳就稱之為并行口,下面我們就對(duì)并行口的結(jié) 構(gòu)作一個(gè)分析,看一下它是怎樣實(shí)現(xiàn)輸入和輸出的??梢?,要讓這一端口作為輸入使用,要先做一個(gè)‘準(zhǔn)備工作’,就是先讓內(nèi)部的開關(guān)斷開,也就是讓端口輸出‘ 1’才行。 對(duì)上面的圖進(jìn)行進(jìn)一步的分析,我們已知,對(duì)并行 I/O 口的讀寫只要將數(shù)據(jù)送入到相應(yīng) I/O口的鎖存器就可以了,那么對(duì)于定時(shí) /計(jì)數(shù)器,串行 I/O 口等怎么用呢?在單片機(jī)中有一些獨(dú)立的存儲(chǔ)單元是用來(lái)控制這些器件的,被稱之為特殊功能寄存器( SFR)。這是一個(gè)很重要的東西,里面放了 CPU工作時(shí)的很多狀態(tài),借此,我們可以了解 CPU 的當(dāng)前狀態(tài),并作出相應(yīng)的處理。 ( 5) 0V:溢出標(biāo)志位。 SP:堆棧指針。 單片機(jī)第八課(尋址方式與指令系統(tǒng)) 通過(guò)前面的學(xué)習(xí),我們已經(jīng)了解了單片機(jī)內(nèi)部的結(jié)構(gòu),并且也已經(jīng)知道,要控制單片機(jī),讓它為我們干學(xué),要用指令,我們已學(xué)了幾條指令,但很零散,從現(xiàn)在開 始,我們將要系統(tǒng)地學(xué)習(xí) 8051的指令部份。下面我們就從數(shù)據(jù)傳遞類指令開始吧。除了這種 方法之外,還有一種,如果我們把數(shù)放在工作寄存器中,從工作寄存器中尋找數(shù)據(jù),則稱之為寄存器尋址。怎么個(gè)解決法呢?既然是看的寄存器中的值,那么我們就可以通過(guò)一定的方法讓這里面的值發(fā)生變化,比如取完一個(gè)數(shù)后,將這個(gè)寄存器單元中的值加 1,還是執(zhí)行同一條指令,可是取數(shù)的對(duì)象卻不一樣了,不是嗎。第二條指令中, direct 就是指的直接地址,而第三條指令中,就是我們剛才講過(guò)的。 單片機(jī)指令(二) 數(shù)據(jù)傳遞類指令 ( 3)以直接地址為目的操作數(shù)的指令 MOV direct,A 例: MOV 20H,AMOV direct,Rn MOV 20H,R1 MOV direct1,direct2 MOV 20H,30H MOV direct,Ri MOV 20H,R1 MOV direct,data MOV 20H,34H ( 4) 以間接地址為目的操作數(shù)的指令 MOV Ri,A 例 : MOV R0,AMOV Ri,direct MOV R1,20H MOV Ri,data MOV R0,34H ( 5)十六位數(shù)的傳遞指令 MOV DPTR, data168051是一種 8位機(jī),這是唯一的一條 16位立即數(shù)傳遞指令,其功能是將一個(gè) 16 位的立即數(shù)送入 DPTR 中去。見圖 4。當(dāng)然以上操作也可以菜單進(jìn)行。而前兩條指令,由于 Ri(即 R0 或 R1)只是一個(gè) 8 位的寄存器,所以只提供低 8位地址。 例:有一個(gè)數(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,也就是到這個(gè)單元中去取數(shù),取到的是 4,顯然它正是 2 的平方。這個(gè)可以看懂了吧? 那為什么不這樣寫程序,要用標(biāo)號(hào)呢?不是增加疑惑嗎? 如果這樣寫程序的話,在寫程序時(shí),我們就必須確定這張表格在 ROM 中的具體的位置,如果寫完程序后,又想在這段程序前插入一段程序,那么這張表格的位置 就又要變了,要改ORG 100H這句話了,我們是經(jīng)常需要修改程序的,那多麻煩,所以就用標(biāo)號(hào)來(lái)替代,只要一編譯程序,位置就自動(dòng)發(fā)生變化,我們把這個(gè)麻煩事交給計(jì)算機(jī) 指 PC機(jī)去做了。更何況,堆棧的作用不止于此,所以一般的計(jì)算 機(jī)上都設(shè)有堆棧,而我們?cè)诰帉懽映绦?,需要保存?shù)據(jù)時(shí),通常也不采用后面的方法,而是用堆棧的方法來(lái)實(shí)現(xiàn)。例: ADD A, R7 ADD A,Ri 。之所以要分成兩次來(lái)做,是因?yàn)檫@兩個(gè)數(shù)超過(guò)了一位數(shù)所能表達(dá)的范置( 09)。 乘法指令 MUL AB 此指令的功能是將 A 和 B 中的兩個(gè) 8 位無(wú)符號(hào)數(shù)相乘,兩數(shù)相乘結(jié)果一般比較大,因此最終結(jié)果用 1 個(gè) 16 位數(shù)來(lái)表達(dá),其中高 8位放在 B中,低 8位放在 A中。例: 1067H+10A0H,先做 67H+A0H=107H,而 107H 顯然超過(guò)了 0FFH,因此最終保存在 A中的是 7,而 1則到了 PSW中的 CY 位了,換言之, CY就相當(dāng)于是 100H。 說(shuō)明:由于 51 單片機(jī)是一種 8 位機(jī),所以只能做 8 位的數(shù)學(xué)運(yùn)算,但 8 位運(yùn)算的范圍只有0255,這在實(shí)際工作中是不夠的,因此就要進(jìn)行擴(kuò)展,一般是將 2 個(gè) 8 位的數(shù)學(xué)運(yùn)算合起來(lái),成為一個(gè) 16位的運(yùn)算,這樣,可以表達(dá)的數(shù)的范圍就可以達(dá)到 065535。 作業(yè):在 MCS51 下執(zhí)行上面的例程,注意觀察內(nèi)存窗口和堆棧的變化。 POP 指令的執(zhí)行是這樣的,首先將 SP 中的值作為地址,并將此地址中的數(shù)送到 POP 指令后面的那個(gè) direct 中,然后 SP 減 1。在這里它代表了, 0, 1, 4, 9, 16, 25 這幾個(gè)數(shù)據(jù)在 ROM中存放的起點(diǎn)位置。 MOV DPTR, 0100H MOVX A, DPTR MOV DPTR,0200H MOVX DPTR,A 程序存儲(chǔ)器向累加器 A傳送指令 MOVC A, A+DPTR 本指令是將 ROM中的數(shù)送入 A中。 本頁(yè)圖片較多,如果大家無(wú)法忍受它的等待,請(qǐng)下載 中國(guó)最大的管理資料下載中心 (收集 \整理 . 部分版權(quán)歸原作者 所有 ) 第 19 頁(yè) 共 68 頁(yè) 單片機(jī)教程第十課數(shù)據(jù)傳遞類指令指令 累加器 A與片外 RAM 之間的數(shù)據(jù)傳遞類指令 MOVX A,Ri MOVX Ri,A MOVX A,DPTR MOVX DPTR,A 說(shuō)明: 1)在 51中,與外部存儲(chǔ)器 RAM 打交道的只可以是 A累加器。本行的最前面 DATA 后面的數(shù)據(jù)代 表的是 “一段 ”的開始地址,如現(xiàn)在為 20H,再看屏幕的最上方,數(shù)字從 0到 F,顯示兩者相加就等于真正的地址值,如現(xiàn)在圖上所示的內(nèi)存 20H、 21H、 22H、 23H中的值分別是 FBH 、 0EH、 E8H、 30H。如有下面兩條指令: MOV DPH, 35H,MOV DPL, 12H。 MOV A,R1 ;先看 R1中是什么值,把這個(gè)值作為地址,并將這個(gè)地址單元中的值送入 A中。第四句,沒學(xué)過(guò),就是把 R0中的值加 1,因此執(zhí)行完后, R0中的值就是 31H,第五句,學(xué)過(guò),將 R7中的值減1,看是否等于 0,不等于 0,則轉(zhuǎn)到標(biāo)號(hào) LOOP 處繼續(xù)執(zhí)行,因此,執(zhí) 行完這句后,將轉(zhuǎn)去執(zhí)行 MOV A, R0 這句話,此時(shí)相當(dāng)于執(zhí)行了 MOV A, 31H(因?yàn)榇藭r(shí)的 R0 中的值已是 31H 中國(guó)最大的管理資料下載中心 (收集 \整理 . 部分版權(quán)歸原作者 所有 ) 第 17 頁(yè) 共 68 頁(yè) 了),如此,直到 R7中的值逐次相減等于 0,也就是循環(huán) 20次為止,就實(shí)現(xiàn)了我們的要求:從 30H單元開始將 20個(gè)數(shù)據(jù)送入 A中。字節(jié)數(shù)同樣如此。例如,在我們前面給出的延時(shí)程序例是這樣寫的: MAIN: SETB ;(1) LCALL DELAY ;(2) CLR ;(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 MAIN: SETB ;(1) MOV 30H, 255 LCALL DELAY ; CLR ;(3) MOV 30H,200 LCALL DELAY ;(4) AJMP MAIN ;(5) ; 以下子程序 DELAY: MOV R7, 30H ;(6) D1: MOV R6, 250 ;(7) D2: DJNZ R6, D2 ;(8) DJNZ R7, D1 ;(9) RET ;(10) END ;(11) 這樣一來(lái),我每次調(diào)用延時(shí)程序延時(shí)的時(shí)間都是相同的(大致都是 ),如果我提出這樣的要求:燈亮后延時(shí)時(shí)間為 滅,燈滅后延時(shí) ,如此循環(huán),這樣的程序還能滿足要求嗎?不能,怎么辦?我們可以把延時(shí)程序改成這樣 (見表 2):調(diào)用則見表 2中的主程,也就是先把一個(gè)數(shù)送入 30H,在子程序中 R7 中的值并不固定,而是根據(jù) 30H 單 中國(guó)最大的管理資料下載中心 (收集 \整理 . 部分版權(quán)歸原作者 所有 ) 第 16 頁(yè) 共 68 頁(yè) 元中傳過(guò)來(lái)的數(shù)確定。 匯編 我們寫指令使用匯編格式,而計(jì)算機(jī)只懂機(jī)器碼格 式,所以要將我們寫的匯編格式的指令轉(zhuǎn)換為機(jī)器碼格式,這種轉(zhuǎn)換有兩種方法:手工匯編和機(jī)器匯編。為什么需要這樣來(lái)存放數(shù)據(jù)呢?存儲(chǔ)器本身不是可以按地址來(lái)存放數(shù)據(jù)嗎?對(duì),知道了地址的確就可以知道里面的內(nèi)容,但如果我們需要存放的是一批數(shù)據(jù),每一個(gè)數(shù)據(jù)都需要知道地址那不是麻煩嗎?如果我們讓數(shù)據(jù)一個(gè)接一個(gè)地放置,那么我們只要知道第一個(gè)數(shù)據(jù)所在地址單元就可以了(看圖 2)如果第一個(gè)數(shù)據(jù)在 27H,那么第二、三個(gè)就在 28H、 29H 了。 例:某運(yùn)算結(jié)果是 78H( 01111000),顯然 1 的個(gè)數(shù)為偶數(shù),所以 P=0。 例: 78H+97H( 01111000+10010111) ( 2) AC:半進(jìn)位標(biāo)志。它的名字特殊,身份也特殊,稍后我們將學(xué)到指令,可以發(fā)現(xiàn),所有的運(yùn)算類指令都離不開它。對(duì)我們來(lái)說(shuō),這些附加的功能不必由我們來(lái)控制,所以我們就不去關(guān)心它了。 輸入結(jié)構(gòu) 這是并行口的一位的輸出結(jié)構(gòu)示意圖,再看,除了 輸出之外,還有兩根線,一根從外部引腳接入,另一根從鎖存器的輸出接出,分別標(biāo)明讀引腳和讀鎖存器。第二條指令是 MOV A, P3,其中 MOV已經(jīng)見,是送數(shù)的意思,這條指令的意思就是將 P3口的數(shù)送到 A中去,我們可以把 A當(dāng)成是一個(gè)中間單元(看圖 3),第三句話是將 A中的數(shù)又送到 P1口去,第四句話是循環(huán),就是不斷地重復(fù)這個(gè)過(guò)程,這我們已見過(guò)。 程序分析:這段程序和前面做過(guò)的程序比較,只有兩處不一樣:第一句:原來(lái)是 SETB ,現(xiàn)在改為 MOV P1, 0FFH,第三句:原來(lái)是 CLR ,現(xiàn)在改為 MOV , 00H。如何進(jìn)行復(fù)位呢?只要在單片機(jī)的 RST 引腳上加上高電平,就可以了,按上面所說(shuō),時(shí)間不少于 5ms。而 DJNZ指令是雙周期指令,所以執(zhí)行一次要 2 個(gè)微秒。(請(qǐng)計(jì)算一個(gè)工作于 6M 晶振的單片機(jī),它的機(jī)器周期是多少)。事實(shí)上,計(jì)算機(jī)更象一
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1