Problema con este codigo

TENGO UN PROBLEMA CON ESTE CODIGO


#include "C:\Archivos de programa\PICC\Devices\16F877A.h"
#FUSES NOWDT, NOLVP //, INTRC
#USE delay (clock=4000000)
#USE standard_io(B)

///PROGRAMA
void main(void)
{
int i;
int const tabla1 [10] ={0x3F, 6, 0x5b, 0x4F, 0x66, 0x6d, 0x7d, 7, 0x7f, 0x67}; //7seg hex 0-9

set_tris_b(0); //portb como salida
//disable_interrupts(GLOBAL); //todas las interrupciones desactivadas
do{
for(i=9;i>=0;i--) //bucle...
{ output_b( tabla1 ); //muestra por portb digito 7 segmentos
delay_ms(200);
}
}while(TRUE); //...infinito
}



ME DECREMENTA MUY BIEN PERO SE QUEDA EN 0 Y YA NO HACE NADA MAS.. NOSE PORQUE NO SALE DEL BUCLE.. DERREPENTE ME EQUIVOQUE EN ALGO

AYUDA PLZ
 
Posiblemente ese compilador te define la variable integer como unsigned int, o sea que no tiene negativos. Es lo que se me ocurre, prueba:

for(i=10;i>0;i--) //bucle...
{ output_b( tabla1[i-1] ); //muestra por portb digito 7 segmentos
delay_ms(200);
}

De todas maneras, no tiene mucho sentido lo que programas ya que lo único que te muestra es un "0", el for lo pasa un pocos microsegundos y lo único que hace que puedes ver el resultado es cuando esta procesando el delay.
 
Última edición:
Yo nunca programé pics (solo AVRs), pero me parece que el problema puede ser que al contar de 9 a 0, sale del for() y cuando verifica la condición del DO while(TRUE), posiblemente encuentre la condición de salida del bucle externo, pues yo no veo cual es el valor de TRUE (si TRUE fuera cero, entonces sale del do while y se acaba todo).
 
AMIGO ERES UN TROME.. output_b( tabla1[i-1] ) NO ME FUNCIONO PERO LE AGREGE SIGNED INT Y ME SOLUCIONO.. la programacion es basica es un decrementador pero esque cuando no me sale algo me pongo recontra terco... un saludo DESDE PERU

Gracias ya lo solucione!! Que rapido las respuestas
 
Atrás
Arriba