Re: [問題] Microchip PIC18 ASM 疑問

看板ASM (組合語言)作者 (喵食罐頭)時間8年前 (2016/06/08 11:25), 8年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/7 (看更多)
※ 引述《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來實作想要的部份 並利用編譯器來看組語 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.249.195 ※ 文章網址: https://www.ptt.cc/bbs/ASM/M.1465356320.A.30D.html ※ 編輯: kikiqqp (125.227.249.195), 06/08/2016 11:51:52
文章代碼(AID): #1NLv0WCD (ASM)
討論串 (同標題文章)
文章代碼(AID): #1NLv0WCD (ASM)