校內大賽單片機多媒體課件網絡原理版_第1頁
校內大賽單片機多媒體課件網絡原理版_第2頁
校內大賽單片機多媒體課件網絡原理版_第3頁
校內大賽單片機多媒體課件網絡原理版_第4頁
校內大賽單片機多媒體課件網絡原理版_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

順序程序是指按順序依次執(zhí)行的程序,順序程序結構雖然比較簡單,但它是構成復雜程序的基礎。一.順序程序注意;這里不能用INC指令,因為INC指令不影響標志位。CONT:MOV A,R0 ;讀低8位

CPL A ;取反

ADD A,#1 ;加1

MOV R2,A ;存低8位

MOV A,R1 ;讀高8位

CPL A ;取反

ADDC A,#80H ;加進位及符號位

MOVR3,A ;存高8位

RET ;

ORG2000HBCD2:MOVA,R2;取入口數據

ANLA,#0F0H;取出十位

SWAPA;高4位低4位

MOVB,#0AH

【例4-3】:將R2中BCD碼數轉為二進制數存進R2。方法:將十位取出,乘10,加上個位(設R2中存放的數是19)

MULAB;十位乘10(A)=0AH

MOVR3,A;積暫存進R3MOVA,R2;再取入口數據

ANLA,#0FH;取出個位

ADDA,R3;(A)=12H

MOVR2,A;結果R2

END;根據不同條件轉向不同的處理程序,這種結構的程序稱為分支程序。80C51指令系統(tǒng)中的條件轉移指令、比較轉移指令和位轉移指令,可以實現分支程序。二.分支程序【例4-4】已知X、Y均為8位二進制有符號數,分別存在30H,31H中,試編制能實現下列符號函數的程序:實現程序如下:【例4-5】將ASCII碼轉換為十六進制數。設ASCII碼放在累加器A中,轉換結果放到B中。

解:0~9的ASCII碼30H~39H為,將ASCII碼減30H(0~9)。A~F的ASCII碼41H~46H為,37H(A~F)就可獲得對應的十六進制數。散轉程序是一種并行多分支程序。見前面學過的內容:按0、1、2、3發(fā)生三角波、方波、鋸齒波、正弦波。

循環(huán)程序一般包括以下幾個部分: ⑴循環(huán)初值; ⑵循環(huán)體; ⑶循環(huán)修改; ⑷循環(huán)控制; 以上四部分可以有兩種組織形式,其結構如圖4-6所示。三.循環(huán)程序【例4-10】設Xi均為單字節(jié)數,并按順序存放在以50H為首地址的內RAM存儲單元中,數據長度(個數)N存在R2中,試編程求和S=X1+X2+‥‥+XN,并將S(雙字節(jié))存放在R3R4中,(設S<65536)。R0-----放置數據的首地址R2----放置數據的長度R3----放置數據和的低8位R4----放置數據和的高8位解:程序如下:

SXN:MOVR2,#N ;置數據長度(循環(huán)次數)

MOVR4,#00H;和單元(高8位)清0

MOVR3,#00H;和單元(低8位)清0

MOVR0,#50H;求和數據區(qū)首址LOOP:MOVA,R3 ;讀入前次的第8位的和

ADDA,@R0 ;低8位累加

MOVR3,A ;存低8位和

CLRA;ADDCA,R4;高8位加進位

MOVR4,A;存高8位和

INCR0;指向下一數據,循環(huán)修改

DJNZR2,LOOP;判N個數據累加完否?循環(huán)控制

RET;退出循環(huán)置循環(huán)初值循環(huán)體【例4.11】設在內RAM40H開始的存儲區(qū)有若干個字符和數,已知最后一個為字符“$”(并且只有惟一一個),試統(tǒng)計這些字符和數字的個數,統(tǒng)計結果存人30H單元。

解:程序如下:解:程序如下:【例4-12】內部RAM20H單元開始存有8個數,試找出其中最大的數,送入MAX單元。方法:比較和交換操作;①先取第一個數和第二個數進行比較,且將前一個數作為基準;

②如果前一個數大則不作交換,再取下一個數作比較;

③如果后一個數大則用較大的數來代替原來的基準數,再拿基準數和下一個數進行比較;④基準數中總是存著最大值?!纠?-13】

假設在內部RAM中,起始地址為40H的10個單元中存放有十個無符號數。試進行升序排序編寫無符號數排序程序:①冒泡法:從前向后進行相鄰數據的比較,如數據的大小次序與要求的順序不符就將這兩個數據進行互換否則不互換。②對升序排列:從前到后進行一次置換就可以將最大的數值找到!以次類推--。試用冒泡法升序排列各數:

78,81,18,13,84,83,16第一輪78,18,13,81,83,16,84(7個數比較6次)第二輪18,13,78,81,16,83,84(7個數比較5次即可)第三輪13,18,78,16,81,83,84(7個數比較4次即可)第四輪13,18,16,78,81,83,84(7個數比較4次即可)N個數最多需要N-1輪,用標志位來標識!比較次數最多為N-1次;R7--作比較次數計數器,其初始值為09H,F0--作為互換標志位,只要某輪有一次交換該位置一。程序如下:ORG0400HSTART:MOVR0,#40H;起始地址MOVR7,#09H;每輪比較9次CLRF0;清零標志位LOOP:MOVA,@R0;取前一個數MOV2AH,A;暫存前數INCR0;準備后一個數的地址MOV2BH,@R0;暫存后數CLRC;清零CY

SUBBA,@R0;兩個數進行比較JCNEXT;前數小,則跳轉MOV@R0,2AH;前數大則將此數后移DECR0;準備前數的地址MOV@R0,2BH;將后數前移INCR0;恢復后數的地址SETBF0;作完交換置標志位NEXT:DJNZR7,LOOP;判斷每輪的比較次數JBF0,START;是否進行下一輪END【例4-14】編寫延時10ms子程序,fosc=12MHz。fosc=12MHz,一個機器周期為1

s。說明:MOVRn指令為1個機器周期;

DJNZ指令為2個機器周期;

RET指令為2個機器周期;DY10ms:MOVR6,#20;置外循環(huán)次數DLP1:MOVR7,#250;置內循環(huán)次數DLP2:DJNZR7,DLP2;2機周×250=500機周

DJNZR6,DLP1;500機周×20=10000機周

RET;2個機器周期{[(2機周×250)+1+2]×20+1+2}×1

s/機周=10063

s≈10ms

ORG1000HDELAY:MOVR6,#200;1TmLOOP1:MOVR7,#248;1TmNOP;1TmLOOP2:DJNZR7,LOOP2;2TmDJNZR6,LOOP1;2TmRET;2Tm【例4.15】:軟件循環(huán)延時100mS(晶振12MHz)☆1個機器周期=1uS100mS=100000uS☆MOVRn#data和NOP是單機器周期指令☆DJNZRn,rel是雙機器周期指令☆200=0C8H;

248=0F8H1+1+248x2=498(498+2)x200

ORG1000HDL1S:MOVR7,#10DL1:

MOVR6,#200DL2:

MOVR5,#250

DL3:

DJNZR5,DL3

DJNZR6,DL2

DJNZR7,DL1RET【例4.16】:軟件循環(huán)延時1S(晶振12MHz)☆機器周期=1uS1S=1000000uS☆MOVRn#data是單機器周期指令☆DJNZRn,rel是雙機器周期指令1+250x21+[(1+250x2)+2)]x2001+

[(1+250x2+2)x200+2]x10=

設80C51單片機的P1口作為輸出口,經驅動電路74LS240(8反相三態(tài)緩沖/驅動器)接8只發(fā)光二極管,如圖4-8所示。當輸出位為“1”時,發(fā)光二極管點亮,輸出位為“0”時為暗。試編程實現:每個燈閃爍點亮10次,再轉移到下一個燈閃爍點亮10次,循環(huán)不止?!纠?.17】編制一個循環(huán)閃爍燈的程序。FLASH:MOVA,#01H ;置燈亮初值FSH0:MOVR2,#0AH ;置閃爍次數FLOP:MOVP1,A ;點亮

LCALLDY1s ;延時1sMOVP1,#00H ;熄滅

LCALLDY1s ;延時1sDJNZR2,FLOP ;閃爍10次

RL A ;左移一位

SJ

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論