Re: PIC18F4520 PCL指令計數器為什麼必須累加2才會取下一筆資料?
|
||||
---|---|---|---|---|
新會員
|
謝謝版主及各位回答
我的問題解決了!! 謝謝
發表於: 2009/1/16 16:03
|
|||
|
Re: PIC18F4520 PCL指令計數器為什麼必須累加2才會取下一筆資料?
|
||||
---|---|---|---|---|
版主
|
是的如過使用一般傳統的察標方式 addwf PCL,F 的方式要注意一下表格擺放的位址,最好是從 0xnn00 為起始點,可以用 ORG 指令去設定查表得起始位址。因為就怕 PCL + W 後的值超過 255 而查錯表了。
發表於: 2009/1/14 11:42
|
|||
|
Re: PIC18F4520 PCL指令計數器為什麼必須累加2才會取下一筆資料?
|
||||
---|---|---|---|---|
版主
|
PIC18 的程式記憶體是用Byte來計算單位的,但每一個指令均佔 1 Word 的寬度,所以程式每次抓取的單位都是以 16-bit 為步進單位,A0 的位址線永遠為0,只會指向偶數的位址。
所以使用 addwf PCL,F 的查表就有表格最大的限制 (128) ,所以較大表格建議採用 Table Read 的方式來讀取,底下的範例自 W400 的教材,可以下載 W400 RTC 教材看一下在後面的章節。
LFSR FSR0, RAMBUFADDR ; 設定RAM 指標
發表於: 2009/1/12 10:17
|
|||
|
Re: PIC18F4520 PCL指令計數器為什麼必須累加2才會取下一筆資料?
|
||||
---|---|---|---|---|
新會員
|
請問這兩行指令是指?
(1)..............COUNT=0 (2)..............COUNT=1 我改了還是不行耶! 我知道必須用到PCLATH 可是我不知道怎麼使用? 第一次建表,請多多包含,謝謝各位幫忙
發表於: 2009/1/10 18:30
|
|||
|
Re: PIC18F4520 PCL指令計數器為什麼必須累加2才會取下一筆資料?
|
||||
---|---|---|---|---|
高級會員
|
改一下試試看:
SIN300: CLRF PCLATH ;LOOK LIST MOVF COUNT,W ADDWF PCL,F (1)..............COUNT=0 (2)..............COUNT=1 ... ... HH: INCF COUNT,F BRA SIN300
發表於: 2009/1/10 15:08
|
|||
|
PIC18F4520 PCL指令計數器為什麼必須累加2才會取下一筆資料?
|
||||
---|---|---|---|---|
新會員
|
我要建一個150筆SIN表,可是我的PCL計數器都必須加2才會取出下一筆資料,而我共有150筆資料*2等於300,我的PCL+W不能大於255,所以我的表永遠都讀不到後面的值,請問各位高手有什麼辦法可以解決?
PCL不是加1就會讀到下一筆資料嗎? 拜託各位幫忙! 以下是我的程式碼 LIST P=18F4520 #INCLUDE<P18F4520.INC> ;------- SINL300 EQU 0X20 SINH300 EQU 0X21 ABCDE EQU 0X22 ORG 0X00 CLRF ABCDE BRA START1 ;------- SIN300: ADDWF PCL,F DT .0,.0,.0,.0,.0,.1,.1,.1,.2,.2,.3,.3,.4,.4,.5,.6,.7,.8,.8,.9,.10,.11,.13,.14,.15,.16,.17,.19,.20,.21,.23,.24,.26,.28,.29,.31,.33,.34,.36,.38,.40,.42,.44,.45,.47 DT .49,.52,.54,.56,.58,.60,.62,.64,.67,.69,.71,.73,.76,.78,.81,.83,.85,.88,.90,.93,.95,.98,.100,.102,.105,.107,.110,.112,.115,.117,.120,.123,.125,.128,.130,.133 DT .135,.138,.140,.142,.145,.147,.150,.152,.155,.157,.159,.162,.164,.167,.169,.171,.173,.176,.178,.180,.182,.184,.186,.188,.191,.193,.195,.196,.198,.200,.202,.204 DT .206,.207,.209,.211,.212,.214,.216,.217,.219,.220,.221,.223,.224,.225,.226,.227,.229,.230,.231,.232,.232,.233,.234,.235,.236,.236,.237,.237,.238,.238,.239,.239 DT .239,.240,.240,.240,.240,.240 START1: MOVF SINL300,W,0 ;當前位置 CALL SIN300 ;取目標位置 MOVWF CCPR1L ;產生sin波 INCF ABCDE MOVLW .150 CPFSEQ ABCDE,0 BRA HH ;否 BRA LL ;是 START2: MOVF SINL300,W,0 ;當前位置 CALL SIN300 ;取目標位置 MOVWF CCPR1L ;產生sin波 DECF ABCDE MOVLW .0 CPFSEQ ABCDE,0 BRA LL ;否 BRA HH ;是 HH: INCF SINL300,F INCF SINL300,F ;計數器累加2 BRA START1 LL: DECF SINL300,F DECF SINL300,F BRA START2 END
發表於: 2009/1/9 16:59
|
|||
|