作者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/cn.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