宏汇编软件MASM51的使用

       

      第一 节 概 述

       

       

      单片机开发可以用手工汇编和机器汇编两种方法。采用手工汇编就是先编写出汇编程序,然后对照单片机汇编表手工将汇编程序翻译成机器码,最后将机器码一个一个地送入开发仿真器的RAM中去进行调试。

      由于采用手工汇编的机器码是相对于存储器的绝对地址进行定位的,因此在调试时,若要在程序中增加或删除一条指令,就会造成指令的绝对地址发生变化。这样除修改那条指令外,几乎所有转移、调用指令的操作数都要作相应的修改,稍有疏忽程序就会出错。

      而采用机器汇编,在很大程度上可以避免上述麻烦。只要通过键盘输入源程序后,其余作工作都由计算机来进行,即查出相应的机器码,对地址进行定位,建立能被开发装置接收的机器码文件、建立能打印出清单的列表文件等等。机器码不需要再一个一个地从仿真器的键盘上键入,只要从PC机的通讯口直接传送到开发装置中去。因此使用机器汇编大大提高了单片机开发的速度。

      源程序被输入到机器中后,以一个文件的形式保存起来,然后就可以对这个文件进行处理了,要对这个文件进行汇编,必须有相应的汇编程序。在PC机上进行汇编的程序有多种,以下介绍的MASM51软件就是其中的一种,它的主要特点有:

      1.对用户编写的源程序格式要求不太严格,例如,英文字母的大、小写不受限制,变量名或标号名没有长度限制,对源程序中的空格数也没有严格的要求等等。这些给用户编写程序带来很大的方便。

      2.具有较强的功能,例如支持宏语句,使同一程序中类似的程序结构,只要输入一次,在使用时可用宏语句调用。此外还允许用条件汇编语句以及完善的伪指令系统等。减少了编写、输入源程序的工作量。

      3.不管用户的源程序有多少错误,它都能全部汇编完,并能形成列表文件及目标文件,以供用户修改错误。

      4.可以接收汉字注释,并能完整的将汉字注释复制到列表文件,而其它一些汇编软件则不能处理汉字,或会使列表文件中的汉字注释混乱。

      运行MASM51软件的条件很低,现在的PC机都能达到。

       

      第二节 如何启动MASM51宏汇编程序

       

        一、启动和退出

         

         

        MASM51软件有两个文件:MASM51.EXE和MASM51.OVL,只要将这两个文件拷入硬盘的一个目录中(如MASM51)中,然后在DOS命令行中打入:

        MASM51(回车)

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

        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

        >

        信息的出现说明已进入MASM51宏汇编程序,在屏幕下方出现的符号‘〉’是宏汇编程序提示符,它的出现告诉用户,宏汇编程序处于接收命令状态。

        虽然屏幕上提供了很多的命令,但大部份命令要在相应的硬件配合下才能实现。当用来汇编源程序时,使用的主要命令是:

        ASM51 盘号:文件名 〈回车〉 进行汇编

        DIR 盘号:文件名 〈回车〉 显示目录

        EXIT 〈回车〉 退出宏汇编

         

      1.  
      2.  

         

      3. 二、进行汇编
      4.  

       

      用户在使用宏汇编程序之前,应该已使用编缉器(如EDIT、CCED等)编好了8051汇编语言的源程序,并已作为一个文件存盘,该文件一般以.ASM为扩展名。

      进入MASM51后,键入

      ASM51 [d:filename[.asm] [选项]

      如果省略扩展名,则系统默认为.asm,如果不以.asm为扩展名,则应键入文件的全名。汇编后,将产生两个输出文件:一个是16进制代码文件,以.hex为扩展名,另一个是列表文件,以.lst为扩展名,文件名与输入文件的文件名相同。

      在汇编时,可以加入一些选项进行控制,可加的选项如下:

      1./L选项:只在屏幕上显示列表文件的内容,不生成列表文件。

      2./H选项:汇编后不在磁盘上产生.hex文件。

      3./S选项:产生的列表文件中将不包括符号表。

      4./P选项:汇编程序序所生成的符号表将成为能被其他源程序引用的永久符号表的一部份,即如果不退出宏汇编,该符号表将保留在内存中,在汇编其它源程序时可以引用它们,以便连接几个源文件。

      5./N选项:使生成的列表文件在打印(或显示)时不分页。不加'/N'则每隔55行源代码生成一个新页头。

      一般情况下,我们不需要在命令后面加任何选项。

      如下面所示:

      ASM51 Filename[.asm] [回车]即可

      下面列出DEMO51.ASM的源文件,及用MASM51汇编后产生的代码文件和列表文件,以供参考。

      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文件。

       


      以上资料来自于互联网!编辑整理:五一电子加油站;网址:http://51dz.com
      欢迎光临五一电子商城!免费学习电子技术,面向全国邮购电子元件、实验套件!