單片機課件51_第1頁
單片機課件51_第2頁
單片機課件51_第3頁
單片機課件51_第4頁
單片機課件51_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第4 4章章 匯編語言程序設計匯編語言程序設計 80C5180C51匯編語言語句結構的基本格式匯編語言語句結構的基本格式 偽指令的功能和應用偽指令的功能和應用 匯編的概念匯編的概念 程序設計的步驟和基本方法程序設計的步驟和基本方法 順序程序順序程序 分支程序分支程序 循環(huán)程序循環(huán)程序 查表程序查表程序 散轉程序散轉程序本章要點本章要點標號:操作碼標號:操作碼 目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù) ;注釋;注釋4-1 4-1 匯編語言程序設計基本概念匯編語言程序設計基本概念4.1.1 4.1.1 匯編語言及其語句結構匯編語言及其語句結構匯編語言程序設計中的數(shù)匯編語言程序設計中的數(shù)計算機只能

2、識別二進制數(shù)計算機只能識別二進制數(shù)機器指令,它原本是機器指令,它原本是不認識常用的十六進制數(shù)和十進制數(shù)的。不認識常用的十六進制數(shù)和十進制數(shù)的。機器指令機器指令/ /目標代碼:目標代碼: 由由0/10/1代碼組成的操作碼與操作數(shù)。代碼組成的操作碼與操作數(shù)。BCDBCD碼:用二進制數(shù)表達的十進制數(shù)。碼:用二進制數(shù)表達的十進制數(shù)。 (0 09 9表示為表示為:0000:00001001B 1001B 后綴后綴:B/b,H/h:B/b,H/h)二進制數(shù):由二進制數(shù):由0/10/1組成、組成、“逢逢2 2進進1”1”的數(shù)制。的數(shù)制。 如:如:01011110B 01011110B (0 01 1 后綴:

3、后綴:B/bB/b)十六進制數(shù):便于讀寫記憶的二進制數(shù)的簡寫形式。十六進制數(shù):便于讀寫記憶的二進制數(shù)的簡寫形式。 (0 09 9,A AF F 后綴:后綴:H/hH/h)匯編語言編程基本規(guī)則匯編語言編程基本規(guī)則匯編語言匯編語言: :用助記符描述的指令的集合。用助記符描述的指令的集合。指令中以指令中以 A AF F 開頭的十六進制數(shù)前必須添一個開頭的十六進制數(shù)前必須添一個 “0”0”。二進制數(shù)必須帶后綴二進制數(shù)必須帶后綴“B”B”或或“b”b”;十六進制數(shù);十六進制數(shù)必須帶后綴必須帶后綴“H”H”或或“h”h”;十進制數(shù)的后綴是;十進制數(shù)的后綴是“D”D”或或“d”d”或無或無. . 標號標號:

4、操作碼操作碼 目的操作數(shù)目的操作數(shù),源操作數(shù)源操作數(shù);注釋注釋 匯編程序匯編程序: :匯編語言編寫的程序借助編譯工具匯編語言編寫的程序借助編譯工具編譯成為目標代碼編譯成為目標代碼, ,計算機才能識別。這個編譯工具計算機才能識別。這個編譯工具稱為匯編程序。稱為匯編程序。4.1.2 4.1.2 偽指令偽指令 在匯編時起控制作用,自身在匯編時起控制作用,自身并不產(chǎn)生并不產(chǎn)生機器碼,而機器碼,而僅是為匯編服務的一些指令,稱為僅是為匯編服務的一些指令,稱為偽指令偽指令。偽指令不屬。偽指令不屬于于8080C51C51指令系統(tǒng)。指令系統(tǒng)。 常用的偽指令有以下幾種:常用的偽指令有以下幾種: 起始偽指令起始偽指

5、令 ORG(OriginORG(Origin) ) 功能:規(guī)定功能:規(guī)定ORGORG下面目標程序的起始地址下面目標程序的起始地址。格式:格式:ORG 16ORG 16位位地址地址 ORG 0100H ORG 0100H START START:MOV AMOV A,#05H#05H ADD A ADD A,#08H#08H MOV 20H MOV 20H,A A ORG 0100H ORG 0100H表示該偽指令下面第一條指令的起始地址表示該偽指令下面第一條指令的起始地址是是0100H0100H,即,即MOV AMOV A,#05H#05H指令的第一個字節(jié)地址為指令的第一個字節(jié)地址為0100H

6、0100H,或標號或標號STARTSTART代表的地址為代表的地址為01000100H H。功能:將一個數(shù)據(jù)或特定的匯編符號賦予規(guī)定功能:將一個數(shù)據(jù)或特定的匯編符號賦予規(guī)定 的字符名稱。的字符名稱。 結束偽指令結束偽指令 ENDEND功能:匯編語言源程序的結束標志。功能:匯編語言源程序的結束標志。 在在ENDEND后面的指令,匯編程序不再處理后面的指令,匯編程序不再處理。格式:格式:ENDEND 等值偽指令等值偽指令 EQUEQU(EquateEquate)格式:格式:字符名稱字符名稱 EQUEQU 數(shù)據(jù)或匯編符號數(shù)據(jù)或匯編符號例如:例如: PP EQU R0 PP EQU R0 ;PP=R0

7、PP=R0 MOV A MOV A,PP PP ;A R0A R0 這里將這里將PPPP等值為匯編符號等值為匯編符號R0R0,在指令中,在指令中PPPP就可以代替就可以代替R0R0來使用。來使用。 數(shù)據(jù)地址賦值偽指令數(shù)據(jù)地址賦值偽指令 DATADATA格式:格式:字符名稱字符名稱 DATADATA 表達式表達式功能:將數(shù)據(jù)地址或代碼地址賦予規(guī)定的功能:將數(shù)據(jù)地址或代碼地址賦予規(guī)定的 字符名稱。字符名稱。 定義字節(jié)偽指令定義字節(jié)偽指令DBDB(Define ByteDefine Byte)格式:格式:DB 8DB 8位二進制數(shù)表位二進制數(shù)表功能:從指定的地址單元開始,定義若干功能:從指定的地址單

8、元開始,定義若干 個個8 8位內(nèi)存單元的數(shù)據(jù)。位內(nèi)存單元的數(shù)據(jù)。 數(shù)據(jù)與數(shù)據(jù)之間用數(shù)據(jù)與數(shù)據(jù)之間用“,”分割。分割。例如:例如: ORG 4000HORG 4000H TAB TAB: DB 73HDB 73H,4545,“A”A”,“2”2” TAB1 TAB1:DB 101BDB 101B 以上指令經(jīng)匯編后,將對以上指令經(jīng)匯編后,將對4000H4000H開始的若干內(nèi)存單開始的若干內(nèi)存單元賦值。元賦值。 (4000H)=73H(4000H)=73H,(4001H)(4001H):2DH(2DH(注:注:4545的的1616進制數(shù)進制數(shù)) ), 格式:格式:字符名稱字符名稱 BITBIT 位地

9、址位地址 定義字偽指令定義字偽指令DWDW(Define WordDefine Word)格式:格式:DW 16DW 16位二進制數(shù)表位二進制數(shù)表功能:從指定的地址單元開始,定義功能:從指定的地址單元開始,定義 若干個若干個1616位數(shù)據(jù)。位數(shù)據(jù)。 定義位地址偽指令定義位地址偽指令BITBIT功能:將位地址賦予所規(guī)定的字符名稱。功能:將位地址賦予所規(guī)定的字符名稱。 AQ AQ BIT P0.0 BIT P0.0 DEF BIT 30H DEF BIT 30H 把把P0P00 0的位地址賦給字符的位地址賦給字符AQAQ,把位地址,把位地址30H30H賦給字賦給字符符DEFDEF。在其后的編程中,

10、。在其后的編程中,AQAQ可作可作P0.0P0.0使用,使用,DEFDEF可作可作位地址位地址30H30H使用。使用。三三. .匯編匯編 將匯編語言源程序轉換為計算機所能識將匯編語言源程序轉換為計算機所能識別的機器語言代碼程序的過程稱為匯編。別的機器語言代碼程序的過程稱為匯編。 匯編可分為:匯編可分為: 手工匯編手工匯編 計算機匯編計算機匯編【例【例4-14-1】對下段程序進行手工匯編?!繉ο露纬绦蜻M行手工匯編。 匯編和調(diào)試匯編和調(diào)試四四. . 程序設計的基本方法程序設計的基本方法編寫程序要求:編寫程序要求: 不僅要完成規(guī)定的功能任務,而且還要求:不僅要完成規(guī)定的功能任務,而且還要求: 執(zhí)行速

11、度快執(zhí)行速度快、占用內(nèi)存少占用內(nèi)存少、條理清晰條理清晰、 閱讀方便閱讀方便、便于移植便于移植、巧妙而實用巧妙而實用。 一般應按以下幾個步驟進行:一般應按以下幾個步驟進行: 分析問題,確定算法或解題思路分析問題,確定算法或解題思路 畫流程圖畫流程圖 編寫源程序編寫源程序 流程圖符號和說明流程圖符號和說明: : 順序程序是指按順序依次執(zhí)行的程序,也順序程序是指按順序依次執(zhí)行的程序,也稱為簡單程序或直線程序。稱為簡單程序或直線程序。 順序程序結構雖然比較簡單,但也能完成順序程序結構雖然比較簡單,但也能完成一定的功能任務,是構成復雜程序的基礎。一定的功能任務,是構成復雜程序的基礎。 第二節(jié)第二節(jié) 匯編

12、語言程序設計舉例匯編語言程序設計舉例一一. . 順序程序順序程序CONT: MOVCONT: MOV A,R0 A,R0; ;讀低讀低8 8位位CPLCPL A A; ;取反取反ADDADD A,#1 A,#1; ;加加1 1MOVMOV R2,A R2,A; ;存低存低8 8位位MOVMOV A,R1 A,R1; ;讀高讀高8 8位位CPLCPL A A; ;取反取反ADDCADDC A,#80H A,#80H; ;加進位及符號位加進位及符號位MOV R3,AMOV R3,A; ;存高存高8 8位位RETRET; ;【例【例4-2】 已知已知1616位二進制負數(shù)存放在位二進制負數(shù)存放在R1R

13、0R1R0中,中, 試求其補碼,并將結果存在試求其補碼,并將結果存在R3R2R3R2中。中。解:二進制負數(shù)的求補方法可歸結為解:二進制負數(shù)的求補方法可歸結為“求反加求反加1”1”,符號,符號位不變。利用位不變。利用CPLCPL指令實現(xiàn)求反;加指令實現(xiàn)求反;加1 1時,則應低時,則應低8 8位先加位先加1 1,高高8 8位再加上低位的進位。注意這里不能用位再加上低位的進位。注意這里不能用INCINC指令,因為指令,因為INCINC指令不影響標志指令不影響標志位。位。程序如下:程序如下: ORG 2000HORG 2000HBCD2BBCD2B:MOV AMOV A, R2 ;R2 ;取入口數(shù)據(jù)取

14、入口數(shù)據(jù) ANL AANL A, #0F0H ;#0F0H ;取出十位取出十位 SWAP A ;SWAP A ;高高4 4位位 低低4 4位位 MOV BMOV B, #0AH#0AH MUL AB ; MUL AB ;十位乘十位乘1010 MOV R3 MOV R3,A ;A ;積暫存進積暫存進R3R3 MOV A MOV A, R2 ;R2 ;再取入口數(shù)據(jù)再取入口數(shù)據(jù) ANL AANL A, #0FH ;#0FH ;取出個位取出個位 ADD AADD A, R3R3 MOV R2 MOV R2,A ;A ;結果結果 R2R2 RET ; RET ;若不是子程序可用若不是子程序可用END E

15、ND 例例: :將將R2R2中中BCDBCD碼數(shù)轉為二進制數(shù)存進碼數(shù)轉為二進制數(shù)存進R2R2。(此子程序在下一例中還要用到)(此子程序在下一例中還要用到) 根據(jù)不同條件轉向不同的處理程序,根據(jù)不同條件轉向不同的處理程序,這種結構的程序稱為分支程序。這種結構的程序稱為分支程序。 8080C51C51指令系統(tǒng)中的指令系統(tǒng)中的條件轉移指令條件轉移指令、比較轉移指令比較轉移指令和和位轉移指令位轉移指令,可以實現(xiàn)分,可以實現(xiàn)分支程序。支程序。二二. .分支程序分支程序【例【例4 45 5】 已知已知X X、Y Y均為均為8 8位二進制有符號數(shù),位二進制有符號數(shù),分別存在分別存在30H30H31H31H中

16、,試編制能實現(xiàn)下列符號函中,試編制能實現(xiàn)下列符號函數(shù)的程序:數(shù)的程序:實現(xiàn)程序如下實現(xiàn)程序如下: :【例【例4 46 6】將】將ASCIIASCII碼轉換為十六進制數(shù)。設碼轉換為十六進制數(shù)。設ASCIIASCII碼放在累加器碼放在累加器A A中,轉換結果放到中,轉換結果放到B B中。中。 解:由解:由ASCIIASCII碼表碼表( (表表1-4)1-4)可知,可知,30H30H39H39H為為0 09 9的的ASCIIASCII碼,碼,41H41H46H46H為為A AF F的的ASCIIASCII碼。將碼。將ASCIIASCII碼減碼減30H(030H(09)9)或或37H(A37H(AF)

17、F)就可獲得對應的就可獲得對應的十六進制數(shù)。程序如下:十六進制數(shù)。程序如下: S0S0單獨按下,單獨按下, 紅燈亮紅燈亮, ,其余燈其余燈滅;滅; S1 S1單獨按下,單獨按下, 綠燈亮綠燈亮, ,其余其余燈燈滅;滅; 其余情況,其余情況, 黃燈亮。黃燈亮。【例【例4.8】已知電路如圖】已知電路如圖4-54-5所示,要求實現(xiàn):所示,要求實現(xiàn):解:程序如下解:程序如下SGNL:ANL P1,#11100011BSGNL:ANL P1,#11100011B; ;紅綠黃燈滅紅綠黃燈滅 ORL P1,#00000011BORL P1,#00000011B; ;置置P1.0P1.0、P1.1P1.1輸入

18、態(tài)輸入態(tài), , P1.5P1.5P1.7P1.7狀態(tài)不變狀態(tài)不變SL0: JNB P1.0,SL1SL0: JNB P1.0,SL1 ;P1.0=0,S0;P1.0=0,S0未按下未按下, ,轉判轉判S1S1 JNB P1.1,RED JNB P1.1,RED ;P1.0=1,S0;P1.0=1,S0按下按下; ;且且P1.1=0,S1P1.1=0,S1未按下未按下, ,轉紅燈亮轉紅燈亮YELW:SETB P1.4YELW:SETB P1.4 ; ;黃燈亮黃燈亮 CLR P1.2CLR P1.2 ; ;紅燈滅紅燈滅 CLR P1.3CLR P1.3 ; ;綠燈滅綠燈滅 SJMP SL0SJMP

19、 SL0 ; ;轉循環(huán)轉循環(huán)SL1: JNB P1.1,YELWSL1: JNB P1.1,YELW ;P1.0=0,S0;P1.0=0,S0未按下未按下;P1.1=0,S1;P1.1=0,S1未按下未按下, ,轉黃燈亮轉黃燈亮GREN:SETB P1.3GREN:SETB P1.3 ; ;綠燈亮綠燈亮 CLR P1.2CLR P1.2 ; ;紅燈滅紅燈滅 CLR P1.4CLR P1.4 ; ;黃燈滅黃燈滅 SJMP SL0SJMP SL0 ; ;轉循環(huán)轉循環(huán)RED: SETB P1.2RED: SETB P1.2 ; ;紅燈亮紅燈亮 CLR P1.3CLR P1.3 ; ;綠燈滅綠燈滅 C

20、LR P1.4CLR P1.4 ; ;黃燈滅黃燈滅 SJMP SL0SJMP SL0 ; ;轉循環(huán)轉循環(huán) 課堂練習題:課堂練習題: 電路及燈亮滅要求同上述【例】題,其中第電路及燈亮滅要求同上述【例】題,其中第3 3、4 4兩條指令兩條指令JNB P1.0JNB P1.0和和JNB P1.1JNB P1.1按下列要求修改,按下列要求修改,試重新編程。試重新編程。 JBJBP1.0P1.0,JBJBP1.1P1.1, JBJBP1.0P1.0, JNB P1.1JNB P1.1, JNB P1.0JNB P1.0, JBJBP1.1P1.1, 循環(huán)程序一般包括以下幾個部分:循環(huán)程序一般包括以下幾個

21、部分: 循環(huán)初值;循環(huán)初值; 循環(huán)體;循環(huán)體; 循環(huán)修改;循環(huán)修改; 循環(huán)控制;循環(huán)控制;以上四部分可以有兩種組織形式,以上四部分可以有兩種組織形式,其結構如其結構如圖圖4-64-6所所示。示。 三三. . 循環(huán)程序循環(huán)程序【例【例4.10】設設XiXi均為單字節(jié)數(shù),并按順序存放在以均為單字節(jié)數(shù),并按順序存放在以50H50H為首地址的內(nèi)為首地址的內(nèi)RAMRAM存儲單元中,數(shù)據(jù)長度(個數(shù))存儲單元中,數(shù)據(jù)長度(個數(shù))N N存存在在R2R2中,試編程求和中,試編程求和S=XS=X1 1+X+X2 2+X+XN N,并將,并將S S(雙字(雙字節(jié))存放在節(jié))存放在R3R4R3R4中,(設中,(設S

22、S6553665536)。)。解:程序如下:解:程序如下: SXN: MOV R2,#NSXN: MOV R2,#N ;置數(shù)據(jù)長度置數(shù)據(jù)長度( (循環(huán)次數(shù)循環(huán)次數(shù)) ) MOV R3,#00H MOV R3,#00H ;和單元和單元( (高高8 8位位) )清清0 0 MOV R4,#00H MOV R4,#00H ;和單元和單元( (低低8 8位位) )清清0 0 MOV R0,#50H MOV R0,#50H ;求和數(shù)據(jù)區(qū)首址求和數(shù)據(jù)區(qū)首址LOOP:MOV A,R4LOOP:MOV A,R4 ;讀前次低讀前次低8 8位和位和 ADD A,R0ADD A,R0 ;低低8 8位累加位累加 MO

23、V R4,AMOV R4,A ;存低存低8 8位和位和 CLR A CLR A ; ADDC A,R3 ADDC A,R3 ;高高8 8位加進位位加進位 MOV R3,A MOV R3,A ;存高存高8 8位和位和 INC R0 INC R0 ;指向下一數(shù)據(jù)指向下一數(shù)據(jù) 循環(huán)修改循環(huán)修改 DJNZ R2,LOOP DJNZ R2,LOOP ;判判N N個數(shù)據(jù)累加完否?個數(shù)據(jù)累加完否? 循環(huán)控制循環(huán)控制 RET RET ;退出循環(huán)退出循環(huán) 退出循環(huán)退出循環(huán) 置置循循環(huán)環(huán)初初值值循循環(huán)環(huán)體體【例【例4 41111】 設在內(nèi)設在內(nèi)RAM 40HRAM 40H開始的存儲區(qū)有若干個字符開始的存儲區(qū)有若干

24、個字符和數(shù)字,已知最后一個為字符和數(shù)字,已知最后一個為字符“$”($”(并且只有惟一一個并且只有惟一一個) ),試統(tǒng)計這些字符和數(shù)字的個數(shù),統(tǒng)計結果存人試統(tǒng)計這些字符和數(shù)字的個數(shù),統(tǒng)計結果存人30H30H單元。單元。 解:程序如下:解:程序如下:【例【例4 41212】 內(nèi)部內(nèi)部RAM 20HRAM 20H單元開始存有單元開始存有8 8個數(shù),個數(shù),試找出其中最大的數(shù),送入試找出其中最大的數(shù),送入MAXMAX單元。單元。 解:程序如下:解:程序如下: ORG 1000HORG 1000HDELAYDELAY:MOV R6MOV R6,#200 ; 1Tm#200 ; 1TmLOOP1: MOV

25、R7LOOP1: MOV R7,#248 ; #248 ; 1Tm1Tm NOP ; NOP ; 1Tm1TmLOOP2: DJNZ R7LOOP2: DJNZ R7,LOOP2 ; LOOP2 ; 2Tm2Tm DJNZ R6 DJNZ R6,LOOP1 ; LOOP1 ; 2Tm2Tm RET ; 1Tm RET ; 1Tm補充例補充例: :軟件循環(huán)延時軟件循環(huán)延時100mS(100mS(晶振晶振12MHz)12MHz) 1Tm =1uS 100mS = 100000 uS 1Tm =1uS 100mS = 100000 uS MOV RnMOV Rn #data #data 和和 NOP

26、 NOP 是單機器周期指令是單機器周期指令 DJNZ RnDJNZ Rn,rel rel 是雙機器周期指令是雙機器周期指令 200 = 0C8H ; 248 = 0F8H200 = 0C8H ; 248 = 0F8H1+1+ 1+1+ 248x248x2 2 =498=498(498+(498+2 2) )x200 x200 ORG 1000HORG 1000HDL1SDL1S:MOV R7MOV R7,#10#10DL1:DL1: MOV R6MOV R6,#200#200DL2:DL2: MOV R5, #250MOV R5, #250 DL3:DL3: DJNZ R5, DL3DJNZ

27、R5, DL3 DJNZ R6DJNZ R6,DL2DL2 DJNZ R7DJNZ R7,DL1DL1 RET RET補充例補充例: :軟件循環(huán)延時軟件循環(huán)延時1S(1S(晶振晶振12MHz)12MHz) 1Tm =1uS 1S = 1000000 uS 1Tm =1uS 1S = 1000000 uS MOV RnMOV Rn #data #data 是單機器周期指令是單機器周期指令 DJNZ RnDJNZ Rn,rel rel 是雙機器周期指令是雙機器周期指令1+ 1+ 250 x2250 x21+ 1+ (1+250 x2)(1+250 x2) +2)x200+2)x2001+1+ (1

28、+250 x2+2) (1+250 x2+2) x200 x200+2x10=+2x10=【例【例4-13(2)4-13(2)】編寫延時】編寫延時10ms10ms子程序子程序, ,foscfosc=12MHz=12MHz。 解解: :foscfosc=12MHz=12MHz,一個機器周期為,一個機器周期為1 1 s s。DY10ms:MOV R6,#20 DY10ms:MOV R6,#20 ; ; 置外循環(huán)次數(shù)置外循環(huán)次數(shù)DLP1: MOV R7,#250 DLP1: MOV R7,#250 ; ; 置內(nèi)循環(huán)次數(shù)置內(nèi)循環(huán)次數(shù)DLP2: DJNZ R7,DLP2 DLP2: DJNZ R7,DL

29、P2 ; 2; 2機周機周250 =500250 =500機周機周 DJNZ R6,DLP1 DJNZ R6,DLP1 ; 500; 500機周機周20= 1000020= 10000機周機周 RET RET ; ;說明:說明:MOV RnMOV Rn指令為指令為1 1個機器周期個機器周期; ; DJNZ DJNZ指令為指令為2 2個機器周期個機器周期; ; RET RET指令為指令為2 2個機器周期個機器周期; ;(2 2機周機周250)+1+2250)+1+220+1+220+1+21 1 s s/ /機周機周=10063=10063 s10mss10ms【課堂練習題】【課堂練習題】 按下

30、列要求編寫延時子程序:按下列要求編寫延時子程序: 延時延時2 2msms,foscfosc=6MHz=6MHz; 延時延時5 5msms,foscfosc=12MHz=12MHz; 延時延時1010s s,foscfosc=12MHz=12MHz; 設設80C5180C51單片機的單片機的P1P1口作為輸出口,經(jīng)驅動電路口作為輸出口,經(jīng)驅動電路74LS240(874LS240(8反相三態(tài)緩沖反相三態(tài)緩沖/ /驅動器驅動器) )接接8 8只發(fā)光二極管,如圖只發(fā)光二極管,如圖4-4-8 8所示。當輸出位為所示。當輸出位為“1”1”時,發(fā)光二極管點亮,輸出位為時,發(fā)光二極管點亮,輸出位為“0”0”時

31、為暗。試編程實現(xiàn):時為暗。試編程實現(xiàn):每個燈每個燈閃爍點亮閃爍點亮1010次次,再轉移再轉移到下一個燈到下一個燈閃爍點亮閃爍點亮1010次,循環(huán)不止。次,循環(huán)不止。 【例【例4.154.15】 編制一個循環(huán)閃爍燈的程序。編制一個循環(huán)閃爍燈的程序。FLASH:MOV A,#01HFLASH:MOV A,#01H ; ;置燈亮初值置燈亮初值FSH0: MOV R2,#0AHFSH0: MOV R2,#0AH; ;置閃爍次數(shù)置閃爍次數(shù)FLOP: MOV P1,AFLOP: MOV P1,A; ;點亮點亮 LCALL DY1sLCALL DY1s; ;延時延時1 1s s MOV P1,#00H MO

32、V P1,#00H; ;熄滅熄滅 LCALL DY1sLCALL DY1s; ;延時延時1 1s s DJNZ R2,FLOP DJNZ R2,FLOP; ;閃爍閃爍1010次次 RLRL A A; ;左移一位左移一位 SJMP FSH0SJMP FSH0; ;循環(huán)循環(huán) RETRET; ;解:程序如下:解:程序如下:延時子程序可根據(jù)延時長短,自行編寫。延時子程序可根據(jù)延時長短,自行編寫。 【課堂練習題【課堂練習題】 根據(jù)圖根據(jù)圖4-84-8電路,設計燈亮移位程序,電路,設計燈亮移位程序,要求要求8 8只發(fā)光二極管每次點亮一個,點亮只發(fā)光二極管每次點亮一個,點亮時間為時間為250ms250ms,

33、順序是從下到上一個一個,順序是從下到上一個一個地循環(huán)點亮。設地循環(huán)點亮。設foscfosc=6=6MHzMHz?!纠纠?.16】已知已知P1P1口數(shù)據(jù)每隔口數(shù)據(jù)每隔10ms10ms刷新一次,刷新一次,試求其試求其1s1s內(nèi)的平均值內(nèi)的平均值, , 平均值存平均值存30H30H。 解:本題需求解:本題需求100100個數(shù)據(jù)的平均值,個數(shù)據(jù)的平均值, 一般有兩種方法:一般有兩種方法: 一種是全部累加后再平均;一種是全部累加后再平均; 另一種是邊平均邊累加,另一種是邊平均邊累加, 現(xiàn)給出兩種方法的程序?,F(xiàn)給出兩種方法的程序。AVRG1: MOV R2,#0AVRG1: MOV R2,#0 ; ;低

34、低8 8位累加寄存器清位累加寄存器清0 0 MOV R3,#0 MOV R3,#0 ; ;高高8 8位累加寄存器清位累加寄存器清0 0 MOV R4,#100 MOV R4,#100 ; ;置平均次數(shù)置平均次數(shù)ALOP: MOV A,P1ALOP: MOV A,P1; ;讀讀P1P1口數(shù)據(jù)口數(shù)據(jù) ADD A,R2ADD A,R2; ;低低8 8位累加位累加 MOV R2,AMOV R2,A; ;回存回存 CLR ACLR A; ;高高8 8位與進位累加位與進位累加 ADDC A,R3ADDC A,R3; ; MOV R3,A MOV R3,A; ;回存回存 LCALL DY10msLCALL

35、DY10ms ; ;延時延時10ms10ms DJNZ R4,ALOP DJNZ R4,ALOP; ;判判100100次累加完否?未完繼續(xù)次累加完否?未完繼續(xù) MOV A,R3MOV A,R3;100;100次累加完次累加完, ,求平均值求平均值, ,被除數(shù)被除數(shù)A A、B B MOV B,R2 MOV B,R2; ; MOV R0,30H MOV R0,30H ; ;置商間址置商間址 MOV R6,#0MOV R6,#0; ;置除數(shù)置除數(shù)100,100,除數(shù)除數(shù)R6R5R6R5 MOV R5,#100 MOV R5,#100; ; LCALL SUM LCALL SUM;(A;(A、B)B)

36、(R6(R6、R5)= R5)= 商商 R0, R0, 余數(shù)余數(shù)A A CJNE A,#50,NEXT CJNE A,#50,NEXT; ;四舍五入四舍五入NEXT: JCNEXT: JC GRET GRET;C=1,;C=1,50, 50, 舍舍 INCINC 30H 30H;C=0,50, ;C=0,50, 入入GRET: RETGRET: RET; ; 全全部部累累加加后后再再平平均均注:SUM子程序可參閱例4-9AVRG2:AVRG2: MOV MOV 30H,#030H,#0; ;商累加寄存器清商累加寄存器清0 0MOVMOV31H,#031H,#0; ;余數(shù)累加寄存器清余數(shù)累加寄存

37、器清0 0 MOVMOVR4,#100R4,#100; ;置平均次數(shù)置平均次數(shù)ALOP:ALOP:MOVMOVA,P1A,P1; ;讀讀P1P1口數(shù)據(jù)口數(shù)據(jù) MOVMOVB,#100B,#100; ;置除數(shù)置除數(shù)( (平均次數(shù)平均次數(shù)) )DIVDIVABAB;P1;P1口數(shù)據(jù)除以口數(shù)據(jù)除以100100ADDADDA,30HA,30H; ;商累加商累加MOV MOV 30H,A30H,A; ;回存回存MOV MOV A,BA,B; ;ADDADDA,31HA,31H; ;余數(shù)累加余數(shù)累加MOVMOV31H,A31H,A; ;回存回存CLRCLRC C; ;SUBBSUBBA,#100A,#10

38、0; ;JCJCGONGON; ;余數(shù)累加余數(shù)累加100,100,余數(shù)累加寄存器不變余數(shù)累加寄存器不變INCINC30H30H; ;余數(shù)累加余數(shù)累加100, 100, 商累加寄存器商累加寄存器+1+1MOVMOV31H,A31H,A; ;減去減去100100后差后差余數(shù)累加寄存器余數(shù)累加寄存器GON: GON: LCALLLCALLDY10msDY10ms; ;延時延時10ms10msDJNZDJNZR4,ALOPR4,ALOP ; ;判判100100次累加完否?未完繼續(xù)次累加完否?未完繼續(xù)MOVMOVA,31HA,31H;100;100次累加完畢次累加完畢, ,余數(shù)累加四舍五入余數(shù)累加四舍五

39、入CJNECJNEA,#50,NEXTA,#50,NEXT; ;NEXT:NEXT:JCJCGRETGRET;C=1,;C=1,50, 50, 舍舍INCINC30H30H;C=0,50, ;C=0,50, 入入GRET:GRET:RET RET ; ; 邊邊平平均均邊邊累累加加【課堂練習題【課堂練習題】 已知某單片機系統(tǒng)每隔已知某單片機系統(tǒng)每隔20ms20ms測一次測一次溫度,溫度,8 8位溫度位溫度A/DA/D值存在特殊功能寄存值存在特殊功能寄存器器SBUFSBUF中,試分別求其中,試分別求其1s1s和和1 1分內(nèi)的平均分內(nèi)的平均值值, , 分別存分別存30H30H和和3131H H。 當

40、用當用PCPC作基址寄存器時作基址寄存器時,其表格首地址與,其表格首地址與PCPC值間距值間距不能超過不能超過256256字節(jié),且編程要事先計算好偏移量,比較字節(jié),且編程要事先計算好偏移量,比較麻煩。麻煩。因此,一般情況下用因此,一般情況下用DPTRDPTR作基址寄存器作基址寄存器。四四. . 查表程序查表程序用于查表的指令有兩條:用于查表的指令有兩條: MOVC A,A+MOVC A,A+DPTRDPTR MOVC A,A+ MOVC A,A+PCPC 當用當用DPTRDPTR作基址寄存器時作基址寄存器時,查表的步驟分三步:,查表的步驟分三步: 基址值(表格首地址)基址值(表格首地址)DPT

41、RDPTR; 變址值(表中要查的項與表格首地址之間的變址值(表中要查的項與表格首地址之間的 間隔字間隔字節(jié)數(shù))節(jié)數(shù))A A; 執(zhí)行執(zhí)行MOVC AMOVC A,A+DPTRA+DPTR。解:編程如下:解:編程如下: CHAG:MOV DPTR,#TABDCHAG:MOV DPTR,#TABD; ;置共陰字段碼表首址置共陰字段碼表首址MOV A,30H MOV A,30H ; ;讀顯示數(shù)字讀顯示數(shù)字 MOVC A,A+DPTR MOVC A,A+DPTR ; ;查表查表, ,轉換為顯示字段碼轉換為顯示字段碼 MOV 30H,A MOV 30H,A ; ;存顯示字段碼存顯示字段碼 RET RET

42、; ;TABD:DB 3FH,06H,5BH,4FH,66HTABD:DB 3FH,06H,5BH,4FH,66H;0;04 4共陰字段碼表共陰字段碼表 DB 6DH,7DH,07H,7FH,6FHDB 6DH,7DH,07H,7FH,6FH;5;59 9共陰字段碼表共陰字段碼表【例【例4.17】 在單片機應用系統(tǒng)中,常用在單片機應用系統(tǒng)中,常用LEDLED數(shù)碼管顯數(shù)碼管顯示數(shù)碼,但顯示數(shù)字示數(shù)碼,但顯示數(shù)字( (9)9)與顯示數(shù)字編碼并不相同,與顯示數(shù)字編碼并不相同,需要將顯示數(shù)字轉換為顯示字段碼,通常是用查表需要將顯示數(shù)字轉換為顯示字段碼,通常是用查表的方法?,F(xiàn)要求將的方法?,F(xiàn)要求將30H

43、30H中的顯示數(shù)字轉換為顯示字段中的顯示數(shù)字轉換為顯示字段碼并存入碼并存入30H30H。已知共陰字段碼表首址為。已知共陰字段碼表首址為TABDTABD?!菊n堂練習題【課堂練習題】 已知已知8 8位顯示數(shù)字已存入首址為位顯示數(shù)字已存入首址為30H30H的內(nèi)的內(nèi)RAMRAM中,試將其轉換為共陰顯示字中,試將其轉換為共陰顯示字段碼,存入首址為段碼,存入首址為40H40H的內(nèi)的內(nèi)RAMRAM中。中。解:編程如下:解:編程如下:CUBE:CUBE: MOV DPTR,#TAB MOV DPTR,#TAB ; ;置立方表首址置立方表首址MOV A,30HMOV A,30H ; ;讀數(shù)據(jù)讀數(shù)據(jù)ADD A,3

44、0HADD A,30H ; ;數(shù)據(jù)數(shù)據(jù)2A2AMOV 30H,AMOV 30H,A ; ;暫存立方表數(shù)據(jù)序號暫存立方表數(shù)據(jù)序號 MOVC A, A+DPTRMOVC A, A+DPTR; ;讀立方數(shù)據(jù)高讀立方數(shù)據(jù)高8 8位位XCH A,30H XCH A,30H ; ;存立方數(shù)據(jù)高存立方數(shù)據(jù)高8 8位位, ,立方表數(shù)據(jù)序號立方表數(shù)據(jù)序號 A AINC AINC A ; ;指向立方數(shù)據(jù)低指向立方數(shù)據(jù)低8 8位位MOVC A,A+DPTR MOVC A,A+DPTR ; ;讀立方數(shù)據(jù)低讀立方數(shù)據(jù)低8 8位位 MOV 31H,AMOV 31H,A ; ;存立方數(shù)據(jù)低存立方數(shù)據(jù)低8 8位位RET RE

45、T ; ;TAB: DW 0,0,0,1,0,8,0,27,0,64 TAB: DW 0,0,0,1,0,8,0,27,0,64 ;0;04040立方表立方表 DW 0,125,0,216,0FAH,00HDW 0,125,0,216,0FAH,00H; ;說明:數(shù)據(jù)說明:數(shù)據(jù)2A2A原因是立方表數(shù)據(jù)為雙字節(jié)原因是立方表數(shù)據(jù)為雙字節(jié)【例【例4.19】 用查表程序求用查表程序求0 04040之間整數(shù)的立方。已知該整之間整數(shù)的立方。已知該整數(shù)存在內(nèi)數(shù)存在內(nèi)RAM 30HRAM 30H中,查得立方數(shù)存內(nèi)中,查得立方數(shù)存內(nèi)RAM 30HRAM 30H(高(高8 8位)位)31H31H。已知立方表。已知立方表( (雙字節(jié)雙字節(jié)) )首地址為首地址為TABTAB。 在單片機系統(tǒng)中設置在單片機系統(tǒng)中設置+ +、 、 、 四個運算命四個運算命令鍵,它們的鍵號分別為令鍵,它們的鍵號分別為0 0、1 1、2 2、3 3。當其中一。當其中一個鍵按下時,進行相應的運算。操作數(shù)由個鍵按下時,進行相應的運算。操作數(shù)由P1P1口和口和P3P3口輸入,運算結果仍由口輸入,運算結果仍由P1P1口和口和P3P3口輸出。具體口輸出。具體

溫馨提示

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

評論

0/150

提交評論