2011-04-20 41 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