Autor Tema: Comandos hexadecimales en CCS por el puerto serie  (Leído 14779 veces)

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

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: Comandos hexadecimales en CCS por el puerto serie
« Respuesta #15 en: 22 de Marzo de 2008, 04:55:41 »
Me parece raro porque dice que hace printf("%X",0x1E) y cuando monitorea la salida del pic le sale el valor 30 en lugar de 1E.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Comandos hexadecimales en CCS por el puerto serie
« Respuesta #16 en: 22 de Marzo de 2008, 04:58:07 »
Claro, es que si hace eso lo primero que sale es un "1", o lo que es igual, 0x30.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: Comandos hexadecimales en CCS por el puerto serie
« Respuesta #17 en: 22 de Marzo de 2008, 05:06:19 »
El 1 es 0x31

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Comandos hexadecimales en CCS por el puerto serie
« Respuesta #18 en: 22 de Marzo de 2008, 05:18:49 »
¡Glub!, olvídalo, es que aún no he tomado mi dosis.  :?

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: Comandos hexadecimales en CCS por el puerto serie
« Respuesta #19 en: 22 de Marzo de 2008, 05:25:47 »
Nada Manolo, gusto con charlar contigo esta mañana.

Podríamos decirle a scientist que pusiera el programa a ver si lo sacamos del apuro, que seguramente será una tontería, que la mayor parte de las veces son las más dificiles de pillar.

Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: Comandos hexadecimales en CCS por el puerto serie
« Respuesta #20 en: 22 de Marzo de 2008, 12:55:26 »
ok amigos voy a probar como ustedes dicen,una vezmas gracias por tomarse el tiempo,de verdad que gracias,ahora mismo les digo
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....

Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: Comandos hexadecimales en CCS por el puerto serie
« Respuesta #21 en: 22 de Marzo de 2008, 13:11:28 »
primero que nada gracias,el problema esta resuelto como decian ustedes,ya que mando:
printf("%c%c%c",0x1E,0x00,0x1C);
manda los valores hexadecimales correspondientes : 1E,00,1C
pero al mandar
printf("%X",0x1E);
recibo: 31, 45, esto quiere decir que 31=1,E=45,cosa chistosa no?, bueno creo que solo me queda decir , tenian razon, jejejeje, gracias amigos
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Comandos hexadecimales en CCS por el puerto serie
« Respuesta #22 en: 22 de Marzo de 2008, 13:31:49 »
Ahora que ya he tomado mi dosis, tengo que decir que los dos resultados que has obtenido son coherentes.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: Comandos hexadecimales en CCS por el puerto serie
« Respuesta #23 en: 22 de Marzo de 2008, 17:01:32 »
Pués a mí me ha descolocao. Tanto que me he ido a PROTEUS a probarlo y con printf("%X",0x1E); el VTERM recibe 1E.

En fin me gustaria saber que está pasando. Podrías poner el programa?

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Comandos hexadecimales en CCS por el puerto serie
« Respuesta #24 en: 22 de Marzo de 2008, 17:21:52 »
Efectivamente recibes dos caracteres "1E" al poner "%X", ya que recibes el texto "1E" y si pones "%c" recibes un solo caracter que es el caracter "1E".

Un saludo.
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: Comandos hexadecimales en CCS por el puerto serie
« Respuesta #25 en: 23 de Marzo de 2008, 02:12:08 »
Vale, al final me había liado yo también. Ahora veo claro cual ha sido el principio de toda esta fiesta.

Inicialmente scientist había dicho:

ok, una cuestion mas, tal vez no me explique bien que es lo que pretendia hacer, es en si mandar estos datos hexadecimales: 1E 00 0C D1 00 07 00 01 00 03 00 01 60 00 72 D7,pero al poner
printf("%X%X%X%X%X%X%X",0x1E,0X00,etc.....);
cuando monitoreo la salida del pic me sale los valores 30 4F
31 61 etc... esto quiere decir que solo lo que hace es convertir el 0 en 30 y asi sucesivamente, lo hice con putc(0x00) y ahi si que me da el valor en hexa, pero no me deja poner una cadena de datos en un mismo putc, como puedo hacer esto? por favor,ya llevo dos dias rompiendome la cabeza si pudieran ayudarme un poquito

... y esto confundió a Manolo ya que tenía que haber dicho que recibía 31 45 etc

En esta segunda intervención scientist ya lo ha dicho bien:

primero que nada gracias,el problema esta resuelto como decian ustedes,ya que mando:
printf("%c%c%c",0x1E,0x00,0x1C);
manda los valores hexadecimales correspondientes : 1E,00,1C
pero al mandar
printf("%X",0x1E);
recibo: 31, 45
, esto quiere decir que 31=1,E=45,cosa chistosa no?, bueno creo que solo me queda decir , tenian razon, jejejeje, gracias amigos

... y ahora me había liao yo.

¡ Problema aclarado !

Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: Comandos hexadecimales en CCS por el puerto serie
« Respuesta #26 en: 23 de Marzo de 2008, 02:13:23 »
aqui mando el programa,lo que pasa con proteus a mi tambien me paso y es por eso que me confundia al poner el serial monitor y no era lo que me mandaba el proteus, esto pense,por que el proteus su virtual terminal esta como ascci,es por eso que los caracteres al poner printf("%X",0x1E), lo saca como 1E,pero en realidad lo estas viendo como ascci,
#FUSES HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=16934411)
#use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#use standard_io(b)
#byte porta=5
char dato;
int1 flag;

//////////////////////interrupciones!!!!!!!!!!!!!!!!
#int_rda
void secuencia(){

dato=0x00;
  if(kbhit()){
 
    dato=getc();
   
  }
}

///////////////////////   

#int_EXT
void interrupcion_isr(){
flag=1;

}

//////////////////////funciones/////////////////////////
///////////////////sincronizacion////////////////
enter(){
printf("%c%c%c%c%c%c%c%c%c%c",0x1E,0x00,0x0C,0xD1,0x00,0x07,0x00,0x01,0x00,0x03);
printf("%c%c%c%c%c%c",0x00,0x01,0x60,0x00,0x72,0xD7);
}
//////////////////////////////////////////////1E 00 0C D1 00 07 00 01 00 03,00 01 60 00 72 D7
llamar(){
printf("%c%c%c%c%c%c%c%c%c%c",0x1E,0x00,0x10,0x01,0x00,0x23,0x00,0x01,0x00,0x01);
printf("%c%c%c%c%c%c%c%c%c%c",0x0A,0x00,0x39,0x00,0x38,0x00,0x31,0x00,0x31,0x00);
printf("%c%c%c%c%c%c%c%c%c%c",0x30,0x00,0x35,0x00,0x34,0x00,0x32,0x00,0x31,0x00);
printf("%c%c%c%c%c%c%c%c%c%c",0x38,0x05,0x01,0x05,0x00,0x02,0x00,0x00,0x01,0x01);
printf("%c%c%c%c",0x61,0x00,0x6E,0x21);
}

//1E 00 10 01 00 23 00 01 00 01,
//0A 00 39 00 38 00 31 00 31 00,
//30 00 35 00 34 00 32 00 31 00,
//38 05 01 05 00 02 00 00 01 01,
//61 00 6E 21
/////////////////////////////////////
cortar(){
printf("%c%c%c%c%c%c%c%c%c%c",0x1E,0x00,0x0C,0x01,0x00,0x07,0x00,0x01,0x00,0x08);
printf("%c%c%c%c%c%c",0x60,0x01,0x63,0x00,0x11,0x0E);
}
////////1E 00 0C 01 00 07 00 01 00 08 ,60 01 63 00 11 0E
/////////////////////////////////////////////programa///////////////////////////
   void main(){
   delay_ms(333);                  // Espero a que todo se estabilice e ...
   disable_interrupts(global);     // Inicializo el Micro y ...
   disable_interrupts(int_rda);
   disable_interrupts(int_ext);
   
   
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   set_tris_a(0);
   set_tris_c(0b10000000);        // Habilito como entrada RC7 para canal RS232
   set_tris_b(0xFF);
   ext_int_edge(L_TO_H); 
   
   enable_interrupts(global);
   
   enable_interrupts(int_ext);
   
   while(1){
   
   ext_int_edge(L_TO_H);
   
   if (flag==1){
   
   delay_ms(333);
   flag=0;
   porta=0x01;
   enter();
   delay_ms(100);
   enter();
   delay_ms(1000);
   llamar();
   delay_ms(1);
   
       
   }else{
   porta=0x00;
   
   }
}
}
este es el programa ya medio terminado,ya que no me sale la interrupcion esterna,jejeje,habra que afinarlo :)
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....

Desconectado ASOGEN09

  • PIC10
  • *
  • Mensajes: 1
Re: Comandos hexadecimales en CCS por el puerto serie
« Respuesta #27 en: 19 de Abril de 2018, 20:55:23 »
primero que nada gracias,el problema esta resuelto como decian ustedes,ya que mando:
printf("%c%c%c",0x1E,0x00,0x1C);
manda los valores hexadecimales correspondientes : 1E,00,1C
pero al mandar
printf("%X",0x1E);
recibo: 31, 45, esto quiere decir que 31=1,E=45,cosa chistosa no?, bueno creo que solo me queda decir , tenian razon, jejejeje, gracias amigos

Hola tengo una consulta, y si tengo varios puertos seriales como detallaría la linea para indicar por cual puerto serie enviar la info?? gracias..

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comandos hexadecimales en CCS por el puerto serie
« Respuesta #28 en: 19 de Abril de 2018, 21:43:26 »
Si tenes varios, podes nombrar cada uno con un nombre, ejemplo (no valido los pins ni nada por el estilo):

#use rs232(baud=9600,xmit=pin_b3,stream=DEBUG)
#use rs232(baud=9600,xmit=pin_b4,stream=DATA)

Luego para definir por cual sale usas fprintf segun el manual:

Citar
fprintf (stream, cstring, values...)

Y lo usarias asi:

Código: C
  1. fprintf(DEBUG,"%X",0x1E);
  2. fprintf(DATA,"%X",0x1E);

Ahi podes especificar por donde lo envia si es que tenes varios. Si tenes uno solo lo va a enviar por ese y usas el printf solo.


 

anything