機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
宏匯編軟件MASM51的使用探討
宏匯編軟件MASM51的使用探討
 更新時(shí)間:2009-10-23 16:14:51  點(diǎn)擊數(shù):0
【字體: 字體顏色

    單片機(jī)開(kāi)發(fā)可以用手工匯編和機(jī)器匯編兩種方法。采用手工匯編就是先編寫(xiě)出匯編程序,然后對(duì)照單片機(jī)匯編表手工將匯編程序翻譯成機(jī)器碼,最后將機(jī)器碼一個(gè)一個(gè)地送入開(kāi)發(fā)仿真器的RAM中去進(jìn)行調(diào)試。

    由于采用手工匯編的機(jī)器碼是相對(duì)于存儲(chǔ)器的絕對(duì)地址進(jìn)行定位的,因此在調(diào)試時(shí),若要在程序中增加或刪除一條指令,就會(huì)造成指令的絕對(duì)地址發(fā)生變化。這樣除修改那條指令外,幾乎所有轉(zhuǎn)移、調(diào)用指令的操作數(shù)都要作相應(yīng)的修改,稍有疏忽程序就會(huì)出錯(cuò)。

    而采用機(jī)器匯編,在很大程度上可以避免上述麻煩。只要通過(guò)鍵盤(pán)輸入源程序后,其余作工作都由計(jì)算機(jī)來(lái)進(jìn)行,即查出相應(yīng)的機(jī)器碼,對(duì)地址進(jìn)行定位,建立能被開(kāi)發(fā)裝置接收的機(jī)器碼文件、建立能打印出清單的列表文件等等。機(jī)器碼不需要再一個(gè)一個(gè)地從仿真器的鍵盤(pán)上鍵入,只要從PC機(jī)的通訊口直接傳送到開(kāi)發(fā)裝置中去。因此使用機(jī)器匯編大大提高了單片機(jī)開(kāi)發(fā)的速度。

    源程序被輸入到機(jī)器中后,以一個(gè)文件的形式保存起來(lái),然后就可以對(duì)這個(gè)文件進(jìn)行處理了,要對(duì)這個(gè)文件進(jìn)行匯編,必須有相應(yīng)的匯編程序。在PC機(jī)上進(jìn)行匯編的程序有多種,以下介紹的MASM51軟件就是其中的一種,它的主要特點(diǎn)有:

    1.對(duì)用戶(hù)編寫(xiě)的源程序格式要求不太嚴(yán)格,例如,英文字母的大、小寫(xiě)不受限制,變量名或標(biāo)號(hào)名沒(méi)有長(zhǎng)度限制,對(duì)源程序中的空格數(shù)也沒(méi)有嚴(yán)格的要求等等。這些給用戶(hù)編寫(xiě)程序帶來(lái)很大的方便。

    2.具有較強(qiáng)的功能,例如支持宏語(yǔ)句,使同一程序中類(lèi)似的程序結(jié)構(gòu),只要輸入一次,在使用時(shí)可用宏語(yǔ)句調(diào)用。此外還允許用條件匯編語(yǔ)句以及完善的偽指令系統(tǒng)等。減少了編寫(xiě)、輸入源程序的工作量。

    3.不管用戶(hù)的源程序有多少錯(cuò)誤,它都能全部匯編完,并能形成列表文件及目標(biāo)文件,以供用戶(hù)修改錯(cuò)誤。

    4.可以接收漢字注釋?zhuān)⒛芡暾膶h字注釋復(fù)制到列表文件,而其它一些匯編軟件則不能處理漢字,或會(huì)使列表文件中的漢字注釋混亂。

    運(yùn)行MASM51軟件的條件很低,現(xiàn)在的PC機(jī)都能達(dá)到。

    第二節(jié) 如何啟動(dòng)MASM51宏匯編程序

      一、啟動(dòng)和退出

      MASM51軟件有兩個(gè)文件:MASM51.EXE和MASM51.OVL,只要將這兩個(gè)文件拷入硬盤(pán)的一個(gè)目錄中(如MASM51)中,然后在DOS命令行中打入:

      MASM51(回車(chē))

      即在顯示器上顯示如下信息:

      The Cybernetic Micro Systems

      CYS-8051 Software Package

      Version 3.03`

      for the IBM Personal Computer

      (C)Copy right Cybrenetic MIcro Systems,Inc 1983,1984,1985,

      1986

      High Level Language Commands

      ASM51[file] P8751 file P8744 file//

      P27XX file COMP[file] READ[kbytes] DISP[start,num]

      INITIALIZE CLEAR LIST EXIT

      RUN[file] GOTO Label STOP CONT

      DIR[spec] TYPE file DOS cmd HELP

      PRINT arglist EQU = WARBLE

      DELAY[secs] CLS HLSEARCH flag BEEP

      OFFSET pc[,loc] PROM type SECURE SAVE file[,start,num]

      LOAD file EDBYTE pc PVOLT value PSETUP num,value

      >

      信息的出現(xiàn)說(shuō)明已進(jìn)入MASM51宏匯編程序,在屏幕下方出現(xiàn)的符號(hào)‘〉’是宏匯編程序提示符,它的出現(xiàn)告訴用戶(hù),宏匯編程序處于接收命令狀態(tài)。

      雖然屏幕上提供了很多的命令,但大部份命令要在相應(yīng)的硬件配合下才能實(shí)現(xiàn)。當(dāng)用來(lái)匯編源程序時(shí),使用的主要命令是:

      ASM51 盤(pán)號(hào):文件名 〈回車(chē)〉 進(jìn)行匯編

      DIR 盤(pán)號(hào):文件名 〈回車(chē)〉 顯示目錄

      EXIT 〈回車(chē)〉 退出宏匯編

    1. 二、進(jìn)行匯編

    用戶(hù)在使用宏匯編程序之前,應(yīng)該已使用編緝器(如EDIT、CCED等)編好了8051匯編語(yǔ)言的源程序,并已作為一個(gè)文件存盤(pán),該文件一般以.ASM為擴(kuò)展名。

    進(jìn)入MASM51后,鍵入

    ASM51 [d:filename[.asm] [選項(xiàng)]

    如果省略擴(kuò)展名,則系統(tǒng)默認(rèn)為.asm,如果不以.asm為擴(kuò)展名,則應(yīng)鍵入文件的全名。匯編后,將產(chǎn)生兩個(gè)輸出文件:一個(gè)是16進(jìn)制代碼文件,以.hex為擴(kuò)展名,另一個(gè)是列表文件,以.lst為擴(kuò)展名,文件名與輸入文件的文件名相同。

    在匯編時(shí),可以加入一些選項(xiàng)進(jìn)行控制,可加的選項(xiàng)如下:

    1./L選項(xiàng):只在屏幕上顯示列表文件的內(nèi)容,不生成列表文件。

    2./H選項(xiàng):匯編后不在磁盤(pán)上產(chǎn)生.hex文件。

    3./S選項(xiàng):產(chǎn)生的列表文件中將不包括符號(hào)表。

    4./P選項(xiàng):匯編程序序所生成的符號(hào)表將成為能被其他源程序引用的永久符號(hào)表的一部份,即如果不退出宏匯編,該符號(hào)表將保留在內(nèi)存中,在匯編其它源程序時(shí)可以引用它們,以便連接幾個(gè)源文件。

    5./N選項(xiàng):使生成的列表文件在打。ɑ蝻@示)時(shí)不分頁(yè)。不加'/N'則每隔55行源代碼生成一個(gè)新頁(yè)頭。

    一般情況下,我們不需要在命令后面加任何選項(xiàng)。

    如下面所示:

    ASM51 Filename[.asm] [回車(chē)]即可

    下面列出DEMO51.ASM的源文件,及用MASM51匯編后產(chǎn)生的代碼文件和列表文件,以供參考。

    T0_flag bit 0

    T1_flag bit 1

    INIT_Timer0 equ 0FE80H

    INIT_Timer1 equ 0FD00H

    X0_vector equ 0003H

    X1_vector equ 0013H

    T0_vector equ 000BH

    T1_vector equ 001BH

    S0_vector equ 0023H

    INIT: AJMP SETUP

    ;Interrept Jump Table

    ORG X0_vector

    INT_0: SETB P3.2

    RETI ;int0 interrupt

    ORG T0_vector

    T0INT: ACALL TIM0 ;timer0 interrupt

    RETI

    ORG X1_vector

    INT_1: SETB P3.3

    RETI ;int1 interrupt

    ORG T1_vector

    T1INT: ACALL TIM1 ;timer1 interrupt

    RETI

    ORG S0_vector

    AJMP SERIAL ;UART interrupt

    DB 'This is demo program for MCS-51TM'

    SETUP: MOV SP,#5FH ;set sp point

    MOV TMOD,#11H ;set timer mode

    MOV TH0,#HIGH(INIT_Timer0)

    MOV TL0,#LOW(INIT_Timer0)

    MOV TH1,#HIGH(INIT_Timer1)

    MOV TL1,#LOW(INIT_Timer1)

    SETB EX0

    SETB PX0

    SETB EX1

    CLR PX1

    SETB PT1

    SETB ET0

    SETB ET1

    SETB TR0

    SETB TR1

    SETB ES

    MOV SCON,#99H

    SETB EA ;enable interrupt

    WAIT: NOP

    AJMP WAIT ;wait

    SERIAL: NOP ;serial interrupt process

    CLR RI

    RETI

    TIM0: CLR TR0 ;timer0 interrupt process

    CPL T0_flag

    MOV TL0,#LOW(INIT_Timer0)

    MOV A,#HIGH(INIT_Timer0)

    MOV TH0,A

    SETB TR0

    CLR P3.3

    RET

    TIM1: CLR TR1 ;timer1 interrupt process

    CPL T1_flag

    MOV TL1,#LOW(INIT_Timer1)

    MOV A,#HIGH(INIT_Timer1)

    MOV TH1,A

    SETB TR1

    CLR P3.2

    RET

    END

    ;********************************************************

    ;DEMO51.ASM FILE END

    ;********************************************************

    以上是DEMO51.ASM源程序文件。

    The Cybernetic Micro Systems 8051 Family Assembler, Version 3.03 Page 1

    08-25-96

     

    0000 = T0_flag bit 0

    0001 = T1_flag bit 1

    FE80 = INIT_Timer0 equ 0FE80H

    FD00 = INIT_Timer1 equ 0FD00H

    0003 = X0_vector equ 0003H

    0013 = X1_vector equ 0013H

    000B = T0_vector equ 000BH

    001B = T1_vector equ 001BH

    0023 = S0_vector equ 0023H

    0000 0146 INIT: AJMP SETUP

    ;Interrept Jump Table

    0003 ORG X0_vector

    0003 D2B2 INT_0: SETB P3.2

    0005 32 RETI ;int0 interrupt

    000B ORG T0_vector

    000B 1178 T0INT: ACALL TIM0 ;timer0 interrupt

    000D 32 RETI

    0013 ORG X1_vector

    0013 D2B3 INT_1: SETB P3.3

    0015 32 RETI ;int1 interrupt

    001B ORG T1_vector

    001B 1188 T1INT: ACALL TIM1 ;timer1 interrupt

    001D 32 RETI

    0023 ORG S0_vector

    0023 0174 AJMP SERIAL ;UART interrupt

    0025 54 68 69 DB 'This is demo program for MCS-51TM'

    0028 73 20 69 73 20 64 65 6D 6F 20

    0032 70 72 6F 67 72 61 6D 20 66 6F

    003C 72 20 4D 43 53 2D 35 31 54 4D

    0046 75815F SETUP: MOV SP,#5FH ;set sp point

    0049 758911 MOV TMOD,#11H ;set timer mode

    004C 758CFE MOV TH0,#HIGH(INIT_Timer0)

    004F 758A80 MOV TL0,#LOW(INIT_Timer0)

    0052 758DFD MOV TH1,#HIGH(INIT_Timer1)

    0055 758B00 MOV TL1,#LOW(INIT_Timer1)

    0058 D2A8 SETB EX0

    005A D2B8 SETB PX0

    005C D2AA SETB EX1

    005E C2BA CLR PX1

    0060 D2BB SETB PT1

    0062 D2A9 SETB ET0

    0064 D2AB SETB ET1

    0066 D28C SETB TR0

    0068 D28E SETB TR1

    006A D2AC SETB ES

    006C 759899 MOV SCON,#99H

    The Cybernetic Micro Systems 8051 Family Assembler, Version 3.03 Page 2

    08-25-96

     

    006F D2AF SETB EA ;enable interrupt

    0071 00 WAIT: NOP

    0072 0171 AJMP WAIT ;wait

    0074 00 SERIAL: NOP ;serial interrupt process

    0075 C298 CLR RI

    0077 32 RETI

    0078 C28C TIM0: CLR TR0 ;timer0 interrupt process

    007A B200 CPL T0_flag

    007C 758A80 MOV TL0,#LOW(INIT_Timer0)

    007F 74FE MOV A,#HIGH(INIT_Timer0)

    0081 F58C MOV TH0,A

    0083 D28C SETB TR0

    0085 C2B3 CLR P3.3

    0087 22 RET

    0088 C28E TIM1: CLR TR1 ;timer1 interrupt process

    008A B201 CPL T1_flag

    008C 758B00 MOV TL1,#LOW(INIT_Timer1)

    008F 74FD MOV A,#HIGH(INIT_Timer1)

    0091 F58D MOV TH1,A

    0093 D28E SETB TR1

    0095 C2B2 CLR P3.2

    0097 22 RET

    0000 END

    The Cybernetic Micro Systems 8051 Family Assembler, Version 3.03 Page 3

    08-25-96

     

     

    ;%T Symbol Name Type Value

    INIT. . . . . . . . . . . . . . L 0000

    INIT_TIMER0 . . . . . . . . . . I FE80

    INIT_TIMER1 . . . . . . . . . . I FD00

    INT_0 . . . . . . . . . . . . . L 0003

    INT_1 . . . . . . . . . . . . . L 0013

    S0_VECTOR . . . . . . . . . . . I 0023

    SERIAL. . . . . . . . . . . . . L 0074

    SETUP . . . . . . . . . . . . . L 0046

    T0INT . . . . . . . . . . . . . L 000B

    T0_FLAG . . . . . . . . . . . . B 0000

    T0_VECTOR . . . . . . . . . . . I 000B

    T1INT . . . . . . . . . . . . . L 001B

    T1_FLAG . . . . . . . . . . . . B 0001

    T1_VECTOR . . . . . . . . . . . I 001B

    TIM0. . . . . . . . . . . . . . L 0078

    TIM1. . . . . . . . . . . . . . L 0088

    WAIT. . . . . . . . . . . . . . L 0071

    X0_VECTOR . . . . . . . . . . . I 0003

    X1_VECTOR . . . . . . . . . . . I 0013

    ;%Z

    00 Errors (0000)

    以上是DEMO51.LST文件。

    :020000000146B7

    :03000300D2B23244

    :03000B0011783237

    :03001300D2B33233

    :03001B0011883217

    :0D0023000174546869732069732064656D71

    :100030006F2070726F6772616D20666F72204D4322

    :10004000532D3531544D75815F758911758CFE7551

    :100050008A80758DFD758B00D2A8D2B8D2AAC2BA9B

    :10006000D2BBD2A9D2ABD28CD28ED2AC759899D257

    :10007000AF00017100C29832C28CB200758A8074E0

    :10008000FEF58CD28CC2B322C28EB201758B007485

    :08009000FDF58DD28EC2B222F3

    以上是DEMO51.HEX文件。

  • 上一篇: AT89C2051單片機(jī)的傳呼機(jī)發(fā)碼電路探討
  • 下一篇: 沒(méi)有了
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話(huà):0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1