Autor Tema: Enviar letras por hiperterminal  (Leído 2170 veces)

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

Desconectado andresitovv

  • PIC10
  • *
  • Mensajes: 40
Enviar letras por hiperterminal
« en: 12 de Julio de 2005, 11:08:00 »
Hola!! Trabajo con un 18f452 y me he hecho una especie de placa de pruebas. Todos los botones y display m van bien. Ahora estoy probando las comunicaciones RS232 y consigo recibir por hiperterminal una cadena de caracteres, pero cuando intento escribir en hiperterminal para enviarselo al pic no sale nada. Es decir, no puedo escribir en la pantalla de hiperterminal. Aqui les dejo el código de la parte que comunica con el pc. No sé si será del código o no. He mirado en todos los subforos y no veo nada para solucionarlo. Al ejecutar el programa me sale en la pantalla de hiperterminal: "Escribe el color", pero no puedo responderle xq no puedo escribir!! Si le doy a return vuelve a salir "Escribe el color". Otra pregunta, el 18f452 trae el puerto serie incorporado, al yo escribir #use232 usa el hardware q tiene y no lo simula, verdad? Gracias...



#include <18F452.h>
#fuses HS,NOCPD,NOCPB,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOSTVREN,NOEBTR,NOEBTRB,NOWRTB,NOWRTC,NOWRTD
#use delay(clock=8000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#include <string.h>
#use fast_io(A)
#use fast_io(C)
#use fast_io(D)
#use fast_io(E)


void main()
{
        set_tris_a(0x00);
        set_tris_c(0b10111111);


      while(input(PIN_E2)==1)
      {
          char resp[6];
          char para[6]="verde";
          char parb[6]="rojo";

          while (band==0)
          {

            puts("Escribe el color");

            gets(resp);
   
            if (strcmp(resp,para)==0)
                output_a(0x01);
            else if (strcmp(resp,parb)==0)
                output_a(0x02);  
            else
                band==1;
          }
      }
}

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Enviar letras por hiperterminal
« Respuesta #1 en: 12 de Julio de 2005, 12:30:00 »
Vale te lo miro.

A bote pronto la variable band no está definida. Corrige y seguimos.

Desconectado roc364

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 108
RE: Enviar letras por hiperterminal
« Respuesta #2 en: 12 de Julio de 2005, 16:36:00 »
Hola andresito:  Que no puedas ver las letras que tipeas en el hiperterminal...  puede ser que no tengas habilitado el "local eco" en las opciones de configuracion del programa.
Proba con eso a ver que pasa, si ya lo tenias habilitado, ignora mi mensaje.
Saludos!!
Hay solo 10 tipos de personas, los que entienden el codigo binario, y los que no.

Viva La Patagonia Argentina!!

Desconectado habasconpan

  • PIC10
  • *
  • Mensajes: 8
RE: Enviar letras por hiperterminal
« Respuesta #3 en: 27 de Julio de 2005, 04:44:00 »
Como alternativa, si estás utilizando el compilador CCS, puedes utilizar una de sus utilidades, el "serial port monitor".

Supongo que hará lo mismo que el hyperterminal, pero a mi me gusta más éste, sobre todo porque puedes visualizar y enviar datos en hexadecimal facilmente.

Desconectado elesep

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 42
RE: Enviar letras por hiperterminal
« Respuesta #4 en: 27 de Julio de 2005, 11:27:00 »
 Yo tambien tuve el mismo problema con el hiper terminal, podia recibir los mensajes pero no los podia enviar al pic, asi que utilice el serial port monitor de CCS, y con ese me funciono lo mas bien, podia recibir y enviar sin ningun problema
 prueba con ese, seguro que no tendras problemas.

Saludos

Desconectado andresitovv

  • PIC10
  • *
  • Mensajes: 40
RE: Enviar letras por hiperterminal
« Respuesta #5 en: 24 de Agosto de 2005, 11:41:00 »
Perdonad por no decir nada, muchas gracias a los q han respondido. Lo de que no estuviera band se debia a q no os habia puesto todo el código, lo habia recortado para la pregunta, pero estaba definido. Aqui os pongo el codigo entero. Explicándolo por encima tengo un interruptor con 3 posiciones, y cuando lo pongo en la tercera posicion(pinE2) quiero que se comunique con el puerto serie y que haga eso tan tonto que veis, que me encienda un led bicolor que tengo de un color u otro en funcion de si por el puerto serie recibo un 5 o un 7. Siguiendo vuestro consejo he utilizado port serie del hiperterminal y cuando pongo el interruptor en esa posicion me envia la cadena de caracteres al ordenador. Pero luego por mucho que escriba el microcontrolador no recibe nada, al menos no puedo percibir que reciba nada xq no m enciende nada al enviar 5 o 7. Bueno, creo que no recibe nada, xq si cambio el interruptor de sitio no hace nada, como si se quedara esperando a recibir algo en el gets. Que es lo del bit de Eco? Lo he buscado y no lo he encontrado, quiza es algo de eso, ni idea... Gracias!!

#include <18F452.h>
#fuses HS,NOCPD,NOCPB,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOSTVREN,NOEBTR,NOEBTRB,NOWRTB,NOWRTC,NOWRTD
#use delay(clock=8000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#include <string.h>
#use fast_io(A)
#use fast_io(C)
#use fast_io(D)
#use fast_io(E)
#define para 5
#define parb 7

   int dispr=0,dispv=0,band=0,resp=0;
   long int retv=1,retr=1;
 

void retardo(int n) { // retardo de "n" segundos; 0 <= n => 255
  for (; n!=0; n--)
  delay_ms(100);
}

void main()
{
        set_tris_a(0x00);
        set_tris_c(0b10111111);
        set_tris_d(0x00);
        set_tris_e(0xff);

  while(1)
 {
   dispr=0,dispv=0,band=0,resp=0,retv=1,retr=1;

        while (input(PIN_C0)==1)
        {
           output_a(0x01);
            delay_ms(200);

         output_a(0x00);
            retardo(retr);

            output_a(0x02);
            delay_ms(200);

            output_a(0x00);
            retardo(retv);

          if (input(PIN_C2)==0)
           {
              if(dispv<9){
                 retv+=3;
                 dispv++;}
           }

           if (input(PIN_C3)==0)
           {
              if(dispv>0){
                 retv-=3;
                 dispv--;}
           }

           if (input(PIN_C4)==0)
           {
              if(retr<10){
                 retr++;
                 dispr+=0x10;}
          }

          if (input(PIN_C5)==0)
           {
              if(retr>1){
                 retr--;
                 dispr-=0x10;}
           }

           output_d(dispv+dispr);

         }

       while (input(PIN_C1)==1)
       {

           output_a(0x01);
            delay_ms(100);
         output_a(0x00);
            delay_ms(100);
         output_a(0x02);
            delay_ms(100);
         output_a(0x00);
            delay_ms(1000);
      }

      while(input(PIN_E2)==1)
      {

          while (band==0)
          {

          puts("Escribe el 5 o 7"Giño;

          gets(resp);

          if (resp==para)
             output_a(0x01);

          else if (resp==parb)
           output_a(0x02);

          else
            band=1;
          }
      }
  }
}