Autor Tema: Variable no hace comparacion con caracter!!!  (Leído 2701 veces)

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

Desconectado ivan braga

  • PIC12
  • **
  • Mensajes: 77
Variable no hace comparacion con caracter!!!
« en: 09 de Octubre de 2007, 05:56:14 »
    Otra vez disculpa escribir en portugues.   

   Me explico, estou escrevendo um programa para trabalhar com comando AT para telefone celular siemens c72.
   Quando envio um comando para o telefone, por exemplo, envio o comando "ATE1", para ativar o eco no telefone, ele me responde com "OK" porque o comando foi recebido com sucesso, porem se não funcionar, deveria enviar "ERRO".
   Sendo assim coloco a resposta dentro de uma variavel, por exemplo: Dim test As Byte, onde test ahora é test=OK.
   Se for assim, porque no posso ler o conteudo da variable. IF TEST = OK THEN  siempre sucede alguno erro,  ahora se colocar así IF TEST = "O" THEN   ou   IF TEST = "K" THEN, así não recebo nenhuma mensagem de erro.
  Já tentei DIM AS BYTE, DIM AS WORD, DIM AS FLOAT e nada consegui.

  Estou trabalhando com Proton, e claro sou iniciante em programação, estou tentando :lol:  :shock: :lol:

   Desde já agradeço.

   Ivan Braga
« Última modificación: 09 de Octubre de 2007, 06:07:03 por ivan braga »
"Mesmo o objeto mais inanimado tem movimento suficiente para ficar na sua frente e provocar um acidente."
"Incluso el objeto más inanimado tiene suficiente movimiento para interponerse en su camino y provocar un accidente."
"Even the most inanimate object has enough movement to stand in your way and cause an accident."

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Variable no hace comparacion con caracter!!!
« Respuesta #1 en: 09 de Octubre de 2007, 12:09:15 »
Hola:

Para hacer lo que quieres puedes utilizar Arrays o Strings y el comando STR, mira en la ayuda
hay bastantes ejemplos y bien detallado sobre los dos tipos de variables, esto por ejemplo te puede servir:



For example, the same code as before without a NULL terminator is: -

 DIM MYARRAY[4] AS BYTE     ' Create a 4 element array
 MYARRAY[0] = "A"           ' Fill the array with ASCII
 MYARRAY[1] = "B"
 MYARRAY[2] = "C"
 MYARRAY[3] = "D"
 PRINT STR MYARRAY          ' Display the string

The code above will display the whole of the array, because the array was declared with only four elements, and each element was filled with an ASCII character i.e. "ABCD".

To specify a fixed-width format for the Str modifier, use the form Str MYARRAY\n; where MYARRAY is the byte array and n is the number of characters to display, or transmit. Changing the Print line in the examples above to: -

 PRINT STR MYARRAY \ 2

would display "AB" on the LCD.




En este Caso MYARRAY es como un vector de 5 posiciones, y a cada posición se asigna una letra,

si tu rrecibes un valor, creo que puedes hacer lo siguiente:

IF STRMYARRAY\2 ="OK" then
-
-
-
-
-
ENDIF

prueba primero a ver que obtienes haciendo esto:++

Print at 1,1 STRMYARRAY\2

para ver cuales son los valores que obtienes, luego si usa el If.

Saludos.
« Última modificación: 09 de Octubre de 2007, 12:16:33 por LordLafebre »

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Variable no hace comparacion con caracter!!!
« Respuesta #2 en: 09 de Octubre de 2007, 15:31:01 »
Hola:

Iván, prueba con este ejemplo, estoy usando STR y separo cada caracter en una posición del array
luego lo que hago es preguntar por el ascii de las letras correspondientes a OK




Device 16F84A
XTAL = 4

Declare LCD_TYPE 0
Declare LCD_DTPIN PORTB.0 
Declare LCD_ENPIN PORTB.4
Declare LCD_RSPIN PORTB.5
Declare LCD_INTERFACE 4
Declare LCD_LINES 2

Dim i As Byte
Dim SerString[10] As Byte

Inicio:
    SerIn PORTA.0 , 16780, [Str SerString\2]
    If SerString[0]=79 And SerString[1]=75 Then    '79 ascii de la O, 75 ascii de la K
        Cls
        Print At 1,1, "recibido: ", Str SerString
    Else
        Cls                                               
        Print At 1,1, "ERROR"           
    EndIf
    GoTo Inicio
End



Desconectado ivan braga

  • PIC12
  • **
  • Mensajes: 77
Re: Variable no hace comparacion con caracter!!!
« Respuesta #3 en: 10 de Octubre de 2007, 07:58:05 »
Olá Giovanni

Fiz da maneira como você sugeriu, com algumas pequenas modificações.

Porem percebo que funcionou rasoavelmente bem, com apenas um detalhe que não consegui compreender, quando executo o programa na primeira verificação acontece muito bem, porem se tentar novamente, o bit a esquerda não é regravado, não entendo.  :?

Como não sei como se anexa arquivos ao forum deixo abaixo um link para voce baixar com as modificações que eu fiz para teste e junto o arquivo do proteus para simulação.

Verifique que quando se aperta qualquer um dos botões do segundo pic duas vezes o problema aparece.

http://www.4shared.com/file/26089047/c77fe4de/TEST.html?dirPwdVerified=58ab1075

Desde já agradeço.

Ivan Braga





"Mesmo o objeto mais inanimado tem movimento suficiente para ficar na sua frente e provocar um acidente."
"Incluso el objeto más inanimado tiene suficiente movimiento para interponerse en su camino y provocar un accidente."
"Even the most inanimate object has enough movement to stand in your way and cause an accident."

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Variable no hace comparacion con caracter!!!
« Respuesta #4 en: 10 de Octubre de 2007, 10:35:49 »
Hola:

casi no te entiendo  :? miraré los archivos y te comentaré y trataré más que nada de entenderte.
« Última modificación: 10 de Octubre de 2007, 10:39:23 por LordLafebre »

Desconectado ivan braga

  • PIC12
  • **
  • Mensajes: 77
Re: Variable no hace comparacion con caracter!!!
« Respuesta #5 en: 10 de Octubre de 2007, 16:00:57 »
Olá Giovanni.

   Desculpe portar escrevendo em meu idioma, porém acho que dá para ser compreendido.

 Vou tentar explicar de outra maneira.

 Simulando este arquivo que enviei, assim que ele é posto para rodar e se você apertar o botão PORTB.0 ele enviará ao LCD que foi "recebido OK" e depois irá limpar o LCD e será exibido exatamente o que está dentro da variável.

 Porém se você apertar novamente o botão PORTB.0 ele enviará uma mensagem de ERRO pois não consegue ou não pode limpar a está variável, permanecendo o bit da esquerda com um resíduo da operação anterior.

 Por isso coloquei aquele trecho de código abaixo para que mostrasse o que está dentro da variável, o botão referente a PORTB.3 simula o envio de uma outra string "NADA", pois se esse fosse acionado a primeira mensagem no LCD seria ERRO.

 Com esta explicação, quero mostrar que o recebimento dos caracteres OK só acontecem 1 vez. Não sei se é erro interno do Proteus, mas tarde tentarei montar o LCD e o PIC no Protoboard para verificar se os mesmos erros acontecem.

 Desde já agradeço.

 Ivan Braga
« Última modificación: 23 de Octubre de 2007, 02:52:35 por ivan braga »
"Mesmo o objeto mais inanimado tem movimento suficiente para ficar na sua frente e provocar um acidente."
"Incluso el objeto más inanimado tiene suficiente movimiento para interponerse en su camino y provocar un accidente."
"Even the most inanimate object has enough movement to stand in your way and cause an accident."

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Variable no hace comparacion con caracter!!!
« Respuesta #6 en: 10 de Octubre de 2007, 18:08:51 »
Hola:

Bueno, ahora ando corto de tiempo, pero a más tardar mañana te puedo dar revisando el código.

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Variable no hace comparacion con caracter!!!
« Respuesta #7 en: 10 de Octubre de 2007, 18:28:14 »
Hola:

Iván, revisa las configuraciones del Hardware UART, te adjunto lo que yo probé, la transmisión se da por SOFTWARE y no he tenido inconvenientes, no he trabajado para nada con el hardware UART ya que siempre me ha funcionado bien la transmisión serial por SOFTWARE para las aplicaciones que he necesitado.

Prueba a hacer lo mismo como el de tu ejemplo, pero usando SERIN y SEROUT, mira que todo vaya como quieres, luego revisa las configuraciones, porque parece que el Buffer no se está limpiando, porque se despliegan otros valores en el LCD.