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.
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.