8-bit PIC:: (急!!!)PIC16F15344 NVM問題 以及 新版MPLAB編譯找不到xc.h的問題
不好意思,每次打貴司電話都很少人接,但有時又很急
首先是15344這顆IC,這顆IC沒有EEPROM,但有另外一個儲存功能叫NVM可以用,DATASHEET上面寫的READ和ERASE翻成C語言基本上沒什麼問題,但重點就是WRITE這段,小弟真的不太了解其組語這段運用到STATUS跟FSR0的用意,那個MOVIW也不太瞭解怎麼用C語言表達
BANKSEL NVMADRH
MOVF ADDRH,W
MOVWF NVMADRH ; Load initial address
MOVF ADDRL,W
MOVWF NVMADRL
MOVLW LOW DATA_ADDR ; Load initial data address
MOVWF FSR0L
MOVLW HIGH DATA_ADDR
MOVWF FSR0H
BCF NVMCON1,NVMREGS ; Set Program Flash Memory as write location
BSF NVMCON1,WREN ; Enable writes
BSF NVMCON1,LWLO ; Load only write latches
LOOP
MOVIW FSR0++
MOVWF NVMDATL ; Load first data byte
MOVIW FSR0++
MOVWF NVMDATH ; Load second data byte
MOVF NVMADRL,W
XORLW 0x1F ; Check if lower bits of address are 00000
ANDLW 0x1F ; and if on last of 32 addresses
BTFSC STATUS,Z ; Last of 32 words?
GOTO START_WRITE ; If so, go write latches into memory
CALL UNLOCK_SEQ ; If not, go load latch
INCF NVMADRL,F ; Increment address
GOTO LOOP
希望這能有C語言範例CODE能參考,或希望有用過此功能的前輩能引導一下,拜託謝謝
--------------------------
再來是MPLAB編譯問題,先說明一下,程式用在之前版本的MPLAB編譯是完全沒問題的,但不知道為什麼,最新版5.05,中斷副程式一直發生錯誤
main.c:694:6: error: variable has incomplete type 'void'
void interrupt ISR()
^
main.c:694:15: error: expected ';' after top level declarator
void interrupt ISR()
把中斷副程式先/**/掉,編譯就可以過,但警告跳出來變成是我其他所有副程式都沒被呼叫過,而且我include <xc.h>這行一直有燈泡驚嘆號顯示There are unresolved include inside <xc.h>,但我把同樣程式都搬去比較舊版的MPLAB都沒問題,不知道有沒有人也有發生同樣的問題,如何解決,感謝解答
不好意思,每次打貴司電話都很少人接,但有時又很急
首先是15344這顆IC,這顆IC沒有EEPROM,但有另外一個儲存功能叫NVM可以用,DATASHEET上面寫的READ和ERASE翻成C語言基本上沒什麼問題,但重點就是WRITE這段,小弟真的不太了解其組語這段運用到STATUS跟FSR0的用意,那個MOVIW也不太瞭解怎麼用C語言表達
BANKSEL NVMADRH
MOVF ADDRH,W
MOVWF NVMADRH ; Load initial address
MOVF ADDRL,W
MOVWF NVMADRL
MOVLW LOW DATA_ADDR ; Load initial data address
MOVWF FSR0L
MOVLW HIGH DATA_ADDR
MOVWF FSR0H
BCF NVMCON1,NVMREGS ; Set Program Flash Memory as write location
BSF NVMCON1,WREN ; Enable writes
BSF NVMCON1,LWLO ; Load only write latches
LOOP
MOVIW FSR0++
MOVWF NVMDATL ; Load first data byte
MOVIW FSR0++
MOVWF NVMDATH ; Load second data byte
MOVF NVMADRL,W
XORLW 0x1F ; Check if lower bits of address are 00000
ANDLW 0x1F ; and if on last of 32 addresses
BTFSC STATUS,Z ; Last of 32 words?
GOTO START_WRITE ; If so, go write latches into memory
CALL UNLOCK_SEQ ; If not, go load latch
INCF NVMADRL,F ; Increment address
GOTO LOOP
希望這能有C語言範例CODE能參考,或希望有用過此功能的前輩能引導一下,拜託謝謝
--------------------------
再來是MPLAB編譯問題,先說明一下,程式用在之前版本的MPLAB編譯是完全沒問題的,但不知道為什麼,最新版5.05,中斷副程式一直發生錯誤
main.c:694:6: error: variable has incomplete type 'void'
void interrupt ISR()
^
main.c:694:15: error: expected ';' after top level declarator
void interrupt ISR()
把中斷副程式先/**/掉,編譯就可以過,但警告跳出來變成是我其他所有副程式都沒被呼叫過,而且我include <xc.h>這行一直有燈泡驚嘆號顯示There are unresolved include inside <xc.h>,但我把同樣程式都搬去比較舊版的MPLAB都沒問題,不知道有沒有人也有發生同樣的問題,如何解決,感謝解答





