單片機(jī)原理與應(yīng)用--程序設(shè)計(jì)課件_第1頁(yè)
單片機(jī)原理與應(yīng)用--程序設(shè)計(jì)課件_第2頁(yè)
單片機(jī)原理與應(yīng)用--程序設(shè)計(jì)課件_第3頁(yè)
單片機(jī)原理與應(yīng)用--程序設(shè)計(jì)課件_第4頁(yè)
單片機(jī)原理與應(yīng)用--程序設(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩36頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)2本章要點(diǎn)匯編語(yǔ)言語(yǔ)句格式匯編語(yǔ)言程序設(shè)計(jì)程序設(shè)計(jì)舉例單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)3 一、指令格式一、指令格式標(biāo)號(hào):標(biāo)號(hào):用于指示指令的地址。用于指示指令的地址。 由由1-81-8個(gè)字符組成,且第一個(gè)字符必須是字母?jìng)€(gè)字符組成,且第一個(gè)字符必須是字母操作數(shù)操作數(shù): 可使用二(可使用二(b b結(jié)尾)、十(結(jié)尾)、十(d d結(jié)尾或省略)、結(jié)尾或省略)、 十六(十六(h h結(jié)尾)進(jìn)制數(shù)和字符串(加結(jié)尾)進(jìn)制數(shù)和字符串(加“ ”)注釋注釋:為不可執(zhí)行部分,對(duì)程序加以說(shuō)明:為不可執(zhí)行部分,對(duì)程序加以說(shuō)明二、偽指令格式二、偽指令格式 4-14-1 匯編語(yǔ)言語(yǔ)

2、句格式匯編語(yǔ)言語(yǔ)句格式 標(biāo)號(hào):標(biāo)號(hào): 助記符助記符 操作數(shù)操作數(shù)1 1,操作數(shù),操作數(shù)2 2 ;注釋;注釋 偽指令是不可執(zhí)行的指令,其功能是為匯編程序提供信息偽指令是不可執(zhí)行的指令,其功能是為匯編程序提供信息單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)4常用偽指令有:常用偽指令有:1.編起始地址命令:org格式:格式: orgorg 地址地址 功能:規(guī)定程序的起始地址,省略時(shí)起始地功能:規(guī)定程序的起始地址,省略時(shí)起始地址從址從0000h0000h開(kāi)始開(kāi)始2.2.匯編終止命令:匯編終止命令:endend格式:格式: endend 表達(dá)式表達(dá)式功能:源程序匯編終止。在主程序模塊中含功能:源程序匯編終止。在主程序模塊

3、中含有有“表達(dá)式表達(dá)式”給出程序的起始地址給出程序的起始地址,在其它模塊(子程序)在其它模塊(子程序)中表達(dá)式可省略。中表達(dá)式可省略。單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)53.3.賦值命令:賦值命令:equequ格式:字符名稱格式:字符名稱 equequ 表達(dá)式表達(dá)式功能:將表達(dá)式的值賦給字符名稱。功能:將表達(dá)式的值賦給字符名稱。 表達(dá)式可以是常數(shù)、地址、標(biāo)號(hào)和表達(dá)式。表達(dá)式可以是常數(shù)、地址、標(biāo)號(hào)和表達(dá)式。說(shuō)明:賦值之后的字符名稱可以在程序中使用說(shuō)明:賦值之后的字符名稱可以在程序中使用例如:例如: a1 equ 20ha1 equ 20h b1 equ a1 b1 equ a1 c1 equ 40h+1

4、0h c1 equ 40h+10h . . . . mov a mov a,# a1# a1 bac: add a bac: add a,c1 c1 單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)6 (2) (2)格式:格式: 標(biāo)號(hào):標(biāo)號(hào): dwdw 字?jǐn)?shù)據(jù)項(xiàng)字?jǐn)?shù)據(jù)項(xiàng)功能:從指定地址功能:從指定地址( (即標(biāo)號(hào)即標(biāo)號(hào)) )開(kāi)始開(kāi)始, ,在在程序程序存儲(chǔ)器存儲(chǔ)器中定義中定義1616位字?jǐn)?shù)據(jù)。高位字?jǐn)?shù)據(jù)。高8 8位數(shù)據(jù)在位數(shù)據(jù)在低地址單元,低低地址單元,低8 8位數(shù)據(jù)在高地址單元。位數(shù)據(jù)在高地址單元。 tab1 1bh 41h feh 80h tab2 30h 2ah 00h 34h 低高例如:例如: org 100

5、0horg 1000htab1tab1:db 1bhdb 1bh,a a,-2-2,128 128 tab2tab2:dw 302ahdw 302ah,34h 34h 存儲(chǔ)格式:存儲(chǔ)格式:4.4.定義數(shù)據(jù)命令:定義數(shù)據(jù)命令:dbdb、dwdw(1)(1)格式:格式: 標(biāo)號(hào):標(biāo)號(hào): dbdb 字節(jié)數(shù)據(jù)項(xiàng)字節(jié)數(shù)據(jù)項(xiàng)表表功能:從指定地址(即標(biāo)號(hào))開(kāi)始,在功能:從指定地址(即標(biāo)號(hào))開(kāi)始,在程序存儲(chǔ)器程序存儲(chǔ)器 中定義字節(jié)數(shù)據(jù)中定義字節(jié)數(shù)據(jù) 單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)7 5. 5.存儲(chǔ)區(qū)命令:存儲(chǔ)區(qū)命令:dsds 例如:例如: org 2000horg 2000h tab tab:ds 05hds 05

6、h6.6.位定義命令:位定義命令:bitbit例如:例如: huled bit p1.0huled bit p1.0格式:格式: 標(biāo)號(hào):標(biāo)號(hào): ds ds 表達(dá)式表達(dá)式功能:從指定地址(即標(biāo)號(hào))開(kāi)始,保留指定數(shù)目(功能:從指定地址(即標(biāo)號(hào))開(kāi)始,保留指定數(shù)目(表達(dá)式的值)表達(dá)式的值)的字節(jié)單元作為存儲(chǔ)區(qū),供程序運(yùn)行使用(用于程序存儲(chǔ)器)的字節(jié)單元作為存儲(chǔ)區(qū),供程序運(yùn)行使用(用于程序存儲(chǔ)器)格式:字符名稱格式:字符名稱 bitbit 位地址位地址功能:功能:將位地址賦給字符名稱。位地址為絕對(duì)地址或符號(hào)地址將位地址賦給字符名稱。位地址為絕對(duì)地址或符號(hào)地址單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)8 一、分支程序的

7、基本結(jié)構(gòu)一、分支程序的基本結(jié)構(gòu) 一般情況下,程序按順序方式執(zhí)行,但一般情況下,程序按順序方式執(zhí)行,但根據(jù)實(shí)際需要也可改變程序的執(zhí)行順序,根據(jù)實(shí)際需要也可改變程序的執(zhí)行順序,稱為分支程序。稱為分支程序。 分支程序是根據(jù)給出的條件滿足與否分支程序是根據(jù)給出的條件滿足與否執(zhí)行不同的走向,基本結(jié)構(gòu)分為執(zhí)行不同的走向,基本結(jié)構(gòu)分為單分支單分支、雙分支雙分支和和多分支多分支程序。程序。 單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)9 1. 1. 單分支結(jié)構(gòu)單分支結(jié)構(gòu) 單分支結(jié)構(gòu)如圖單分支結(jié)構(gòu)如圖 4 41 1 所示。給出的條件滿足,所示。給出的條件滿足,則執(zhí)行程序段則執(zhí)行程序段 a a,然后執(zhí)行該指令下面的指令;,然后執(zhí)行

8、該指令下面的指令;若條件滿不足,則不執(zhí)行程序段若條件滿不足,則不執(zhí)行程序段 a a,而是執(zhí)行該,而是執(zhí)行該指令下面的指令。指令下面的指令。a條件條件 b a下一指令下一指令yn條件條件yn圖 4 - 1圖 4 - 2單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)10 2.2.雙分支結(jié)構(gòu)雙分支結(jié)構(gòu) 雙分支結(jié)構(gòu)如圖雙分支結(jié)構(gòu)如圖 4 - 2 4 - 2 所示。給出的條件滿足,所示。給出的條件滿足,則執(zhí)行程序段則執(zhí)行程序段 a a,否則執(zhí)行程序段,否則執(zhí)行程序段 b b。 3.3.多分支結(jié)構(gòu)多分支結(jié)構(gòu) 多分支結(jié)構(gòu)如圖多分支結(jié)構(gòu)如圖 4 - 3 4 - 3 所示。首先將分支按號(hào)所示。首先將分支按號(hào)進(jìn)行排列,然后按序號(hào)的值

9、來(lái)實(shí)現(xiàn)多分支選擇。進(jìn)行排列,然后按序號(hào)的值來(lái)實(shí)現(xiàn)多分支選擇。0分支 1分支n-1分支n分支k=k=01n-1n.圖 4 - 3單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)11 二、分支程序設(shè)計(jì)舉例二、分支程序設(shè)計(jì)舉例 在在mcs-51 mcs-51 匯編語(yǔ)言分支程序設(shè)計(jì)中,匯編語(yǔ)言分支程序設(shè)計(jì)中,通常是通過(guò)條件轉(zhuǎn)移指令來(lái)實(shí)現(xiàn)分支選擇。通常是通過(guò)條件轉(zhuǎn)移指令來(lái)實(shí)現(xiàn)分支選擇。 例例 4-14-1 設(shè):兩個(gè)設(shè):兩個(gè) 8 8 位無(wú)符號(hào)數(shù)分別存放在外位無(wú)符號(hào)數(shù)分別存放在外部部ram 40hram 40h和和41h41h單元中,將找出較大數(shù)存放單元中,將找出較大數(shù)存放在在42h42h單元中。單元中。 源程序如下:源程序如下

10、:比較兩個(gè)數(shù)大小比較兩個(gè)數(shù)大小單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)12org 1000horg 1000h clr c ;cy clr c ;cy0 0 mov dptr mov dptr,#0040h ;#0040h ;置數(shù)據(jù)指針置數(shù)據(jù)指針 movx amovx a,dptr ;dptr ;取第一個(gè)數(shù)取第一個(gè)數(shù) mov r3mov r3,a ;a ;第一個(gè)數(shù)暫存于第一個(gè)數(shù)暫存于r3r3 inc dptr ; inc dptr ;修改指針修改指針 movx amovx a,dptr ;dptr ;取第二個(gè)數(shù)取第二個(gè)數(shù) subb asubb a,r3 ;r3 ;兩數(shù)比較兩數(shù)比較 jnc big2 ;jnc

11、 big2 ;第二個(gè)數(shù)大第二個(gè)數(shù)大 xch axch a,r3 ;r3 ;第一個(gè)數(shù)大第一個(gè)數(shù)大 sjmp big1 sjmp big1 big2: movx abig2: movx a,dptr dptr big1: inc dptr ;big1: inc dptr ;修改指針修改指針 movx dptr,a ;movx dptr,a ;存放大數(shù)存放大數(shù) endend單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)13 例例 4-24-2 設(shè):設(shè):r7r7的內(nèi)容為的內(nèi)容為0-0-n n,對(duì)應(yīng)處理程序的入口地址,對(duì)應(yīng)處理程序的入口地址分別是分別是proc0 -procnproc0 -procn。 分析分析:(:(1

12、1)程序中把每個(gè)處理程序的入口地址程序中把每個(gè)處理程序的入口地址(proc0 -proc0 - procnprocn)置于以)置于以tabtab為首址的地址表內(nèi)為首址的地址表內(nèi) (2 2) 根據(jù)給出的分支序號(hào)(序號(hào)乘以根據(jù)給出的分支序號(hào)(序號(hào)乘以2 2),),由查表指令由查表指令“movcmovc”取出相應(yīng)分支入口地址置于取出相應(yīng)分支入口地址置于dptrdptr中中, ,將累加器清零后將累加器清零后, ,執(zhí)行執(zhí)行jmp a+dptrjmp a+dptr指令指令, ,轉(zhuǎn)向相應(yīng)處理程序。轉(zhuǎn)向相應(yīng)處理程序。 (3 3)本程序可實(shí)現(xiàn)多達(dá))本程序可實(shí)現(xiàn)多達(dá) 128 128 個(gè)分支選擇個(gè)分支選擇, ,程程

13、序可分布在序可分布在 64kb 64kb 存儲(chǔ)區(qū)域內(nèi)。存儲(chǔ)區(qū)域內(nèi)。 根據(jù)根據(jù)r7r7的內(nèi)容轉(zhuǎn)向相應(yīng)的處理程序的內(nèi)容轉(zhuǎn)向相應(yīng)的處理程序單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)14 源程序源程序:org 2000horg 2000h mov dptr mov dptr ,#tab ;#tab ;置分支入口地址表首址置分支入口地址表首址 mov amov a,r7 ;r7 ;分支轉(zhuǎn)移序號(hào)送分支轉(zhuǎn)移序號(hào)送a a add a add a,r7 ;r7 ;分支轉(zhuǎn)移序號(hào)乘以分支轉(zhuǎn)移序號(hào)乘以2 2 mov r3 mov r3,a ;a ;暫存入暫存入r3r3movc movc a a,a+dptr ;a+dptr ;程序入

14、口地址高程序入口地址高8 8位暫存位暫存r3r3xch axch a,r3 r3 inc a inc a movc movc a,a+dptr ;a,a+dptr ;程序入口地址低程序入口地址低8 8位送入位送入dpl dpl mov dpl mov dpl,a a mov dph mov dph,r3 ;r3 ;程序入口地址高程序入口地址高8 8位送入位送入dphdphclr a ;clr a ;清累加器清累加器jmp a+dptr ;jmp a+dptr ;轉(zhuǎn)向處理程序轉(zhuǎn)向處理程序tab:tab: dw proc0 dw proc0 dw proc1 dw proc1 dw procn d

15、w procn單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)15 直接跳轉(zhuǎn):直接跳轉(zhuǎn):假設(shè)累加器假設(shè)累加器a a中內(nèi)容為中內(nèi)容為0-40-4,編程實(shí)現(xiàn)根據(jù)累加器編程實(shí)現(xiàn)根據(jù)累加器a a的內(nèi)容實(shí)現(xiàn)不同的處理的內(nèi)容實(shí)現(xiàn)不同的處理startstart:mov r0mov r0,a a ;將;將a a送送r0r0 add a add a,r0 r0 ;a(a)a(a)2 2 add a add a,r0 r0 ;a(a)a(a)3 3 mov dptr mov dptr,#table #table ;轉(zhuǎn)移表首地址送;轉(zhuǎn)移表首地址送dptrdptr jmp a+dptr jmp a+dptr ;散轉(zhuǎn)相應(yīng)分支入口;散轉(zhuǎn)相應(yīng)分

16、支入口tabletable:ljmp fz0 (3ljmp fz0 (3字節(jié));轉(zhuǎn)向應(yīng)分字節(jié));轉(zhuǎn)向應(yīng)分0 0的處理入口的處理入口 ljmp fz1 ljmp fz1 ;轉(zhuǎn)向應(yīng)分;轉(zhuǎn)向應(yīng)分1 1的處理入口的處理入口 ljmp fz2 ljmp fz2 ;轉(zhuǎn)向應(yīng)分;轉(zhuǎn)向應(yīng)分2 2的處理入口的處理入口 ljmp fz3 ljmp fz3 ;轉(zhuǎn)向應(yīng)分;轉(zhuǎn)向應(yīng)分3 3的處理入口的處理入口 ljmp fz4 ljmp fz4 ;轉(zhuǎn)向應(yīng)分;轉(zhuǎn)向應(yīng)分4 4的處理入口的處理入口單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)16 一、循環(huán)程序的基本結(jié)構(gòu)一、循環(huán)程序的基本結(jié)構(gòu) 在基本設(shè)計(jì)中,控制一部分指令重復(fù)執(zhí)在基本設(shè)計(jì)中,控制一部

17、分指令重復(fù)執(zhí)行若干次,用簡(jiǎn)短的程序完成大量的處理任行若干次,用簡(jiǎn)短的程序完成大量的處理任務(wù),這種按某種控制規(guī)律重復(fù)執(zhí)行的程序,務(wù),這種按某種控制規(guī)律重復(fù)執(zhí)行的程序,稱為循環(huán)程序。稱為循環(huán)程序。 1. 1. 先執(zhí)行后判斷結(jié)構(gòu)先執(zhí)行后判斷結(jié)構(gòu) 此結(jié)構(gòu)如圖此結(jié)構(gòu)如圖4-44-4所示。特點(diǎn)是一進(jìn)入循環(huán),所示。特點(diǎn)是一進(jìn)入循環(huán),先執(zhí)行循環(huán)處理部分,然后根據(jù)循環(huán)控制條先執(zhí)行循環(huán)處理部分,然后根據(jù)循環(huán)控制條件判斷是否結(jié)束循環(huán),若不結(jié)束,則繼續(xù)執(zhí)件判斷是否結(jié)束循環(huán),若不結(jié)束,則繼續(xù)執(zhí)行循環(huán)操作;若結(jié)束,退出循環(huán)。行循環(huán)操作;若結(jié)束,退出循環(huán)。單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)17入口入口置循環(huán)初值置循環(huán)初值循環(huán)處理循

18、環(huán)處理修改循環(huán)參數(shù)修改循環(huán)參數(shù)修改循環(huán)參數(shù)修改循環(huán)參數(shù)循環(huán)處理循環(huán)處理退出循環(huán)退出循環(huán)退出循環(huán)退出循環(huán)循環(huán)控制循環(huán)控制循環(huán)控制循環(huán)控制置循環(huán)初值置循環(huán)初值結(jié)束結(jié)束繼續(xù)繼續(xù)入口入口結(jié)束結(jié)束繼續(xù)繼續(xù)圖 4-4圖 4-5單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)18 2. 2. 先判斷后執(zhí)行結(jié)構(gòu)先判斷后執(zhí)行結(jié)構(gòu) 此結(jié)構(gòu)如圖此結(jié)構(gòu)如圖4-54-5所示。特點(diǎn)是一進(jìn)入循環(huán)先判所示。特點(diǎn)是一進(jìn)入循環(huán)先判斷循環(huán)控制條件是否結(jié)束循環(huán),若結(jié)束,退出循斷循環(huán)控制條件是否結(jié)束循環(huán),若結(jié)束,退出循環(huán)環(huán), ,否則繼續(xù)執(zhí)行循環(huán)操作。否則繼續(xù)執(zhí)行循環(huán)操作。 循環(huán)程序由以下四個(gè)基本組成部分循環(huán)程序由以下四個(gè)基本組成部分. . (1) (1)置

19、循環(huán)初值置循環(huán)初值。設(shè)置循環(huán)開(kāi)始的初始值。設(shè)置循環(huán)開(kāi)始的初始值, ,為為循環(huán)做準(zhǔn)備。如設(shè)計(jì)數(shù)器循環(huán)做準(zhǔn)備。如設(shè)計(jì)數(shù)器, ,工作單元初值。工作單元初值。 (2)(2)循環(huán)處理循環(huán)處理。循環(huán)程序中重復(fù)執(zhí)行的內(nèi)容。循環(huán)程序中重復(fù)執(zhí)行的內(nèi)容。 (3)(3)循環(huán)修改循環(huán)修改。修改循環(huán)參數(shù)。修改循環(huán)參數(shù), ,為執(zhí)行下一次為執(zhí)行下一次循環(huán)做準(zhǔn)備。循環(huán)做準(zhǔn)備。 (4)(4)循環(huán)控制循環(huán)控制。判斷是否結(jié)束循環(huán)。判斷是否結(jié)束循環(huán)單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)19 二、二、 循環(huán)程序設(shè)計(jì)舉例循環(huán)程序設(shè)計(jì)舉例 1. 1. 循環(huán)次數(shù)已知的情況循環(huán)次數(shù)已知的情況 通常采用通常采用“計(jì)數(shù)法計(jì)數(shù)法”來(lái)控制循環(huán)來(lái)控制循環(huán), ,選擇

20、選擇“先執(zhí)行先執(zhí)行, ,后判斷后判斷”循環(huán)結(jié)構(gòu)。循環(huán)結(jié)構(gòu)。 例例 4-3 4-3 多個(gè)單字節(jié)數(shù)求和多個(gè)單字節(jié)數(shù)求和 設(shè):設(shè):10 10 個(gè)字節(jié)的無(wú)符號(hào)數(shù)據(jù)依次存放個(gè)字節(jié)的無(wú)符號(hào)數(shù)據(jù)依次存放在內(nèi)部在內(nèi)部 ram 40hram 40h開(kāi)始的單元中,所求結(jié)果開(kāi)始的單元中,所求結(jié)果存放在存放在 r3r3、r2r2中。中。本例循環(huán)次數(shù)已知,采用計(jì)數(shù)法控制循環(huán)本例循環(huán)次數(shù)已知,采用計(jì)數(shù)法控制循環(huán)單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)20 源程序如下:源程序如下: org 8000horg 8000h mov r0 mov r0,#40h ;#40h ;置數(shù)據(jù)指針置數(shù)據(jù)指針 mov r7mov r7,#10 ;#10

21、;置計(jì)數(shù)器初值置計(jì)數(shù)器初值 mov r3mov r3,#0 ;#0 ;結(jié)果單元清零結(jié)果單元清零 mov r2mov r2,#0 ;#0 ;loop1: mov aloop1: mov a,r2 ;r2 ;取加數(shù)取加數(shù) add aadd a,r0 ;r0 ;求和求和 mov r2mov r2,a ;a ;存結(jié)果低存結(jié)果低 8 8 位位 jnc loop2 ;jnc loop2 ;無(wú)進(jìn)位無(wú)進(jìn)位, ,轉(zhuǎn)轉(zhuǎn)loop2loop2 inc r3 ; inc r3 ;有進(jìn)位有進(jìn)位, ,結(jié)果高結(jié)果高 8 8 位加位加1 1loop2: inc r0 ;loop2: inc r0 ;修改指針修改指針 djnz

22、r7djnz r7,loop1 ;loop1 ;未完未完, ,繼續(xù)繼續(xù) end end 單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)21 2.2.循環(huán)次數(shù)未知的情況循環(huán)次數(shù)未知的情況 在有些問(wèn)題中在有些問(wèn)題中, ,循環(huán)次數(shù)事先無(wú)法確定循環(huán)次數(shù)事先無(wú)法確定, ,但循但循環(huán)執(zhí)行次數(shù)與問(wèn)題中的某些條件有關(guān)環(huán)執(zhí)行次數(shù)與問(wèn)題中的某些條件有關(guān), , 而且這些而且這些條件可以測(cè)試到條件可以測(cè)試到, ,在這種情況下宜選擇在這種情況下宜選擇“先判斷先判斷, ,后執(zhí)行后執(zhí)行”的循環(huán)結(jié)構(gòu)。的循環(huán)結(jié)構(gòu)。例例4-5 4-5 把內(nèi)部把內(nèi)部 ram ram 中起始地址為中起始地址為 data data 的數(shù)的數(shù)據(jù)串傳送到據(jù)串傳送到外部外部

23、ramram 中起始地址為中起始地址為 bufbuf的的存儲(chǔ)區(qū)域內(nèi),直到發(fā)現(xiàn)存儲(chǔ)區(qū)域內(nèi),直到發(fā)現(xiàn)“$ $”字符字符, ,停止傳送停止傳送 本例結(jié)束條件為找到本例結(jié)束條件為找到“$ $”停止傳送。停止傳送。源程序如下:源程序如下: 單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)22 org 8000horg 8000h mov r0,#data ; mov r0,#data ;置源數(shù)據(jù)區(qū)首地址置源數(shù)據(jù)區(qū)首地址 mov dptr,#buf ;mov dptr,#buf ;置目的數(shù)據(jù)區(qū)首地址置目的數(shù)據(jù)區(qū)首地址loop0:mov a,r0 ;loop0:mov a,r0 ;取數(shù)據(jù)取數(shù)據(jù) cjne a,#24h,loop1

24、 ;cjne a,#24h,loop1 ;判斷是否為判斷是否為$ $字符字符 sjmp loop2 ;sjmp loop2 ;是是$, $, 轉(zhuǎn)結(jié)束轉(zhuǎn)結(jié)束loop1: movx dptr,a ;loop1: movx dptr,a ;不是不是$, $, 執(zhí)行傳送執(zhí)行傳送 inc r0 ;inc r0 ;修改源地址修改源地址 inc dptr ;inc dptr ;修改目的地址修改目的地址 sjmp loop0 ;sjmp loop0 ;傳送下一個(gè)數(shù)據(jù)傳送下一個(gè)數(shù)據(jù)loop2: endloop2: end單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)23設(shè)計(jì)設(shè)計(jì)20ms20ms延時(shí)程序延時(shí)程序 例:例:12mhz1

25、2mhz晶振時(shí),一個(gè)機(jī)器周期為晶振時(shí),一個(gè)機(jī)器周期為ls,ls,執(zhí)行執(zhí)行一條一條“djnzdjnz”指令的時(shí)間為指令的時(shí)間為2s2s, 20ms = 2s20ms = 2s1000010000 由于由于8 8位的計(jì)數(shù)值最大為位的計(jì)數(shù)值最大為256256,這時(shí)可用雙重,這時(shí)可用雙重循環(huán)方法循環(huán)方法 20ms = 2s20ms = 2s100100100100, 延時(shí)延時(shí)20ms20ms程序如下的:程序如下的:延時(shí)程序與延時(shí)程序與5151指令執(zhí)行時(shí)間有很大的關(guān)系指令執(zhí)行時(shí)間有很大的關(guān)系單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)24mov-1ns djnz2ns內(nèi)內(nèi) 1+2*100外外1+(內(nèi)延時(shí)(內(nèi)延時(shí)+2)*1

26、00d20ms:mov r4d20ms:mov r4,#100 #100 ;20ms=2s20ms=2s100100100100 ; ; 外循環(huán)初值外循環(huán)初值=100=100dy1:mov r3dy1:mov r3,#100 #100 ;內(nèi)循環(huán)初值;內(nèi)循環(huán)初值=100 =100 dy2:djnz r3dy2:djnz r3,dy2 dy2 ;1001002=200=0.2ms2=200=0.2ms djnz r4 djnz r4,dy1 dy1 ;0.20.2100=20ms100=20ms ret ret單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)25 子程序的主要特點(diǎn)是:在執(zhí)行過(guò)程中需要由子程序的主要特點(diǎn)是

27、:在執(zhí)行過(guò)程中需要由其它程序來(lái)調(diào)用,執(zhí)行完畢又需要把執(zhí)行流程返其它程序來(lái)調(diào)用,執(zhí)行完畢又需要把執(zhí)行流程返回到調(diào)用該子程序的程序中。子程序執(zhí)行過(guò)程如回到調(diào)用該子程序的程序中。子程序執(zhí)行過(guò)程如圖圖 4 46 6 所示。所示。 在子程序調(diào)用過(guò)程中須解決在子程序調(diào)用過(guò)程中須解決call 子程序ret子程序圖 46以下兩個(gè)方面的問(wèn)題:以下兩個(gè)方面的問(wèn)題:程序之間的調(diào)用與返回;程序之間的調(diào)用與返回;調(diào)用程序與被調(diào)用程序之間的參數(shù)傳送調(diào)用程序與被調(diào)用程序之間的參數(shù)傳送單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)26 一、調(diào)用與返回指令 1.調(diào)用指令 (1)絕對(duì)調(diào)用指令(2字節(jié)指令) 功能功能:保護(hù)斷點(diǎn)保護(hù)斷點(diǎn): : 建立子程

28、序入口建立子程序入口: :注:注:acallacall調(diào)用范圍為調(diào)用范圍為2kb2kb。 子程序入口地址子程序入口地址 格式:格式:acall addr11acall addr11pc pc (pcpc)+2 ;+2 ;取指令,斷點(diǎn)入棧。取指令,斷點(diǎn)入棧。sp sp (spsp)+1+1,(,(spsp) (pc70 pc70 ) sp sp (spsp)+1+1,(,(spsp) (pc158 pc158 ) pc100 addr11單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)27 (2 2)長(zhǎng)調(diào)用指令)長(zhǎng)調(diào)用指令 格式: 子程序入口地址子程序入口地址 功能功能: (1)(1) 保護(hù)斷點(diǎn)保護(hù)斷點(diǎn)先壓入低字節(jié),

29、再壓入高字節(jié)。即:先壓入低字節(jié),再壓入高字節(jié)。即: (2)(2) 建立子程序入口建立子程序入口注:注:acallacall調(diào)用范圍為調(diào)用范圍為64kb64kb。 lcall addr16lcall addr16pc pc (pcpc)+3 ;+3 ;取指令,斷點(diǎn)入棧。取指令,斷點(diǎn)入棧。sp sp (spsp)+1+1,(,(spsp) (pc70 pc70 ) sp sp (spsp)+1+1,(,(spsp) (pc158 pc158 ) pc addr16pc addr16單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)28 2.2.子程序返回指令子程序返回指令 格式格式:ret ret ;子程序返回;子程序返

30、回 reti reti ;中斷服務(wù)子程序返回;中斷服務(wù)子程序返回 功能功能:取斷點(diǎn)送:取斷點(diǎn)送pcpc。先彈出高字節(jié),再?gòu)棾龅妥止?jié)。即:先彈出高字節(jié),再?gòu)棾龅妥止?jié)。即: pcpc158158 (spsp),),sp sp (spsp)-1-1 pc pc7070 (spsp),),sp sp (spsp)-1-1單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)29 二、程序之間的參數(shù)傳遞二、程序之間的參數(shù)傳遞1. 1. 寄存器傳遞參數(shù)寄存器傳遞參數(shù) 把要傳遞的參數(shù)存放在把要傳遞的參數(shù)存放在寄存器寄存器a a、r0-r7 r0-r7 中中 適合參數(shù)較少的情況適合參數(shù)較少的情況2. 2. 存儲(chǔ)器傳遞參數(shù)存儲(chǔ)器傳遞參數(shù)

31、把要傳遞的參數(shù)存放在把要傳遞的參數(shù)存放在存儲(chǔ)器存儲(chǔ)器中中 適合參數(shù)較多的情況適合參數(shù)較多的情況3.3.堆棧傳遞參數(shù)堆棧傳遞參數(shù) 把要傳遞的參數(shù)存放在把要傳遞的參數(shù)存放在堆棧堆棧中中 適合子程序嵌套調(diào)用的情況適合子程序嵌套調(diào)用的情況 單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)30 例例 試編寫(xiě)程序,計(jì)算試編寫(xiě)程序,計(jì)算 y = y = a ai i2 2 i=1 i=1 設(shè):設(shè):a a1 1,a,a2 2,.,.,a,a1010存放在內(nèi)部存放在內(nèi)部ram 20hram 20h 開(kāi)始的開(kāi)始的存儲(chǔ)區(qū)域內(nèi),計(jì)算所得結(jié)果存放在存儲(chǔ)區(qū)域內(nèi),計(jì)算所得結(jié)果存放在r3r3,r2r2中。中。 要求:要求:平方運(yùn)算平方運(yùn)算編寫(xiě)成編

32、寫(xiě)成子程序子程序 sortsort(查表),(查表),主程序主程序通過(guò)調(diào)用通過(guò)調(diào)用sortsort完成求和運(yùn)算。源程序如下:完成求和運(yùn)算。源程序如下: org 8000horg 8000h main: mov r0,#20h ; main: mov r0,#20h ;置數(shù)據(jù)指針置數(shù)據(jù)指針 mov r7,#10 ;mov r7,#10 ;置計(jì)數(shù)初值置計(jì)數(shù)初值 10單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)31 mov r3,#0 ;mov r3,#0 ;結(jié)果單元清零結(jié)果單元清零 mov r2,#0 mov r2,#0 loop: mov a, r0 ;loop: mov a, r0 ;取數(shù)取數(shù) acall ac

33、all sort sort ; ;調(diào)用求平方子程序調(diào)用求平方子程序 add a,r2 ;add a,r2 ;累加平方和累加平方和 mov r2,amov r2,a mov a,r3 mov a,r3 addc a,#0addc a,#0 ;r3 ;r3加進(jìn)位加進(jìn)位cycy mov r3,a mov r3,a inc r0 ; inc r0 ;修改指針修改指針 djnz r7,loop ;djnz r7,loop ;未完未完, ,繼續(xù)繼續(xù) sjmp $ ;sjmp $ ;等待等待 sort:sort: mov dptr,#tab ; mov dptr,#tab ;進(jìn)入子程序查平方表進(jìn)入子程序查平

34、方表 movc a,a+dptr movc a,a+dptr ret ; ret ;返主程序返主程序tab: db 0,1,4,9,16tab: db 0,1,4,9,16 db 25,36,49,64,81 db 25,36,49,64,81 end end單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)32 查表程序查表程序 在很多情況下,通過(guò)查表程序可以簡(jiǎn)化在很多情況下,通過(guò)查表程序可以簡(jiǎn)化計(jì)算,簡(jiǎn)化程序的多分支結(jié)構(gòu),提高程序的運(yùn)計(jì)算,簡(jiǎn)化程序的多分支結(jié)構(gòu),提高程序的運(yùn)行效率。行效率。 查表所使用的數(shù)據(jù)表格是按一定順序排查表所使用的數(shù)據(jù)表格是按一定順序排列的常數(shù),存放在程序存儲(chǔ)器中。列的常數(shù),存放在程序存儲(chǔ)器

35、中。mcs-5lmcs-5l指令系統(tǒng)用于查表的指令有兩條;指令系統(tǒng)用于查表的指令有兩條;movc amovc a,a+dptra+dptrmovc amovc a,a+pca+pc單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)33解:參考程序如下:解:參考程序如下:htledhtled:push acc push acc ;保護(hù)現(xiàn)場(chǎng);保護(hù)現(xiàn)場(chǎng) mov amov a,r0 r0 ;??;取r0r0中的數(shù)中的數(shù) add aadd a,#5 #5 ;tabletable離離movcmovc指令差指令差5 5字節(jié)字節(jié) movc amovc a,a+pc a+pc ;查表,取出七段顯示碼;查表,取出七段顯示碼 mov p1m

36、ov p1,a a ;(;(2 2字節(jié))字節(jié)) pop acc pop acc ;恢復(fù)現(xiàn)場(chǎng)(;恢復(fù)現(xiàn)場(chǎng)(2 2字節(jié))字節(jié)) ret ret ;(;(1 1字節(jié))字節(jié))tabletable:db 40hdb 40h,79h79h,24h24h,30h30h db 19h db 19h,12h12h,02h02h,78h78h db 00h db 00h,18h18h,08h08h,03h03h db 46h db 46h,21h21h,06h06h,0eh0eh例:例: 將存于將存于r0r0中的一位十六進(jìn)制數(shù)(中的一位十六進(jìn)制數(shù)(r0r0高高4 4位為位為0 0)轉(zhuǎn)換)轉(zhuǎn)換為七段顯示碼,并將結(jié)果

37、送為七段顯示碼,并將結(jié)果送p1p1口顯示??陲@示。設(shè)七段顯示器為共陰極接法。設(shè)七段顯示器為共陰極接法。單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)34 mcs-5l mcs-5l微處理器的一個(gè)最大特點(diǎn)微處理器的一個(gè)最大特點(diǎn)就是它有很強(qiáng)的布爾處理能力,即對(duì)布爾就是它有很強(qiáng)的布爾處理能力,即對(duì)布爾變量(位變量)的處理能力,所以它最擅變量(位變量)的處理能力,所以它最擅長(zhǎng)開(kāi)關(guān)量控制。長(zhǎng)開(kāi)關(guān)量控制。 大部分硬件設(shè)計(jì)都是用組合邏輯大部分硬件設(shè)計(jì)都是用組合邏輯實(shí)現(xiàn)復(fù)雜功能的。雖然所用硬件各式各樣,實(shí)現(xiàn)復(fù)雜功能的。雖然所用硬件各式各樣,但目的只有一個(gè),那就是解若干布爾變量但目的只有一個(gè),那就是解若干布爾變量的邏輯函數(shù)所代表的

38、問(wèn)題。的邏輯函數(shù)所代表的問(wèn)題。 例如,最常見(jiàn)的汽車頭尾信號(hào)燈、例如,最常見(jiàn)的汽車頭尾信號(hào)燈、電梯運(yùn)行等都主要是用開(kāi)關(guān)量控制的。電梯運(yùn)行等都主要是用開(kāi)關(guān)量控制的。單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)35【例例】求解下式給出的求解下式給出的u-zu-z等六個(gè)布爾變量等六個(gè)布爾變量的邏輯函數(shù):的邏輯函數(shù): u bit p1.1u bit p1.1 v bit p2.2 v bit p2.2 w bit tf0 w bit tf0 x bit ie1 x bit ie1 y bit 20h.0 y bit 20h.0 z bit 21h.1 z bit 21h.1 q bit p3.3 q bit p3.3 m

39、ov cmov c,x x ;讀變量;讀變量anl canl c,/y /y ;下與門輸出;下與門輸出 orl corl c,f0 f0 ;啟用中間變量;啟用中間變量 orl corl c,/z ;/z ;考慮最后一個(gè)變量考慮最后一個(gè)變量 mov qmov q,c c ;輸出計(jì)算結(jié)果;輸出計(jì)算結(jié)果mov cmov c,v v ;讀輸入變量;讀輸入變量orl corl c,w w ;左或門輸出;左或門輸出anl canl c,u u ;上與門輸出;上與門輸出mov f0mov f0,c c ;暫存中間變量;暫存中間變量單片機(jī)原理與應(yīng)用-程序設(shè)計(jì)36org 8000hczcx:mov r0,#50h mov r1,#60h mov a,r0 anl a,#ofh mov r1,a inc r1 mov a,r0 anl a,#0f0h swap a mov r1,a sjmp $例:拆字程序例:拆字程序 將內(nèi)部數(shù)據(jù)存儲(chǔ)器將內(nèi)部數(shù)據(jù)存儲(chǔ)器50h50h單元中一個(gè)單元中一個(gè)8 8位二進(jìn)位二進(jìn)制數(shù)拆開(kāi),分成兩個(gè)四位數(shù),高四位存入制數(shù)拆開(kāi),分成兩個(gè)四位數(shù),高四位存入61

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論