Código en C funciona en Proteus pero no en protoboard

Hola a todos, mi problema es el siguiente: Hice un pequeño programa mediante el lenguaje c que emula el funcionamiento de un codificador cíclico, el compilador que usé fue el de CCS y cuando lo simulo con Proteus funciona perfecto. Pero cuando programo el pic (16f887), este hace que salgan puros 1s lógicos, por lo que todos los leds por donde debería salir la palabra código se prenden, lo cuál es incorrecto ya que dependiendo la palabra codificada estos se prenden o apagan.

El código es el siguiente:

#include <16f887.h>
#fuses INTRC_IO, NOWDT, NOPUT, BROWNOUT, NOMCLR, NOLVP
#use delay(clock=8000000)

signed int u[5] = {0,0,0,0,0};
signed int n = 15, k = 5, i, buffer = 0;
signed int c[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

void main(){

setup_oscillator(OSC_8MHZ|OSC_INTRC);

set_tris_A(0b00011111);
set_tris_B(0b00000000);
set_tris_C(0b00000000);

delay_ms(250);

u[0] = input(PIN_A0);
u[1] = input(PIN_A1);
u[2] = input(PIN_A2);
u[3] = input(PIN_A3);
u[4] = input(PIN_A4);

delay_ms(250);

for(i=0;i<k;i++){
c[10+i] = u;
}

for(i=k-1;i>=0;i--){

buffer = c[9] ^ u;
c[9] = c[8];
c[8] = c[7] ^ buffer;
c[7] = c[6];
c[6] = c[5];
c[5] = c[4] ^ buffer;
c[4] = c[3] ^ buffer;
c[3] = c[2];
c[2] = c[1] ^ buffer;
c[1] = c[0] ^ buffer;
c[0] = buffer;
}

delay_ms(500);

output_bit(PIN_A5,c[0]);
output_bit(PIN_A6,c[1]);
output_bit(PIN_A7,c[2]);
output_bit(PIN_B0,c[3]);
output_bit(PIN_B1,c[4]);
output_bit(PIN_B2,c[5]);
output_bit(PIN_B3,c[6]);
output_bit(PIN_B4,c[7]);
output_bit(PIN_B5,c[8]);
output_bit(PIN_B6,c[9]);
output_bit(PIN_B7,c[10]);
output_bit(PIN_C0,c[11]);
output_bit(PIN_C1,c[12]);
output_bit(PIN_C2,c[13]);
output_bit(PIN_C3,c[14]);

}

Muchas gracias por la ayuda.
 
Hola a todos, mi problema es el siguiente: Hice un pequeño programa mediante el lenguaje c que emula el funcionamiento de un codificador cíclico, el compilador que usé fue el de CCS y cuando lo simulo con Proteus funciona perfecto. Pero cuando programo el pic (16f887), este hace que salgan puros 1s lógicos, por lo que todos los leds por donde debería salir la palabra código se prenden, lo cuál es incorrecto ya que dependiendo la palabra codificada estos se prenden o apagan.

El código es el siguiente:

void main(){

setup_oscillator(OSC_8MHZ|OSC_INTRC);
ANSEL = ANSELH = 0; // <-- Puerto A y Puerto B como digitales
set_tris_A(0b00011111);
set_tris_B(0b00000000);
set_tris_C(0b00000000);

Muchas gracias por la ayuda.
Saludos licuadolala
Yo no programo los PIC en C, pero veo que a tu código le falta configurar los puertos A y B como digitales.
Agrega las declaraciones que puse en azul y con eso te debe funcionar.

Suerte.
 
En CCS la configuración de puertos es media engorrosa. Tenés 2 opciones:

1 - Eliminar de tu programa:

Código:
set_tris_A(0b00011111);
set_tris_B(0b00000000);
set_tris_C(0b00000000);

Con lo cuál CCS, automáticamente, configurará los puertos antes de que los uses en una sentencia del tipo
Código:
output_bit
o
Código:
input

Aclaro que esta forma consume más memoria RAM y ROM por que tiene que generar una configuración de puerto cada vez que querés acceder a ellos, tanto sea como entrada o como salida.

2 - Usar #use FAST_IO en tu programa en conjunto con set_tris_x para configurar los puertos de forma manual y consumir menos RAM.

Ambas opciones se encuentran en la ayuda del compilador.

Saludos !
 
Atrás
Arriba