2011-04-20 60 views
2

我正在使用PICmicEF®PIC18F4550與c編譯器:默認情況下使用'程序存儲器',但現在我想使用'數據存儲器',因爲它給了我更多的功能,可以enyone只是告訴我,我怎麼能要在程序語言C.啓用數據存儲器PIC 18F4550

,代碼:

#pragma code 
/******************************************************************************/ 

void main (void) 
{ 

    TRISD = 0x00;    // PORTD als uitgang 
    TRISB = 0b00110000;   // RB4 en RB5 als ingang 
    TRISA = 0x00;    // RA output 

    RCONbits.IPEN = 0;   // prioriteit uit 
    INTCONbits.GIE = 1;   // enable interrupt 
    INTCONbits.RBIE = 1;  // interrupt portB aan 

    while(1) 
    { 
     _asm sleep _endasm 
    } 
} 

#pragma interrupt ISR 
void ISR (void) 
{ 
    int rood[] = {0,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,}; 

    if (INTCONbits.RBIF==1) 
    { 
     if(PORTBbits.RB5==0)  // S3 ingedrukt ? 
     { 
      int i = 0; 
      int b; 
      do { 
       LATAbits.LATA2 = rood[i]; 
       LATDbits.LATD1 ^= 1; 
       b = 0; 
       do { 
        b++; 
       }while(b <= 1500); 

       i++; 
      }while(rood[i] <= 50); 

      //LATDbits.LATD1 ^= 1;  // D2 togglen 

     } 

    } 
    INTCONbits.RBIF = 0; 
} 

回答

2

此設備的數據表似乎表明,該數據存儲器是靜態RAM,和沒有從那裏到指令解碼邏輯的數據通路,即數據存儲器不能用於存儲用於執行的程序代碼。如果那是你的目標,那麼你運氣不好。

在分配易失性存儲方面,由於程序內存似乎沒有包含任何RAM,我猜測C編譯器會自動分配數據RAM中的所有變量等。

在「數據」EEPROM和「程序」閃存之間只存在用於存儲非易失性(或半易失性)數據的選擇。在那裏,你可能需要深入研究文檔 - 這可能是由編譯器編譯指示或鏈接器映射文件完成的,也可能是訪問必須通過寄存器進行間接處理和顯式處理。

+0

好的,謝謝你的回覆! – user717262 2011-04-20 19:21:29