elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problemas al LEER los datos por comunicación serial con CCS
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas al LEER los datos por comunicación serial con CCS  (Leído 2,916 veces)
CIBERIK

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Problemas al LEER los datos por comunicación serial con CCS
« en: 26 Febrero 2016, 01:41 am »

hola amigos tengo una duda referente a un programa de lectura de datos que proviene del computador , este ocupando el protocolo serial, usando el PIC16f628a

quiero recibir 5 datos y mostrarlos en 4 display de 7 segmentos, hastaahora tengo un programa que lee los datos, pero cunado hago la segunda lectura el programa se bloquea...estoy buscando el error para correguir el problema

dejo el codigo, para que puedan orientar con el programa,a porfavor

Código
  1.    #include <16f628A.H>
  2.    #fuses NOMCLR
  3.    #fuses INTRC_IO
  4.    #FUSES NOWDT                    //No Watch Dog Timer
  5.    //#FUSES XT                     //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
  6.    #FUSES NOPUT                    //No Power Up Timer
  7.    #FUSES NOPROTECT                //Code not protected from reading
  8.    #FUSES NOBROWNOUT               //No brownout reset
  9.    #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  10.    #FUSES NOCPD                    //No EE protection
  11.    #FUSES RESERVED                 //Used to set the reserved FUSE bits
  12.    #use delay (clock=4000000)
  13.    #use rs232(baud=9600, xmit=pin_B2, rcv=pin_B1)
  14.    #define display_1     PIN_B4
  15.    #define display_2     PIN_B5
  16.    #define display_3     PIN_B6
  17.    #define display_4     PIN_B7
  18.    #use     fast_io(b)        // Para usar el puerto b como I/O Estándar (Con TRISB)
  19.  
  20. // NUMEROS [0-9] = [ 0  , 1  , 2  , 3  , 4  , 5  , 6  , 7 ,  8  , 9 ]
  21. int Numeros[10]  = {0X00,0X01,0X02,0x03,0x04,0x05,0X06,0x07,0X08,0x09};
  22.  
  23. int8 Unidad_1=0;
  24. int8 Decena_1=0;
  25. int8 Unidad_2=0;
  26. int8 Decena_2=0;
  27. int tiempo=1;
  28. /////////////////////////////////////////////////////////////////////////
  29. /// DECLARACIONES QUE NO ESTOY SEGURO/////////////////////
  30. char trama_serial[5];
  31. int1 flag_rx = 0;  
  32. volatile int indice=0;
  33. #INT_RDA
  34. void RECEPCION_RS232(void)
  35. {
  36.   trama_serial[indice]= getc();
  37.   indice++;
  38.   flag_rx = 1;  
  39. }
  40.  
  41. void main(void)
  42.  
  43. {
  44.  
  45. set_tris_b(0b00001011);
  46. enable_interrupts(INT_RDA);
  47. enable_interrupts(GLOBAL);
  48.  
  49. while (true){
  50.  
  51.        //// SEPARO LA TRAMA 12&34
  52.         Decena_1 = ((trama_serial[0])-48); Unidad_1 = ((trama_serial[1])-48);
  53.         Decena_2 = ((trama_serial[3])-48); Unidad_2 = ((trama_serial[4])-48);
  54.  
  55.  
  56.         // Muestro el display 1 - DIGITO [1] 2 & 3 4
  57.         output_b(0x10);
  58.         output_a(Numeros[Decena_1]);
  59.         delay_ms(tiempo);
  60.  
  61.         // Muestro el display 2 - DIGITO 1 [2] & 3 4
  62.         output_b(0x20);
  63.         output_a(Numeros[Unidad_1]);
  64.         delay_ms(tiempo);
  65.  
  66.         // Muestro el display 3 - DIGITO 1 2 & [3] 4
  67.         output_b(0x40);
  68.         output_a(Numeros[Decena_2]);
  69.         delay_ms(tiempo);
  70.  
  71.         // Muestro el display 4 - DIGITO 1 2 & 3 [4]
  72.         output_b(0x80);
  73.         output_a(Numeros[Unidad_2]);
  74.         delay_ms(tiempo);
  75.  
  76.   }
  77. }
  78.  
  79.  


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problemas al LEER los datos por comunicación serial con CCS
« Respuesta #1 en: 26 Febrero 2016, 23:00 pm »

Veo que usas indice volátil pero nadie mas que el propio programa te lo va a cambiar así que debería ser una variable normal.

indice de RECEPCION_RS232, en teoría va de 0 a 4 pero cuándo superas el límite superior no hay nada que lo haga volver a 0 con lo que continuará con 5, 6,... y sobreescribiendo a zonas posteriores de memoria de forma descontrolada.

Tal como usas el programa deberías cambiar los
Código
  1. #define display_1     PIN_B4
por
Código
  1. #define display_1     0x01
y sucesivamente con los demás defines para usar
Código
  1. output_b(display_1);


En línea

CIBERIK

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Problemas al LEER los datos por comunicación serial con CCS
« Respuesta #2 en: 28 Febrero 2016, 01:31 am »

gracias amigo por responder

 pero lo que me indicas no lo estoy ocupando en el programa, se me quedo escrito...esas instrucciones la cambie por :



Código
  1. // Muestro el display 1 - DIGITO [1] 2 & 3 4
  2.         output_b(0x10);
  3.         output_a(Numeros[Decena_1]);
  4.         delay_ms(tiempo);
  5.  
  6.         // Muestro el display 2 - DIGITO 1 [2] & 3 4
  7.         output_b(0x20);
  8.         output_a(Numeros[Unidad_1]);
  9.         delay_ms(tiempo);
  10.  
  11.         // Muestro el display 3 - DIGITO 1 2 & [3] 4
  12.         output_b(0x40);
  13.         output_a(Numeros[Decena_2]);
  14.         delay_ms(tiempo);
  15.  
  16.         // Muestro el display 4 - DIGITO 1 2 & 3 [4]
  17.         output_b(0x80);
  18.         output_a(Numeros[Unidad_2]);
  19.         delay_ms(tiempo);
  20.  


aun trato estoy de de sacar la fala
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines