天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術(shù)熱線: 4007-888-234
設(shè)計(jì)開發(fā)

專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

開發(fā)工具

提供開發(fā)工具、應(yīng)用測(cè)試 完善的開發(fā)代碼案例庫(kù)分享

技術(shù)支持

從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無(wú)限潛能!

新聞中心

提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動(dòng)態(tài)

Microchip微芯宏匯編器MPASM入門操作

更新時(shí)間: 2019-03-21
閱讀量:4447

單片機(jī)方案開發(fā)商深圳英銳恩分享Microchip微芯宏匯編器MPASM入門操作,MPASM是Microchip公司推出的可適用于其PIC16/17全部單片機(jī)的宏匯編器,功能齊全,全屏幕操作。 
§4.1  啟動(dòng)和操作    
MPASM的啟動(dòng)很簡(jiǎn)單,在DOS狀態(tài)下:
                   >  MPASM

  (注意MPASM后面不要跟文件名)
屏幕上即顯示:
 MPASM 01.11 Released    (c)1993,94     Byte Craft Limited/Microchip Technology Inc.  
                    Source File : SAMPLE.ASM                             
                 Processor Type : 12C509
                      Error File : Yes                                    
             Cross Refernece File : No                                      
                    Listing File : Yes                                    
                Hex Dump Type : INHX8M .HEX                            
          Assemble to Object File : No                                      
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ↑↓,Tab : Move Cursor        Esc : Quit          Press Enter to  change  value.
  F1      : Help               F10 : Assemble
圖4.1   MPASM畫面         Source File:              源程序文件名。可以帶路徑和通配符(*)。
      Processor Type:           芯片型號(hào)。可通過(guò)Enter鍵來(lái)選擇用戶所需的型號(hào)。
      Error File:               匯編后自動(dòng)產(chǎn)生一個(gè).ERR文件,該文件記錄了匯編中
                              產(chǎn)生的錯(cuò)誤語(yǔ)句和警告信息。
      Cross Reference File:      產(chǎn)生一個(gè)參考文件.XRF。
      Listing File:             產(chǎn)生一個(gè)列表文件.LST。該文件中包含了各種仿真
                             環(huán)境中需要的參數(shù),主要用于仿真調(diào)試。
      Hex Dump Type:            產(chǎn)生的代碼燒寫文件,一般選擇INHX8M格式,可適應(yīng)
                                眾多的燒寫器。
      Assemble to Object File:      注意這里產(chǎn)生的.OBJ 文件不是通常認(rèn)為的機(jī)器代碼
                                文件,而是預(yù)留給鏈接器(Linker)的可重定位文件。
                                選擇NO則匯編不產(chǎn)生任何.OBJ文件。
§4.2 匯編語(yǔ)言格式 
PIC匯編語(yǔ)句的格式為:
         〔標(biāo)號(hào)〕〈指令助記符〉〔操作數(shù)〕  ;〔注釋〕
指令助記符與標(biāo)號(hào)間至少應(yīng)有一個(gè)空格。若一行語(yǔ)句沒(méi)有標(biāo)號(hào),則指令助記符前必須至少有一個(gè)空格,否則會(huì)當(dāng)成是標(biāo)號(hào)。一條語(yǔ)句最多字符個(gè)數(shù)為255。
       ;
       ; Sample MPASM Source Code. It is for illustration only.
       ;
             List      p=12C509,r=HEX
             org       0h             ; 程序從0h處開始放
      start
             movlw     0x0a          
             movlw     0x0b           ;
             goto      start          ; loop
             end
圖4.2   匯編語(yǔ)言范例 一、標(biāo)號(hào)
標(biāo)號(hào)須由第一格起始寫,最多可達(dá)31個(gè)字符,且第一個(gè)字符必須是字母。標(biāo)號(hào)后可跟冒號(hào)(:)、空格或行結(jié)束符。除非使用選擇項(xiàng)/C,否則標(biāo)號(hào)中的字母大小寫是不一樣的,如:
            START
            start
是二個(gè)不同的標(biāo)號(hào)。
二、指令助記符
指PIC的指令或偽指令,宏定義符等。具體參閱有關(guān)各章節(jié)和資料。
三、操作數(shù)
操作數(shù)可以是常數(shù),符號(hào)或表達(dá)式。兩個(gè)操作數(shù)之間必須由逗號(hào)(,)分開。
    (1)符號(hào)——各種定義的符號(hào)、宏定義等。
       例:MOVWF F10  ;F10為操作數(shù),是定義的代表寄存器10的符號(hào)。
(2)常數(shù)——在MPASM中,常數(shù)可以是如下:

進(jìn)制 書寫格式 例子
十進(jìn)制      D'<數(shù)字>'       D'255'
十六進(jìn)制      H'<16進(jìn)制數(shù)字>' 或 0x<16進(jìn)制數(shù)字>       H'A8'    0xA8
二進(jìn)制      B'<二進(jìn)制數(shù)字>'       B'00111001'
八進(jìn)制      O'<八進(jìn)制數(shù)字>'       O'777'
字符ASCⅡ碼      '< 字 符 >'       'C'

 

       注:MPASM默認(rèn)進(jìn)制為16進(jìn)制。

表4.1

(3)表達(dá)式&mdash;&mdash;由常數(shù)、符號(hào)和各種算術(shù)運(yùn)算符號(hào)按一定順序組成。
MPASM中的算術(shù)符號(hào)如表4.2所示。

運(yùn)       算         符 例         子
  ( 左括號(hào) 1+(d*4)
右括號(hào) 同上
! IF !(a-b)
+ a+b
- a-b
* a*b
/ a/b
% 取模 a%2
<< 左移 <
style="border:1px solid #cecece;"                 >> 右移 >>a
> 大于 IF a>b
< 小于 IF a
<= 小于或等于 IF a<=b
== 等于 IF a==b
!= 不等于 IF a!=b
& a & b
^ 異或 a ^ b
a │ b
取反
& & 邏輯與 IF (a=2) && (b=3)
││ 邏輯或 IF (a=2) ││(b=3)
= 等于 a=b
+= 加,然后等于 a+=1
-= 減,然后等于 a-=1
*= 乘,然后等于 a*=5
/= 除,然后等于 a/=5
<<= 左移,然后等于 a<<=5
>>= 右移,然后等于 a>>=5
&= 與,然后等于 a&=5
│= 或,然后等于 a│=5
^= 異或,然后等于 a^=5
返回當(dāng)前PC值 GOTO ¥+3

 

表4.2

四、注釋                                                  
以分號(hào)(;)起始,用戶可以注釋程序。                      
CLRF  F10    ; 清F10寄存器                                 
&sect;4.3 偽指令 
所謂偽指令,是一些用來(lái)控制匯編器的命令。它們可放在源程序(.ASM)中,但不是被翻譯成可執(zhí)行的機(jī)器代碼,而是用來(lái)控制匯編器的輸入/輸出以及數(shù)據(jù)的定位等。
在MPASM中,有四類偽指令:
1、數(shù)據(jù)偽指令:用于控制程序存儲(chǔ)器的定位,定義數(shù)據(jù)的名稱等。
2、列表偽指令:用于控制MPASM產(chǎn)生的列表文件(.LST)的格式等。
3、控制偽指令:用于控制匯編的路徑,如條件匯編等。
4、宏匯編指令:用于控制宏定義體中的運(yùn)行和數(shù)據(jù)定位。
一、數(shù)據(jù)偽指令
     1. DATA&mdash;&mdash;定義程序存儲(chǔ)器的值。
       格式:〔<標(biāo)號(hào)>〕 DATA <操作數(shù)>,〔<操作數(shù)>&hellip;〕
         例:DATA 1,2+AB,&ldquo;Test&rdquo;
     2. DEFINE&mdash;&mdash;定義字符串變量。
       格式:#DEFINE<變量名>〔<字符串>〕
         例:#DEFINE  Length    20
             #DEFINE  control   0x19,7
             #DEFINE  position  (X,Y,Z)  (Y-(2&times;Z+X))
               &hellip;
               &hellip;           
            test_Lable  DATA   position(1,Length,52)
                        bsf    control               ; 置0X19寄存器的bit7
     3. SET&mdash;&mdash;對(duì)標(biāo)號(hào)賦值。
       格式: <標(biāo)號(hào)>  SET  <表達(dá)式>
         例:  width  SET  9
               area   SET  0x16
               width  SET  area+8
       用SET可對(duì)標(biāo)號(hào)任意重新賦值,見(jiàn)上例3。這和下面的另一條標(biāo)號(hào)賦不同。    
     4. EQU&mdash;&mdash;對(duì)標(biāo)號(hào)賦值。
       格式:<標(biāo)號(hào)>  EQU  <表達(dá)式>
         例: lable  EQU  0x16
       標(biāo)號(hào)一旦由EQU賦值后,其值便不能再重新定義,參考上面SET命令。  
     5. RES&mdash;&mdash;保留某段程序存貯區(qū)。
       格式: RES  <單元個(gè)數(shù)>
         例: RES   10
       保留10個(gè)空白字節(jié)。
     6. INCLUDE&mdash;&mdash;調(diào)入外部文件,通常是定義文件,對(duì)一些標(biāo)號(hào)和變量進(jìn)行定義。
                 MPASM提供一個(gè)名為PICREG.EQU的定義文件,讀文件中定義了
                 PIC寄存器的地址,復(fù)位向量及狀態(tài)位址。
       格式: INCLUDE  &ldquo;文件名&rdquo;
         例: INCLUDE  &ldquo;picreg.egu&rdquo;
     7. Radix&mdash;&mdash;進(jìn)制定義指令。
       格式: RADIX  <進(jìn)制表達(dá)式>
         例: RADIX  dec   ; 十進(jìn)制
              RADIX  Hex   ; 十六進(jìn)制
              RADIX  oct   ; 八進(jìn)制
二、列表偽指令
     1. LIST&mdash;&mdash;列表選擇指令,設(shè)置各種匯編參數(shù)。
       格式: LIST〔<選擇項(xiàng)>&hellip;<選擇項(xiàng)>〕
         例: LIST F=INHX8M, R=DEC, P=16C84
     以下是LIST選項(xiàng)表:

選項(xiàng) 默 認(rèn) 值 作     用
C=nnn 80 行寬
N=nnn 59 每頁(yè)的行數(shù)
T=ON/OFF OFF ON截去超長(zhǎng)行的超出部分
P= 無(wú) PIC12C/16C/17C
R= hex 常數(shù)進(jìn)制選擇:hex,dec,oct
F= INHX8M 燒寫文件格式:INHX16,INHX32和INHX8M

表4.3

     2. PAGE&mdash;&mdash;分頁(yè)命令。
       格式: PAGE
       在列表文件中(.lst)中產(chǎn)生分頁(yè)效果,即下面的文件輸出將從新頁(yè)面開始。
     3. TITLE&mdash;&mdash;程序標(biāo)頭命令。
       格式: TITLE  '程序標(biāo)頭'
         例: TITLE  'This is for PIC12C50X demo'
       標(biāo)頭最長(zhǎng)不超過(guò)60個(gè)字符。TITLE令會(huì)造成分頁(yè),即標(biāo)頭總是在一頁(yè)的第一行上。
三、控制偽指令
     1. ORG&mdash;&mdash;定義程序存放起始地址。
       格式:<標(biāo)號(hào)>  ORG  <地址表達(dá)式>
       例:          ORG   0h             ; 起始程序存放地址
          START:    MOVWF OSCCAL
                      &hellip;
                      &hellip;
       若ORG不帶地址參數(shù),則默認(rèn)為0。若ORG帶標(biāo)號(hào),則地址參數(shù)也賦值給該標(biāo)號(hào)。
     2. END&mdash;&mdash;程序結(jié)束命令。
       格式:   END
         例:   END
       這條指令告訴MPASM這是源程序(.ASM)的結(jié)束行,后面若還有語(yǔ)句將被視為無(wú)效。  
     3. IF&mdash;&mdash;條件匯編命令。
       格式: IF  <條件表達(dá)式>
                <源程序行>
             


                <源程序行>
              ENDIF
         例: IF  VER==100
                  MOVLW  5
                  WOVWF  F11
              ELSE
                  MOVLW  6
                  MOVWF  F11
              ENDIF
                  &hellip;
                  &hellip;
如果條件表達(dá)式為真,MPASM將匯編IF和ELSE之間的語(yǔ)句,反之匯編ELSE和ENDIF之間的語(yǔ)句。ELSE可以缺省,這樣條件為真則匯編,反之不匯編。
     4. WHILE&mdash;&mdash;條件循環(huán)命令。
       格式: WHILE  <條件表達(dá)式>
                        &hellip;
                        &hellip;
              ENSW 
         例: VARIABLE  i
              WHILE     i<count<>
<count<>              MOVLW     i
              i=i+1
              ENDW
注:VARIABLE也是一條定義變量的偽指令,和EQU及SET不同的是它不要求變量在定義時(shí)必須賦值給初值,如上例中的變量i。關(guān)于這條偽指令不再贅述。
四、宏定義偽指令 
     1. MACRO&mdash;&mdash;宏定義命令。宏是一段指令,可以插在源程序中。宏必須事先定義好,宏之間可以互相調(diào)用,也可以自己遞歸調(diào)用。宏本身不會(huì)產(chǎn)生代碼,只是在調(diào)用它時(shí)把宏體插入源程序,這點(diǎn)和子程序調(diào)用有本質(zhì)不同,即宏并不會(huì)節(jié)省程序空間,它主要的好處是令程序書寫簡(jiǎn)潔明了。
       格式: <標(biāo)號(hào)>  MACRO〔<參數(shù)1>&hellip;<參數(shù)N>〕
                      (宏體)
                      ENDM
         例:GET  MACRO  X,Y,Z
                   MOVWF  X
                   Y
                Z  MOVLW  10
                   GOTO   Z
                   ENDM
      宏調(diào)用可以下為:
                          &hellip;
                   GET    F0,(INCF F17,W), ENTRY
                          &hellip;
      則匯編后這句宏調(diào)用產(chǎn)生的源代碼為:
                   GET    F0,(INF17,W), ENTRY
          +        MOVWF  F0
          +        INCF   F17,W
          + ENTRY  MOVLW  10
          +        GOTO   ENTRY
      前面帶+號(hào)表示是宏體中定義的程序。  
&sect;4.4   錯(cuò)誤/警告信息       
MPASM匯編一個(gè)源程序后,可以產(chǎn)生一個(gè).ERR文件,該文件用來(lái)存放匯編后可能產(chǎn)生的錯(cuò)誤或警告信息。必須強(qiáng)調(diào)的是錯(cuò)誤信息(Error)是指出源程序中出現(xiàn)&ldquo;致命&rdquo;(fatal)的錯(cuò)誤,用戶必須修改直至匯編后Errors= 0。而警告信息(Warnings)是指出源程序中可能有問(wèn)題的地方,但并不一定是&ldquo;致命&rdquo;錯(cuò)誤,只是提醒用戶去注意這些被警告的地方。如果用戶可以確認(rèn)無(wú)誤,便可以不理會(huì)產(chǎn)生的Warnings。
一、錯(cuò)誤信息
     1.Address exceeds maximum limit avaiable
       程序存儲(chǔ)器地址溢出(超出)有效范圍。
     2.Attempt to redefine reserved word
       MPASM中的保留字如&ldquo;END&rdquo;、&ldquo;ERROR&rdquo;、&ldquo;HIGH&rdquo;、&ldquo;LOW&rdquo;和&ldquo;PAGE&rdquo;被重定義,用戶必須避免再將其用做標(biāo)號(hào)或變量。
     3.Branch or jump out of range
       程序跳轉(zhuǎn)指令如&ldquo;GOTO&rdquo;、&ldquo;CALL&rdquo;等超出規(guī)定的范圍。
     4.Couldn't open&hellip;
       TMPASM 不能打開&ldquo;.OBJ&rdquo;、&ldquo;.map&rdquo;、&ldquo;.Hex&rdquo;、&ldquo;.Err&rdquo;、&ldquo;.Lst&rdquo;或&ldquo;.ref&rdquo;文件。一般是電腦已沒(méi)有足夠的磁盤空間。
     5.Couldn't open source file&hellip;
       匯編的源程序文件不存在。
     6.Duplicate lable or redefininy symbol that cannot be redefined
       標(biāo)號(hào)或變量名重復(fù)定義。
     7.Error in parameter
       參數(shù)錯(cuò)誤。
     8.Expected&hellip;
       源程序行有錯(cuò)。
     9.File not found
       指定的文件找不到。
    10.Illegal argument
       非法參數(shù)。
    11.Illegal condition
       IF語(yǔ)句中的條件符號(hào)出錯(cuò)。
    12.Illegal condition,EOF encountered before END or conditional end directive
       IF、WHILE或MACRO語(yǔ)句中缺少相應(yīng)的ENDIF、ENDW和ENDM。
    13.Illegal conditional compile
       IF/ELSE/ENDIF結(jié)構(gòu)書寫有錯(cuò)。
    14.Illegal character&hellip;in label&hellip;
       在標(biāo)號(hào)字符中出現(xiàn)非法字符。合法的字符是&ldquo;-&rdquo;、&ldquo;&middot;&rdquo;、&ldquo;A&rdquo;~&ldquo;Z&rdquo;、&ldquo;a&rdquo;~&ldquo;z&rdquo;、&ldquo;0&rdquo;~&ldquo;9&rdquo;。
    15.Illegal digit
       非法數(shù)字。如在十進(jìn)制數(shù)中出現(xiàn)十六進(jìn)制符等。
    16.Illegal opcode
       非法操作數(shù)。
    17.Include file not found
       Include 指令中的文件找不到。
    18.Include files nested too cleep
       Include 文件嵌套太多。Include 文件嵌套最多的為5重。
    19.Macro name missing
       缺少宏定義名稱。
    20.Marco nested too deep
       宏體嵌套太多。宏體中最多可嵌套8重。
    21.Missing arguments
       缺少參數(shù),如指令中缺少操作數(shù)等。
    22.Missing terminator
       缺少配對(duì)符,如各種括號(hào)&ldquo;)&rdquo;、&ldquo;〕&rdquo;、&ldquo;}&rdquo;或&ldquo;&middot;&rdquo;、空格等。
    23.Nested forward reference not allowed.
       使用未定義的標(biāo)號(hào)、變量、宏定義等。或者是MPASM不能確認(rèn)標(biāo)號(hào)的類型,一般由標(biāo)號(hào)重復(fù)定義引起。
    24.Out of memory
       程序空間溢出。
    25.Overwriting previous address contents
       程序空間重復(fù)使用。一般由地址定義指令ORG定義不當(dāng)引起。
    26.Processor type is undefined
       單片機(jī)芯片型號(hào)未定義。要么在源程序中未定義,要么在使用MPASM匯編時(shí)未定義。
    27.Processor type previously defined
       單片機(jī)芯片型號(hào)重復(fù)定義。
    28.Symbol table full
       符號(hào)表溢出。
    29.Temp file creation error
       MPASM在匯編過(guò)程中會(huì)使用一些臨時(shí)性文件。這個(gè)錯(cuò)一般是電腦磁盤滿或讀寫出錯(cuò)引起。
    30.Too many arguments
       參數(shù)太多,如指令操作符帶過(guò)多的操作數(shù)。
    31.Undefined argument
       使用了未定義的參數(shù)。
    32.Unknow error
       MPASM碰到未知的錯(cuò),這種情況一般很少發(fā)生。
    33.While failed to terminate within 256 iterationg
       While 語(yǔ)句中沒(méi)有結(jié)束的條件產(chǎn)生。  
二、警告信息
     1.Addresses above 32K not currently supported. Using MaxRom.
       MPASM目前只允許源程序使用8000H(32K)以下的程序地址。將來(lái)可以增加到64K。
     2.Argument out of rauge,least significant bits used.
       參數(shù)超出所允許的范圍值。MPASM一般會(huì)把超出的值自動(dòng)截為認(rèn)可的最大值。
     3.Crossing page boundary--ensure page blts are set
       MPASM通知你程序跨頁(yè)面了,建議你確認(rèn)相應(yīng)的頁(yè)面位是否已經(jīng)設(shè)置了。
     4.&hellip;Is not currently supported
       使用了MPASM尚未支持的指令。
     5.&hellip;Not a single byte quantity
       使用了超出8位的數(shù)值。
     6.This number is being treated as a binary representation
       MPASM碰到不知是二進(jìn)制或十六進(jìn)制的值,如b 0101。這時(shí)MPASM都會(huì)把它當(dāng)做二進(jìn)制處理。上例如果要表示16進(jìn)制,應(yīng)寫成ox b0101或H'b0101'。
&sect;4.5   使用MPASM來(lái)匯編PIC12C5XX的問(wèn)題
如果用戶手中的MPASM版本是97年前的老版本,則在Processor Type中尋不到PIC12C508/509,怎么辦?不要緊,因?yàn)镻IC12C5XX和PIC16C5X的指令是完全一樣的。所以如果手中的MPASM是老版本,可以用如下方法來(lái)操作:

匯編對(duì)象 Processor Type
PIC12C508 16C54
PIC12C509 16C58

联系我们: 北碚区| 黎城县| 宁德市| 石景山区| 孝义市| 三台县| 漳浦县| 文安县| 定南县| 博湖县| 海南省| 义乌市| 宝丰县| 唐山市| 河南省| 顺平县| 尚志市| 于田县| 会理县| 屏山县| 西昌市| 尤溪县| 嘉鱼县| 普洱| 平果县| 县级市| 得荣县| 安塞县| 南和县| 潞城市| 长垣县| 大冶市| 泾阳县| 东阳市| 宁乡县| 连云港市| 新泰市| 乌拉特前旗| 宜川县| 元阳县| 安乡县|