2011-04-20 1 views
2

J'utilise le PIC18F4550 de la micropuce avec le compilateur c: par défaut, la 'mémoire de programme' est utilisée, mais maintenant je veux utiliser la 'mémoire de données' car elle me donne beaucoup plus de fonctionnalités , peut enyone me dire comment puis-je que dans la langue du programme C.Activer la mémoire de données PIC 18F4550

que le code:

#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; 
} 

Répondre

2

les fiches techniques de cet appareil semblent indiquer que la mémoire de données est RAM statique, et qu'il n'y a pas de chemin de données à partir de là jusqu'à la logique de décodage d'instruction, c'est-à-dire que la mémoire de données ne peut pas être utilisée pour stocker le code de programme pour l'exécution. Si c'était votre objectif, vous n'avez pas de chance.

En termes d'allocation de stockage volatile, puisque la mémoire de programme ne semble pas inclure de RAM, je suppose que le compilateur C va automatiquement allouer toutes les variables, etc à partir du bélier de données. Cela ne laisse que le choix entre l'EEPROM "data" et le flash "programme" pour le stockage de données non volatiles (ou semi-volatiles). Là vous devrez peut-être creuser dans la documentation - cela pourrait être fait avec des pragmas de compilateur, ou un fichier de carte de linker, ou il pourrait être que l'accès doit être manipulé indirectement et explicitement par des registres.

+0

ok, merci pour votre réponse! – user717262

Questions connexes