作者shela (雪特拉)
看板ASM
标题Re: [问题] 关於pic887的一些问题
时间Fri Mar 16 22:10:30 2012
※ 引述《vofeed (vofeed)》之铭言:
: 各位大大,我想请问一下,此程式中的subwf是如何跳到查表的
: 此程式的动作流程,可以替小弟说明一下吗?我一直想不通,
: 以下我解说一下我的想法:
: list p=16f887
: #include<p16f887.inc>
: D1 equ 0x20
: D2 equ 0x21
: D3 equ 0x22
: ONEIDX equ 0x23
: org 00h
: clrf D1
: clrf ONEIDX
: bsf STATUS,RP0
: bcf TRISB,3
: clrf TRISD
: bcf STATUS,RP0
: bcf PORTB,3
: start:
~~~~~~
: movf ONEIDX,w //第1此跑时,ONEIDX为0=W
: call TABLE
~~~~~~~~~~~~~~~~~~~~~
: movwf PORTD
: call delay
~~~~~~~~~~~~~~~~~~~~~
Main loop 里执行 call TABLE 和 call delay
: incf ONEIDX,f //第一次跑,因INCF故1
: movlw .10
: subwf ONEIDX,w //因10减W故为10
: btfss STATUS,Z
: goto start
上面五行的意思是
ONEIDX++;
if(ONEIDX==10)
{
跳到 delay;
}
else
{
跳回 start;
}
如果有错还请高手指正。
: delay:
: movlw .8
: movwf D3
: DLY1:
: movlw .244
: movwf D2
: DLY2:
: decfsz D1,f
: goto DLY2
: decfsz D2,f
: goto DLY2
: decfsz D3,f
: goto DLY1
: return
: TABLE:
: addwf PCL,f
: retlw b'00111111' ;0
: retlw b'00000110' ;1
: retlw b'01011011' ;2
: retlw b'01001111' ;3
: retlw b'01100110' ;4
: retlw b'01101101' ;5
: retlw b'01111101' ;6
: retlw b'00000111' ;7
: retlw b'01111111' ;8
: retlw b'01101111' ;9
: end
: 但怎想都不能如愿从0跳至9
: 请各位大大帮个忙~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 24.147.171.37