Autor Tema: Agrego linea de codigo y deja de andar.  (Leído 5213 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ToRtUgOxX

  • PIC10
  • *
  • Mensajes: 10
Agrego linea de codigo y deja de andar.
« en: 13 de Marzo de 2012, 23:27:33 »
Estoy usando el MPLAB con hitech @ 16f877
En el main si agrego una linea de codigo, el programa deja de funcionar. Es alguna mala configuracion del Timer?
Por ejemplo la linea que esta comentada (//   PORTA=0x00;) , si  la descomento, compilo, programo y voy a la proto, el PORTB deja de titilar.
Lo mismo me pasa en el proteus.
Encambio si la comento ( una linea menos de codigo ) y programo, anda.
Les dejo el programa. Gracias.


Código: [Seleccionar]
#include <htc.h>
#include <pic.h>

__CONFIG(XT & WDTDIS & PWRTEN & BORDIS & LVPDIS & DUNPROT & WRTEN & DEBUGDIS & UNPROTECT  );




#define _XTAL_FREQ 4000000
#define TMR0_TICK 250
#define TMR0_PRESCALE 1 //(FOSC=16MHz,Prescale=3),(FOSC=4MHz,Prescale=1)
#define TMR0_RELOAD (255 - (TMR0_TICK-6))

void TMR0Init(void);

int count=1000;




void main (void)
{


TMR0Init();

TRISB=0x00;
ADCON1=0x06;
TRISA=0x00;
PORTA=0xff;
PORTA=0x00;
PORTA=0xff;
// PORTA=0x00;

while(1)
{
;
}
}

void TMR0Init()
{
TMR0 = 0; // Clear TMR0
INTCON = 0; // Disable all interrupts and clear T0IF
OPTION &= 0xC0; // Turn off least 6 bits to configure tmr0
OPTION |= TMR0_PRESCALE; // set prescaler to 1
TMR0=1;
T0IE = 1; // Enable TMR0 interrupt
GIE = 1; // Enable the global interrupt
}


void interrupt tmr0_isr(void)
{

if(TMR0IF)
{
TMR0 = TMR0_RELOAD;
count++;
if(count == 1000)
{
PORTB=~PORTB; //Toggles LED once per second
count = 0;
}
T0IF = 0;
}
}



Desconectado diguito_69

  • PIC16
  • ***
  • Mensajes: 136
Re: Agrego linea de codigo y deja de andar.
« Respuesta #1 en: 13 de Marzo de 2012, 23:50:04 »
Hola, te deja de andar si agregas esa línea en particular o otra línea diferente, produce el mismo error?. Aparece algún warning cuando compilas?.

Saludos.
"Carezco de un don especial. Sólo soy apacionadamente curioso". Albert Einstein.

Desconectado ToRtUgOxX

  • PIC10
  • *
  • Mensajes: 10
Re: Agrego linea de codigo y deja de andar.
« Respuesta #2 en: 13 de Marzo de 2012, 23:59:57 »
Si agrego cualquier otra linea,

La salida del programa es:

Citar
Build C:\Users\marco\Downloads\Proyectos\GLC\16f877\ohyeah for device 16F877
Using driver C:\Program Files (x86)\HI-TECH Software\PICC\lite\9.60\bin\picc.exe

Make: The target "C:\Users\marco\Downloads\Proyectos\GLC\16f877\main.obj" is out of date.
Executing: "C:\Program Files (x86)\HI-TECH Software\PICC\lite\9.60\bin\picc.exe" -C C:\Users\marco\Downloads\Proyectos\GLC\16f877\main.c -q --chip=16F877 -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error   [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
Executing: "C:\Program Files (x86)\HI-TECH Software\PICC\lite\9.60\bin\picc.exe" -oohyeah.cof -mohyeah.map --summary=default --output=default main.obj --chip=16F877 -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error   [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
HI-TECH PICC-Lite COMPILER (Microchip PICmicro) V9.60
Copyright (C) 1984-2006 HI-TECH SOFTWARE

Memory Usage Map:

Program space:
    CODE                 used    4Dh (    77) of   800h words   (  3.8%)
    CONST                used     0h (     0) of   800h words   (  0.0%)
    ENTRY                used    16h (    22) of   800h words   (  1.1%)
    STRING               used     0h (     0) of   800h words   (  0.0%)

Data space:
    BANK0                used     6h (     6) of    60h bytes   (  6.3%)
    BANK1                used     0h (     0) of    50h bytes   (  0.0%)
    COMBANK              used     1h (     1) of    10h bytes   (  6.3%)

EEPROM space:
    EEDATA               used     0h (     0) of   100h bytes   (  0.0%)

ID Location space:
    IDLOC                used     0h (     0) of     4h bytes   (  0.0%)

Configuration bits:
    CONFIG               used     1h (     1) of     1h word    (100.0%)

Summary:
    Program space        used    63h (    99) of   800h words   (  4.8%)
    Data space           used     7h (     7) of    B0h bytes   (  4.0%)
    EEPROM space         used     0h (     0) of   100h bytes   (  0.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)
    Configuration bits   used     1h (     1) of     1h word    (100.0%)

Loaded C:\Users\marco\Downloads\Proyectos\GLC\16f877\ohyeah.cof.

********** Build successful! **********

Desconectado ToRtUgOxX

  • PIC10
  • *
  • Mensajes: 10
Re: Agrego linea de codigo y deja de andar.
« Respuesta #3 en: 14 de Marzo de 2012, 00:10:59 »


Aca una imagen de lo que empieza a hacer el proteus, sin la linea comentada.
Esa direccion 0x001F es donde termina la ISR
Si la linea esta comentada ese error lo tira una sola vez, no como en la imagen que lleva 1239 y contando.

Desconectado diguito_69

  • PIC16
  • ***
  • Mensajes: 136
Re: Agrego linea de codigo y deja de andar.
« Respuesta #4 en: 14 de Marzo de 2012, 00:22:17 »
Me parece raro el problema, no uso MPLAB ni hitech, pero podrías subir el archivo .cof, haber si lo puedo abrir con piklab.

Saludos.
"Carezco de un don especial. Sólo soy apacionadamente curioso". Albert Einstein.

Desconectado ToRtUgOxX

  • PIC10
  • *
  • Mensajes: 10
Re: Agrego linea de codigo y deja de andar.
« Respuesta #5 en: 14 de Marzo de 2012, 01:36:40 »
Aca subo el archivo de proteus, y el proyecto.

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: Agrego linea de codigo y deja de andar.
« Respuesta #6 en: 14 de Marzo de 2012, 06:04:28 »
de todas formas, ese punto y coma que tienes dentro del while(1) no entiendo porque?.
También es cierto que no uso hitech, de todas formas es muy raro que te pase eso por que ya lo estas cambiando antes, has probado a no hacer tantas veces el cambio ese que haces al principio?, quiero decir, pon el porta a 0x00 directamente a ver si te falla, y también otra opción es que que pruebes a meter un delay (NOP) cortito antes del último cambio para ver que hace también.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Agrego linea de codigo y deja de andar.
« Respuesta #7 en: 14 de Marzo de 2012, 09:46:17 »
  Yo sí utilizo HiTech... aunque no sepa programar  :D :D :D

  Te cuento los poquitos cambios que hice... primero saque la sentencia "#include <pic.h>" ya que según el manual de HiTech es suficiente con dejar "#include <htc.h>" quien es quien determina que compilador usar.

  Segundo, efectivamente elimine el ";" y también las llaves dentro del while, quedando la línea así "while(1);"

  Y por último, la comparación en la interrupción quedó "if (count >= 1000)". Eso lo dejo así para asegurarme que no haya alguna cuenta de más que no es tomada (por algún motivo "extraño") y entonces se vayan los tiempos... De hecho, inicializas la variable "count" con el valor 1000, por lo tanto el primer ingreso a la interrupción se va a incrementar pero no va a ser tenido en cuenta por el if y por lo tanto pasara mucho tiempo hasta que entre al if.... el desborde de la variable 65536 más otra vez una cuenta de 1000.

  Lo simulé en ISIS 7.8 y funcionó perfecto....

Código: C
  1. #include <htc.h>
  2.  
  3. __CONFIG(XT & WDTDIS & PWRTEN & BORDIS & LVPDIS & DUNPROT & WRTEN & DEBUGDIS & UNPROTECT  );
  4.  
  5.  
  6. #define _XTAL_FREQ 4000000
  7. #define TMR0_TICK        250
  8. #define TMR0_PRESCALE 1  //(FOSC=16MHz,Prescale=3),(FOSC=4MHz,Prescale=1)
  9. #define TMR0_RELOAD (255 - (TMR0_TICK-6))
  10.  
  11. void TMR0Init(void);
  12.  
  13. int     count=1000;
  14.  
  15.  
  16.  
  17.  
  18. void    main    (void)
  19. {
  20.        
  21.  
  22.         TMR0Init();    
  23.  
  24.         TRISB=0x00;
  25.         ADCON1=0x06;
  26.         TRISA=0x00;
  27.         PORTA=0xff;
  28.         PORTA=0x00;
  29.         PORTA=0xff;
  30.         PORTA=0x00;
  31.  
  32.         while(1);
  33. }
  34.  
  35. void TMR0Init()
  36. {
  37. TMR0 = 0;        // Clear TMR0
  38. INTCON = 0;      // Disable all interrupts and clear T0IF
  39. OPTION &= 0xC0;  // Turn off least 6 bits to configure tmr0
  40. OPTION |= TMR0_PRESCALE;        // set prescaler to 1
  41. TMR0=1;
  42. T0IE = 1;        // Enable TMR0 interrupt
  43. GIE = 1;         // Enable the global interrupt
  44. }
  45.  
  46.  
  47. void interrupt tmr0_isr(void)
  48. {
  49.  
  50. if(TMR0IF)
  51.                         {      
  52.                         TMR0 = TMR0_RELOAD;    
  53.                         count++;
  54.                         if(count >= 1000)
  55.                                         {
  56.                                         PORTB=~PORTB;    //Toggles LED once per second
  57.                                         count = 0;
  58.                                         }                      
  59.                         T0IF = 0;
  60.                         }
  61. }

  Me olvidaba... en tu imagen no veo la resistencia hacia VCC desde el pin MCLR.
« Última modificación: 14 de Marzo de 2012, 09:48:26 por AngelGris »
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado ToRtUgOxX

  • PIC10
  • *
  • Mensajes: 10
Re: Agrego linea de codigo y deja de andar.
« Respuesta #8 en: 14 de Marzo de 2012, 12:45:46 »
Realice los cambios y sigue igual, si le agrego mas codigo.
Proba del codigo modificado, agregarle 2 lineas mas en el main. Deja de funcionar en el simulador y en la proto.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Agrego linea de codigo y deja de andar.
« Respuesta #9 en: 14 de Marzo de 2012, 13:08:57 »
  Acabo de agregar al main las siguientes líneas y sigue funcionando bien

Código: C
  1. PORTA=0xff;
  2. PORTA=0x00;
  3. PORTA=0xff;
  4. PORTA=0x00;
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado ToRtUgOxX

  • PIC10
  • *
  • Mensajes: 10
Re: Agrego linea de codigo y deja de andar.
« Respuesta #10 en: 14 de Marzo de 2012, 15:24:42 »
Pegas el codigo que usastes Angel Gris?
Al que esta mas arriba si le agrego esas cuatro lineas mas, no anda. Probado en la protoboard y el proteus. A mi tambien me parece algo raro...

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Agrego linea de codigo y deja de andar.
« Respuesta #11 en: 14 de Marzo de 2012, 15:27:05 »
  El código es justamente ése que dejé anteriormente más el agregado de las líneas ya mencionadas. Estoy usando la versión 9.8 del compilador. Como IDE estoy usando PikLab bajo Kubuntu... simulándolo en Proteus 7.8 con wine.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado ToRtUgOxX

  • PIC10
  • *
  • Mensajes: 10
Re: Agrego linea de codigo y deja de andar.
« Respuesta #12 en: 14 de Marzo de 2012, 16:21:44 »
Instale el MPLAB 8.84 ( estaba en 8.83 )
Y el hitech 9.83 ( estaba en 9.60 )
Y ahora si anda, no estoy loco  :-/  jaja
Gracias a todos por molestarse  ((:-))

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Agrego linea de codigo y deja de andar.
« Respuesta #13 en: 14 de Marzo de 2012, 16:24:19 »
  Qué bueno que ya esté todo bien  :-/ :-/ :-/  Seguramente era debido a la versión de HiTech que estabas utilizando
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado diguito_69

  • PIC16
  • ***
  • Mensajes: 136
Re: Agrego linea de codigo y deja de andar.
« Respuesta #14 en: 14 de Marzo de 2012, 17:05:30 »
Que bueno que lo solucionaste, puede haber sido un bug de la versión que tenias del compilador.
"Carezco de un don especial. Sólo soy apacionadamente curioso". Albert Einstein.


 

anything