Re: [問題] 關於pic887的一些問題

看板ASM (組合語言)作者 (雪特拉)時間13年前 (2012/03/16 22:10), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《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
文章代碼(AID): #1FOqdPpC (ASM)
討論串 (同標題文章)
文章代碼(AID): #1FOqdPpC (ASM)