Datos de tamaño de byte a datos de tamaño de palabra en MikroC con microcontrolador PIC

0

Intenté almacenar algunos datos de EEPROM en variables. Esas son variables de tamaño de bytes. Ahora quiero convertir ese código en una variable de Word porque quiero usar más de 255 valores.

El código variable de mi tamaño de byte funciona bien y el código variable de tamaño de palabra también se compila pero no funciona con el microcontrolador PIC16F887 en proteus.

Código variable de tamaño de byte:

unsigned short valuw1[5];
char valuw2[5];
unsigned int valreg=0;
unsigned int stv=0;
unsigned int lsv=0;
unsigned int valuc = 0;
unsigned char rel1[5],rel2[5],rel3[5],rel4[5],rel5[5],rel6[5];

void main(){
  shedno =  EEPROM_Read(0x00);
  shedno = 275 - shedno;
  delay_ms(50);
  valreg = shedno;

  WordToStr(shedno, shed);
  strcpy(shedfn, "S");
  strcat(shedfn, shed);
  stv = 6*valreg + 4;
  lsv = stv + 6;

  for(stv; stv<lsv; stv++){

      valuw1[stv] = EEPROM_Read(stv); 
      valuw1[stv] = valuw1[stv]; 
      ByteToStr(valuw1[stv], valuw2);
      delay_ms(50);
      if( valuc == 0) {
          strcpy(rel1, valuw2);
      } else if (valuc == 1){
          strcpy(rel2, valuw2);
      }else if (valuc == 2){
          strcpy(rel3, valuw2);
      }else if (valuc == 3){
          strcpy(rel4, valuw2);
      }else if (valuc == 4){
          strcpy(rel5, valuw2);
      }else if (valuc == 5){
         strcpy(rel6, valuw2);
      }
      delay_ms(100);
      valuc ++;
  }
}

Código de variable de tamaño de palabra:

unsigned valuw1[8];
char valuw2[8];
unsigned int valreg=0;
unsigned int stv=0;
unsigned int lsv=0;
unsigned int valuc = 0;
unsigned char rel1[8],rel2[8],rel3[8],rel4[8],rel5[8],rel6[8];

void main(){
  shedno =  EEPROM_Read(0x00);
  shedno = 275 - shedno;
  delay_ms(50);
  valreg = shedno;

  WordToStr(shedno, shed);
  strcpy(shedfn, "S");
  strcat(shedfn, shed);
  stv = 6*valreg + 4;
  lsv = stv + 6;

  for(stv; stv<lsv; stv++){

      valuw1[stv] = EEPROM_Read(stv); 
      valuw1[stv] = valuw1[stv] + 200; 
      WordToStr(valuw1[stv], valuw2);
      delay_ms(50);
      if( valuc == 0) {
          strcpy(rel1, valuw2);
      } else if (valuc == 1){
          strcpy(rel2, valuw2);
      }else if (valuc == 2){
          strcpy(rel3, valuw2);
      }else if (valuc == 3){
          strcpy(rel4, valuw2);
      }else if (valuc == 4){
          strcpy(rel5, valuw2);
      }else if (valuc == 5){
         strcpy(rel6, valuw2);
      }
      delay_ms(100);
      valuc ++;
  }
}

Las diferencias de ambos códigos son;

  • unsigned short valuw1[5]; Line
  • ByteToStr(valuw1[stv], valuw2); Line
  • valuw1[stv] = valuw1[stv] + 200; Line
  • medidores de variables

Muestro la variable rel1 a 6 en la pantalla LCD, pero no puedo ver ningún valor.

Me da los siguientes errores en Proteus

[PIC16 CORE] PC=0x0356. Indirect write of 0xFF to address 0x0080 is itself an indirect write. [U1]

[PIC16 CORE] PC=0x036E. Indirect write of 0xC8 to address 0x0000 is itself an indirect write. [U1]

Creo que el problema es los tamaños de variables.

Por favor, ayúdame a resolverlo.

    
pregunta Ind

0 respuestas

Lea otras preguntas en las etiquetas