作者wasidada (dada)
看板ASM
標題Re: [問題] Microchip PIC18 ASM 疑問
時間Wed Jun 8 00:23:01 2016
※ 引述《kikiqqp (喵食罐頭)》之銘言:
: ※ 引述《wasidada (dada)》之銘言:
: : 最近因為工作需要開始要碰觸 PIC18系列的ASM
: : 在判斷式這邊搞不懂 無論我的累加器設定多少 總是會執行Action_1和Action_2
: : 請問有誰可以幫忙指點一下是哪一邊有打錯
: : 謝謝
: : MOVLW 000h
: : MOVWF TRISD
: : MOVLW .23
: : CPFSGT .20
: : call Action_1
: : CPFSGT .25
: : call Action_2
: : Action_1:
: : BCF LATD,5
: : return
: : Action_2:
: : BCF LATD,6
: : return
: 提示:1. CPFSGT f, a 若f大於W,則跳過下一個指令。
: 2. 14h ?
: 3. 19h ??
: 4. Action_1和2 CALL後要return到哪呢?
: 5. 程式何時停止呢?
: 6. 堆棧可以只出不進嗎?
list p= 18f67j50
#include "p18F67J50.inc"
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
MOVLW 0x0A
MOVWF D
start
Call Action
GOTO start
Action:
MOVLW 0x07
CPFSGT C
call Action_1
call Action_2
MOVLW 0x0B
CPFSGT D //後來我發現 給一個變數就可以正常運作了
call Action_3
call Action_4
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_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
--
Sent from my Windows
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.127.222.1
※ 文章網址: https://webptt.com/m.aspx?n=bbs/ASM/M.1465316583.A.AF4.html
※ 編輯: wasidada (59.127.222.1), 06/08/2016 00:24:54
1F:→ easypro: 你的call action_4沒return 靠的是action_1的return回去 06/08 00:42
2F:→ easypro: 的,這樣程式回不易看出錯誤,一個function最好一個retur 06/08 00:42
3F:→ easypro: n,除非你很了解你的程式將要怎樣跑,這樣很容易有錯誤而 06/08 00:42
4F:→ easypro: 不自知。 06/08 00:42
5F:推 drag: Action的return忘了寫嗎? 06/08 11:04
6F:推 easypro: 用組語寫有個特性,當你沒幫程式定址是它是回依照你寫的 06/08 11:52
7F:→ easypro: 程式一路編排下去,所以程式回一路執行下去,所以副程式 06/08 11:52
8F:→ easypro: 內最好都一個return 以求保險,不然你就要知道你的副程式 06/08 11:52
9F:→ easypro: 最後的位置有無return 回歸,不然很容易over stack導致系 06/08 11:52
10F:→ easypro: 統reset或執行錯亂。 06/08 11:52
11F:推 easypro: drag 他的call action_4後沒return,程式回一路往下跑到 06/08 11:55
12F:→ easypro: 有return 的點才會回歸 06/08 11:55
13F:→ kikiqqp: 空間有要求時常會這樣寫,但不建議初學這樣用 06/08 12:00
14F:推 easypro: kiki 06/08 12:42
15F:→ easypro: kikiqqp講的是用jmp跳到共用切回主page或bank這種共用區 06/08 12:45
16F:→ easypro: 段後的return 吧,sw的stack也是。 06/08 12:45