Re: 類8051組合語言與c語言的問題
|
||||
---|---|---|---|---|
資深會員
|
建議直接使用PIC18452+APP001,可以先用C18SE開發,比較方便。
PIC16其實用組語開發就行了,由於PICC要錢的緣故,除非功能寫得很複雜,不然用demo版看list檔參考人家編譯器編譯的碼其實就很夠了。
發表於: 2005/6/17 19:04
|
|||
|
訪客
|
Re: PIC18F 內部EEPROM讀寫函式
|
|||
---|---|---|---|---|
訪客-訪客
|
歹勢
那個範例程式我也試過了, 就是因為不行才改成目前這個樣子. 不知是否有其他該注意的細節沒注意到... 你指的是這個嗎? void EE_Write (unsigned int EE_Address, unsigned char EE_Data) { PIR2bits.EEIF = 0; EEADRH = (EE_Address>>8) & 0xFF; EEADR = EE_Address & 0xFF; EEDATA = EE_Data; EECON1bits.EEPGD = 0; EECON1bits.WREN = 1; INTCONbits.GIE = 0; _asm MOVLW 0X55 MOVWF EECON2,0 MOVLW 0XAA MOVWF EECON2,0 BSF EECON1,1,0 _endasm INTCONbits.GIE = 1; while (!PIR2bits.EEIF); PIR2bits.EEIF = 0; EECON1bits.WREN = 0; } unsigned char EE_Read (unsigned int EE_Address) { EEADRH = (EE_Address>>8) & 0xFF; EEADR = EE_Address & 0xFF; EECON1bits.EEPGD = 0; EECON1bits.RD = 1; return EEDATA; } |
|||
|
Re: PIC18F 內部EEPROM讀寫函式
|
||||
---|---|---|---|---|
高級會員
|
可參考左邊的檔案下載區中就有範例程式
發表於: 2005/6/17 17:40
|
|||
人生最長久的擁有是珍惜 但是大都在失去後才發現
|
||||
|
訪客
|
Re: PIC18F 內部EEPROM讀寫函式
|
|||
---|---|---|---|---|
訪客-訪客
|
EEDATA = WREG;
本來也是沒加,一樣不行. 加了還是不行. 傷腦筋... |
|||
|
Re: PIC18F452之Configuration Bit如何設定
|
||||
---|---|---|---|---|
中級會員
|
謝啦 ......感恩
發表於: 2005/6/17 16:41
|
|||
|
Re: PIC18F 內部EEPROM讀寫函式
|
||||
---|---|---|---|---|
資深會員
|
參照:
抱歉~~說聲明 我沒寫過18的EEPROM讀寫喔, 個人是覺得讀取EEDATA 應該不需要加 EEDATA = WREG; 這一行吧
發表於: 2005/6/17 16:37
|
|||
|
Re: PIC16F73 程式記憶體頁的切換問題
|
||||
---|---|---|---|---|
中級會員
|
參照:
假設我PAGE0及PAGE1內的Lable會跳PAGE使用或在同一PAGE使用,是否可以每個Lable都加上pagesel? 若很不巧的,某個Lable剛好是開頭在PAGE0結束PAGE1的話,是否會有影響?
發表於: 2005/6/17 16:12
|
|||
|
訪客
|
PIC18F 內部EEPROM讀寫函式
|
|||
---|---|---|---|---|
訪客-訪客
|
請各位先進幫我看一下PIC 18F 內部EEPROM讀寫函式是否有誤, 因為寫入及讀出資料不正確, 謝謝!
unsigned char ReadEEPChar(int Addr) { EEADRH = Addr / 256; EEADR = Addr % 256; //Disable Interrupt INTCONbits.GIE = 0; EECON1bits.EEPGD = 0; //EECON1bits.CFGS = 0; EECON1bits.RD = 1; EEDATA = WREG; //Enable Interrupt INTCONbits.GIE = 1; return(EEDATA); } bool WriteEEPChar(int Addr, unsigned char wrData) { int writetimes = 0; unsigned long counter; // 寫入至多5次, 以防止寫入失敗 do { EEADRH = Addr / 256; EEADR = Addr % 256; EEDATA = wrData; EECON1bits.EEPGD = 0; EECON1bits.WREN = 1; //Disable Interrupt INTCONbits.GIE = 0; EECON2 = 0x55; EECON2 = 0xaa; EECON1bits.WR = 1; //Enable Interrupt INTCONbits.GIE = 1; counter = 0; while(PIR2bits.EEIF == 0) { counter++; if (counter > 0xfffe) break; } EECON1bits.WREN = 0; PIR2bits.EEIF = 0; if (counter > 0xfffe) writetimes++; else return true; }while (writetimes < 5); return false; } |
|||
|
Re: 奇怪,,,奇怪......好奇怪??
|
||||
---|---|---|---|---|
版主
|
也許在main1的前一行,加上
call pause_250ms 您的問題就解決了。 我的理論是:原來的程式,在送電後,電源還不沒到很穩定的定位時,,它就開始點LED。於是,耗電造成瞬間壓降;PIC想要重置,電壓卻又降得不夠低,重置不良,就當了。 加一些delay,等電壓穩了,再點LED,就沒事了。
發表於: 2005/6/17 12:04
|
|||
|