Autor Tema: no puedo parar al serial!  (Leído 2304 veces)

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

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
no puedo parar al serial!
« en: 12 de Abril de 2007, 20:13:00 »
Amigos : estoy tratando de concluir con un programa que controla la comunicacion serial entre la pc y un cartucho de memoria con un pic 18f452 y 7 fram de 32k

el asunto de escritura y lectura lo tengo solucionado ya que al hacer un for de escritura y un for con print de lectura , hace lo correcto inclusive cambiando el chip select.

Mi problema es que ese cartucho debe recibir informacion desde el puerto serie , y trabajando con el monitor del puerto serie con el macro manager , no puedo
lograr que el getc () tome de a un byte a la vez , lo procese y requiera el siguiente.

si le doy una orden de un byte repetidamente , lo procesa , pero yo necesito que administre la llegada de miles de bytes y lo guarde en memoria hasta que reciba fin de archivo.

pd : lei el articulo de redpic hasta en el baño , pero no le encuentro la vuelta ...

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: no puedo parar al serial!
« Respuesta #1 en: 12 de Abril de 2007, 20:37:33 »
aca incluyo el archivo...

#include "cart.h"


void main( )
{
 

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);

   setup_spi ( SPI_MASTER | SPI_L_TO_H | SPI_XMIT_L_TO_H |SPI_CLK_DIV_64 |SPI_SAMPLE_AT_END);

   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
  // enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   setup_oscillator(False);

   porta = 0b00000000 ; trisa = 0b00000100 ;
   portb = 0b00111111 ; trisb = 0b00000000 ;
   portc = 0b00000000 ; trisc = 0b11010000 ;
   portd = 0b11111111 ; trisd = 0b00000000 ;
   porte = 0b00000000 ; trise = 0b00000000 ;   

   delay_ms ( 40 ) ;
   fm25256_reset ( ) ;
   delay_ms ( 40 ) ;

   printf ( "Hola\r\n" ) ;

   while ( true )
   {         
      domi  = 0 ; chip = 0 ; u = 0 ;            // inicializo las variables por las dudas...
     
      for ( chip = 0 ; chip < 7 ; chip++ )      // para las 7 memorias
      {       
          for ( domi = 0 ; domi < 32000  ; domi++  ) // que recorra los domicilios de la memoria
          {
                           
               u = getc ( ) ;                                        // recibe caracter del rs232           
               fm25256_wr_en ( chip );                       // maniobra para la escritura ( opcode etc)
               fm25256_wr_data ( chip , domi , u ) ;    // escribo en el chip , memoria y dato ( u )           
               if ( u == 0xf8 ) goto aqui ;                   // si coincide con fin de archivo....       
           }
      }

   aqui:
 
   ///////////////////////// recorro y hago el print de la lectura//////////////////////////////////   
   domi  = 0 ; chip = 0 ; u = 0 ;
 
          for ( chip = 0 ; chip < 7 ; chip++ )
          {
             for ( domi = 0 ; domi < 32000  ; domi++  )
             {               
               u = fm25256_rd_data ( chip , domi ) ;
               printf ( "leo en chip:%u  memoria:%lu  dato:%0x\r\n" , chip , domi , u ) ;
               if ( u == 0xf8 ) goto fin ;               
             }   
          }
fin:;     
   }
}

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: no puedo parar al serial!
« Respuesta #2 en: 13 de Abril de 2007, 13:48:49 »
prueba colocando la función kbhit así:

if(kbhit()) {
    u = getc();
...

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: no puedo parar al serial!
« Respuesta #3 en: 13 de Abril de 2007, 17:07:41 »
gracias por contestar!

una pregunta : si yo le mando a traves de la terminal serie una cadena de caracteres ( varios bytes juntos ) , la funcion kbhit ( ) es capaz de hacerle tomar un solo caracter  a getc() y despues parar la transmision hasta el proximo ?

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: no puedo parar al serial!
« Respuesta #4 en: 13 de Abril de 2007, 17:17:58 »
ajá, si lees en la página 155 del ccs_manual.pdf veras que getc retorna un carácter (1 byte) y para evitar lecturas erroneas, debes esperar a que el buffer de entrada contenga el dato que llega, y esto se hace con kbhit (ver página 173)


La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: no puedo parar al serial!
« Respuesta #5 en: 13 de Abril de 2007, 20:27:51 »
gracias por el dato!! no conocia ese manual


 

anything