Re: 請問有關c18斷電存取內建ROM的方法
|
||||
---|---|---|---|---|
中級會員
|
請問還有什麼方法除了movf,movff,movlw
可以把資料丟到TABLAT 謝謝
發表於: 2009/9/18 17:05
|
|||
|
Re: 請問有關c18斷電存取內建ROM的方法
|
||||
---|---|---|---|---|
版主
|
1.我的變數的內容該怎麼去存到WREG裡(其他的指令都有依照正確的方向走
ANS: movf DK,0,0 這樣會將變數 DK 存到 Wreg 裡,如果無法正確的用 Watch Window 看到那依定不知哪裡有設錯了,或對 MPLAB IDE 的操作不甚清楚。 2.該怎麼讓C語的變數(UNSIGNED CHAR) 跟崁入式組語互通 ANS: In-Line Assembly 無法宣告變數,所以變數的宣告是由C來做的。它可以看到函數名稱及使用C的變數的。 3.我該另外宣告一個組語變數嗎? 如果需要又要該怎麼做? 告訴我去哪看就好 謝謝 ANS: 別自找麻煩用組與宣告變數,在C底下所宣告的 unsigned char Global Variable, In-Line Assembly 都可以使用的。
發表於: 2009/9/17 9:57
|
|||
|
Re: 請問有關c18斷電存取內建ROM的方法
|
||||
---|---|---|---|---|
中級會員
|
我也是參考上述的指令在撰寫的
MOVF DK ,0 ,0 我從WATCH視窗裡看個每指令,上面這條指令DK的資料卻沒有放 到WREG裡請問 1.我的變數的內容該怎麼去存到WREG裡(其他的指令都有依照正 確的方向走 2.該怎麼讓C語的變數(UNSIGNED CHAR) 跟崁入式組語互通 3.我該另外宣告一個組語變數嗎? 如果需要又要該怎麼做? 告訴我 去哪看就好 謝謝
發表於: 2009/9/17 9:42
|
|||
|
Re: 請問有關c18斷電存取內建ROM的方法
|
||||
---|---|---|---|---|
版主
|
現在才知道你用 PIC18F46J50。
W400 用的是 PIC18F452,雖然都是 PIC18 系列但Flash 的製程卻差很多。EECON1 暫存器的內容也不一樣的。 看一下 Data Sheet :EXAMPLE 6-4: SINGLE-WORD WRITE TO FLASH PROGRAM MEMORY
MOVWF TBLPTRH
紅色部分就是 Write 1 word to the Holding Register 的動作。
發表於: 2009/9/16 17:49
|
|||
|
Re: 請問有關c18斷電存取內建ROM的方法
|
||||
---|---|---|---|---|
中級會員
|
unsigned char dk <====宣告dk
MOVF dk,0,0 <====將dk 存入WREG MOVWF TABLAT, 0<====我用奸視器看的時候,我的WREG沒 有我DK的值。 我該如何將DK的丟入TABLAT
發表於: 2009/9/16 17:19
|
|||
|
Re: 請問有關c18斷電存取內建ROM的方法
|
||||
---|---|---|---|---|
中級會員
|
我從PIC18F46J50 系列裡看到wprog這個在eecon1的暫存器
我理解沒錯的話在6.2的說明,它是為1的時候可以只寫入單字 (2byte),為0是寫入整個BANK(64BYTE) 我上傳eecon1的說明 而且在MPLAB裡從WATCH EECON1得確也 沒有W400裡所寫的EEPGD、CFGS、RD 這三個暫存器 Attach file: (0.00 KB)
發表於: 2009/9/16 14:35
Edited by wdszd on 2009年09月16日 15:07:48
|
|||
|
Re: 請問有關c18斷電存取內建ROM的方法
|
||||
---|---|---|---|---|
版主
|
摘錄一下 PIC18F4520 Data Sheet 裡對 Flash Memory 的說明:
The minimum programming block is 32 words or
發表於: 2009/9/16 11:00
|
|||
|
Re: 請問有關c18斷電存取內建ROM的方法
|
||||
---|---|---|---|---|
版主
|
1.我固定在0x10000這個位址做存取的動作,怎麼查看我有沒有存進去flashrom裡 有地方可以看嗎?(單單檢查寫入有沒有錯誤)
從你問的問題終就可以瞭解你對 PIC18 系列的 Flash Memory 沒有讀完。PIC18F 的 Flash 無法一次只寫入一個 Byte 的。以 PIC18F452 來說: 清一個 Block 為 64-byte,一次寫入的動作需連續8-byte 才行。 2.我程式寫了1個字元 讀出來卻沒有東西,我發現我使用wprog=1 一次是寫入2個字元 跟讀出有關系嗎? Flash 寫入時是暫時先寫到Holding Register 的,何種時機會再寫到Flash去呢? 你的操作對象是 Flash 不是一般一個byte就可以直接操作的 EEPROM. 3.這種c & asm穿插的程式有夠難看得 沒辦法,有些低階的東西,C 語言做不到的。
發表於: 2009/9/16 10:55
|
|||
|
Re: 請問有關c18斷電存取內建ROM的方法
|
||||
---|---|---|---|---|
中級會員
|
void WRITE_ROM(unsigned char dk)
{ TBLPTR=0x010000; EECON1bits.WPROG = 1; EECON1bits.WREN = 1; EECON1bits.FREE = 1; INTCONbits.GIE = 0; _asm MOVLW 0x55 MOVWF EECON2 , 0 MOVLW 0xAA MOVWF EECON2 , 0 _endasm EECON1bits.WR = 1; TABLAT = dk; _asm TBLWTPOSTINC CLRF TABLAT, 0 TBLWT MOVLW 0x55 MOVWF EECON2,0 // write 55h MOVLW 0xAA MOVWF EECON2,0 // write AAh _endasm EECON1bits.WR = 1; // start program (CPU stall) INTCONbits.GIE = 1; // re-enable interrupts EECON1bits.WPROG = 0; // disable single word write EECON1bits.WREN = 0; return ; } unsigned char READ_ROM(void) { unsigned char WORD_EVEN; TBLPTR=0x010000; _asm TBLRD movf TABLAT, 0, 0 movwf WORD_EVEN,0 _endasm return (WORD_EVEN); } 我出現了幾個問題 1.我固定在0x10000這個位址做存取的動作,怎麼查看我有沒有存進去flashrom裡 有地方可以看嗎?(單單檢查寫入有沒有錯誤) 2.我程式寫了1個字元 讀出來卻沒有東西,我發現我使用wprog=1 一次是寫入2個字元 跟讀出有關系嗎? 3.這種c & asm穿插的程式有夠難看得 BSF EECON1, WR <===顯示undefined label 'WR' in 'READ_ROM' 也不能#define WR 0x02 bsf EECON1 ,0x02 ,0<==卻可以 能給我一點提示嗎? 謝謝
發表於: 2009/9/15 17:26
|
|||
|