Re: MACRO的使用問題
|
||||
---|---|---|---|---|
資深會員
|
Data sheet裡
搜尋關鍵字access bank 你都曉得教別人 ACCESS , 為何自己還犯這種錯誤 ?? <<< 自己去罰站 >>> 組譯程式擁有對程式的解釋權 , 所以如果觀念錯誤就會變成 雞同鴨講 ( 程式是給組譯程式看的, 再由它和 LINKER 轉成可執行檔 <.HEX> )
發表於: 2009/10/30 13:58
|
|||
|
Re: MACRO的使用問題
|
||||
---|---|---|---|---|
新會員
|
原來如此
大感謝Beee!!! 執行之後結果變成: temp0=0x00 temp1=0x00 而不是 temp0=0x01 temp1=0x01 想請問是不是一旦該暫存器(Out0)的位址存入FSR0之中,只有對INDF0的值作變動才能改變暫存器(Out0)的值,而此時直接對暫存器(Out0)作任何變值的動作都不會使得其內部的值改變。 謝謝~
發表於: 2009/10/28 13:47
|
|||
|
Re: MACRO的使用問題
|
||||
---|---|---|---|---|
資深會員
|
1. 我熟的是 pic16 不是 pic18 ; 我習慣寫絕對位址 不是相對位址
發表於: 2009/10/28 12:18
|
|||
|
Re: MACRO的使用問題
|
||||
---|---|---|---|---|
新會員
|
感謝Beee的回應。
我做了以下的code測試 #include P18F8520.inc udata 0x60 Out0 res 1 temp0 res 1 temp1 res 1 ORG 0 Start banksel Out0 clrf temp0 clrf temp1 clrf Out0 movlw Out0 movwf Out0 ; Out0 = 0x60 banksel FSR0 movwf FSR0 clrf INDF0 ; 清除INDF0 incf Out0,F ; Out0 加 1 movff INDF0, temp0 ; INDF0 = 0x00 movff Out0, temp1 ; Out0 = 0x61 goto $ END 執行完之後 temp0=0x00 temp1=0x61 但是根據data sheet,對INDF0的值作任何改變,等於對FSR0所存位址之對應暫存器作改變。 那麼temp0的值和temp1的值應該會相等都等於0x01才對, 為啥我跑出來的結果會不一樣 煩請有經驗的前輩指導一下 謝謝
發表於: 2009/10/28 11:40
|
|||
|
Re: MACRO的使用問題
|
||||
---|---|---|---|---|
資深會員
|
參照:
WHAT ? 自己想吧
發表於: 2009/10/28 4:32
|
|||
|
MACRO的使用問題
|
||||
---|---|---|---|---|
新會員
|
大家好
我根據MPASM user's guide 中有關於macro language的example,由pic16f轉為用pic18f作了些修改之後,build all執行完都很正常,不過在用watch視窗觀察我設的4個symbol(Out0~Out3),發現裡面的值並沒有根據程式而被改變,請問一下是什麼問題,謝謝。 #include P18F8520.inc udata 0x60 Out0 res 1 ; LSB Out1 res 1 ; : Out2 res 1 ; : Out3 res 1 ; MSB Unpack32 MACRO Var, Address BANKSEL Address movlw Address movwf FSR0 movlw Var & H'FF' movwf INDF0 movlw Var >>D'08' & H'FF' incf FSR0,F movwf INDF0 movlw Var >>D'16' & H'FF' incf FSR0,F movwf INDF0 movlw Var >>D'24' & H'FF' incf FSR0,F movwf INDF0 ENDM ORG 0 Start Unpack32 0x12345678, Out0 goto $ END
發表於: 2009/10/27 20:00
|
|||
|