3

ここにPICマイクロコントローラープログラマーはいますか?

pickit2とそれに付属の16F690チップを使用してPICマイクロコントローラーのプログラミングを学んでいます。現在、さまざまな施設を試してみています。MPLABでEEPROMvaklueを設定すれば、コードでEEPROMからバイトを正常に読み取ることができますが、PIC自体を使用して値を変更できないようです単に何も起こらず、変更された値を読み戻さないので、常に元の値を取得します。これは、書き込みが機能していないことを意味しますか?

これはそのセクションの私のコードです、私は何かが欠けていますか?私は不必要な銀行の切り替えをたくさん行っていることを知っています。間違った銀行にいることが問題にならないように、それらのほとんどを追加しました。

        ; ------------------------------------------------------
        ; Now SET the EEPROM location ZERO to 0x08
        ; ------------------------------------------------------

        BANKSEL EEADR
        CLRF    EEADR           ; Set EE Address to zero

        BANKSEL EEDAT
        MOVLW   0x08            ; Store the value 0x08 in the EEPROM
        MOVWF   EEDAT

        BANKSEL EECON1
        BSF     EECON1, WREN    ; Enable writes to the EEPROM

        BANKSEL EECON2
        MOVLW   0x55            ; Do the thing we have to do so
        MOVWF   EECON2          ; that writes can work
        MOVLW   0xAA
        MOVWF   EECON2

        BANKSEL EECON1      
        BSF     EECON1, WR      ; And finally perform the write

WAIT
        BTFSC   EECON1, WR      ; Wait for write to finish
        GOTO    WAIT

        BANKSEL PORTC           ; Just to make sure we are on the right bank
4

3 に答える 3

3

16F690データシートの122ページに、EEPROMに書き込む適切な方法の詳細が記載されています。

BANKSEL EEADR                   ;
MOVF    DATA_EE_ADDR, W;
MOVWF   EEADR          ;Data Memory Address to write
MOVF    DATA_EE_DATA, W;
MOVWF   EEDAT                   ;Data Memory Value to write
BANKSEL EECON1                  ;
BCF     EECON1, EEPGD ;Point to DATA memory
BSF     EECON1, WREN   ;Enable writes
BCF     INTCON, GIE             ;Disable INTs.
BTFSC   INTCON, GIE             ;SEE AN576
GOTO    $-2
; BEGIN REQUIRED SEQUENCE
MOVLW   55h            ;       
MOVWF   EECON2         ;Write 55h
MOVLW   AAh                     ;
MOVWF   EECON2                  ;Write AAh
BSF     EECON1, WR              ;Set WR bit to begin write
BSF     INTCON, GIE             ;Enable INTs.
SLEEP                  ;Wait for interrupt to signal write complete
; END REQUIRED SEQUENCE
BCF     EECON1, WREN   ;Disable writes
BANKSEL 0x00           ;Bank 0

私はあなたが特にこの行を見逃していることに気づきました:

 BCF     EECON1, EEPGD ;Point to DATA memory

が常に設定されている場合EEPGDは、プログラムメモリへの書き込み(フラッシュプログラムメモリの上書き)を試みますが、特に有効にするために邪魔にならない限り、常に失敗するはずです。

それを除けば、あなたのコードを読んで私が知る限り、他のすべてはうまく見えます。EECON1.WR割り込みを設定する代わりにポーリングしても問題ありません。デバイスをスリープ状態にするよりも多くの電力が必要になりますが、もちろん、一度に1つのことだけを心配する必要があります。

于 2010-04-18T10:13:24.307 に答える
1

ハイテクコンパイラを使用する場合、EEPROMへの書き込みは
#include <pic.h>
、メインと同じくらい簡単
EEPROM_WRITE(0, 0x00); です。

EEPROM_WRITE(location to write to, value to write to it);

私は実際、PICをアセンブリで書くのに十分な勇気がありませんでした。

于 2010-07-16T22:01:18.783 に答える
0

xc8コンパイラの方法:

#include <xc.h>

.....
value = eeprom_read(address);
eeprom_write(address, data);
于 2018-07-20T11:24:49.960 に答える