日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

你好!歡迎來(lái)到深圳市穎特新科技有限公司!
語(yǔ)言
當(dāng)前位置:首頁(yè) >> 技術(shù)中心 >> 單片機(jī)入門(mén) >> 單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)

單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)

作者:admin 來(lái)源:不詳 發(fā)布時(shí)間:2018-05-08  瀏覽:3
1、匯編語(yǔ)言源程序的格式
  1.內(nèi)部數(shù)據(jù)傳送指令
 匯編語(yǔ)言是面向機(jī)器的,因此,語(yǔ)言格式因機(jī)器不同而異。對(duì)MCS-51系統(tǒng)來(lái)說(shuō),匯編語(yǔ)言中每條語(yǔ)句的格式包括下列4項(xiàng)內(nèi)容:
    標(biāo)號(hào): 操作碼 操作數(shù); 注釋
匯編語(yǔ)句中,標(biāo)號(hào)和操作碼要用冒號(hào)“:”隔開(kāi);操作碼和操作數(shù)之間的分隔符是空格,多個(gè)操作數(shù)之間用“,”分隔;操作數(shù)與注釋之間用“;”分隔;操作碼是必選項(xiàng),其余都是可選項(xiàng),即任何語(yǔ)句都必須包含操作碼,其他部分因語(yǔ)句不同而異。
    1.ORG偽指令
    ORG偽指令稱為起始匯編偽指令,一般用于匯編語(yǔ)言源程序或某數(shù)據(jù)塊的開(kāi)頭,格式為:
    [標(biāo)號(hào)]:ORG 16位的地址或標(biāo)號(hào)
    2.END偽指令
    END偽指令稱為匯編結(jié)束偽指令,經(jīng)常用在匯編語(yǔ)言源程序的末尾,用來(lái)指示源程序結(jié)束匯編的位置。即表明程序的結(jié)束。一般格式為:
    [標(biāo)號(hào)]:END
    3.EQU偽指令
    EQU偽指令稱為賦值偽指令,用于給左邊的“字符名”賦值。此偽指令的格式為:
    字符名 EQU 數(shù)據(jù)或匯編符號(hào)
    4.DATA偽指令
    DATA偽指令稱為數(shù)據(jù)地址賦值偽指令,它用來(lái)給左邊的“字符名”賦值。其一般格式為:
    字符名 DATA 數(shù)據(jù)或表達(dá)式
    5.BIT偽指令
    BIT偽指令稱為位地址符號(hào)偽指令,用來(lái)給符號(hào)形式的位地址賦值,此偽指令的格式為:
    字符名 BIT 位地址
    6.DB偽指令
    DB偽指令稱為定義字節(jié)偽指令,它的功能是從指定單元開(kāi)始定義(存儲(chǔ))若干個(gè)字節(jié)的數(shù)據(jù)或字符,字符若用引號(hào)括起來(lái)則表示ASCII碼。其一般格式為:
    標(biāo)號(hào):DB 字節(jié)常數(shù)或字符
    7.DW偽指令
    DW偽指令稱為定義字偽指令,其功能為在程序存儲(chǔ)器中從指定單元開(kāi)始,定義若干個(gè)字,一個(gè)字相當(dāng)于兩個(gè)字節(jié)。此偽指令的一般格式為:
    標(biāo)號(hào): DW 字常數(shù)或字表
    8.DS偽指令
    DS偽指令稱為定義存儲(chǔ)空間偽指令,格式為:
    標(biāo)號(hào): DS 表達(dá)式
2、MCS—51單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)舉例
 1. 簡(jiǎn)單程序設(shè)計(jì)
    例:將一個(gè)字節(jié)內(nèi)的兩位壓縮BCD碼拆開(kāi)并轉(zhuǎn)換成相應(yīng)的ASCH碼,存入兩個(gè)RAM單元。
    解:設(shè)兩位壓縮BCD碼已放在內(nèi)部RAM的20H單元,轉(zhuǎn)換后的ASCII碼放在21H和22H單元。根據(jù)ASCII碼表,字符0~9對(duì)應(yīng)的ASCII碼為30H~39H,之間僅相差30H。因此,轉(zhuǎn)換時(shí),只需把20H單元中兩位壓縮BCD碼拆開(kāi)后,將BCD的高四位置成“0011”即可。相應(yīng)程序如下:
    ORG       1000H
    MOV    R0,  #20H
    MOV    A,   @R0    ;兩位BCD碼送A
    PUSH    ACC
    ANL    A,  #0FH    ;取低位BCD碼
    ORL    A,  #30H    ;完成低位轉(zhuǎn)換
    INC   R0
    MOV    @R0,  A    ;低位BCD碼的轉(zhuǎn)換結(jié)果存入21H中
    POP    ACC
    ANL    A  ,#0F0H    ;取高位BCD碼
    SWAP   A
    ORL    A,  #30H   ;完成高位轉(zhuǎn)換
    INC   R0
    MOV    @R0,  A    ;存數(shù)
    SJMP   $    ;結(jié)束
    END
    2. 分支程序設(shè)計(jì)
    例:設(shè)變量X存放于R2,函數(shù)值Y存放在R3。試按照下式的要求給Y賦值:

 解:這是一個(gè)三分支的條件轉(zhuǎn)移程序,可采用CJNE和JC或JNC指令進(jìn)行判斷。
    ORG    0500H
    MOV A, R2 ;自變量→(A)
    CJNE A,#10,L1 ;(A)與10比較
    L1:JC L2 ;若X<10,則轉(zhuǎn)L2
    ADD A, #01H
    MOV R3, A ; 設(shè)X>20,Y=1
    CJNE A,#21,L3
    L3:JNC L4 ;X>20,則轉(zhuǎn)L4
    MOV R3,#0 ;20≥X≥10,Y=0
    SJMP L4
    L2:MOV R3,#0FFH
    L4:SJMP $
    END
    3. 循環(huán)程序設(shè)計(jì)
    循環(huán)程序一般由以下幾部分組成:
    1)循環(huán)初始化部分
    2)循環(huán)體部分
    3)循環(huán)結(jié)束部分
    例:在內(nèi)部RAM的20H~2FH連續(xù)16個(gè)單元中存放單字節(jié)無(wú)符號(hào)數(shù)。求16個(gè)無(wú)符號(hào)數(shù)之和。
    解 這是重復(fù)相加問(wèn)題。16個(gè)單字節(jié)數(shù)的和最大不會(huì)超過(guò)兩個(gè)字節(jié),設(shè)和存放在31H,30H中。用R0作加數(shù)指針,R7作循環(huán)次數(shù)計(jì)數(shù)器。程序流程如圖3-11所示。
    ORG 1000H
    MOV R7,#0FH
    MOV R0,#21H
    MOV 31H,#00H
    MOV A,20H
    LOOP1: ADD A,@R0
    MOV 30H, A
    JNC LOOP2
    INC 31H
    LOOP2: INC R0
    DJNZ R7, LOOP1
    SJMP $
    END
    4.查表程序設(shè)計(jì)
    查表程序是根據(jù)查表算法設(shè)計(jì)的。它有兩條專門(mén)的查表指令:
    例:設(shè)計(jì)一個(gè)將16進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼的子程序。設(shè)16進(jìn)制數(shù)存放在R0中的低4位,要求將轉(zhuǎn)換后的ASCII碼送回R0中。
    解:給出二種方案。
    ①計(jì)算求解。由ASCII碼字符表可知0~9的ASCII碼為30H~39H,A~F的ASCII碼為41H~46H。因此,計(jì)算求解的思路是:若(R0)≤9,則R0內(nèi)容只需加30H;若(R0)>9,則R0需加37H。相應(yīng)程序?yàn)椋?BR>    ORG 1000H
    MOV A,R0 ;取轉(zhuǎn)換值到A
    ANL A,#0FH ;屏蔽高4位
    CJNE A,#10,NEXTl
    NEXTl:JNC NEXT2 ;若A>9,則轉(zhuǎn)NEXT2
    ADD A,#30H ;若A<10,則A (A)+30H
    SJMP DONE
    NEXT2:ADD A,#37H ;A (A)+37H
    DONE: MOV R0,A ;存結(jié)果
    SJMP $
    END
     ②查表求解。求解時(shí),兩條查表指令任選其一。現(xiàn)以“MOVC A,@A+PC”指令為例,給出相應(yīng)程序:
    地址 機(jī)器碼 ORG 1000H
    1000 E8 MOV A,R0 ;取轉(zhuǎn)換值
    1001 54 0F ANL A,#0FH ;屏蔽高4位
    1003 24 03 ADD A,#03H ;計(jì)算偏移量
    1005 83 MOVC A,@A+PC ;查表
    1006 F8 MOV R0,A ;存結(jié)果
    1007 80 FE SIMP $
    1008 30 31 32 33 ASCTAB: DB 30H,31H,32H,33H
    100C 34 35 36 37 DB 34H,35H,36H,37H
    1010 38 39 41 42 DB 38H,39H,41H,42H
    1014 43 44 45 46 DB 43H,44H,45H,46H
    END
    5. 子程序設(shè)計(jì)
    子程序在結(jié)構(gòu)上應(yīng)具有通用性和獨(dú)立性,在編寫(xiě)子程序時(shí)應(yīng)注意:
    ①程序第一條指令的地址稱為入口地址,該指令前必須有標(biāo)號(hào),最好以子程序任務(wù)名作為標(biāo)號(hào),例如顯示程序常以DIR作為標(biāo)號(hào);
    ②調(diào)用子程序指令設(shè)在主程序中,在子程序的末尾一定要有返回指令。一般說(shuō)來(lái),子程序調(diào)用指令和子程序返回指令要成對(duì)使用,子程序應(yīng)只有一個(gè)出口;
    ③子程序調(diào)用和返回指令能自動(dòng)保護(hù)和恢復(fù)斷點(diǎn)地址,但對(duì)需要保護(hù)的寄存器和內(nèi)存單元的內(nèi)容,必須在子程序開(kāi)始和末尾(RET指令前)安排保護(hù)和恢復(fù)它們的指令;
    ④調(diào)用子程序時(shí),要了解子程序的“入口信息”和“出口信息”,即進(jìn)入子程序前應(yīng)給哪些變量賦值,子程序返回時(shí)結(jié)果存在何處,以便主程序應(yīng)用這些結(jié)果。這就是所謂的參數(shù)傳遞。一般稱傳入子程序的參數(shù)為入口參數(shù),由子程序返回的參數(shù)為出口參數(shù)。
    例:用程序?qū)崿F(xiàn)C=a2+b2。設(shè)a、b均小于10。a存在21H單元,b存在22H單元,結(jié)果C存在20H單元。
    解:因本題中兩次用到求平方的運(yùn)算,故此把求平方運(yùn)算編成子程序。依題意編寫(xiě)主程序和子程序如下:
    ORG 1000H
    MAIN: MOV SP,#60H ;設(shè)堆棧指針
    MOV A,21H ;取a值
    LCALL SQR ;求a2
    MOV 20H,A ;a2值送入20H單元
    MOV A,22H ;取b值
    LCALL SQR ;求b2
    ADD A,20H ;求a2+b2
    MOV 20H,A ;結(jié)果存入20H單元
    SJMP $
    ORG 2000H
    SQR: MOV B,A ;求平方子程序
    MUL AB
    RET

編輯:admin  最后修改時(shí)間:2018-05-08

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬(wàn)眾潤(rùn)豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號(hào)-4

胶南市| 荥阳市| 商洛市| 屏山县| 清河县| 五寨县| 固安县| 紫阳县| 蒲城县| 三台县| 高青县| 镇康县| 溆浦县| 苏尼特左旗| 太保市| 咸丰县| 义乌市| 灵山县| 长兴县| 西充县| 石家庄市| 泸水县| 顺昌县| 岳池县| 海兴县| 临安市| 黔西县| 泾阳县| 台东县| 墨玉县| 屏东县| 浪卡子县| 南通市| 洮南市| 太仓市| 景谷| 页游| 会泽县| 乌苏市| 惠水县| 巨野县|