Re: [問題] Microchip PIC18 ASM 疑問

作者: kikiqqp (喵食罐頭)   2016-06-08 11:25:17
※ 引述《wasidada (dada)》之銘言:
: ※ 引述《kikiqqp (喵食罐頭)》之銘言:
: : 提示:1. CPFSGT f, a 若f大於W,則跳過下一個指令。
: : 2. 14h ?
: : 3. 19h ??
: : 4. Action_1和2 CALL後要return到哪呢?
: : 5. 程式何時停止呢?
: : 6. 堆棧可以只出不進嗎?
: list p= 18f67j50
: #include "p18F67J50.inc"
先假設你用的是這個
;=====================================================================
; MPASM PIC18F67J50 processor include
;
; (c) Copyright 1999-2007 Microchip Technology, All rights reserved
;=====================================================================
: VAL_US equ .147
: VAL_MS equ .100
: COUNT equ 0x20
: COUNT_ms equ 0x21
: VAL_US equ .147
縮排,排版爛的工程師肯定不會寫出好程式
: MAIN_PROG CODE
: Initial
: CLRF PORTD
: CLRF LATD
: CLRF TRISD
: MOVLW 0x05
: MOVWF C
C是什麼?
INC中是C EQU H'0000'呦
: MOVLW 0x0A
: MOVWF D
D是什麼?
INC中是D EQU H'0005'呦
: start
: Call Action
: GOTO start
這邊是一個LOOP
: Action:
: MOVLW 0x07
: CPFSGT C
你在使用CPFSGT有沒有注意到手冊上 f和 a各代表什麼意思呢?
還有C是REG嗎?
: call Action_1
: call Action_2
你知道執行Action_1後會接著執行Action_2嗎?
: MOVLW 0x0B
: CPFSGT D //後來我發現 給一個變數就可以正常運作了
CPFSGT是W和F(REG)比較,你改變了W當然結果會變動呀
至於是不是你要的結果根本不知道
: call Action_3
: call Action_4
你知道執行Action_3後會接著執行Action_4嗎?
你知道執行Action_4後會接著執行Action_1嗎?之後回到GOTO start
: Action_1:
: BSF LATD,5
: return //return 是跳出這個函式 執行完Action_1吧
: Action_2:
: BSF LATD,6
: return
: Action_3:
: BCF LATD,5
: return
: Action_4:
: BCF LATD,6
: return
以下DELAY略過
: DELAY_100ms:
: MOVLW VAL_MS
: MOVWF COUNT_ms
: LOOP_ms:
: CALL DELAY_1ms
: DECFSZ COUNT_ms,f
: GOTO LOOP_ms
: RETURN
: DELAY_1ms:
: MOVLW VAL_US
: MOVWF COUNT
: DEC_LOOP
: CALL D_SHORT
: DECFSZ COUNT,f
: GOTO DEC_LOOP
: RETURN
: D_SHORT
: CALL D_RET
: CALL D_RET
: nop
: nop
: D_RET
: RETURN
: END
: 我比較擔心的問題是,我的觀念是錯的結果程式跑起來是正確的
: 結果沒發現 orz
除非有特殊必要性,不然我會建議PIC18F先用C來實作想要的部份
並利用編譯器來看組語

Links booklink

Contact Us: admin [ a t ] ucptt.com