• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::

論壇索引


Board index » All Posts (fbs1107)




請問EEPROM寫入位址錯誤問題
#1
初級會員
初級會員


小弟使用16f883,目前想接收到0xA0訊號後,在位址0x20寫入0x41的值,但是我看EEPROM視窗,只在位址0x77,有0x41的值,可是我是希望位址寫在0x20,不論位址給多少,都是寫在0x77的位址
請問問題出在哪邊阿??
請有經驗的人給點意見,謝謝!!

//---------------------- write EEPROM ---------------------//
void writeeeprom(void)
{
INTCON=0b01001000;
storebank=STATUS;
#asm

bsf _STATUS,6;
bcf _STATUS,5;
movf _eepaddr,W
movwf _EEADR;
movf _eepdata,W;
movwf _EEDATA;
bsf _STATUS,5;
bcf _EECON1,7;
bsf _EECON1,2;
#endasm;
GIE=0;
#asm
movlw 0x55;
movwf _EECON2 ;
movlw 0xAA;
movwf _EECON2;
bsf _EECON1,1;
bcf _EECON1,2;
wrdone:
btfsc _EECON1,1
goto wrdone

#endasm;
STATUS=storebank;
GIE=1;

}

void main(void)
{
initIO();
SetupAD();
uart_initial();
INTCON=0b11001000;
EEIE=1;
while(1)
{

}//while loop
}

void interrupt isr_Sevr ( void )
{

CREN=1;
TXEN=0;
rec1=RX_receive();
rec2=RX_receive();
if(rec1==0xA0)
{
eepaddr=0x20;
eepdata=0x41;
writeeeprom();
}
else{rec1=0;wrep=0;}
}


小弟使用16f883,目前想接收到0xA0訊號後,在位址0x20寫入0x41的值,但是我看EEPROM視窗,只在位址0x77,有0x41的值,可是我是希望位址寫在0x20,不論位址給多少,都是寫在0x77的位址 ,請問問題出在哪邊阿??
請有經驗的人給點意見,謝謝!!

發表於: 2008/11/25 9:49

Edited by fbs1107 on 2008年11月25日 13:24:08
Edited by fbs1107 on 2008年11月25日 14:12:56
頂部


Re: 請問C語言中如何加入組語??
#2
初級會員
初級會員


感謝阪大與PSIR大指導,小弟我真的是獲益良多!!
再此獻上十二萬分的感謝!! m(_._)m

發表於: 2008/9/26 8:51
頂部


Re: 請問C語言中如何加入組語??
#3
初級會員
初級會員


PSIR大,小弟試過用C寫沒結果,改用組語就沒問題所以會在程式中加入組語就是這原因!!仍然很感謝PSIR大的指點!~


請問板大,板大的所言,"儲存 C 得 BANK 資料後再切換 ,BANK 回到 C 前再 restore BANK 資料。"是什麼意思??是存STATUS的值嗎??那如果是BANKSEL EEADDR,BANKSEL後面是佔存器的話,又該怎麼做??小弟資質不好,還請板大詳加說明.

發表於: 2008/9/24 11:53

Edited by fbs1107 on 2008年09月24日 13:50:30
頂部


Re: 請問C語言中如何加入組語??
#4
初級會員
初級會員


PSIR大您好, 我有試著MOVLW、MOVWF 這類指令是可以編譯不會有錯,aa也可以看到我寫入的值0x43!!下一步,切頁可以用 C 來寫,該怎麼做??請大大指點

#asm

movlw 0x43;
movwf _aa;
#endasm

發表於: 2008/9/24 10:05
頂部


Re: 為什麼EEPROM寫不進去??
#5
初級會員
初級會員


可否在請教一下板大,板大所分享的範例中,組語可正常寫入執行,可是不知道未什麼C的範例就無法寫入?我也有試著用EEPROM_WRITE( ) 的函數,但是也是寫不進去?

程式如下
#include <htc.h>
void eetest(void)
{
unsigned char value = 0x10;
unsigned char address = 0x41;
// write value to EEPROM address
eeprom_write(address,value);

}

發表於: 2008/9/24 9:40
頂部


Re: 請問C語言中如何加入組語??
#6
初級會員
初級會員


PSIR大您好,我有試著在「使用的周邊名稱要在前面加上 _ 」,但是也是有錯誤訊息,訊息如下:
Error [845] D:\pic_test\try_writeEEPROM\try_writeEEPROM.c; 28. symbol "banksel" defined more than once
Error [876] D:\pic_test\try_writeEEPROM\try_writeEEPROM.c; 36. syntax error



我知道In-Line Assembly 好像不支援banksel之類的指令,程式內如果還是要用到這類指令該怎麼處理??小弟沒經驗還請大家指導一番...

發表於: 2008/9/24 9:35
頂部


Re: 請問C語言中如何加入組語??
#7
初級會員
初級會員


1.)請問板大,像下面的程式,我使用In-Line Assembly 的方式,為什麼還是編譯會有錯誤??是我In-Line Assembly用法錯誤了嗎?還是應該要再加入什麼??謝謝


void writeeeprom(void)
{
#asm
banksel EEADR;
movf DATA_EE_ADDR,W;
movwf EEADR;
movf DATA_EE_DATA,W;
movwf EEDATA;
banksel EECON1;
bcf EECON1,7,0;
bsf EECON1,2,0; bcf INTCON,1,0;
movlw 0x55;
movwf EECON2;
movlw 0xAA;
movwf EECON2;
bsf EECON1,1,0;
bsf INTCON,1,0;
bcf EECON1,2,0;
btfsc EECON1,1,0;
goto $-1

#endasm
}//

錯誤訊息如下:
Error [845] D:\pic_test\try_writeEEPROM\try_writeEEPROM.c; 25. symbol "banksel" defined more than once
Error [876] D:\pic_test\try_writeEEPROM\try_writeEEPROM.c; 27. syntax error
Error [876] D:\pic_test\try_writeEEPROM\try_writeEEPROM.c; 37. syntax error
Error [800] C:\DOCUME~1\thomasho\LOCALS~1\Temp\s4r8.; 250. undefined symbol "DATA_EE_ADDR"
Error [800] C:\DOCUME~1\thomasho\LOCALS~1\Temp\s4r8.; 256. undefined symbol "DATA_EE_DATA"
Error [800] C:\DOCUME~1\thomasho\LOCALS~1\Temp\s4r8.; 259. undefined symbol "EEDATA"
Error [800] C:\DOCUME~1\thomasho\LOCALS~1\Temp\s4r8.; 274. undefined symbol "EECON2"


2.)請問_asm與#asm用法有何不同?因為我使用出來錯誤訊息也不同,請板大解惑!!謝謝!!

發表於: 2008/9/23 15:31

Edited by fbs1107 on 2008年09月23日 16:02:19
頂部


Re: 請問C語言中如何加入組語??
#8
初級會員
初級會員


那再請問板大,C語言中可以呼叫C的函式,那在C中可以呼叫asm的函式嗎??

發表於: 2008/9/23 10:47
頂部


Re: 請問C語言中如何加入組語??
#9
初級會員
初級會員


感謝板大,小弟獲益良多!~~

發表於: 2008/9/23 10:16
頂部


Re: 為什麼EEPROM寫不進去??
#10
初級會員
初級會員


非常感謝板大與其他回覆的大大們,能看到EEPROM寫入東西,真是太好了!!特別是對我這種第一次接觸pic的人,真的很感謝!!

再問一個觀念的問題,板大說的"那兩行是定變數的位址",是不是每個變數都要設定位址??如果程式中變數很多,那不就前面整段程式都在做定變數位址??16f883變數位止的區域是多少??是70h~7Fh嗎??
不好意思,問的問題很基本!因為想說用C寫的話好像HitehC,會幫忙定變數位址,不用自己設!

謝謝!~

發表於: 2008/9/23 10:12
頂部



(1) 2 3 »



:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------