關於IF ELSE ENDIF
|
||||
---|---|---|---|---|
新會員
|
請問IF ELSE ENDIF這虛指令是否可用 因為組譯時並沒有錯誤 但執行結果卻都是執行IF 至 ELSE 不會執行ELSE 至 ENDIF
發表於: 2004/6/12 10:48
|
|||
|
Re: 關於IF ELSE ENDIF
|
||||
---|---|---|---|---|
版主
|
當欲使用條件式的組譯用來判斷事件是否成立,以控制 MPASM 的組譯流程時, 可利用 IF , ELSE , ENDIF
等這些條件判斷指令來達成 IF 的語法為 ; IF <條件判斷> {當條件成立(TRUE) 時則執行 IF 之下區塊之組譯} ELSE {用來處理當 IF 的條件不成立時(FALSE)的狀況} ENDIF ; 用於結束 IF .. ELSE 的條件式組譯區塊 。 例如 : #define Motor_Type 50 : : call Table_Read : : Table_Read: IF Motor_Type == 50 retlw 0xC0 ELSE retlw 0x40 ENDIF 此時修改Motor_Type的值就會有不同的組譯結果。
發表於: 2004/6/14 14:11
|
|||
|
Re: 關於IF ELSE ENDIF
|
||||
---|---|---|---|---|
版主
|
但執行結果卻都是執行IF 至 ELSE
不會執行ELSE 至 ENDIF 回答: 因為條件都成立,所以就不會執行else以後的組合語言了。
發表於: 2004/6/14 14:15
|
|||
|
Re: 關於IF ELSE ENDIF
|
||||
---|---|---|---|---|
新會員
|
再請教
#define version 90 ;version定義為90,就不能在改變了 我用Watch看version ADDRESS是空的 VALUE顯示Symbol Not Found version是存放在何處 另外若我想判斷PORTD的值是否符合條件要如何做 movlw h'55' movwf PORTD if PORTD == 8 ;PORTD的ADDRESS 執行一 else 執行二 endif 結果是RUN 執行一
發表於: 2004/6/14 15:43
|
|||
|
Re: 關於IF ELSE ENDIF
|
||||
---|---|---|---|---|
版主
|
if, els, endif是所謂的directive,不是真正的指令。它的動作在組譯的時候就已經做完了,不可能還能在程式執行的時候「動態」地去判讀PORTD。
version是常數,不是變數,當然watch不到。 PORTD 在.inc檔裏頭,被定義=8,自然一定執行一。 若想判斷PORTD,藉以執行不同的程式,可以類似用以下的程式: MOVLW D'8' ;或其它值,如D'20' XORWF PORTD,W BTFSC STATUS,Z GOTO PORTD_IS_8 PORTD_NOT_8: ........ PORTD_IS_8: ........
發表於: 2004/6/14 16:53
|
|||
|
Re: 關於IF ELSE ENDIF
|
||||
---|---|---|---|---|
版主
|
1. 我想你可能誤會了 IF 的使用方式,你把這個 IF 當作C語言的 IF 來看待。
在組合語言中,if 屬於條件組譯,它是一種輔助用的虛指令,並不會產生任何程式碼。 然而在C語言中,if 是一種程式敘述(也可以硬說是指令)它會被翻譯成程式碼的。 2. 如果在組合語言(PIC)裡想要比較大小,基本上是要執行減法後,在去判斷 C & Z 旗號, 如只想知道是否相等只要在執行兩數相減後立即檢查Z旗號是否被設為1就可知道兩數是否相等。 3. 所以說,寫組合語言是很令人敬佩的,如果可以的話還是用C來寫會比較簡單。
發表於: 2004/6/14 16:59
|
|||
|
Re: 關於IF ELSE ENDIF
|
||||
---|---|---|---|---|
新會員
|
我瞭解了
謝謝
發表於: 2004/6/14 18:26
|
|||
|